// 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_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_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_
