// 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_And)                      \
  V(S390_AndComplement)            \
  V(S390_Or)                       \
  V(S390_OrComplement)             \
  V(S390_Xor)                      \
  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_Not)                      \
  V(S390_RotLeftAndMask32)         \
  V(S390_RotLeftAndClear64)        \
  V(S390_RotLeftAndClearLeft64)    \
  V(S390_RotLeftAndClearRight64)   \
  V(S390_Add)                      \
  V(S390_AddWithOverflow32)        \
  V(S390_AddPair)                  \
  V(S390_AddFloat)                 \
  V(S390_AddDouble)                \
  V(S390_Sub)                      \
  V(S390_SubWithOverflow32)        \
  V(S390_SubFloat)                 \
  V(S390_SubDouble)                \
  V(S390_SubPair)                  \
  V(S390_MulPair)                  \
  V(S390_Mul32)                    \
  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_Neg)                      \
  V(S390_NegDouble)                \
  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_MaxDouble)                \
  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_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_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_LoadWord64)               \
  V(S390_LoadFloat32)              \
  V(S390_LoadDouble)               \
  V(S390_StoreWord8)               \
  V(S390_StoreWord16)              \
  V(S390_StoreWord32)              \
  V(S390_StoreWord64)              \
  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(MRI) /* [%r0 + K] */               \
  V(MRR) /* [%r0 + %r1] */

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

#endif  // V8_COMPILER_S390_INSTRUCTION_CODES_S390_H_
