1 // Copyright 2015 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef V8_COMPILER_BACKEND_S390_INSTRUCTION_CODES_S390_H_ 6 #define V8_COMPILER_BACKEND_S390_INSTRUCTION_CODES_S390_H_ 7 8 namespace v8 { 9 namespace internal { 10 namespace compiler { 11 12 // S390-specific opcodes that specify which assembly sequence to emit. 13 // Most opcodes specify a single instruction. 14 15 #define TARGET_ARCH_OPCODE_LIST(V) \ 16 V(S390_Peek) \ 17 V(S390_Abs32) \ 18 V(S390_Abs64) \ 19 V(S390_And32) \ 20 V(S390_And64) \ 21 V(S390_Or32) \ 22 V(S390_Or64) \ 23 V(S390_Xor32) \ 24 V(S390_Xor64) \ 25 V(S390_ShiftLeft32) \ 26 V(S390_ShiftLeft64) \ 27 V(S390_ShiftRight32) \ 28 V(S390_ShiftRight64) \ 29 V(S390_ShiftRightArith32) \ 30 V(S390_ShiftRightArith64) \ 31 V(S390_RotRight32) \ 32 V(S390_RotRight64) \ 33 V(S390_Not32) \ 34 V(S390_Not64) \ 35 V(S390_RotLeftAndClear64) \ 36 V(S390_RotLeftAndClearLeft64) \ 37 V(S390_RotLeftAndClearRight64) \ 38 V(S390_Lay) \ 39 V(S390_Add32) \ 40 V(S390_Add64) \ 41 V(S390_AddFloat) \ 42 V(S390_AddDouble) \ 43 V(S390_Sub32) \ 44 V(S390_Sub64) \ 45 V(S390_SubFloat) \ 46 V(S390_SubDouble) \ 47 V(S390_Mul32) \ 48 V(S390_Mul32WithOverflow) \ 49 V(S390_Mul64) \ 50 V(S390_MulHigh32) \ 51 V(S390_MulHighU32) \ 52 V(S390_MulFloat) \ 53 V(S390_MulDouble) \ 54 V(S390_Div32) \ 55 V(S390_Div64) \ 56 V(S390_DivU32) \ 57 V(S390_DivU64) \ 58 V(S390_DivFloat) \ 59 V(S390_DivDouble) \ 60 V(S390_Mod32) \ 61 V(S390_Mod64) \ 62 V(S390_ModU32) \ 63 V(S390_ModU64) \ 64 V(S390_ModDouble) \ 65 V(S390_Neg32) \ 66 V(S390_Neg64) \ 67 V(S390_NegDouble) \ 68 V(S390_NegFloat) \ 69 V(S390_SqrtFloat) \ 70 V(S390_FloorFloat) \ 71 V(S390_CeilFloat) \ 72 V(S390_TruncateFloat) \ 73 V(S390_FloatNearestInt) \ 74 V(S390_AbsFloat) \ 75 V(S390_SqrtDouble) \ 76 V(S390_FloorDouble) \ 77 V(S390_CeilDouble) \ 78 V(S390_TruncateDouble) \ 79 V(S390_RoundDouble) \ 80 V(S390_DoubleNearestInt) \ 81 V(S390_MaxFloat) \ 82 V(S390_MaxDouble) \ 83 V(S390_MinFloat) \ 84 V(S390_MinDouble) \ 85 V(S390_AbsDouble) \ 86 V(S390_Cntlz32) \ 87 V(S390_Cntlz64) \ 88 V(S390_Popcnt32) \ 89 V(S390_Popcnt64) \ 90 V(S390_Cmp32) \ 91 V(S390_Cmp64) \ 92 V(S390_CmpFloat) \ 93 V(S390_CmpDouble) \ 94 V(S390_Tst32) \ 95 V(S390_Tst64) \ 96 V(S390_Push) \ 97 V(S390_PushFrame) \ 98 V(S390_StoreToStackSlot) \ 99 V(S390_SignExtendWord8ToInt32) \ 100 V(S390_SignExtendWord16ToInt32) \ 101 V(S390_SignExtendWord8ToInt64) \ 102 V(S390_SignExtendWord16ToInt64) \ 103 V(S390_SignExtendWord32ToInt64) \ 104 V(S390_Uint32ToUint64) \ 105 V(S390_Int64ToInt32) \ 106 V(S390_Int64ToFloat32) \ 107 V(S390_Int64ToDouble) \ 108 V(S390_Uint64ToFloat32) \ 109 V(S390_Uint64ToDouble) \ 110 V(S390_Int32ToFloat32) \ 111 V(S390_Int32ToDouble) \ 112 V(S390_Uint32ToFloat32) \ 113 V(S390_Uint32ToDouble) \ 114 V(S390_Float32ToInt64) \ 115 V(S390_Float32ToUint64) \ 116 V(S390_Float32ToInt32) \ 117 V(S390_Float32ToUint32) \ 118 V(S390_Float32ToDouble) \ 119 V(S390_Float64SilenceNaN) \ 120 V(S390_DoubleToInt32) \ 121 V(S390_DoubleToUint32) \ 122 V(S390_DoubleToInt64) \ 123 V(S390_DoubleToUint64) \ 124 V(S390_DoubleToFloat32) \ 125 V(S390_DoubleExtractLowWord32) \ 126 V(S390_DoubleExtractHighWord32) \ 127 V(S390_DoubleInsertLowWord32) \ 128 V(S390_DoubleInsertHighWord32) \ 129 V(S390_DoubleConstruct) \ 130 V(S390_BitcastInt32ToFloat32) \ 131 V(S390_BitcastFloat32ToInt32) \ 132 V(S390_BitcastInt64ToDouble) \ 133 V(S390_BitcastDoubleToInt64) \ 134 V(S390_LoadWordS8) \ 135 V(S390_LoadWordU8) \ 136 V(S390_LoadWordS16) \ 137 V(S390_LoadWordU16) \ 138 V(S390_LoadWordS32) \ 139 V(S390_LoadWordU32) \ 140 V(S390_LoadAndTestWord32) \ 141 V(S390_LoadAndTestWord64) \ 142 V(S390_LoadAndTestFloat32) \ 143 V(S390_LoadAndTestFloat64) \ 144 V(S390_LoadReverse16RR) \ 145 V(S390_LoadReverse32RR) \ 146 V(S390_LoadReverse64RR) \ 147 V(S390_LoadReverseSimd128RR) \ 148 V(S390_LoadReverseSimd128) \ 149 V(S390_LoadReverse16) \ 150 V(S390_LoadReverse32) \ 151 V(S390_LoadReverse64) \ 152 V(S390_LoadWord64) \ 153 V(S390_LoadFloat32) \ 154 V(S390_LoadDouble) \ 155 V(S390_StoreWord8) \ 156 V(S390_StoreWord16) \ 157 V(S390_StoreWord32) \ 158 V(S390_StoreWord64) \ 159 V(S390_StoreReverse16) \ 160 V(S390_StoreReverse32) \ 161 V(S390_StoreReverse64) \ 162 V(S390_StoreReverseSimd128) \ 163 V(S390_StoreFloat32) \ 164 V(S390_StoreDouble) \ 165 V(S390_Word64AtomicExchangeUint64) \ 166 V(S390_Word64AtomicCompareExchangeUint64) \ 167 V(S390_Word64AtomicAddUint64) \ 168 V(S390_Word64AtomicSubUint64) \ 169 V(S390_Word64AtomicAndUint64) \ 170 V(S390_Word64AtomicOrUint64) \ 171 V(S390_Word64AtomicXorUint64) \ 172 V(S390_F64x2Splat) \ 173 V(S390_F64x2ReplaceLane) \ 174 V(S390_F64x2Abs) \ 175 V(S390_F64x2Neg) \ 176 V(S390_F64x2Sqrt) \ 177 V(S390_F64x2Add) \ 178 V(S390_F64x2Sub) \ 179 V(S390_F64x2Mul) \ 180 V(S390_F64x2Div) \ 181 V(S390_F64x2Eq) \ 182 V(S390_F64x2Ne) \ 183 V(S390_F64x2Lt) \ 184 V(S390_F64x2Le) \ 185 V(S390_F64x2Min) \ 186 V(S390_F64x2Max) \ 187 V(S390_F64x2ExtractLane) \ 188 V(S390_F64x2Qfma) \ 189 V(S390_F64x2Qfms) \ 190 V(S390_F64x2Pmin) \ 191 V(S390_F64x2Pmax) \ 192 V(S390_F64x2Ceil) \ 193 V(S390_F64x2Floor) \ 194 V(S390_F64x2Trunc) \ 195 V(S390_F64x2NearestInt) \ 196 V(S390_F64x2ConvertLowI32x4S) \ 197 V(S390_F64x2ConvertLowI32x4U) \ 198 V(S390_F64x2PromoteLowF32x4) \ 199 V(S390_F32x4Splat) \ 200 V(S390_F32x4ExtractLane) \ 201 V(S390_F32x4ReplaceLane) \ 202 V(S390_F32x4Add) \ 203 V(S390_F32x4Sub) \ 204 V(S390_F32x4Mul) \ 205 V(S390_F32x4Eq) \ 206 V(S390_F32x4Ne) \ 207 V(S390_F32x4Lt) \ 208 V(S390_F32x4Le) \ 209 V(S390_F32x4Abs) \ 210 V(S390_F32x4Neg) \ 211 V(S390_F32x4RecipApprox) \ 212 V(S390_F32x4RecipSqrtApprox) \ 213 V(S390_F32x4SConvertI32x4) \ 214 V(S390_F32x4UConvertI32x4) \ 215 V(S390_F32x4Sqrt) \ 216 V(S390_F32x4Div) \ 217 V(S390_F32x4Min) \ 218 V(S390_F32x4Max) \ 219 V(S390_F32x4Qfma) \ 220 V(S390_F32x4Qfms) \ 221 V(S390_F32x4Pmin) \ 222 V(S390_F32x4Pmax) \ 223 V(S390_F32x4Ceil) \ 224 V(S390_F32x4Floor) \ 225 V(S390_F32x4Trunc) \ 226 V(S390_F32x4NearestInt) \ 227 V(S390_F32x4DemoteF64x2Zero) \ 228 V(S390_I64x2Neg) \ 229 V(S390_I64x2Add) \ 230 V(S390_I64x2Sub) \ 231 V(S390_I64x2Shl) \ 232 V(S390_I64x2ShrS) \ 233 V(S390_I64x2ShrU) \ 234 V(S390_I64x2Mul) \ 235 V(S390_I64x2Splat) \ 236 V(S390_I64x2ReplaceLane) \ 237 V(S390_I64x2ExtractLane) \ 238 V(S390_I64x2Eq) \ 239 V(S390_I64x2BitMask) \ 240 V(S390_I64x2ExtMulLowI32x4S) \ 241 V(S390_I64x2ExtMulHighI32x4S) \ 242 V(S390_I64x2ExtMulLowI32x4U) \ 243 V(S390_I64x2ExtMulHighI32x4U) \ 244 V(S390_I64x2SConvertI32x4Low) \ 245 V(S390_I64x2SConvertI32x4High) \ 246 V(S390_I64x2UConvertI32x4Low) \ 247 V(S390_I64x2UConvertI32x4High) \ 248 V(S390_I64x2Ne) \ 249 V(S390_I64x2GtS) \ 250 V(S390_I64x2GeS) \ 251 V(S390_I64x2Abs) \ 252 V(S390_I32x4Splat) \ 253 V(S390_I32x4ExtractLane) \ 254 V(S390_I32x4ReplaceLane) \ 255 V(S390_I32x4Add) \ 256 V(S390_I32x4Sub) \ 257 V(S390_I32x4Mul) \ 258 V(S390_I32x4MinS) \ 259 V(S390_I32x4MinU) \ 260 V(S390_I32x4MaxS) \ 261 V(S390_I32x4MaxU) \ 262 V(S390_I32x4Eq) \ 263 V(S390_I32x4Ne) \ 264 V(S390_I32x4GtS) \ 265 V(S390_I32x4GeS) \ 266 V(S390_I32x4GtU) \ 267 V(S390_I32x4GeU) \ 268 V(S390_I32x4Neg) \ 269 V(S390_I32x4Shl) \ 270 V(S390_I32x4ShrS) \ 271 V(S390_I32x4ShrU) \ 272 V(S390_I32x4SConvertF32x4) \ 273 V(S390_I32x4UConvertF32x4) \ 274 V(S390_I32x4SConvertI16x8Low) \ 275 V(S390_I32x4SConvertI16x8High) \ 276 V(S390_I32x4UConvertI16x8Low) \ 277 V(S390_I32x4UConvertI16x8High) \ 278 V(S390_I32x4Abs) \ 279 V(S390_I32x4BitMask) \ 280 V(S390_I32x4DotI16x8S) \ 281 V(S390_I32x4ExtMulLowI16x8S) \ 282 V(S390_I32x4ExtMulHighI16x8S) \ 283 V(S390_I32x4ExtMulLowI16x8U) \ 284 V(S390_I32x4ExtMulHighI16x8U) \ 285 V(S390_I32x4ExtAddPairwiseI16x8S) \ 286 V(S390_I32x4ExtAddPairwiseI16x8U) \ 287 V(S390_I32x4TruncSatF64x2SZero) \ 288 V(S390_I32x4TruncSatF64x2UZero) \ 289 V(S390_I16x8Splat) \ 290 V(S390_I16x8ExtractLaneU) \ 291 V(S390_I16x8ExtractLaneS) \ 292 V(S390_I16x8ReplaceLane) \ 293 V(S390_I16x8Add) \ 294 V(S390_I16x8Sub) \ 295 V(S390_I16x8Mul) \ 296 V(S390_I16x8MinS) \ 297 V(S390_I16x8MinU) \ 298 V(S390_I16x8MaxS) \ 299 V(S390_I16x8MaxU) \ 300 V(S390_I16x8Eq) \ 301 V(S390_I16x8Ne) \ 302 V(S390_I16x8GtS) \ 303 V(S390_I16x8GeS) \ 304 V(S390_I16x8GtU) \ 305 V(S390_I16x8GeU) \ 306 V(S390_I16x8Shl) \ 307 V(S390_I16x8ShrS) \ 308 V(S390_I16x8ShrU) \ 309 V(S390_I16x8Neg) \ 310 V(S390_I16x8SConvertI32x4) \ 311 V(S390_I16x8UConvertI32x4) \ 312 V(S390_I16x8SConvertI8x16Low) \ 313 V(S390_I16x8SConvertI8x16High) \ 314 V(S390_I16x8UConvertI8x16Low) \ 315 V(S390_I16x8UConvertI8x16High) \ 316 V(S390_I16x8AddSatS) \ 317 V(S390_I16x8SubSatS) \ 318 V(S390_I16x8AddSatU) \ 319 V(S390_I16x8SubSatU) \ 320 V(S390_I16x8RoundingAverageU) \ 321 V(S390_I16x8Abs) \ 322 V(S390_I16x8BitMask) \ 323 V(S390_I16x8ExtMulLowI8x16S) \ 324 V(S390_I16x8ExtMulHighI8x16S) \ 325 V(S390_I16x8ExtMulLowI8x16U) \ 326 V(S390_I16x8ExtMulHighI8x16U) \ 327 V(S390_I16x8ExtAddPairwiseI8x16S) \ 328 V(S390_I16x8ExtAddPairwiseI8x16U) \ 329 V(S390_I16x8Q15MulRSatS) \ 330 V(S390_I8x16Splat) \ 331 V(S390_I8x16ExtractLaneU) \ 332 V(S390_I8x16ExtractLaneS) \ 333 V(S390_I8x16ReplaceLane) \ 334 V(S390_I8x16Add) \ 335 V(S390_I8x16Sub) \ 336 V(S390_I8x16MinS) \ 337 V(S390_I8x16MinU) \ 338 V(S390_I8x16MaxS) \ 339 V(S390_I8x16MaxU) \ 340 V(S390_I8x16Eq) \ 341 V(S390_I8x16Ne) \ 342 V(S390_I8x16GtS) \ 343 V(S390_I8x16GeS) \ 344 V(S390_I8x16GtU) \ 345 V(S390_I8x16GeU) \ 346 V(S390_I8x16Shl) \ 347 V(S390_I8x16ShrS) \ 348 V(S390_I8x16ShrU) \ 349 V(S390_I8x16Neg) \ 350 V(S390_I8x16SConvertI16x8) \ 351 V(S390_I8x16UConvertI16x8) \ 352 V(S390_I8x16AddSatS) \ 353 V(S390_I8x16SubSatS) \ 354 V(S390_I8x16AddSatU) \ 355 V(S390_I8x16SubSatU) \ 356 V(S390_I8x16RoundingAverageU) \ 357 V(S390_I8x16Abs) \ 358 V(S390_I8x16BitMask) \ 359 V(S390_I8x16Shuffle) \ 360 V(S390_I8x16Swizzle) \ 361 V(S390_I8x16Popcnt) \ 362 V(S390_I64x2AllTrue) \ 363 V(S390_I32x4AllTrue) \ 364 V(S390_I16x8AllTrue) \ 365 V(S390_I8x16AllTrue) \ 366 V(S390_V128AnyTrue) \ 367 V(S390_S128And) \ 368 V(S390_S128Or) \ 369 V(S390_S128Xor) \ 370 V(S390_S128Const) \ 371 V(S390_S128Zero) \ 372 V(S390_S128AllOnes) \ 373 V(S390_S128Not) \ 374 V(S390_S128Select) \ 375 V(S390_S128AndNot) \ 376 V(S390_S128Load8Splat) \ 377 V(S390_S128Load16Splat) \ 378 V(S390_S128Load32Splat) \ 379 V(S390_S128Load64Splat) \ 380 V(S390_S128Load8x8S) \ 381 V(S390_S128Load8x8U) \ 382 V(S390_S128Load16x4S) \ 383 V(S390_S128Load16x4U) \ 384 V(S390_S128Load32x2S) \ 385 V(S390_S128Load32x2U) \ 386 V(S390_S128Load32Zero) \ 387 V(S390_S128Load64Zero) \ 388 V(S390_S128Load8Lane) \ 389 V(S390_S128Load16Lane) \ 390 V(S390_S128Load32Lane) \ 391 V(S390_S128Load64Lane) \ 392 V(S390_S128Store8Lane) \ 393 V(S390_S128Store16Lane) \ 394 V(S390_S128Store32Lane) \ 395 V(S390_S128Store64Lane) \ 396 V(S390_StoreSimd128) \ 397 V(S390_LoadSimd128) \ 398 V(S390_StoreCompressTagged) \ 399 V(S390_LoadDecompressTaggedSigned) \ 400 V(S390_LoadDecompressTaggedPointer) \ 401 V(S390_LoadDecompressAnyTagged) 402 403 // Addressing modes represent the "shape" of inputs to an instruction. 404 // Many instructions support multiple addressing modes. Addressing modes 405 // are encoded into the InstructionCode of the instruction and tell the 406 // code generator after register allocation which assembler method to call. 407 // 408 // We use the following local notation for addressing modes: 409 // 410 // R = register 411 // O = register or stack slot 412 // D = double register 413 // I = immediate (handle, external, int32) 414 // MRI = [register + immediate] 415 // MRR = [register + register] 416 #define TARGET_ADDRESSING_MODE_LIST(V) \ 417 V(MR) /* [%r0 ] */ \ 418 V(MRI) /* [%r0 + K] */ \ 419 V(MRR) /* [%r0 + %r1 ] */ \ 420 V(MRRI) /* [%r0 + %r1 + K] */ 421 422 } // namespace compiler 423 } // namespace internal 424 } // namespace v8 425 426 #endif // V8_COMPILER_BACKEND_S390_INSTRUCTION_CODES_S390_H_ 427