// Copyright 2014 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_PPC_INSTRUCTION_CODES_PPC_H_
#define V8_COMPILER_PPC_INSTRUCTION_CODES_PPC_H_

namespace v8 {
namespace internal {
namespace compiler {

// PPC-specific opcodes that specify which assembly sequence to emit.
// Most opcodes specify a single instruction.
#define TARGET_ARCH_OPCODE_LIST(V) \
  V(PPC_And)                       \
  V(PPC_AndComplement)             \
  V(PPC_Or)                        \
  V(PPC_OrComplement)              \
  V(PPC_Xor)                       \
  V(PPC_ShiftLeft32)               \
  V(PPC_ShiftLeft64)               \
  V(PPC_ShiftLeftPair)             \
  V(PPC_ShiftRight32)              \
  V(PPC_ShiftRight64)              \
  V(PPC_ShiftRightPair)            \
  V(PPC_ShiftRightAlg32)           \
  V(PPC_ShiftRightAlg64)           \
  V(PPC_ShiftRightAlgPair)         \
  V(PPC_RotRight32)                \
  V(PPC_RotRight64)                \
  V(PPC_Not)                       \
  V(PPC_RotLeftAndMask32)          \
  V(PPC_RotLeftAndClear64)         \
  V(PPC_RotLeftAndClearLeft64)     \
  V(PPC_RotLeftAndClearRight64)    \
  V(PPC_Add)                       \
  V(PPC_AddWithOverflow32)         \
  V(PPC_AddPair)                   \
  V(PPC_AddDouble)                 \
  V(PPC_Sub)                       \
  V(PPC_SubWithOverflow32)         \
  V(PPC_SubPair)                   \
  V(PPC_SubDouble)                 \
  V(PPC_Mul32)                     \
  V(PPC_Mul64)                     \
  V(PPC_MulHigh32)                 \
  V(PPC_MulHighU32)                \
  V(PPC_MulPair)                   \
  V(PPC_MulDouble)                 \
  V(PPC_Div32)                     \
  V(PPC_Div64)                     \
  V(PPC_DivU32)                    \
  V(PPC_DivU64)                    \
  V(PPC_DivDouble)                 \
  V(PPC_Mod32)                     \
  V(PPC_Mod64)                     \
  V(PPC_ModU32)                    \
  V(PPC_ModU64)                    \
  V(PPC_ModDouble)                 \
  V(PPC_Neg)                       \
  V(PPC_NegDouble)                 \
  V(PPC_SqrtDouble)                \
  V(PPC_FloorDouble)               \
  V(PPC_CeilDouble)                \
  V(PPC_TruncateDouble)            \
  V(PPC_RoundDouble)               \
  V(PPC_MaxDouble)                 \
  V(PPC_MinDouble)                 \
  V(PPC_AbsDouble)                 \
  V(PPC_Cntlz32)                   \
  V(PPC_Cntlz64)                   \
  V(PPC_Popcnt32)                  \
  V(PPC_Popcnt64)                  \
  V(PPC_Cmp32)                     \
  V(PPC_Cmp64)                     \
  V(PPC_CmpDouble)                 \
  V(PPC_Tst32)                     \
  V(PPC_Tst64)                     \
  V(PPC_Push)                      \
  V(PPC_PushFrame)                 \
  V(PPC_StoreToStackSlot)          \
  V(PPC_ExtendSignWord8)           \
  V(PPC_ExtendSignWord16)          \
  V(PPC_ExtendSignWord32)          \
  V(PPC_Uint32ToUint64)            \
  V(PPC_Int64ToInt32)              \
  V(PPC_Int64ToFloat32)            \
  V(PPC_Int64ToDouble)             \
  V(PPC_Uint64ToFloat32)           \
  V(PPC_Uint64ToDouble)            \
  V(PPC_Int32ToFloat32)            \
  V(PPC_Int32ToDouble)             \
  V(PPC_Uint32ToFloat32)           \
  V(PPC_Uint32ToDouble)            \
  V(PPC_Float32ToDouble)           \
  V(PPC_DoubleToInt32)             \
  V(PPC_DoubleToUint32)            \
  V(PPC_DoubleToInt64)             \
  V(PPC_DoubleToUint64)            \
  V(PPC_DoubleToFloat32)           \
  V(PPC_DoubleExtractLowWord32)    \
  V(PPC_DoubleExtractHighWord32)   \
  V(PPC_DoubleInsertLowWord32)     \
  V(PPC_DoubleInsertHighWord32)    \
  V(PPC_DoubleConstruct)           \
  V(PPC_BitcastInt32ToFloat32)     \
  V(PPC_BitcastFloat32ToInt32)     \
  V(PPC_BitcastInt64ToDouble)      \
  V(PPC_BitcastDoubleToInt64)      \
  V(PPC_LoadWordS8)                \
  V(PPC_LoadWordU8)                \
  V(PPC_LoadWordS16)               \
  V(PPC_LoadWordU16)               \
  V(PPC_LoadWordS32)               \
  V(PPC_LoadWordU32)               \
  V(PPC_LoadWord64)                \
  V(PPC_LoadFloat32)               \
  V(PPC_LoadDouble)                \
  V(PPC_StoreWord8)                \
  V(PPC_StoreWord16)               \
  V(PPC_StoreWord32)               \
  V(PPC_StoreWord64)               \
  V(PPC_StoreFloat32)              \
  V(PPC_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_PPC_INSTRUCTION_CODES_PPC_H_
