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