// Copyright 2015 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef V8_COMPILER_S390_INSTRUCTION_CODES_S390_H_
#define V8_COMPILER_S390_INSTRUCTION_CODES_S390_H_

namespace v8 {
namespace internal {
namespace compiler {

// S390-specific opcodes that specify which assembly sequence to emit.
// Most opcodes specify a single instruction.
#define TARGET_ARCH_OPCODE_LIST(V) \
  V(S390_Abs32)                    \
  V(S390_Abs64)                    \
  V(S390_And32)                    \
  V(S390_And64)                    \
  V(S390_Or32)                     \
  V(S390_Or64)                     \
  V(S390_Xor32)                    \
  V(S390_Xor64)                    \
  V(S390_ShiftLeft32)              \
  V(S390_ShiftLeft64)              \
  V(S390_ShiftLeftPair)            \
  V(S390_ShiftRight32)             \
  V(S390_ShiftRight64)             \
  V(S390_ShiftRightPair)           \
  V(S390_ShiftRightArith32)        \
  V(S390_ShiftRightArith64)        \
  V(S390_ShiftRightArithPair)      \
  V(S390_RotRight32)               \
  V(S390_RotRight64)               \
  V(S390_Not32)                    \
  V(S390_Not64)                    \
  V(S390_RotLeftAndClear64)        \
  V(S390_RotLeftAndClearLeft64)    \
  V(S390_RotLeftAndClearRight64)   \
  V(S390_Lay)                      \
  V(S390_Add32)                    \
  V(S390_Add64)                    \
  V(S390_AddPair)                  \
  V(S390_AddFloat)                 \
  V(S390_AddDouble)                \
  V(S390_Sub32)                    \
  V(S390_Sub64)                    \
  V(S390_SubFloat)                 \
  V(S390_SubDouble)                \
  V(S390_SubPair)                  \
  V(S390_MulPair)                  \
  V(S390_Mul32)                    \
  V(S390_Mul32WithOverflow)        \
  V(S390_Mul64)                    \
  V(S390_MulHigh32)                \
  V(S390_MulHighU32)               \
  V(S390_MulFloat)                 \
  V(S390_MulDouble)                \
  V(S390_Div32)                    \
  V(S390_Div64)                    \
  V(S390_DivU32)                   \
  V(S390_DivU64)                   \
  V(S390_DivFloat)                 \
  V(S390_DivDouble)                \
  V(S390_Mod32)                    \
  V(S390_Mod64)                    \
  V(S390_ModU32)                   \
  V(S390_ModU64)                   \
  V(S390_ModDouble)                \
  V(S390_Neg32)                    \
  V(S390_Neg64)                    \
  V(S390_NegDouble)                \
  V(S390_NegFloat)                 \
  V(S390_SqrtFloat)                \
  V(S390_FloorFloat)               \
  V(S390_CeilFloat)                \
  V(S390_TruncateFloat)            \
  V(S390_AbsFloat)                 \
  V(S390_SqrtDouble)               \
  V(S390_FloorDouble)              \
  V(S390_CeilDouble)               \
  V(S390_TruncateDouble)           \
  V(S390_RoundDouble)              \
  V(S390_MaxFloat)                 \
  V(S390_MaxDouble)                \
  V(S390_MinFloat)                 \
  V(S390_MinDouble)                \
  V(S390_AbsDouble)                \
  V(S390_Cntlz32)                  \
  V(S390_Cntlz64)                  \
  V(S390_Popcnt32)                 \
  V(S390_Popcnt64)                 \
  V(S390_Cmp32)                    \
  V(S390_Cmp64)                    \
  V(S390_CmpFloat)                 \
  V(S390_CmpDouble)                \
  V(S390_Tst32)                    \
  V(S390_Tst64)                    \
  V(S390_Push)                     \
  V(S390_PushFrame)                \
  V(S390_StackClaim)               \
  V(S390_StoreToStackSlot)         \
  V(S390_ExtendSignWord8)          \
  V(S390_ExtendSignWord16)         \
  V(S390_ExtendSignWord32)         \
  V(S390_Uint32ToUint64)           \
  V(S390_Int64ToInt32)             \
  V(S390_Int64ToFloat32)           \
  V(S390_Int64ToDouble)            \
  V(S390_Uint64ToFloat32)          \
  V(S390_Uint64ToDouble)           \
  V(S390_Int32ToFloat32)           \
  V(S390_Int32ToDouble)            \
  V(S390_Uint32ToFloat32)          \
  V(S390_Uint32ToDouble)           \
  V(S390_Float32ToInt64)           \
  V(S390_Float32ToUint64)          \
  V(S390_Float32ToInt32)           \
  V(S390_Float32ToUint32)          \
  V(S390_Float32ToDouble)          \
  V(S390_Float64SilenceNaN)        \
  V(S390_DoubleToInt32)            \
  V(S390_DoubleToUint32)           \
  V(S390_DoubleToInt64)            \
  V(S390_DoubleToUint64)           \
  V(S390_DoubleToFloat32)          \
  V(S390_DoubleExtractLowWord32)   \
  V(S390_DoubleExtractHighWord32)  \
  V(S390_DoubleInsertLowWord32)    \
  V(S390_DoubleInsertHighWord32)   \
  V(S390_DoubleConstruct)          \
  V(S390_BitcastInt32ToFloat32)    \
  V(S390_BitcastFloat32ToInt32)    \
  V(S390_BitcastInt64ToDouble)     \
  V(S390_BitcastDoubleToInt64)     \
  V(S390_LoadWordS8)               \
  V(S390_LoadWordU8)               \
  V(S390_LoadWordS16)              \
  V(S390_LoadWordU16)              \
  V(S390_LoadWordS32)              \
  V(S390_LoadWordU32)              \
  V(S390_LoadAndTestWord32)        \
  V(S390_LoadAndTestWord64)        \
  V(S390_LoadAndTestFloat32)       \
  V(S390_LoadAndTestFloat64)       \
  V(S390_LoadReverse16RR)          \
  V(S390_LoadReverse32RR)          \
  V(S390_LoadReverse64RR)          \
  V(S390_LoadReverse16)            \
  V(S390_LoadReverse32)            \
  V(S390_LoadReverse64)            \
  V(S390_LoadWord64)               \
  V(S390_LoadFloat32)              \
  V(S390_LoadDouble)               \
  V(S390_StoreWord8)               \
  V(S390_StoreWord16)              \
  V(S390_StoreWord32)              \
  V(S390_StoreWord64)              \
  V(S390_StoreReverse16)           \
  V(S390_StoreReverse32)           \
  V(S390_StoreReverse64)           \
  V(S390_StoreFloat32)             \
  V(S390_StoreDouble)

// Addressing modes represent the "shape" of inputs to an instruction.
// Many instructions support multiple addressing modes. Addressing modes
// are encoded into the InstructionCode of the instruction and tell the
// code generator after register allocation which assembler method to call.
//
// We use the following local notation for addressing modes:
//
// R = register
// O = register or stack slot
// D = double register
// I = immediate (handle, external, int32)
// MRI = [register + immediate]
// MRR = [register + register]
#define TARGET_ADDRESSING_MODE_LIST(V) \
  V(MR)   /* [%r0          ] */        \
  V(MRI)  /* [%r0       + K] */        \
  V(MRR)  /* [%r0 + %r1    ] */        \
  V(MRRI) /* [%r0 + %r1 + K] */

}  // namespace compiler
}  // namespace internal
}  // namespace v8

#endif  // V8_COMPILER_S390_INSTRUCTION_CODES_S390_H_
