// 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_MIPS_INSTRUCTION_CODES_MIPS_H_ #define V8_COMPILER_MIPS_INSTRUCTION_CODES_MIPS_H_ namespace v8 { namespace internal { namespace compiler { // MIPS-specific opcodes that specify which assembly sequence to emit. // Most opcodes specify a single instruction. #define TARGET_ARCH_OPCODE_LIST(V) \ V(MipsAdd) \ V(MipsAddOvf) \ V(MipsSub) \ V(MipsSubOvf) \ V(MipsMul) \ V(MipsMulOvf) \ V(MipsMulHigh) \ V(MipsMulHighU) \ V(MipsDiv) \ V(MipsDivU) \ V(MipsMod) \ V(MipsModU) \ V(MipsAnd) \ V(MipsOr) \ V(MipsNor) \ V(MipsXor) \ V(MipsClz) \ V(MipsCtz) \ V(MipsPopcnt) \ V(MipsLsa) \ V(MipsShl) \ V(MipsShr) \ V(MipsSar) \ V(MipsShlPair) \ V(MipsShrPair) \ V(MipsSarPair) \ V(MipsExt) \ V(MipsIns) \ V(MipsRor) \ V(MipsMov) \ V(MipsTst) \ V(MipsCmp) \ V(MipsCmpS) \ V(MipsAddS) \ V(MipsSubS) \ V(MipsMulS) \ V(MipsDivS) \ V(MipsModS) \ V(MipsAbsS) \ V(MipsSqrtS) \ V(MipsMaxS) \ V(MipsMinS) \ V(MipsCmpD) \ V(MipsAddD) \ V(MipsSubD) \ V(MipsMulD) \ V(MipsDivD) \ V(MipsModD) \ V(MipsAbsD) \ V(MipsSqrtD) \ V(MipsMaxD) \ V(MipsMinD) \ V(MipsNegS) \ V(MipsNegD) \ V(MipsAddPair) \ V(MipsSubPair) \ V(MipsMulPair) \ V(MipsMaddS) \ V(MipsMaddD) \ V(MipsMsubS) \ V(MipsMsubD) \ V(MipsFloat32RoundDown) \ V(MipsFloat32RoundTruncate) \ V(MipsFloat32RoundUp) \ V(MipsFloat32RoundTiesEven) \ V(MipsFloat64RoundDown) \ V(MipsFloat64RoundTruncate) \ V(MipsFloat64RoundUp) \ V(MipsFloat64RoundTiesEven) \ V(MipsCvtSD) \ V(MipsCvtDS) \ V(MipsTruncWD) \ V(MipsRoundWD) \ V(MipsFloorWD) \ V(MipsCeilWD) \ V(MipsTruncWS) \ V(MipsRoundWS) \ V(MipsFloorWS) \ V(MipsCeilWS) \ V(MipsTruncUwD) \ V(MipsTruncUwS) \ V(MipsCvtDW) \ V(MipsCvtDUw) \ V(MipsCvtSW) \ V(MipsCvtSUw) \ V(MipsLb) \ V(MipsLbu) \ V(MipsSb) \ V(MipsLh) \ V(MipsUlh) \ V(MipsLhu) \ V(MipsUlhu) \ V(MipsSh) \ V(MipsUsh) \ V(MipsLw) \ V(MipsUlw) \ V(MipsSw) \ V(MipsUsw) \ V(MipsLwc1) \ V(MipsUlwc1) \ V(MipsSwc1) \ V(MipsUswc1) \ V(MipsLdc1) \ V(MipsUldc1) \ V(MipsSdc1) \ V(MipsUsdc1) \ V(MipsFloat64ExtractLowWord32) \ V(MipsFloat64ExtractHighWord32) \ V(MipsFloat64InsertLowWord32) \ V(MipsFloat64InsertHighWord32) \ V(MipsFloat64SilenceNaN) \ V(MipsFloat32Max) \ V(MipsFloat64Max) \ V(MipsFloat32Min) \ V(MipsFloat64Min) \ V(MipsPush) \ V(MipsStoreToStackSlot) \ V(MipsByteSwap32) \ V(MipsStackClaim) \ V(MipsSeb) \ V(MipsSeh) \ V(MipsS128Zero) \ V(MipsI32x4Splat) \ V(MipsI32x4ExtractLane) \ V(MipsI32x4ReplaceLane) \ V(MipsI32x4Add) \ V(MipsI32x4AddHoriz) \ V(MipsI32x4Sub) \ V(MipsF32x4Splat) \ V(MipsF32x4ExtractLane) \ V(MipsF32x4ReplaceLane) \ V(MipsF32x4SConvertI32x4) \ V(MipsF32x4UConvertI32x4) \ V(MipsI32x4Mul) \ V(MipsI32x4MaxS) \ V(MipsI32x4MinS) \ V(MipsI32x4Eq) \ V(MipsI32x4Ne) \ V(MipsI32x4Shl) \ V(MipsI32x4ShrS) \ V(MipsI32x4ShrU) \ V(MipsI32x4MaxU) \ V(MipsI32x4MinU) \ V(MipsF32x4Abs) \ V(MipsF32x4Neg) \ V(MipsF32x4RecipApprox) \ V(MipsF32x4RecipSqrtApprox) \ V(MipsF32x4Add) \ V(MipsF32x4AddHoriz) \ V(MipsF32x4Sub) \ V(MipsF32x4Mul) \ V(MipsF32x4Max) \ V(MipsF32x4Min) \ V(MipsF32x4Eq) \ V(MipsF32x4Ne) \ V(MipsF32x4Lt) \ V(MipsF32x4Le) \ V(MipsI32x4SConvertF32x4) \ V(MipsI32x4UConvertF32x4) \ V(MipsI32x4Neg) \ V(MipsI32x4GtS) \ V(MipsI32x4GeS) \ V(MipsI32x4GtU) \ V(MipsI32x4GeU) \ V(MipsI16x8Splat) \ V(MipsI16x8ExtractLane) \ V(MipsI16x8ReplaceLane) \ V(MipsI16x8Neg) \ V(MipsI16x8Shl) \ V(MipsI16x8ShrS) \ V(MipsI16x8ShrU) \ V(MipsI16x8Add) \ V(MipsI16x8AddSaturateS) \ V(MipsI16x8AddHoriz) \ V(MipsI16x8Sub) \ V(MipsI16x8SubSaturateS) \ V(MipsI16x8Mul) \ V(MipsI16x8MaxS) \ V(MipsI16x8MinS) \ V(MipsI16x8Eq) \ V(MipsI16x8Ne) \ V(MipsI16x8GtS) \ V(MipsI16x8GeS) \ V(MipsI16x8AddSaturateU) \ V(MipsI16x8SubSaturateU) \ V(MipsI16x8MaxU) \ V(MipsI16x8MinU) \ V(MipsI16x8GtU) \ V(MipsI16x8GeU) \ V(MipsI8x16Splat) \ V(MipsI8x16ExtractLane) \ V(MipsI8x16ReplaceLane) \ V(MipsI8x16Neg) \ V(MipsI8x16Shl) \ V(MipsI8x16ShrS) \ V(MipsI8x16Add) \ V(MipsI8x16AddSaturateS) \ V(MipsI8x16Sub) \ V(MipsI8x16SubSaturateS) \ V(MipsI8x16Mul) \ V(MipsI8x16MaxS) \ V(MipsI8x16MinS) \ V(MipsI8x16Eq) \ V(MipsI8x16Ne) \ V(MipsI8x16GtS) \ V(MipsI8x16GeS) \ V(MipsI8x16ShrU) \ V(MipsI8x16AddSaturateU) \ V(MipsI8x16SubSaturateU) \ V(MipsI8x16MaxU) \ V(MipsI8x16MinU) \ V(MipsI8x16GtU) \ V(MipsI8x16GeU) \ V(MipsS128And) \ V(MipsS128Or) \ V(MipsS128Xor) \ V(MipsS128Not) \ V(MipsS128Select) \ V(MipsS1x4AnyTrue) \ V(MipsS1x4AllTrue) \ V(MipsS1x8AnyTrue) \ V(MipsS1x8AllTrue) \ V(MipsS1x16AnyTrue) \ V(MipsS1x16AllTrue) \ V(MipsS32x4InterleaveRight) \ V(MipsS32x4InterleaveLeft) \ V(MipsS32x4PackEven) \ V(MipsS32x4PackOdd) \ V(MipsS32x4InterleaveEven) \ V(MipsS32x4InterleaveOdd) \ V(MipsS32x4Shuffle) \ V(MipsS16x8InterleaveRight) \ V(MipsS16x8InterleaveLeft) \ V(MipsS16x8PackEven) \ V(MipsS16x8PackOdd) \ V(MipsS16x8InterleaveEven) \ V(MipsS16x8InterleaveOdd) \ V(MipsS16x4Reverse) \ V(MipsS16x2Reverse) \ V(MipsS8x16InterleaveRight) \ V(MipsS8x16InterleaveLeft) \ V(MipsS8x16PackEven) \ V(MipsS8x16PackOdd) \ V(MipsS8x16InterleaveEven) \ V(MipsS8x16InterleaveOdd) \ V(MipsS8x16Shuffle) \ V(MipsS8x16Concat) \ V(MipsS8x8Reverse) \ V(MipsS8x4Reverse) \ V(MipsS8x2Reverse) \ V(MipsMsaLd) \ V(MipsMsaSt) \ V(MipsI32x4SConvertI16x8Low) \ V(MipsI32x4SConvertI16x8High) \ V(MipsI32x4UConvertI16x8Low) \ V(MipsI32x4UConvertI16x8High) \ V(MipsI16x8SConvertI8x16Low) \ V(MipsI16x8SConvertI8x16High) \ V(MipsI16x8SConvertI32x4) \ V(MipsI16x8UConvertI32x4) \ V(MipsI16x8UConvertI8x16Low) \ V(MipsI16x8UConvertI8x16High) \ V(MipsI8x16SConvertI16x8) \ V(MipsI8x16UConvertI16x8) // 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] // TODO(plind): Add the new r6 address modes. #define TARGET_ADDRESSING_MODE_LIST(V) \ V(MRI) /* [%r0 + K] */ \ V(MRR) /* [%r0 + %r1] */ } // namespace compiler } // namespace internal } // namespace v8 #endif // V8_COMPILER_MIPS_INSTRUCTION_CODES_MIPS_H_