summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/radeon/AMDILInstructions.td
diff options
context:
space:
mode:
authorTom Stellard <[email protected]>2012-06-06 20:27:47 -0400
committerTom Stellard <[email protected]>2012-06-18 18:30:36 -0400
commit984ad0788c54386801b185740b973c446e55d3b9 (patch)
tree735b574578d70dae9713f81839f6ca95ff799c2d /src/gallium/drivers/radeon/AMDILInstructions.td
parent34ff22b75f8e3616109c3deacea2ec27f12f3398 (diff)
radeon/llvm: Remove unused AMDIL TableGen definitons
Diffstat (limited to 'src/gallium/drivers/radeon/AMDILInstructions.td')
-rw-r--r--src/gallium/drivers/radeon/AMDILInstructions.td2216
1 files changed, 2 insertions, 2214 deletions
diff --git a/src/gallium/drivers/radeon/AMDILInstructions.td b/src/gallium/drivers/radeon/AMDILInstructions.td
index cb3d22a7662..ff0e2c16cc5 100644
--- a/src/gallium/drivers/radeon/AMDILInstructions.td
+++ b/src/gallium/drivers/radeon/AMDILInstructions.td
@@ -7,763 +7,6 @@
//
//==-----------------------------------------------------------------------===//
-// Operations in this file are generic to all data types
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-let isReMaterializable = 1, isAsCheapAsAMove = 1 in {
- defm PHIMOVE : UnaryOpMC<IL_OP_MOV, IL_phimov>;
-}
-defm CMOV : BinaryOpMC<IL_OP_CMOV, IL_cmov>;
-defm DIV_INF : BinaryOpMC<IL_OP_DIV_INF, IL_div_inf>;
-defm SMAX : BinaryOpMCInt<IL_OP_I_MAX, IL_smax>;
-// This opcode has a custom swizzle pattern in the Swizzle Encoder and
-// should never be selected in ISel. It should only be generated in the
-// I/O expansion code. These are different from the CMOVLOG instruction
-// in that the src0 argument uses a custom swizzle for the Y/Z/W
-// vector channel respectively instead of the default channel.
-def CMOVLOG_Y_i32 : ThreeInOneOut<IL_OP_CMOV_LOGICAL, (outs GPRI32:$dst),
- (ins GPRI32:$src0, GPRI32:$src1, GPRI32:$src2),
- !strconcat(IL_OP_CMOV_LOGICAL.Text, " $dst, $src0, $src1, $src2"),
- []>;
-def CMOVLOG_Z_i32 : ThreeInOneOut<IL_OP_CMOV_LOGICAL, (outs GPRI32:$dst),
- (ins GPRI32:$src0, GPRI32:$src1, GPRI32:$src2),
- !strconcat(IL_OP_CMOV_LOGICAL.Text, " $dst, $src0, $src1, $src2"),
- []>;
-def CMOVLOG_W_i32 : ThreeInOneOut<IL_OP_CMOV_LOGICAL, (outs GPRI32:$dst),
- (ins GPRI32:$src0, GPRI32:$src1 ,GPRI32:$src2),
- !strconcat(IL_OP_CMOV_LOGICAL.Text, " $dst, $src0, $src1, $src2"),
- []>;
-defm SELECTBIN : TernaryOpMCScalar<IL_OP_CMOV_LOGICAL, select>;
-//===---------------------------------------------------------------------===//
-// Signed 8bit integer math instructions start here
-//===---------------------------------------------------------------------===//
-def INTTOANY_i8 : OneInOneOut<IL_OP_MOV, (outs GPRI8:$dst), (ins GPRI32:$src0),
- !strconcat(IL_OP_MOV.Text, " $dst, $src0"),
- [(set GPRI8:$dst, (IL_inttoany GPRI32:$src0))]>;
-//===---------------------------------------------------------------------===//
-// Signed 16bit integer math instructions start here
-//===---------------------------------------------------------------------===//
-def INTTOANY_i16: OneInOneOut<IL_OP_MOV, (outs GPRI16:$dst), (ins GPRI32:$src0),
- !strconcat(IL_OP_MOV.Text," $dst, $src0"),
- [(set GPRI16:$dst, (IL_inttoany GPRI32:$src0))]>;
-//===---------------------------------------------------------------------===//
-// Signed 32bit integer math instructions start here
-//===---------------------------------------------------------------------===//
-// get rid of the addri via the tablegen instead of custom lowered instruction
-defm EADD : BinaryOpMCi32<IL_OP_I_ADD, adde>;
-def INTTOANY_i32: OneInOneOut<IL_OP_MOV, (outs GPRI32:$dst), (ins GPRI32:$src0),
- !strconcat(IL_OP_MOV.Text, " $dst, $src0"),
- [(set GPRI32:$dst, (IL_inttoany GPRI32:$src0))]>;
-// Integer offsets for addressing
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def ADDir : TwoInOneOut<IL_OP_I_ADD, (outs GPRI32:$dst),
- (ins MEMI32:$ptr, GPRI32:$offset),
- !strconcat(IL_OP_I_ADD.Text, " $dst, $ptr, $offset"),
- [(set GPRI32:$dst,
- (IL_addaddrri ADDR:$ptr,
- (i32 GPRI32:$offset)))]>;
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def ADDri : TwoInOneOut<IL_OP_I_ADD, (outs GPRI32:$dst),
- (ins GPRI32:$offset, MEMI32:$ptr),
- !strconcat(IL_OP_I_ADD.Text, " $dst, $offset, $ptr"),
- [(set GPRI32:$dst,
- (IL_addaddrir
- (i32 GPRI32:$offset), ADDR:$ptr))]>;
-
-defm IFFB_HI : UnaryOpMCi32<IL_OP_I_FFB_HI, IL_ffb_hi>;
-defm IFFB_LO : UnaryOpMCi32<IL_OP_I_FFB_LO, IL_ffb_lo>;
-let mayLoad = 0, mayStore = 0 in {
-defm BITCOUNT : UnaryIntrinsicInt<IL_OP_IBIT_COUNT, int_AMDIL_bit_count_i32>;
-defm FFB_LO : UnaryIntrinsicInt<IL_OP_I_FFB_LO, int_AMDIL_bit_find_first_lo>;
-defm FFB_HI : UnaryIntrinsicInt<IL_OP_I_FFB_HI, int_AMDIL_bit_find_first_hi>;
-defm FFB_SGN : UnaryIntrinsicInt<IL_OP_I_FFB_SGN,
- int_AMDIL_bit_find_first_sgn>;
-defm IMULHI : BinaryIntrinsicInt<IL_OP_I_MUL_HIGH, int_AMDIL_mulhi_i32>;
-let Predicates = [HasHWSign24Bit] in {
-defm IMUL24 : BinaryIntrinsicInt<IL_OP_I_MUL24, int_AMDIL_mul24_i32>;
-defm IMULHI24 : BinaryIntrinsicInt<IL_OP_I_MULHI24, int_AMDIL_mulhi24_i32>;
-defm IMAD24 : TernaryIntrinsicInt<IL_OP_I_MAD24, int_AMDIL_mad24_i32>;
-}
-defm CARRY : BinaryIntrinsicInt<IL_OP_I_CARRY, int_AMDIL_carry_i32>;
-defm BORROW : BinaryIntrinsicInt<IL_OP_I_BORROW, int_AMDIL_borrow_i32>;
-defm IMAX : BinaryIntrinsicInt<IL_OP_I_MAX, int_AMDIL_max_i32>;
-defm IBIT_EXTRACT : TernaryIntrinsicInt<IL_OP_IBIT_EXTRACT,
- int_AMDIL_bit_extract_i32>;
-defm IMAD : TernaryIntrinsicInt<IL_OP_I_MAD, int_AMDIL_mad_i32>;
-defm SAD : TernaryIntrinsicInt<IL_OP_SAD, int_AMDIL_media_sad>;
-defm SADHI : TernaryIntrinsicInt<IL_OP_SAD_HI,
- int_AMDIL_media_sad_hi>;
-}
-def SAD4_i32 : ThreeInOneOut<IL_OP_SAD4, (outs GPRI32:$dst),
- (ins GPRV4I32:$src, GPRV4I32:$src1, GPRI32:$src2),
- !strconcat(IL_OP_SAD4.Text, " $dst, $src, $src1, $src2"),
- [(set GPRI32:$dst,
- (int_AMDIL_media_sad4 GPRV4I32:$src, GPRV4I32:$src1,
- GPRI32:$src2))]>;
-def FTOV4U8_i32 : OneInOneOut<IL_OP_F2U4, (outs GPRI32:$dst),
- (ins GPRV4F32:$src),
- !strconcat(IL_OP_F2U4.Text, " $dst, $src"),
- [(set GPRI32:$dst,
- (int_AMDIL_media_convert_f2v4u8 GPRV4F32:$src))]>;
-//===---------------------------------------------------------------------===//
-// Unsigned 32bit integer math instructions start here
-//===---------------------------------------------------------------------===//
-defm UMUL : BinaryOpMCi32<IL_OP_U_MUL, IL_umul>;
-defm UDIV : BinaryOpMCi32<IL_OP_U_DIV, udiv>;
-defm NATIVE_UDIV : BinaryIntrinsicInt<IL_OP_U_DIV, int_AMDIL_udiv>;
-let mayLoad=0, mayStore=0 in {
-defm UBIT_REVERSE : UnaryIntrinsicInt<IL_OP_UBIT_REVERSE,
- int_AMDIL_bit_reverse_u32>;
-defm UMULHI_INT : BinaryIntrinsicInt<IL_OP_U_MUL_HIGH, int_AMDIL_mulhi_u32>;
-defm UMULHI24 : BinaryIntrinsicInt<IL_OP_U_MULHI24, int_AMDIL_mulhi24_u32>;
-defm UMUL24 : BinaryIntrinsicInt<IL_OP_U_MUL24, int_AMDIL_mul24_u32>;
-defm UMAX : BinaryIntrinsicInt<IL_OP_U_MAX, int_AMDIL_max_u32>;
-defm UBIT_EXTRACT : TernaryIntrinsicInt<IL_OP_UBIT_EXTRACT,
- int_AMDIL_bit_extract_u32>;
-defm UBIT_INSERT : QuaternaryIntrinsicInt<IL_OP_UBIT_INSERT,
- int_AMDIL_bit_insert_u32>;
-defm BFI : TernaryIntrinsicInt<IL_OP_BFI, int_AMDIL_bfi>;
-defm BFM : BinaryIntrinsicInt<IL_OP_BFM, int_AMDIL_bfm>;
-defm UMAD : TernaryIntrinsicInt<IL_OP_U_MAD, int_AMDIL_mad_u32>;
-defm UMAD24 : TernaryIntrinsicInt<IL_OP_U_MAD24, int_AMDIL_mad24_u32>;
-defm U4LERP : TernaryIntrinsicInt<IL_OP_U4_LERP,
- int_AMDIL_media_lerp_u4>;
-defm BITALIGN : TernaryIntrinsicInt<IL_OP_BIT_ALIGN, int_AMDIL_media_bitalign>;
-defm BYTEALIGN : TernaryIntrinsicInt<IL_OP_BYTE_ALIGN, int_AMDIL_media_bytealign>;
-}
-//===---------------------------------------------------------------------===//
-// Signed 64bit integer math instructions start here
-//===---------------------------------------------------------------------===//
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def LNEGATE : OneInOneOut<IL_OP_MOV, (outs GPRI64:$dst), (ins GPRI64:$src),
- !strconcat(IL_OP_MOV.Text, " $dst, $src"),
- [(set GPRI64:$dst, (IL_inegate GPRI64:$src))]>;
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def LNEGATE_v2i64: OneInOneOut<IL_OP_MOV, (outs GPRV2I64:$dst),
- (ins GPRV2I64:$src),
- !strconcat(IL_OP_MOV.Text, " $dst, $src"),
- [(set GPRV2I64:$dst, (IL_inegate GPRV2I64:$src))]>;
-let Predicates = [HasHW64Bit] in {
-def LADD : TwoInOneOut<IL_OP_I64_ADD, (outs GPRI64:$dst),
- (ins GPRI64:$src1, GPRI64:$src2),
- !strconcat(IL_OP_I64_ADD.Text, " $dst, $src1, $src2"),
- [(set GPRI64:$dst, (IL_add GPRI64:$src1, GPRI64:$src2))]>;
-defm IMAX64 : BinaryIntrinsicLong<IL_OP_I64_MAX, int_AMDIL_max_i32>;
-defm UMAX64 : BinaryIntrinsicLong<IL_OP_U64_MAX, int_AMDIL_max_u32>;
-}
-let Predicates = [HasHW64Bit] in {
-def LSHR : TwoInOneOut<IL_OP_I64_SHR, (outs GPRI64:$dst),
- (ins GPRI64:$src1, GPRI32:$src2),
- !strconcat(IL_OP_I64_SHR.Text, " $dst, $src1, $src2"),
- [(set GPRI64:$dst, (sra GPRI64:$src1, GPRI32:$src2))]>;
-def LSHL : TwoInOneOut<IL_OP_I64_SHL, (outs GPRI64:$dst),
- (ins GPRI64:$src1, GPRI32:$src2),
- !strconcat(IL_OP_I64_SHL.Text, " $dst, $src1, $src2"),
- [(set GPRI64:$dst, (shl GPRI64:$src1, GPRI32:$src2))]>;
-}
-
-
-//===---------------------------------------------------------------------===//
-// Unsigned 64bit integer math instructions start here
-//===---------------------------------------------------------------------===//
-let Predicates = [HasTmrRegister] in {
- def Tmr : ILFormat<IL_OP_MOV, (outs GPRI64:$tmr),
- (ins), !strconcat(IL_OP_MOV.Text, " $tmr, Tmr"),
- [(set GPRI64:$tmr, (int_AMDIL_get_cycle_count))]>;
-}
-let Predicates = [HasDeviceIDInst] in {
-def CU_ID : ILFormat<IL_OP_CU_ID, (outs GPRI32:$id), (ins),
- !strconcat(IL_OP_CU_ID.Text, " $id"),
- [(set GPRI32:$id, (int_AMDIL_compute_unit_id))]>;
-def WAVE_ID : ILFormat<IL_OP_WAVE_ID, (outs GPRI32:$id), (ins),
- !strconcat(IL_OP_WAVE_ID.Text, " $id"),
- [(set GPRI32:$id, (int_AMDIL_wavefront_id))]>;
-}
-let Predicates = [HasHW64Bit] in {
-def LUSHR : TwoInOneOut<IL_OP_U64_SHR, (outs GPRI64:$dst),
- (ins GPRI64:$src1, GPRI32:$src2),
- !strconcat(IL_OP_U64_SHR.Text, " $dst, $src1, $src2"),
- [(set GPRI64:$dst, (srl GPRI64:$src1, GPRI32:$src2))]>;
-}
-
-
-//===---------------------------------------------------------------------===//
-// Generic Float Instructions
-//===---------------------------------------------------------------------===//
-//===---------------------------------------------------------------------===//
-// float math instructions start here
-//===---------------------------------------------------------------------===//
-let mayLoad=0, mayStore=0 in {
-defm PIREDUCE : UnaryIntrinsicFloat<IL_OP_PI_REDUCE, int_AMDIL_pireduce>;
-defm ROUND_NEGINF : UnaryIntrinsicFloat<IL_OP_ROUND_NEG_INF,
- int_AMDIL_round_neginf>;
-defm ROUND_ZERO : UnaryIntrinsicFloat<IL_OP_ROUND_ZERO,
- int_AMDIL_round_zero>;
-defm ACOS : UnaryIntrinsicFloatScalar<IL_OP_ACOS, int_AMDIL_acos>;
-defm ATAN : UnaryIntrinsicFloatScalar<IL_OP_ATAN, int_AMDIL_atan>;
-defm ASIN : UnaryIntrinsicFloatScalar<IL_OP_ASIN, int_AMDIL_asin>;
-defm TAN : UnaryIntrinsicFloatScalar<IL_OP_TAN, int_AMDIL_tan>;
-defm SQRT : UnaryIntrinsicFloatScalar<IL_OP_SQRT, int_AMDIL_sqrt>;
-defm SQRTVEC : UnaryIntrinsicFloat<IL_OP_SQRT_VEC, int_AMDIL_sqrt_vec>;
-defm COSVEC : UnaryIntrinsicFloat<IL_OP_COS_VEC, int_AMDIL_cos_vec>;
-defm SINVEC : UnaryIntrinsicFloat<IL_OP_SIN_VEC, int_AMDIL_sin_vec>;
-defm LOGVEC : UnaryIntrinsicFloat<IL_OP_LOG_VEC, int_AMDIL_log_vec>;
-defm RSQVEC : UnaryIntrinsicFloat<IL_OP_RSQ_VEC, int_AMDIL_rsq_vec>;
-defm EXN : UnaryIntrinsicFloatScalar<IL_OP_EXN, int_AMDIL_exn>;
-defm SIGN : UnaryIntrinsicFloat<IL_OP_SGN, int_AMDIL_sign>;
-defm LENGTH : UnaryIntrinsicFloat<IL_OP_LEN, int_AMDIL_length>;
-defm POW : BinaryIntrinsicFloat<IL_OP_POW, int_AMDIL_pow>;
-}
-
-let hasIEEEFlag = 1 in {
- let mayLoad = 0, mayStore=0 in {
- }
-defm MOD : BinaryOpMCf32<IL_OP_MOD, frem>;
-}
-let hasZeroOpFlag = 1 in {
- let mayLoad = 0, mayStore=0 in {
-defm LN : UnaryIntrinsicFloatScalar<IL_OP_LN, int_AMDIL_ln>;
-defm RSQ : UnaryIntrinsicFloatScalar<IL_OP_RSQ, int_AMDIL_rsq>;
-defm DIV : BinaryIntrinsicFloat<IL_OP_DIV, int_AMDIL_div>;
- }
-}
- let mayLoad = 0, mayStore=0 in {
-defm FMA : TernaryIntrinsicFloat<IL_OP_FMA, int_AMDIL_fma>;
-defm LERP : TernaryIntrinsicFloat<IL_OP_LERP, int_AMDIL_lerp>;
- }
-defm NEAR : UnaryOpMCf32<IL_OP_ROUND_NEAR, fnearbyint>;
-defm RND_Z : UnaryOpMCf32<IL_OP_ROUND_ZERO, ftrunc>;
-
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def INTTOANY_f32 : OneInOneOut<IL_OP_MOV, (outs GPRF32:$dst),
- (ins GPRI32:$src0),
- !strconcat(IL_OP_MOV.Text, " $dst, $src0"),
- [(set GPRF32:$dst, (IL_inttoany GPRI32:$src0))]>;
-let hasIEEEFlag = 1 in {
-def DP2ADD_f32 : ThreeInOneOut<IL_OP_DP2_ADD, (outs GPRF32:$dst),
- (ins GPRV2F32:$src0, GPRV2F32:$src1, GPRF32:$src2),
- !strconcat(IL_OP_DP2_ADD.Text, " $dst, $src0, $src1, $src2"),
- [(set GPRF32:$dst,
- (int_AMDIL_dp2_add GPRV2F32:$src0,
- GPRV2F32:$src1, GPRF32:$src2))]>;
-def DP2_f32 : TwoInOneOut<IL_OP_DP2, (outs GPRF32:$dst),
- (ins GPRV2F32:$src0, GPRV2F32:$src1),
- !strconcat(IL_OP_DP2.Text, " $dst, $src0, $src1"),
- [(set GPRF32:$dst,
- (int_AMDIL_dp2 GPRV2F32:$src0, GPRV2F32:$src1))]>;
-def DP3_f32 : TwoInOneOut<IL_OP_DP3, (outs GPRF32:$dst),
- (ins GPRV4F32:$src0, GPRV4F32:$src1),
- !strconcat(IL_OP_DP3.Text, " $dst, $src0, $src1"),
- [(set GPRF32:$dst,
- (int_AMDIL_dp3 GPRV4F32:$src0, GPRV4F32:$src1))]>;
-def DP4_f32 : TwoInOneOut<IL_OP_DP4, (outs GPRF32:$dst),
- (ins GPRV4F32:$src0, GPRV4F32:$src1),
- !strconcat(IL_OP_DP4.Text, " $dst, $src0, $src1"),
- [(set GPRF32:$dst,
- (int_AMDIL_dp4 GPRV4F32:$src0, GPRV4F32:$src1))]>;
-}
-defm UNPACK_B0 : IntrConvertI32TOF32<IL_OP_UNPACK_0, int_AMDIL_media_unpack_byte_0>;
-defm UNPACK_B1 : IntrConvertI32TOF32<IL_OP_UNPACK_1, int_AMDIL_media_unpack_byte_1>;
-defm UNPACK_B2 : IntrConvertI32TOF32<IL_OP_UNPACK_2, int_AMDIL_media_unpack_byte_2>;
-defm UNPACK_B3 : IntrConvertI32TOF32<IL_OP_UNPACK_3, int_AMDIL_media_unpack_byte_3>;
-defm FTOI_FLR : IntrConvertF32TOI32<IL_OP_FTOI_FLR, int_AMDIL_convert_f32_i32_flr>;
-defm FTOI_RPI : IntrConvertF32TOI32<IL_OP_FTOI_RPI, int_AMDIL_convert_f32_i32_rpi>;
-defm HTOF : IntrConvertF16TOF32<IL_OP_F16_TO_F32, int_AMDIL_convert_f16_f32>;
-defm FTOH : IntrConvertF32TOF16<IL_OP_F32_TO_F16, int_AMDIL_convert_f32_f16>;
-defm FTOH_NEAR : IntrConvertF32TOF16<IL_OP_F32_TO_F16_NEAR, int_AMDIL_convert_f32_f16_near>;
-defm FTOH_NEG_INF : IntrConvertF32TOF16<IL_OP_F32_TO_F16_NEG_INF, int_AMDIL_convert_f32_f16_neg_inf>;
-defm FTOH_PLUS_INF : IntrConvertF32TOF16<IL_OP_F32_TO_F16_PLUS_INF, int_AMDIL_convert_f32_f16_plus_inf>;
-//===---------------------------------------------------------------------===//
-// float math instructions end here
-//===---------------------------------------------------------------------===//
-
-//===---------------------------------------------------------------------===//
-// float2 math instructions start here
-//===---------------------------------------------------------------------===//
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def NEG_v2f32 : OneInOneOut<IL_OP_MOV, (outs GPRV2F32:$dst),
- (ins GPRV2F32:$src0),
- !strconcat(IL_OP_MOV.Text, " $dst, $src0"),
- [(set GPRV2F32:$dst, (fneg GPRV2F32:$src0))]>;
-//===---------------------------------------------------------------------===//
-// float2 math instructions end here
-//===---------------------------------------------------------------------===//
-
-//===---------------------------------------------------------------------===//
-// float4 math instructions start here
-//===---------------------------------------------------------------------===//
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def NEG_v4f32 : OneInOneOut<IL_OP_MOV, (outs GPRV4F32:$dst),
- (ins GPRV4F32:$src0),
- !strconcat(IL_OP_MOV.Text, " $dst, $src0"),
- [(set GPRV4F32:$dst, (fneg GPRV4F32:$src0))]>;
-//===---------------------------------------------------------------------===//
-// float4 math instructions end here
-//===---------------------------------------------------------------------===//
-
-//===---------------------------------------------------------------------===//
-// double math instructions start here
-//===---------------------------------------------------------------------===//
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def SUB_f64 : TwoInOneOut<IL_OP_D_ADD, (outs GPRF64:$dst),
- (ins GPRF64:$src0, GPRF64:$src1),
- !strconcat(IL_OP_D_ADD.Text, " $dst, $src0, $src1"),
- [(set GPRF64:$dst, (fsub GPRF64:$src0, GPRF64:$src1))]>;
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def SUB_v2f64 : TwoInOneOut<IL_OP_D_ADD, (outs GPRV2F64:$dst),
- (ins GPRV2F64:$src0, GPRV2F64:$src1),
- !strconcat(IL_OP_D_ADD.Text, " $dst, $src0, $src1"),
- [(set GPRV2F64:$dst, (fsub GPRV2F64:$src0, GPRV2F64:$src1))]>;
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def NEG_f64 : OneInOneOut<IL_OP_MOV, (outs GPRF64:$dst),
- (ins GPRF64:$src0),
- !strconcat(IL_OP_MOV.Text, " $dst, $src0"),
- [(set GPRF64:$dst, (fneg GPRF64:$src0))]>;
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def NEG_v2f64 : OneInOneOut<IL_OP_MOV, (outs GPRV2F64:$dst),
- (ins GPRV2F64:$src0),
- !strconcat(IL_OP_MOV.Text, " $dst, $src0"),
- [(set GPRV2F64:$dst, (fneg GPRV2F64:$src0))]>;
- let mayLoad = 0, mayStore=0 in {
-defm MAX : BinaryIntrinsicDouble<IL_OP_D_MAX, int_AMDIL_max>;
-defm DIV : BinaryIntrinsicDouble<IL_OP_D_DIV, int_AMDIL_div>;
-defm MAD : TernaryIntrinsicDouble<IL_OP_D_MAD, int_AMDIL_mad>;
-defm DFMA : TernaryIntrinsicDouble<IL_OP_D_MAD, int_AMDIL_fma>;
-defm FRAC : UnaryIntrinsicDouble<IL_OP_D_FRC, int_AMDIL_fraction>;
-defm SQRT : UnaryIntrinsicDouble<IL_OP_D_SQRT, int_AMDIL_sqrt>;
-defm RSQ : UnaryIntrinsicDoubleScalar<IL_OP_D_RSQ, int_AMDIL_rsq>;
-defm RCP : UnaryIntrinsicDoubleScalar<IL_OP_D_RCP, int_AMDIL_drcp>;
-defm DMAD : TernaryOpMCf64<IL_OP_D_MAD, IL_mad>;
- }
-def FREXP_f64 : OneInOneOut<IL_OP_D_FREXP, (outs GPRV2I64:$dst),
- (ins GPRF64:$src),
- !strconcat(IL_OP_D_FREXP.Text," $dst, $src"),
- [(set GPRV2I64:$dst,
- (int_AMDIL_frexp_f64 GPRF64:$src))]>;
-def LDEXP_f64 : TwoInOneOut<IL_OP_D_LDEXP, (outs GPRF64:$dst),
- (ins GPRF64:$src, GPRI32:$src1),
- !strconcat(IL_OP_D_LDEXP.Text, " $dst, $src, $src1"),
- [(set GPRF64:$dst,
- (int_AMDIL_ldexp GPRF64:$src, GPRI32:$src1))]>;
-def LDEXP_v2f64 : TwoInOneOut<IL_OP_D_LDEXP, (outs GPRV2F64:$dst),
- (ins GPRV2F64:$src, GPRV2I32:$src1),
- !strconcat(IL_OP_D_LDEXP.Text, " $dst, $src, $src1"),
- [(set GPRV2F64:$dst,
- (int_AMDIL_ldexp GPRV2F64:$src, GPRV2I32:$src1))]>;
-//===---------------------------------------------------------------------===//
-// double math instructions end here
-//===---------------------------------------------------------------------===//
-
-//===---------------------------------------------------------------------===//
-// Various Macros
-//===---------------------------------------------------------------------===//
-def MACRO__sdiv_i8 : BinaryMacro< GPRI8, GPRI8, GPRI8, sdiv>;
-def MACRO__sdiv_i16 : BinaryMacro<GPRI16, GPRI16, GPRI16, sdiv>;
-def MACRO__sdiv_i32 : BinaryMacro<GPRI32, GPRI32, GPRI32, sdiv>;
-def MACRO__udiv_i8 : BinaryMacro< GPRI8, GPRI8, GPRI8, udiv>;
-def MACRO__udiv_i16 : BinaryMacro<GPRI16, GPRI16, GPRI16, udiv>;
-def MACRO__udiv_i32 : BinaryMacro<GPRI32, GPRI32, GPRI32, udiv>;
-def MACRO__smod_i8 : BinaryMacro< GPRI8, GPRI8, GPRI8, srem>;
-def MACRO__smod_i16 : BinaryMacro<GPRI16, GPRI16, GPRI16, srem>;
-def MACRO__smod_i32 : BinaryMacro<GPRI32, GPRI32, GPRI32, srem>;
-def MACRO__umod_i8 : BinaryMacro< GPRI8, GPRI8, GPRI8, urem>;
-def MACRO__umod_i16 : BinaryMacro<GPRI16, GPRI16, GPRI16, urem>;
-def MACRO__umod_i32 : BinaryMacro<GPRI32, GPRI32, GPRI32, urem>;
-let Predicates = [HasSWDDiv] in {
- def MACRO__ddiv_f64: BinaryMacro<GPRF64, GPRF64, GPRF64, fdiv>;
-}
-let Predicates = [HasHWDDiv] in {
- def MACRO__ddiv_f64_fma: BinaryMacro<GPRF64, GPRF64, GPRF64, fdiv>;
-}
-def MACRO__ftol_i64 : UnaryMacro<GPRI64, GPRF32, fp_to_sint>;
-def MACRO__ftoul_i64 : UnaryMacro<GPRI64, GPRF32, fp_to_uint>;
-def MACRO__ultof_f32 : UnaryMacro<GPRF32, GPRI64, uint_to_fp>;
-def MACRO__ltof_f32 : UnaryMacro<GPRF32, GPRI64, sint_to_fp>;
-let Predicates = [HasSW64Mul] in {
-def MACRO__mul_i64 : BinaryMacro<GPRI64, GPRI64, GPRI64, mul>;
-def MACRO__mul_v2i64 : BinaryMacro<GPRV2I64, GPRV2I64, GPRV2I64, mul>;
-}
-let Predicates = [HasSW64DivMod] in {
-def MACRO__sdiv_i64 : BinaryMacro<GPRI64, GPRI64, GPRI64, sdiv>;
-def MACRO__udiv_i64 : BinaryMacro<GPRI64, GPRI64, GPRI64, udiv>;
-def MACRO__smod_i64 : BinaryMacro<GPRI64, GPRI64, GPRI64, srem>;
-def MACRO__umod_i64 : BinaryMacro<GPRI64, GPRI64, GPRI64, urem>;
-}
-let Predicates = [HasHW64DivMod] in {
- defm SDIV : BinaryOpMCi64<IL_OP_I64_DIV, sdiv>;
- defm UDIV : BinaryOpMCi64<IL_OP_U64_DIV, udiv>;
- defm SMOD : BinaryOpMCi64<IL_OP_I64_MOD, srem>;
- defm UMOD : BinaryOpMCi64<IL_OP_U64_MOD, urem>;
-}
-let Predicates = [HasHW64Mul] in {
- defm SMUL : BinaryOpMCi64<IL_OP_I64_MUL, mul>;
- defm UMUL : BinaryOpMCi64<IL_OP_U64_MUL, IL_umul>;
-}
-def MACRO__shr_v2i64 : BinaryMacro<GPRV2I64, GPRV2I64, GPRV2I32, srl>;
-def MACRO__shl_v2i64 : BinaryMacro<GPRV2I64, GPRV2I64, GPRV2I32, shl>;
-def MACRO__sra_v2i64 : BinaryMacro<GPRV2I64, GPRV2I64, GPRV2I32, sra>;
-
-let Predicates = [HasSW64Bit] in {
-def MACRO__shr_i64 : BinaryMacro<GPRI64, GPRI64, GPRI32, srl>;
-def MACRO__shl_i64 : BinaryMacro<GPRI64, GPRI64, GPRI32, shl>;
-def MACRO__sra_i64 : BinaryMacro<GPRI64, GPRI64, GPRI32, sra>;
-}
-//===---------------------------------------------------------------------===//
-// 32-bit floating point operations
-//===---------------------------------------------------------------------===//
-def FEQ : TwoInOneOut<IL_OP_EQ, (outs GPRF32:$dst),
- (ins GPRF32:$lhs, GPRF32:$rhs),
- !strconcat(IL_OP_EQ.Text, " $dst, $lhs, $rhs")
- , []>;
-def FGE : TwoInOneOut<IL_OP_GE, (outs GPRF32:$dst),
- (ins GPRF32:$lhs, GPRF32:$rhs),
- !strconcat(IL_OP_GE.Text, " $dst, $lhs, $rhs")
- , []>;
-def FLT : TwoInOneOut<IL_OP_LT, (outs GPRF32:$dst),
- (ins GPRF32:$lhs, GPRF32:$rhs),
- !strconcat(IL_OP_LT.Text, " $dst, $lhs, $rhs")
- , []>;
-def FLT_v2f32 : TwoInOneOut<IL_OP_LT, (outs GPRV2F32:$dst),
- (ins GPRV2F32:$lhs, GPRV2F32:$rhs),
- !strconcat(IL_OP_LT.Text, " $dst, $lhs, $rhs")
- , []>;
-def FLT_v4f32 : TwoInOneOut<IL_OP_LT, (outs GPRV4F32:$dst),
- (ins GPRV4F32:$lhs, GPRV4F32:$rhs),
- !strconcat(IL_OP_LT.Text, " $dst, $lhs, $rhs")
- , []>;
-def FNE : TwoInOneOut<IL_OP_NE, (outs GPRF32:$dst),
- (ins GPRF32:$lhs, GPRF32:$rhs),
- !strconcat(IL_OP_NE.Text, " $dst, $lhs, $rhs")
- , []>;
-
-//===---------------------------------------------------------------------===//
-//TODO: need to correctly define comparison instructions
-//===---------------------------------------------------------------------===//
-def DEQ : TwoInOneOut<IL_OP_D_EQ, (outs GPRF64:$dst),
- (ins GPRF64:$lhs, GPRF64:$rhs),
- !strconcat(IL_OP_D_EQ.Text, " $dst, $lhs, $rhs")
- , []>;
-def DEQ_v2f64 : TwoInOneOut<IL_OP_D_EQ, (outs GPRV2F64:$dst),
- (ins GPRV2F64:$lhs, GPRV2F64:$rhs),
- !strconcat(IL_OP_D_EQ.Text, " $dst, $lhs, $rhs")
- , []>;
-def DGE : TwoInOneOut<IL_OP_D_GE, (outs GPRF64:$dst),
- (ins GPRF64:$lhs, GPRF64:$rhs),
- !strconcat(IL_OP_D_GE.Text, " $dst, $lhs, $rhs")
- , []>;
-def DLT : TwoInOneOut<IL_OP_D_LT, (outs GPRF64:$dst),
- (ins GPRF64:$lhs, GPRF64:$rhs),
- !strconcat(IL_OP_D_LT.Text, " $dst, $lhs, $rhs")
- , []>;
-def DNE : TwoInOneOut<IL_OP_D_NE, (outs GPRF64:$dst),
- (ins GPRF64:$lhs, GPRF64:$rhs),
- !strconcat(IL_OP_D_NE.Text, " $dst, $lhs, $rhs")
- , []>;
-
-//===---------------------------------------------------------------------===//
-//TODO: need to correctly define comparison instructions
-//===---------------------------------------------------------------------===//
-def IEQ : TwoInOneOut<IL_OP_I_EQ, (outs GPRI32:$dst),
- (ins GPRI32:$lhs, GPRI32:$rhs),
- !strconcat(IL_OP_I_EQ.Text, " $dst, $lhs, $rhs")
- , []>;
-def IEQ_v2i32 : TwoInOneOut<IL_OP_I_EQ, (outs GPRV2I32:$dst),
- (ins GPRV2I32:$lhs, GPRV2I32:$rhs),
- !strconcat(IL_OP_I_EQ.Text, " $dst, $lhs, $rhs")
- , []>;
-def IEQ_v4i32 : TwoInOneOut<IL_OP_I_EQ, (outs GPRV4I32:$dst),
- (ins GPRV4I32:$lhs, GPRV4I32:$rhs),
- !strconcat(IL_OP_I_EQ.Text, " $dst, $lhs, $rhs")
- , []>;
-def IGE : TwoInOneOut<IL_OP_I_GE, (outs GPRI32:$dst),
- (ins GPRI32:$lhs, GPRI32:$rhs),
- !strconcat(IL_OP_I_GE.Text, " $dst, $lhs, $rhs")
- , []>;
-def IGE_v2i32 : TwoInOneOut<IL_OP_I_GE, (outs GPRV2I32:$dst),
- (ins GPRV2I32:$lhs, GPRV2I32:$rhs),
- !strconcat(IL_OP_I_GE.Text, " $dst, $lhs, $rhs")
- , []>;
-def IGE_v4i32 : TwoInOneOut<IL_OP_I_GE, (outs GPRV4I32:$dst),
- (ins GPRV4I32:$lhs, GPRV4I32:$rhs),
- !strconcat(IL_OP_I_GE.Text, " $dst, $lhs, $rhs")
- , []>;
-def ILT : TwoInOneOut<IL_OP_I_LT, (outs GPRI32:$dst),
- (ins GPRI32:$lhs, GPRI32:$rhs),
- !strconcat(IL_OP_I_LT.Text, " $dst, $lhs, $rhs")
- , []>;
-def ILT_v2i32 : TwoInOneOut<IL_OP_I_LT, (outs GPRV2I32:$dst),
- (ins GPRV2I32:$lhs, GPRV2I32:$rhs),
- !strconcat(IL_OP_I_LT.Text, " $dst, $lhs, $rhs")
- , []>;
-def ILT_v4i32 : TwoInOneOut<IL_OP_I_LT, (outs GPRV4I32:$dst),
- (ins GPRV4I32:$lhs, GPRV4I32:$rhs),
- !strconcat(IL_OP_I_LT.Text, " $dst, $lhs, $rhs")
- , []>;
-def INE : TwoInOneOut<IL_OP_I_NE, (outs GPRI32:$dst),
- (ins GPRI32:$lhs, GPRI32:$rhs),
- !strconcat(IL_OP_I_NE.Text, " $dst, $lhs, $rhs")
- , []>;
-def INE_v2i32 : TwoInOneOut<IL_OP_I_NE, (outs GPRV2I32:$dst),
- (ins GPRV2I32:$lhs, GPRV2I32:$rhs),
- !strconcat(IL_OP_I_NE.Text, " $dst, $lhs, $rhs")
- , []>;
-def INE_v4i32 : TwoInOneOut<IL_OP_I_NE, (outs GPRV4I32:$dst),
- (ins GPRV4I32:$lhs, GPRV4I32:$rhs),
- !strconcat(IL_OP_I_NE.Text, " $dst, $lhs, $rhs")
- , []>;
-let Predicates = [HasHW64Bit] in {
-def LEQ : TwoInOneOut<IL_OP_I64_EQ, (outs GPRI64:$dst),
- (ins GPRI64:$lhs, GPRI64:$rhs),
- !strconcat(IL_OP_I64_EQ.Text, " $dst, $lhs, $rhs")
- , []>;
-def LGE : TwoInOneOut<IL_OP_I64_GE, (outs GPRI64:$dst),
- (ins GPRI64:$lhs, GPRI64:$rhs),
- !strconcat(IL_OP_I64_GE.Text, " $dst, $lhs, $rhs")
- , []>;
-def LLE : TwoInOneOut<IL_OP_I64_GE, (outs GPRI64:$dst),
- (ins GPRI64:$lhs, GPRI64:$rhs),
- !strconcat(IL_OP_I64_GE.Text, " $dst, $rhs, $lhs")
- , []>;
-def LGT : TwoInOneOut<IL_OP_I64_LT, (outs GPRI64:$dst),
- (ins GPRI64:$lhs, GPRI64:$rhs),
- !strconcat(IL_OP_I64_LT.Text, " $dst, $rhs, $lhs")
- , []>;
-def LLT : TwoInOneOut<IL_OP_I64_LT, (outs GPRI64:$dst),
- (ins GPRI64:$lhs, GPRI64:$rhs),
- !strconcat(IL_OP_I64_LT.Text, " $dst, $lhs, $rhs")
- , []>;
-def LNE : TwoInOneOut<IL_OP_I64_NE, (outs GPRI64:$dst),
- (ins GPRI64:$lhs, GPRI64:$rhs),
- !strconcat(IL_OP_I64_NE.Text, " $dst, $lhs, $rhs")
- , []>;
-}
-
-//===---------------------------------------------------------------------===//
-// Unsigned Integer Operations
-//===---------------------------------------------------------------------===//
-
-//===---------------------------------------------------------------------===//
-//TODO: need to correctly define comparison instructions
-//===---------------------------------------------------------------------===//
-def UEQ : TwoInOneOut<IL_OP_I_EQ, (outs GPRI32:$dst),
- (ins GPRI32:$lhs, GPRI32:$rhs),
- !strconcat(IL_OP_I_EQ.Text, " $dst, $lhs, $rhs")
- , []>;
-def UEQ_v2i32 : TwoInOneOut<IL_OP_I_EQ, (outs GPRV2I32:$dst),
- (ins GPRV2I32:$lhs, GPRV2I32:$rhs),
- !strconcat(IL_OP_I_EQ.Text, " $dst, $lhs, $rhs")
- , []>;
-def UEQ_v4i32 : TwoInOneOut<IL_OP_I_EQ, (outs GPRV4I32:$dst),
- (ins GPRV4I32:$lhs, GPRV4I32:$rhs),
- !strconcat(IL_OP_I_EQ.Text, " $dst, $lhs, $rhs")
- , []>;
-def ULE : TwoInOneOut<IL_OP_U_GE, (outs GPRI32:$dst),
- (ins GPRI32:$lhs, GPRI32:$rhs),
- !strconcat(IL_OP_U_GE.Text, " $dst, $lhs, $rhs")
- , []>;
-def ULE_v2i32 : TwoInOneOut<IL_OP_U_GE, (outs GPRV2I32:$dst),
- (ins GPRV2I32:$lhs, GPRV2I32:$rhs),
- !strconcat(IL_OP_U_GE.Text, " $dst, $lhs, $rhs")
- , []>;
-def ULE_v4i32 : TwoInOneOut<IL_OP_U_GE, (outs GPRV4I32:$dst),
- (ins GPRV4I32:$lhs, GPRV4I32:$rhs),
- !strconcat(IL_OP_U_GE.Text, " $dst, $lhs, $rhs")
- , []>;
-def UGT : TwoInOneOut<IL_OP_U_LT, (outs GPRI32:$dst),
- (ins GPRI32:$lhs, GPRI32:$rhs),
- !strconcat(IL_OP_U_LT.Text, " $dst, $lhs, $rhs")
- , []>;
-def UGT_v2i32 : TwoInOneOut<IL_OP_U_LT, (outs GPRV2I32:$dst),
- (ins GPRV2I32:$lhs, GPRV2I32:$rhs),
- !strconcat(IL_OP_U_LT.Text, " $dst, $lhs, $rhs")
- , []>;
-def UGT_v4i32 : TwoInOneOut<IL_OP_U_LT, (outs GPRV4I32:$dst),
- (ins GPRV4I32:$lhs, GPRV4I32:$rhs),
- !strconcat(IL_OP_U_LT.Text, " $dst, $lhs, $rhs")
- , []>;
-def UGE : TwoInOneOut<IL_OP_U_GE, (outs GPRI32:$dst),
- (ins GPRI32:$lhs, GPRI32:$rhs),
- !strconcat(IL_OP_U_GE.Text, " $dst, $lhs, $rhs")
- , []>;
-def UGE_v2i32 : TwoInOneOut<IL_OP_U_GE, (outs GPRV2I32:$dst),
- (ins GPRV2I32:$lhs, GPRV2I32:$rhs),
- !strconcat(IL_OP_U_GE.Text, " $dst, $lhs, $rhs")
- , []>;
-def UGE_v4i32 : TwoInOneOut<IL_OP_U_GE, (outs GPRV4I32:$dst),
- (ins GPRV4I32:$lhs, GPRV4I32:$rhs),
- !strconcat(IL_OP_U_GE.Text, " $dst, $lhs, $rhs")
- , []>;
-def ULT : TwoInOneOut<IL_OP_U_LT, (outs GPRI32:$dst),
- (ins GPRI32:$lhs, GPRI32:$rhs),
- !strconcat(IL_OP_U_LT.Text, " $dst, $lhs, $rhs")
- , []>;
-def ULT_v2i32 : TwoInOneOut<IL_OP_U_LT, (outs GPRV2I32:$dst),
- (ins GPRV2I32:$lhs, GPRV2I32:$rhs),
- !strconcat(IL_OP_U_LT.Text, " $dst, $lhs, $rhs")
- , []>;
-def ULT_v4i32 : TwoInOneOut<IL_OP_U_LT, (outs GPRV4I32:$dst),
- (ins GPRV4I32:$lhs, GPRV4I32:$rhs),
- !strconcat(IL_OP_U_LT.Text, " $dst, $lhs, $rhs")
- , []>;
-def UNE : TwoInOneOut<IL_OP_I_NE, (outs GPRI32:$dst),
- (ins GPRI32:$lhs, GPRI32:$rhs),
- !strconcat(IL_OP_I_NE.Text, " $dst, $lhs, $rhs")
- , []>;
-def UNE_v2i32 : TwoInOneOut<IL_OP_I_NE, (outs GPRV2I32:$dst),
- (ins GPRV2I32:$lhs, GPRV2I32:$rhs),
- !strconcat(IL_OP_I_NE.Text, " $dst, $lhs, $rhs")
- , []>;
-def UNE_v4i32 : TwoInOneOut<IL_OP_I_NE, (outs GPRV4I32:$dst),
- (ins GPRV4I32:$lhs, GPRV4I32:$rhs),
- !strconcat(IL_OP_I_NE.Text, " $dst, $lhs, $rhs")
- , []>;
-let Predicates = [HasHW64Bit] in {
-def ULLE : TwoInOneOut<IL_OP_U64_GE, (outs GPRI64:$dst),
- (ins GPRI64:$lhs, GPRI64:$rhs),
- !strconcat(IL_OP_U64_GE.Text, " $dst, $rhs, $lhs")
- , []>;
-def ULGT : TwoInOneOut<IL_OP_U64_LT, (outs GPRI64:$dst),
- (ins GPRI64:$lhs, GPRI64:$rhs),
- !strconcat(IL_OP_U64_LT.Text, " $dst, $rhs, $lhs")
- , []>;
-def ULGE : TwoInOneOut<IL_OP_U64_GE, (outs GPRI64:$dst),
- (ins GPRI64:$lhs, GPRI64:$rhs),
- !strconcat(IL_OP_U64_GE.Text, " $dst, $lhs, $rhs")
- , []>;
-def ULLT : TwoInOneOut<IL_OP_U64_LT, (outs GPRI64:$dst),
- (ins GPRI64:$lhs, GPRI64:$rhs),
- !strconcat(IL_OP_U64_LT.Text, " $dst, $lhs, $rhs")
- , []>;
-}
-//===---------------------------------------------------------------------===//
-// Scalar ==> Scalar conversion functions
-//===---------------------------------------------------------------------===//
-// f32 ==> f64
-def FTOD : UnaryOp<IL_OP_F_2_D, fextend, GPRF64, GPRF32>;
-// f64 ==> f32
-def DTOF : UnaryOp<IL_OP_D_2_F, IL_d2f, GPRF32, GPRF64>;
-// f32 ==> i32 unsigned
-def FTOU : UnaryOp<IL_OP_FTOU, fp_to_uint, GPRI32, GPRF32>;
-def FTOU_v2i32 : UnaryOp<IL_OP_FTOU, fp_to_uint, GPRV2I32, GPRV2F32>;
-def FTOU_v4i32 : UnaryOp<IL_OP_FTOU, fp_to_uint, GPRV4I32, GPRV4F32>;
-// i32 ==> f32 unsigned
-def UTOF : UnaryOp<IL_OP_UTOF, uint_to_fp, GPRF32, GPRI32>;
-def UTOF_v2f32 : UnaryOp<IL_OP_UTOF, uint_to_fp, GPRV2F32, GPRV2I32>;
-def UTOF_v4f32 : UnaryOp<IL_OP_UTOF, uint_to_fp, GPRV4F32, GPRV4I32>;
-// Get upper 32 bits of f64
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def DHI : OneInOneOut<IL_OP_MOV, (outs GPRI32:$dst),
- (ins GPRF64:$src),
- !strconcat(IL_OP_MOV.Text, " $dst, $src"),
- [(set GPRI32:$dst, (IL_dcomphi GPRF64:$src))]>;
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def DHI_v2f64 : OneInOneOut<IL_OP_MOV, (outs GPRV2I32:$dst),
- (ins GPRV2F64:$src),
- !strconcat(IL_OP_MOV.Text, " $dst, $src"),
- [(set GPRV2I32:$dst, (IL_dcomphi2 GPRV2F64:$src))]>;
-// Get lower 32 bits of f64
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def DLO : OneInOneOut<IL_OP_MOV, (outs GPRI32:$dst),
- (ins GPRF64:$src),
- !strconcat(IL_OP_MOV.Text, " $dst, $src"),
- [(set GPRI32:$dst, (IL_dcomplo GPRF64:$src))]>;
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def DLO_v2f64 : OneInOneOut<IL_OP_MOV, (outs GPRV2I32:$dst),
- (ins GPRV2F64:$src),
- !strconcat(IL_OP_MOV.Text, " $dst, $src"),
- [(set GPRV2I32:$dst, (IL_dcomplo2 GPRV2F64:$src))]>;
-// Convert two 32 bit integers into a f64
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def DCREATE : TwoInOneOut<IL_OP_I_ADD, (outs GPRF64:$dst),
- (ins GPRI32:$src0, GPRI32:$src1),
- !strconcat(IL_OP_I_ADD.Text, " $dst, $src0, $src1"),
- [(set GPRF64:$dst, (IL_dcreate GPRI32:$src0, GPRI32:$src1))]>;
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def DCREATE_v2f64 : TwoInOneOut<IL_OP_I_ADD, (outs GPRV2F64:$dst),
- (ins GPRV2I32:$src0, GPRV2I32:$src1),
- !strconcat(IL_OP_I_ADD.Text, " $dst, $src0, $src1"),
- [(set GPRV2F64:$dst,
- (IL_dcreate2 GPRV2I32:$src0, GPRV2I32:$src1))]>;
-// Get upper 32 bits of i64
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def LHI : OneInOneOut<IL_OP_MOV, (outs GPRI32:$dst),
- (ins GPRI64:$src),
- !strconcat(IL_OP_MOV.Text, " $dst, $src"),
- [(set GPRI32:$dst, (IL_lcomphi GPRI64:$src))]>;
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def LHI_v2i64 : OneInOneOut<IL_OP_MOV, (outs GPRV2I32:$dst),
- (ins GPRV2I64:$src),
- !strconcat(IL_OP_MOV.Text, " $dst, $src"),
- [(set GPRV2I32:$dst, (IL_lcomphi2 GPRV2I64:$src))]>;
-// Get lower 32 bits of i64
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def LLO : OneInOneOut<IL_OP_MOV, (outs GPRI32:$dst),
- (ins GPRI64:$src),
- !strconcat(IL_OP_MOV.Text, " $dst, $src"),
- [(set GPRI32:$dst, (IL_lcomplo GPRI64:$src))]>;
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def LLO_v2i64 : OneInOneOut<IL_OP_MOV, (outs GPRV2I32:$dst),
- (ins GPRV2I64:$src),
- !strconcat(IL_OP_MOV.Text, " $dst, $src"),
- [(set GPRV2I32:$dst, (IL_lcomplo2 GPRV2I64:$src))]>;
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def HILO_BITOR_v4i16 : TwoInOneOut<IL_OP_I_OR, (outs GPRI32:$dst),
- (ins GPRI32:$src, GPRI32:$src2),
- !strconcat(IL_OP_I_OR.Text, " $dst, $src, $src2"), []>;
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def HILO_BITOR_v2i32 : TwoInOneOut<IL_OP_I_OR, (outs GPRI32:$dst),
- (ins GPRI32:$src, GPRI32:$src2),
- !strconcat(IL_OP_I_OR.Text, " $dst, $src, $src2"), []>;
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def HILO_BITOR_v2i64 : TwoInOneOut<IL_OP_I_OR, (outs GPRI64:$dst),
- (ins GPRI64:$src, GPRI64:$src2),
- !strconcat(IL_OP_I_OR.Text, " $dst, $src, $src2"), []>;
-// Convert two 32 bit integers into a i64
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def LCREATE : TwoInOneOut<IL_OP_I_ADD, (outs GPRI64:$dst),
- (ins GPRI32:$src0, GPRI32:$src1),
- !strconcat(IL_OP_I_ADD.Text, " $dst, $src0, $src1"),
- [(set GPRI64:$dst, (IL_lcreate GPRI32:$src0, GPRI32:$src1))]>;
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-def LCREATE_v2i64 : TwoInOneOut<IL_OP_I_ADD, (outs GPRV2I64:$dst),
- (ins GPRV2I32:$src0, GPRV2I32:$src1),
- !strconcat(IL_OP_I_ADD.Text, " $dst, $src0, $src1"),
- [(set GPRV2I64:$dst,
- (IL_lcreate2 GPRV2I32:$src0, GPRV2I32:$src1))]>;
-//===---------------------------------------------------------------------===//
-// Vector ==> Scalar conversion functions
-//===---------------------------------------------------------------------===//
-
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-defm VEXTRACT : VectorExtract<IL_vextract>;
-
-//===---------------------------------------------------------------------===//
-// Vector ==> Vector conversion functions
-//===---------------------------------------------------------------------===//
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-defm VINSERT : VectorInsert<IL_vinsert>;
-// This opcode has custom swizzle pattern encoded in Swizzle Encoder
-defm VCONCAT : VectorConcat<IL_vconcat>;
-
-//===---------------------------------------------------------------------===//
-// Bit conversion functions
-//===---------------------------------------------------------------------===//
-defm IL_ASCHAR : BitConversion<IL_OP_MOV, GPRI8, IL_bitconv>;
-defm IL_ASSHORT : BitConversion<IL_OP_MOV, GPRI16, IL_bitconv>;
-defm IL_ASINT : BitConversion<IL_OP_MOV, GPRI32, IL_bitconv>;
-defm IL_ASFLOAT : BitConversion<IL_OP_MOV, GPRF32, IL_bitconv>;
-defm IL_ASDOUBLE : BitConversion<IL_OP_MOV, GPRF64, IL_bitconv>;
-defm IL_ASLONG : BitConversion<IL_OP_MOV, GPRI64, IL_bitconv>;
-defm IL_ASV2CHAR : BitConversion<IL_OP_MOV, GPRV2I8, IL_bitconv>;
-defm IL_ASV2SHORT : BitConversion<IL_OP_MOV, GPRV2I16, IL_bitconv>;
-defm IL_ASV2INT : BitConversion<IL_OP_MOV, GPRV2I32, IL_bitconv>;
-defm IL_ASV2FLOAT : BitConversion<IL_OP_MOV, GPRV2F32, IL_bitconv>;
-defm IL_ASV2DOUBLE : BitConversion<IL_OP_MOV, GPRV2F64, IL_bitconv>;
-defm IL_ASV2LONG : BitConversion<IL_OP_MOV, GPRV2I64, IL_bitconv>;
-defm IL_ASV4CHAR : BitConversion<IL_OP_MOV, GPRV4I8, IL_bitconv>;
-defm IL_ASV4SHORT : BitConversion<IL_OP_MOV, GPRV4I16, IL_bitconv>;
-defm IL_ASV4INT : BitConversion<IL_OP_MOV, GPRV4I32, IL_bitconv>;
-defm IL_ASV4FLOAT : BitConversion<IL_OP_MOV, GPRV4F32, IL_bitconv>;
-
let Predicates = [Has32BitPtr] in {
let isCodeGenOnly=1 in {
//===----------------------------------------------------------------------===//
@@ -805,543 +48,8 @@ let Predicates = [Has32BitPtr] in {
defm REGIONSEXTLOAD : LOAD<"!region sext load" , region_sext_load>;
defm REGIONAEXTLOAD : LOAD<"!region aext load" , region_aext_load>;
}
-
-
- //===---------------------------------------------------------------------===//
- // IO Expansion Load/Store Instructions
- //===---------------------------------------------------------------------===//
- let mayLoad = 1 in {
- // This opcode has custom swizzle patterns for some of the arguments.
- def SCRATCHLOAD : TwoInOneOut<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_MOV.Text, " $dst, x$id[$addy]"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def CBLOAD : TwoInOneOut<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_MOV.Text, " $dst, cb$id[$addy]"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def GDSLOAD : TwoInOneOut<IL_OP_GDS_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_GDS_LOAD.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def GDSLOAD_Y : TwoInOneOut<IL_OP_GDS_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_GDS_LOAD.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def GDSLOAD_Z : TwoInOneOut<IL_OP_GDS_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_GDS_LOAD.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def GDSLOAD_W : TwoInOneOut<IL_OP_GDS_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_GDS_LOAD.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSLOADVEC : TwoInOneOut<IL_OP_LDS_LOAD_VEC, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_LDS_LOAD_VEC.Text, "_id($id) $dst, $addy, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSLOADVEC_v2i32 : TwoInOneOut<IL_OP_LDS_LOAD_VEC, (outs GPRV2I32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_LDS_LOAD_VEC.Text, "_id($id) $dst, $addy, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSLOADVEC_v4i32 : TwoInOneOut<IL_OP_LDS_LOAD_VEC, (outs GPRV4I32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_LDS_LOAD_VEC.Text, "_id($id) $dst, $addy, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSLOAD : TwoInOneOut<IL_OP_LDS_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_LDS_LOAD.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSLOAD_i8 : TwoInOneOut<IL_OP_LDS_LOAD_BYTE, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_LDS_LOAD_BYTE.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSLOAD_u8 : TwoInOneOut<IL_OP_LDS_LOAD_UBYTE, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_LDS_LOAD_UBYTE.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSLOAD_i16 : TwoInOneOut<IL_OP_LDS_LOAD_SHORT, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_LDS_LOAD_SHORT.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSLOAD_u16 : TwoInOneOut<IL_OP_LDS_LOAD_USHORT, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_LDS_LOAD_USHORT.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSLOAD_Y : TwoInOneOut<IL_OP_LDS_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_LDS_LOAD.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSLOAD_Z : TwoInOneOut<IL_OP_LDS_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_LDS_LOAD.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSLOAD_W : TwoInOneOut<IL_OP_LDS_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_LDS_LOAD.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENALOAD_i8 : TwoInOneOut<IL_OP_ARENA_UAV_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_ARENA_UAV_LOAD.Text, "_id($id)_size(byte) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENALOAD_i16 : TwoInOneOut<IL_OP_ARENA_UAV_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_ARENA_UAV_LOAD.Text, "_id($id)_size(short) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENALOAD_i32 : TwoInOneOut<IL_OP_ARENA_UAV_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_ARENA_UAV_LOAD.Text, "_id($id)_size(dword) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENALOAD_Y_i32 : TwoInOneOut<IL_OP_ARENA_UAV_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_ARENA_UAV_LOAD.Text, "_id($id)_size(dword) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENALOAD_Z_i32 : TwoInOneOut<IL_OP_ARENA_UAV_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_ARENA_UAV_LOAD.Text, "_id($id)_size(dword) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENALOAD_W_i32 : TwoInOneOut<IL_OP_ARENA_UAV_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_ARENA_UAV_LOAD.Text, "_id($id)_size(dword) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVRAWLOAD_i32 : TwoInOneOut<IL_OP_RAW_UAV_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_RAW_UAV_LOAD.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVRAWLOAD_v2i32 : TwoInOneOut<IL_OP_RAW_UAV_LOAD, (outs GPRV2I32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_RAW_UAV_LOAD.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVRAWLOAD_v4i32 : TwoInOneOut<IL_OP_RAW_UAV_LOAD, (outs GPRV4I32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_RAW_UAV_LOAD.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVRAWLOADCACHED_i32 : TwoInOneOut<IL_OP_RAW_UAV_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_RAW_UAV_LOAD.Text, "_id($id)_cached $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVRAWLOADCACHED_v2i32 : TwoInOneOut<IL_OP_RAW_UAV_LOAD, (outs GPRV2I32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_RAW_UAV_LOAD.Text, "_id($id)_cached $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVRAWLOADCACHED_v4i32 : TwoInOneOut<IL_OP_RAW_UAV_LOAD, (outs GPRV4I32:$dst),
- (ins GPRI32:$addy, i32imm:$id),
- !strconcat(IL_OP_RAW_UAV_LOAD.Text, "_id($id)_cached $dst, $addy"), []>;
- }
- let mayStore = 1 in {
- // This opcode has custom swizzle patterns for some of the arguments.
- def SCRATCHSTORE : TwoInOneOut<IL_OP_MOV, (outs GPRI32:$addy),
- (ins GPRV4I32:$data, i32imm:$id),
- !strconcat(IL_OP_MOV.Text, " x$id[$addy], $data"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def SCRATCHSTORE_X : TwoInOneOut<IL_OP_MOV, (outs GPRI32:$addy),
- (ins GPRI32:$data, i32imm:$id),
- !strconcat(IL_OP_MOV.Text, " x$id[$addy].x___, $data"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def SCRATCHSTORE_Y : TwoInOneOut<IL_OP_MOV, (outs GPRI32:$addy),
- (ins GPRI32:$data, i32imm:$id),
- !strconcat(IL_OP_MOV.Text, " x$id[$addy]._y__, $data"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def SCRATCHSTORE_Z : TwoInOneOut<IL_OP_MOV, (outs GPRI32:$addy),
- (ins GPRI32:$data, i32imm:$id),
- !strconcat(IL_OP_MOV.Text, " x$id[$addy].__z_, $data"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def SCRATCHSTORE_W : TwoInOneOut<IL_OP_MOV, (outs GPRI32:$addy),
- (ins GPRI32:$data, i32imm:$id),
- !strconcat(IL_OP_MOV.Text, " x$id[$addy].___w, $data"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def SCRATCHSTORE_XY : TwoInOneOut<IL_OP_MOV, (outs GPRI32:$addy),
- (ins GPRV2I32:$data, i32imm:$id),
- !strconcat(IL_OP_MOV.Text, " x$id[$addy].xy__, $data"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def SCRATCHSTORE_ZW : TwoInOneOut<IL_OP_MOV, (outs GPRI32:$addy),
- (ins GPRV2I32:$data, i32imm:$id),
- !strconcat(IL_OP_MOV.Text, " x$id[$addy].__zw, $data"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def GDSSTORE : TwoInOneOut<IL_OP_GDS_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i32imm:$id),
- !strconcat(IL_OP_GDS_STORE.Text, "_id($id) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def GDSSTORE_Y : TwoInOneOut<IL_OP_GDS_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i32imm:$id),
- !strconcat(IL_OP_GDS_STORE.Text, "_id($id) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def GDSSTORE_Z : TwoInOneOut<IL_OP_GDS_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i32imm:$id),
- !strconcat(IL_OP_GDS_STORE.Text, "_id($id) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def GDSSTORE_W : TwoInOneOut<IL_OP_GDS_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i32imm:$id),
- !strconcat(IL_OP_GDS_STORE.Text, "_id($id) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSSTOREVEC : ThreeInOneOut<IL_OP_LDS_STORE_VEC, (outs GPRI32:$mem),
- (ins GPRI32:$addy, GPRI32:$src, i32imm:$id),
- !strconcat(IL_OP_LDS_STORE_VEC.Text, "_id($id) $mem, $addy, $src, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSSTOREVEC_v2i32 : ThreeInOneOut<IL_OP_LDS_STORE_VEC, (outs GPRV2I32:$mem),
- (ins GPRI32:$addy, GPRV2I32:$src, i32imm:$id),
- !strconcat(IL_OP_LDS_STORE_VEC.Text, "_id($id) $mem, $addy, $src, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSSTOREVEC_v4i32 : ThreeInOneOut<IL_OP_LDS_STORE_VEC, (outs GPRV4I32:$mem),
- (ins GPRI32:$addy, GPRV4I32:$src, i32imm:$id),
- !strconcat(IL_OP_LDS_STORE_VEC.Text, "_id($id) $mem, $addy, $src, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSSTORE : TwoInOneOut<IL_OP_LDS_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i32imm:$id),
- !strconcat(IL_OP_LDS_STORE.Text, "_id($id) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSSTORE_i8 : TwoInOneOut<IL_OP_LDS_STORE_BYTE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i32imm:$id),
- !strconcat(IL_OP_LDS_STORE_BYTE.Text, "_id($id) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSSTORE_i16 : TwoInOneOut<IL_OP_LDS_STORE_SHORT, (outs GPRI32:$addy),
- (ins GPRI32:$src, i32imm:$id),
- !strconcat(IL_OP_LDS_STORE_SHORT.Text, "_id($id) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSSTORE_Y : TwoInOneOut<IL_OP_LDS_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i32imm:$id),
- !strconcat(IL_OP_LDS_STORE.Text, "_id($id) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSSTORE_Z : TwoInOneOut<IL_OP_LDS_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i32imm:$id),
- !strconcat(IL_OP_LDS_STORE.Text, "_id($id) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSSTORE_W : TwoInOneOut<IL_OP_LDS_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i32imm:$id),
- !strconcat(IL_OP_LDS_STORE.Text, "_id($id) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENASTORE_i8 : TwoInOneOut<IL_OP_ARENA_UAV_STORE, (outs GPRI32:$addy),
- (ins GPRI8:$src, i32imm:$id),
- !strconcat(IL_OP_ARENA_UAV_STORE.Text,
- "_id($id)_size(byte) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENASTORE_i16 : TwoInOneOut<IL_OP_ARENA_UAV_STORE, (outs GPRI32:$addy),
- (ins GPRI16:$src, i32imm:$id),
- !strconcat(IL_OP_ARENA_UAV_STORE.Text,
- "_id($id)_size(short) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENASTORE_i32 : TwoInOneOut<IL_OP_ARENA_UAV_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i32imm:$id),
- !strconcat(IL_OP_ARENA_UAV_STORE.Text,
- "_id($id)_size(dword) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENASTORE_Y_i32 : TwoInOneOut<IL_OP_ARENA_UAV_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i32imm:$id),
- !strconcat(IL_OP_ARENA_UAV_STORE.Text,
- "_id($id)_size(dword) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENASTORE_Z_i32 : TwoInOneOut<IL_OP_ARENA_UAV_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i32imm:$id),
- !strconcat(IL_OP_ARENA_UAV_STORE.Text,
- "_id($id)_size(dword) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENASTORE_W_i32 : TwoInOneOut<IL_OP_ARENA_UAV_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i32imm:$id),
- !strconcat(IL_OP_ARENA_UAV_STORE.Text,
- "_id($id)_size(dword) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVRAWSTORE_i32 : TwoInOneOut<IL_OP_RAW_UAV_STORE, (outs GPRI32:$mem),
- (ins GPRI32:$addy, GPRI32:$src, i32imm:$id),
- !strconcat(IL_OP_RAW_UAV_STORE.Text, "_id($id) $mem, $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVRAWSTORE_v2i32 : TwoInOneOut<IL_OP_RAW_UAV_STORE, (outs GPRV2I32:$mem),
- (ins GPRI32:$addy, GPRV2I32:$src, i32imm:$id),
- !strconcat(IL_OP_RAW_UAV_STORE.Text, "_id($id) $mem, $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVRAWSTORE_v4i32 : TwoInOneOut<IL_OP_RAW_UAV_STORE, (outs GPRV4I32:$mem),
- (ins GPRI32:$addy, GPRV4I32:$src, i32imm:$id),
- !strconcat(IL_OP_RAW_UAV_STORE.Text, "_id($id) $mem, $addy, $src"), []>;
- }
}
-let Predicates = [Has64BitPtr] in {
- let isCodeGenOnly=1 in {
- //===----------------------------------------------------------------------===//
- // Store Memory Operations
- //===----------------------------------------------------------------------===//
- defm GLOBALTRUNCSTORE64 : GTRUNCSTORE64<"!global trunc store">;
- defm LOCALTRUNCSTORE64 : LTRUNCSTORE64<"!local trunc store">;
- defm LOCALSTORE64 : STORE64<"!local store" , local_store>;
- defm PRIVATETRUNCSTORE64 : PTRUNCSTORE64<"!private trunc store">;
- defm PRIVATESTORE64 : STORE64<"!private store" , private_store>;
- defm REGIONTRUNCSTORE64 : RTRUNCSTORE64<"!region trunc store">;
- defm REGIONSTORE64 : STORE64<"!region hw store" , region_store>;
-
- //===---------------------------------------------------------------------===//
- // Load Memory Operations
- //===---------------------------------------------------------------------===//
- defm GLOBALZEXTLOAD64 : LOAD64<"!global zext load" , global_zext_load>;
- defm GLOBALSEXTLOAD64 : LOAD64<"!global sext load" , global_sext_load>;
- defm GLOBALAEXTLOAD64 : LOAD64<"!global aext load" , global_aext_load>;
- defm PRIVATELOAD64 : LOAD64<"!private load" , private_load>;
- defm PRIVATEZEXTLOAD64 : LOAD64<"!private zext load" , private_zext_load>;
- defm PRIVATESEXTLOAD64 : LOAD64<"!private sext load" , private_sext_load>;
- defm PRIVATEAEXTLOAD64 : LOAD64<"!private aext load" , private_aext_load>;
- defm CPOOLLOAD64 : LOAD64<"!constant pool load" , cp_load>;
- defm CPOOLZEXTLOAD64 : LOAD64<"!constant pool zext load", cp_zext_load>;
- defm CPOOLSEXTLOAD64 : LOAD64<"!constant pool sext load", cp_sext_load>;
- defm CPOOLAEXTLOAD64 : LOAD64<"!constant aext pool load", cp_aext_load>;
- defm CONSTANTLOAD64 : LOAD64<"!constant load" , constant_load>;
- defm CONSTANTZEXTLOAD64 : LOAD64<"!constant zext load" , constant_zext_load>;
- defm CONSTANTSEXTLOAD64 : LOAD64<"!constant sext load" , constant_sext_load>;
- defm CONSTANTAEXTLOAD64 : LOAD64<"!constant aext load" , constant_aext_load>;
- defm LOCALLOAD64 : LOAD64<"!local load" , local_load>;
- defm LOCALZEXTLOAD64 : LOAD64<"!local zext load" , local_zext_load>;
- defm LOCALSEXTLOAD64 : LOAD64<"!local sext load" , local_sext_load>;
- defm LOCALAEXTLOAD64 : LOAD64<"!local aext load" , local_aext_load>;
- defm REGIONLOAD64 : LOAD64<"!region load" , region_load>;
- defm REGIONZEXTLOAD64 : LOAD64<"!region zext load" , region_zext_load>;
- defm REGIONSEXTLOAD64 : LOAD64<"!region sext load" , region_sext_load>;
- defm REGIONAEXTLOAD64 : LOAD64<"!region aext load" , region_aext_load>;
- }
-
-
- //===---------------------------------------------------------------------===//
- // IO Expansion Load/Store Instructions
- //===---------------------------------------------------------------------===//
- let mayLoad = 1 in {
- // This opcode has custom swizzle patterns for some of the arguments.
- def SCRATCHLOAD64 : TwoInOneOut<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_MOV.Text, " $dst, x$id[$addy]"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def CBLOAD64 : TwoInOneOut<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_MOV.Text, " $dst, cb$id[$addy]"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def GDSLOAD64 : TwoInOneOut<IL_OP_GDS_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_GDS_LOAD.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def GDSLOAD64_Y : TwoInOneOut<IL_OP_GDS_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_GDS_LOAD.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def GDSLOAD64_Z : TwoInOneOut<IL_OP_GDS_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_GDS_LOAD.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def GDSLOAD64_W : TwoInOneOut<IL_OP_GDS_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_GDS_LOAD.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSLOADVEC64 : TwoInOneOut<IL_OP_LDS_LOAD_VEC, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_LDS_LOAD_VEC.Text, "_id($id) $dst, $addy, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSLOADVEC64_v2i32 : TwoInOneOut<IL_OP_LDS_LOAD_VEC, (outs GPRV2I32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_LDS_LOAD_VEC.Text, "_id($id) $dst, $addy, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSLOADVEC64_v4i32 : TwoInOneOut<IL_OP_LDS_LOAD_VEC, (outs GPRV4I32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_LDS_LOAD_VEC.Text, "_id($id) $dst, $addy, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSLOAD64 : TwoInOneOut<IL_OP_LDS_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_LDS_LOAD.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSLOAD64_i8 : TwoInOneOut<IL_OP_LDS_LOAD_BYTE, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_LDS_LOAD_BYTE.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSLOAD64_u8 : TwoInOneOut<IL_OP_LDS_LOAD_UBYTE, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_LDS_LOAD_UBYTE.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSLOAD64_i16 : TwoInOneOut<IL_OP_LDS_LOAD_SHORT, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_LDS_LOAD_SHORT.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSLOAD64_u16 : TwoInOneOut<IL_OP_LDS_LOAD_USHORT, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_LDS_LOAD_USHORT.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSLOAD64_Y : TwoInOneOut<IL_OP_LDS_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_LDS_LOAD.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSLOAD64_Z : TwoInOneOut<IL_OP_LDS_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_LDS_LOAD.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSLOAD64_W : TwoInOneOut<IL_OP_LDS_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_LDS_LOAD.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENALOAD64_i8 : TwoInOneOut<IL_OP_ARENA_UAV_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_ARENA_UAV_LOAD.Text, "_id($id)_size(byte) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENALOAD64_i16 : TwoInOneOut<IL_OP_ARENA_UAV_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_ARENA_UAV_LOAD.Text, "_id($id)_size(short) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENALOAD64_i32 : TwoInOneOut<IL_OP_ARENA_UAV_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_ARENA_UAV_LOAD.Text, "_id($id)_size(dword) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENALOAD64_Y_i32 : TwoInOneOut<IL_OP_ARENA_UAV_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_ARENA_UAV_LOAD.Text, "_id($id)_size(dword) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENALOAD64_Z_i32 : TwoInOneOut<IL_OP_ARENA_UAV_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_ARENA_UAV_LOAD.Text, "_id($id)_size(dword) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENALOAD64_W_i32 : TwoInOneOut<IL_OP_ARENA_UAV_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_ARENA_UAV_LOAD.Text, "_id($id)_size(dword) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVRAWLOAD64_i32 : TwoInOneOut<IL_OP_RAW_UAV_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_RAW_UAV_LOAD.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVRAWLOAD64_v2i32 : TwoInOneOut<IL_OP_RAW_UAV_LOAD, (outs GPRV2I32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_RAW_UAV_LOAD.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVRAWLOAD64_v4i32 : TwoInOneOut<IL_OP_RAW_UAV_LOAD, (outs GPRV4I32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_RAW_UAV_LOAD.Text, "_id($id) $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVRAWLOADCACHED64_i32 : TwoInOneOut<IL_OP_RAW_UAV_LOAD, (outs GPRI32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_RAW_UAV_LOAD.Text, "_id($id)_cached $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVRAWLOADCACHED64_v2i32 : TwoInOneOut<IL_OP_RAW_UAV_LOAD, (outs GPRV2I32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_RAW_UAV_LOAD.Text, "_id($id)_cached $dst, $addy"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVRAWLOADCACHED64_v4i32 : TwoInOneOut<IL_OP_RAW_UAV_LOAD, (outs GPRV4I32:$dst),
- (ins GPRI32:$addy, i64imm:$id),
- !strconcat(IL_OP_RAW_UAV_LOAD.Text, "_id($id)_cached $dst, $addy"), []>;
- }
- let mayStore = 1 in {
- // This opcode has custom swizzle patterns for some of the arguments.
- def SCRATCHSTORE64 : TwoInOneOut<IL_OP_MOV, (outs GPRI32:$addy),
- (ins GPRV4I32:$data, i64imm:$id),
- !strconcat(IL_OP_MOV.Text, " x$id[$addy], $data"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def SCRATCHSTORE64_X : TwoInOneOut<IL_OP_MOV, (outs GPRI32:$addy),
- (ins GPRI32:$data, i64imm:$id),
- !strconcat(IL_OP_MOV.Text, " x$id[$addy].x___, $data"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def SCRATCHSTORE64_Y : TwoInOneOut<IL_OP_MOV, (outs GPRI32:$addy),
- (ins GPRI32:$data, i64imm:$id),
- !strconcat(IL_OP_MOV.Text, " x$id[$addy]._y__, $data"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def SCRATCHSTORE64_Z : TwoInOneOut<IL_OP_MOV, (outs GPRI32:$addy),
- (ins GPRI32:$data, i64imm:$id),
- !strconcat(IL_OP_MOV.Text, " x$id[$addy].__z_, $data"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def SCRATCHSTORE64_W : TwoInOneOut<IL_OP_MOV, (outs GPRI32:$addy),
- (ins GPRI32:$data, i64imm:$id),
- !strconcat(IL_OP_MOV.Text, " x$id[$addy].___w, $data"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def SCRATCHSTORE64_XY : TwoInOneOut<IL_OP_MOV, (outs GPRI32:$addy),
- (ins GPRV2I32:$data, i64imm:$id),
- !strconcat(IL_OP_MOV.Text, " x$id[$addy].xy__, $data"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def SCRATCHSTORE64_ZW : TwoInOneOut<IL_OP_MOV, (outs GPRI32:$addy),
- (ins GPRV2I32:$data, i64imm:$id),
- !strconcat(IL_OP_MOV.Text, " x$id[$addy].__zw, $data"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def GDSSTORE64 : TwoInOneOut<IL_OP_GDS_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i64imm:$id),
- !strconcat(IL_OP_GDS_STORE.Text, "_id($id) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def GDSSTORE64_Y : TwoInOneOut<IL_OP_GDS_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i64imm:$id),
- !strconcat(IL_OP_GDS_STORE.Text, "_id($id) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def GDSSTORE64_Z : TwoInOneOut<IL_OP_GDS_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i64imm:$id),
- !strconcat(IL_OP_GDS_STORE.Text, "_id($id) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def GDSSTORE64_W : TwoInOneOut<IL_OP_GDS_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i64imm:$id),
- !strconcat(IL_OP_GDS_STORE.Text, "_id($id) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSSTOREVEC64 : ThreeInOneOut<IL_OP_LDS_STORE_VEC, (outs GPRI32:$mem),
- (ins GPRI32:$addy, GPRI32:$src, i64imm:$id),
- !strconcat(IL_OP_LDS_STORE_VEC.Text, "_id($id) $mem, $addy, $src, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSSTOREVEC64_v2i32 : ThreeInOneOut<IL_OP_LDS_STORE_VEC, (outs GPRV2I32:$mem),
- (ins GPRI32:$addy, GPRV2I32:$src, i64imm:$id),
- !strconcat(IL_OP_LDS_STORE_VEC.Text, "_id($id) $mem, $addy, $src, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSSTOREVEC64_v4i32 : ThreeInOneOut<IL_OP_LDS_STORE_VEC, (outs GPRV4I32:$mem),
- (ins GPRI32:$addy, GPRV4I32:$src, i64imm:$id),
- !strconcat(IL_OP_LDS_STORE_VEC.Text, "_id($id) $mem, $addy, $src, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSSTORE64 : TwoInOneOut<IL_OP_LDS_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i64imm:$id),
- !strconcat(IL_OP_LDS_STORE.Text, "_id($id) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSSTORE64_i8 : TwoInOneOut<IL_OP_LDS_STORE_BYTE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i64imm:$id),
- !strconcat(IL_OP_LDS_STORE_BYTE.Text, "_id($id) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSSTORE64_i16 : TwoInOneOut<IL_OP_LDS_STORE_SHORT, (outs GPRI32:$addy),
- (ins GPRI32:$src, i64imm:$id),
- !strconcat(IL_OP_LDS_STORE_SHORT.Text, "_id($id) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSSTORE64_Y : TwoInOneOut<IL_OP_LDS_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i64imm:$id),
- !strconcat(IL_OP_LDS_STORE.Text, "_id($id) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSSTORE64_Z : TwoInOneOut<IL_OP_LDS_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i64imm:$id),
- !strconcat(IL_OP_LDS_STORE.Text, "_id($id) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def LDSSTORE64_W : TwoInOneOut<IL_OP_LDS_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i64imm:$id),
- !strconcat(IL_OP_LDS_STORE.Text, "_id($id) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENASTORE64_i8 : TwoInOneOut<IL_OP_ARENA_UAV_STORE, (outs GPRI32:$addy),
- (ins GPRI8:$src, i64imm:$id),
- !strconcat(IL_OP_ARENA_UAV_STORE.Text,
- "_id($id)_size(byte) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENASTORE64_i16 : TwoInOneOut<IL_OP_ARENA_UAV_STORE, (outs GPRI32:$addy),
- (ins GPRI16:$src, i64imm:$id),
- !strconcat(IL_OP_ARENA_UAV_STORE.Text,
- "_id($id)_size(short) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENASTORE64_i32 : TwoInOneOut<IL_OP_ARENA_UAV_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i64imm:$id),
- !strconcat(IL_OP_ARENA_UAV_STORE.Text,
- "_id($id)_size(dword) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENASTORE64_Y_i32 : TwoInOneOut<IL_OP_ARENA_UAV_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i64imm:$id),
- !strconcat(IL_OP_ARENA_UAV_STORE.Text,
- "_id($id)_size(dword) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENASTORE64_Z_i32 : TwoInOneOut<IL_OP_ARENA_UAV_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i64imm:$id),
- !strconcat(IL_OP_ARENA_UAV_STORE.Text,
- "_id($id)_size(dword) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVARENASTORE64_W_i32 : TwoInOneOut<IL_OP_ARENA_UAV_STORE, (outs GPRI32:$addy),
- (ins GPRI32:$src, i64imm:$id),
- !strconcat(IL_OP_ARENA_UAV_STORE.Text,
- "_id($id)_size(dword) $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVRAWSTORE64_i32 : TwoInOneOut<IL_OP_RAW_UAV_STORE, (outs GPRI32:$mem),
- (ins GPRI32:$addy, GPRI32:$src, i64imm:$id),
- !strconcat(IL_OP_RAW_UAV_STORE.Text, "_id($id) $mem, $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVRAWSTORE64_v2i32 : TwoInOneOut<IL_OP_RAW_UAV_STORE, (outs GPRV2I32:$mem),
- (ins GPRI32:$addy, GPRV2I32:$src, i64imm:$id),
- !strconcat(IL_OP_RAW_UAV_STORE.Text, "_id($id) $mem, $addy, $src"), []>;
- // This opcode has custom swizzle patterns for some of the arguments.
- def UAVRAWSTORE64_v4i32 : TwoInOneOut<IL_OP_RAW_UAV_STORE, (outs GPRV4I32:$mem),
- (ins GPRI32:$addy, GPRV4I32:$src, i64imm:$id),
- !strconcat(IL_OP_RAW_UAV_STORE.Text, "_id($id) $mem, $addy, $src"), []>;
- }
-}
//===---------------------------------------------------------------------===//
// Custom Inserter for Branches and returns, this eventually will be a
// seperate pass
@@ -1359,51 +67,17 @@ let isTerminator = 1, isReturn = 1, isBarrier = 1, hasCtrlDep = 1 in {
def RETURN : ILFormat<IL_OP_RET,(outs), (ins variable_ops),
IL_OP_RET.Text, [(IL_retflag)]>;
}
-//===---------------------------------------------------------------------===//
-// Lower and raise the stack x amount
-//===---------------------------------------------------------------------===//
-def ADJCALLSTACKDOWN : ILFormat<IL_PSEUDO_INST, (outs), (ins i32imm:$amt),
- "; begin of call sequence $amt",
- [(IL_callseq_start timm:$amt)]>;
-def ADJCALLSTACKUP : ILFormat<IL_PSEUDO_INST, (outs), (ins i32imm:$amt1,
- i32imm:$amt2),
- "; end of call sequence $amt1 $amt2",
- [(IL_callseq_end timm:$amt1, timm:$amt2)]>;
//===---------------------------------------------------------------------===//
// Handle a function call
//===---------------------------------------------------------------------===//
let isCall = 1,
Defs = [
- R110, R111,
- R112, R113, R114, R115, R116, R117, R118, R119, R120, R121, R122, R123, R124,
- R125, R126, R127,
- R128, R129, R130, R131, R132, R133, R134, R135, R136, R137, R138, R139, R140,
- R141, R142, R143,
- R144, R145, R146, R147, R148, R149, R150, R151, R152, R153, R154, R155, R156,
- R157, R158, R159,
- R160, R161, R162, R163, R164, R165, R166, R167, R168, R169, R170, R171, R172,
- R173, R174, R175,
- R176, R177, R178, R179, R180, R181, R182, R183, R184, R185, R186, R187, R188,
- R189, R190, R191,
- R192, R193, R194, R195, R196, R197, R198, R199, R200, R201, R202, R203, R204,
- R205, R206, R207,
- R208, R209, R210, R211, R212, R213, R214, R215, R216, R217, R218, R219, R220,
- R221, R222, R223,
- R224, R225, R226, R227, R228, R229, R230, R231, R232, R233, R234, R235, R236,
- R237, R238, R239,
- R240, R241, R242, R243, R244, R245, R246, R247, R248, R249, R250, R251, R252,
- R253, R254, R255
+ R1, R2, R3, R4, R5, R6, R7, R8, R9, R10
]
,
Uses = [
- R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15,
- R16, R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31,
- R32, R33, R34, R35, R36, R37, R38, R39, R40, R41, R42, R43, R44, R45, R46, R47,
- R48, R49, R50, R51, R52, R53, R54, R55, R56, R57, R58, R59, R60, R61, R62, R63,
- R64, R65, R66, R67, R68, R69, R70, R71, R72, R73, R74, R75, R76, R77, R78, R79,
- R80, R81, R82, R83, R84, R85, R86, R87, R88, R89, R90, R91, R92, R93, R94, R95,
- R96, R97, R98, R99, R100, R101, R102, R103, R104, R105, R106, R107, R108, R109
+ R11, R12, R13, R14, R15, R16, R17, R18, R19, R20
]
in {
def CALL : UnaryOpNoRet<IL_OP_CALL, (outs),
@@ -1467,889 +141,3 @@ let isTerminator = 1, isBarrier = 1, hasCtrlDep = 1 in {
IL_OP_NOP.Text, [(trap)]>;
}
-//===---------------------------------------------------------------------===//
-//----------------- Work Item Functions - OpenCL 6.11.1 ---------------------//
-//===---------------------------------------------------------------------===//
-let isCall = 1, isAsCheapAsAMove = 1 in {
- def GET_WORK_DIM : ILFormat<IL_OP_MOV, (outs GPRI32:$dst), (ins),
- !strconcat(IL_OP_MOV.Text, " $dst, cb0[0].w"),
- [(set GPRI32:$dst, (int_AMDIL_get_work_dim))]>;
-
- def GET_GLOBAL_ID : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins), !strconcat(IL_OP_MOV.Text, " $dst, r1021.xyz0"),
- [(set GPRV4I32:$dst, (int_AMDIL_get_global_id))]>;
-
- def GET_LOCAL_ID : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins), !strconcat(IL_OP_MOV.Text, " $dst, r1022.xyz0"),
- [(set GPRV4I32:$dst, (int_AMDIL_get_local_id))]>;
-
- def GET_GROUP_ID : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins), !strconcat(IL_OP_MOV.Text, " $dst, r1023.xyz0"),
- [(set GPRV4I32:$dst, (int_AMDIL_get_group_id))]>;
-
- def GET_GLOBAL_SIZE : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins), !strconcat(IL_OP_MOV.Text, " $dst, cb0[0].xyz0"),
- [(set GPRV4I32:$dst, (int_AMDIL_get_global_size))]>;
-
- def GET_LOCAL_SIZE : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins), !strconcat(IL_OP_MOV.Text, " $dst, cb0[1].xyz0"),
- [(set GPRV4I32:$dst, (int_AMDIL_get_local_size))]>;
-
- def GET_NUM_GROUPS : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins), !strconcat(IL_OP_MOV.Text, " $dst, cb0[2].xyz0"),
- [(set GPRV4I32:$dst, (int_AMDIL_get_num_groups))]>;
-
- def GET_GLOBAL_OFFSET : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins), !strconcat(IL_OP_MOV.Text, " $dst, cb0[9].xyz0"),
- [(set GPRV4I32:$dst, (int_AMDIL_get_global_offset))]>;
-
- let Predicates = [Has64BitPtr] in {
- def GET_PRINTF_OFFSET_i64: ILFormat<IL_OP_MOV, (outs GPRI32:$dst),
- (ins), !strconcat(IL_OP_MOV.Text, " $dst, cb0[8].zw"),
- [(set GPRI32:$dst, (int_AMDIL_get_printf_offset))]>;
- def GET_PRINTF_SIZE_i64 : ILFormat<IL_OP_MOV, (outs GPRI32:$dst),
- (ins), !strconcat(IL_OP_MOV.Text, " $dst, cb0[9].x0"),
- [(set GPRI32:$dst, (int_AMDIL_get_printf_size))]>;
- }
- let Predicates = [Has32BitPtr] in {
- def GET_PRINTF_OFFSET_i32 : ILFormat<IL_OP_MOV, (outs GPRI32:$dst),
- (ins), !strconcat(IL_OP_MOV.Text, " $dst, cb0[8].y0"),
- [(set GPRI32:$dst, (int_AMDIL_get_printf_offset))]>;
- def GET_PRINTF_SIZE_i32 : ILFormat<IL_OP_MOV, (outs GPRI32:$dst),
- (ins), !strconcat(IL_OP_MOV.Text, " $dst, cb0[8].z0"),
- [(set GPRI32:$dst, (int_AMDIL_get_printf_size))]>;
- }
-}
-//===---------------------------------------------------------------------===//
-//------------- Synchronization Functions - OpenCL 6.11.9 -------------------//
-//===---------------------------------------------------------------------===//
-let isCall=1 in {
-
- def FENCE : BinaryOpNoRet<IL_OP_FENCE, (outs), (ins GPRI32:$flag),
- "fence_lds_memory_gds",
- [(int_AMDIL_fence GPRI32:$flag)]>;
-
- def FENCE_LOCAL : BinaryOpNoRet<IL_OP_FENCE, (outs), (ins GPRI32:$flag),
- "fence_lds",
- [(int_AMDIL_fence_local GPRI32:$flag)]>;
-
- def FENCE_GLOBAL : BinaryOpNoRet<IL_OP_FENCE, (outs), (ins GPRI32:$flag),
- "fence_memory",
- [(int_AMDIL_fence_global GPRI32:$flag)]>;
-
- def FENCE_REGION : BinaryOpNoRet<IL_OP_FENCE, (outs), (ins GPRI32:$flag),
- "fence_gds",
- [(int_AMDIL_fence_region GPRI32:$flag)]>;
-
- def FENCE_READ_ONLY : BinaryOpNoRet<IL_OP_FENCE_READ_ONLY, (outs),
- (ins GPRI32:$flag),
- "fence_lds_gds_memory_mem_read_only",
- [(int_AMDIL_fence_read_only GPRI32:$flag)]>;
-
- def FENCE_READ_ONLY_LOCAL : BinaryOpNoRet<IL_OP_FENCE_READ_ONLY, (outs),
- (ins GPRI32:$flag),
- "fence_lds_mem_read_only",
- [(int_AMDIL_fence_read_only_local GPRI32:$flag)]>;
-
- def FENCE_READ_ONLY_GLOBAL : BinaryOpNoRet<IL_OP_FENCE_READ_ONLY, (outs),
- (ins GPRI32:$flag),
- "fence_mem_read_only",
- [(int_AMDIL_fence_read_only_global GPRI32:$flag)]>;
-
- def FENCE_READ_ONLY_REGION : BinaryOpNoRet<IL_OP_FENCE_READ_ONLY, (outs),
- (ins GPRI32:$flag),
- "fence_gds_mem_read_only",
- [(int_AMDIL_fence_read_only_region GPRI32:$flag)]>;
-
- def FENCE_WRITE_ONLY : BinaryOpNoRet<IL_OP_FENCE_WRITE_ONLY, (outs),
- (ins GPRI32:$flag),
- "fence_lds_gds_memory_mem_write_only",
- [(int_AMDIL_fence_write_only GPRI32:$flag)]>;
-
- def FENCE_WRITE_ONLY_LOCAL : BinaryOpNoRet<IL_OP_FENCE_WRITE_ONLY, (outs),
- (ins GPRI32:$flag),
- "fence_lds_mem_write_only",
- [(int_AMDIL_fence_write_only_local GPRI32:$flag)]>;
-
- def FENCE_WRITE_ONLY_GLOBAL : BinaryOpNoRet<IL_OP_FENCE_WRITE_ONLY, (outs),
- (ins GPRI32:$flag),
- "fence_mem_write_only",
- [(int_AMDIL_fence_write_only_global GPRI32:$flag)]>;
-
- def FENCE_WRITE_ONLY_REGION : BinaryOpNoRet<IL_OP_FENCE_WRITE_ONLY, (outs),
- (ins GPRI32:$flag),
- "fence_gds_mem_write_only",
- [(int_AMDIL_fence_write_only_region GPRI32:$flag)]>;
-}
-let isReturn = 1 in {
- def EARLY_EXIT : UnaryOpNoRet<IL_OP_RET_LOGICALNZ, (outs),
- (ins GPRI32:$flag),
- !strconcat(IL_OP_RET_LOGICALNZ.Text, " $flag"),
- [(int_AMDIL_early_exit GPRI32:$flag)]>;
-}
-def MEDIA_UNPACK_0 : OneInOneOut<IL_OP_UNPACK_0, (outs GPRV4F32:$dst),
- (ins GPRV4I32:$src),
- !strconcat(IL_OP_UNPACK_0.Text, " $dst, $src"),
- [(set GPRV4F32:$dst,
- (v4f32 (int_AMDIL_media_unpack_byte_0 GPRV4I32:$src)))]>;
-def MEDIA_UNPACK_1 : OneInOneOut<IL_OP_UNPACK_1, (outs GPRV4F32:$dst),
- (ins GPRV4I32:$src),
- !strconcat(IL_OP_UNPACK_1.Text, " $dst, $src"),
- [(set GPRV4F32:$dst,
- (v4f32 (int_AMDIL_media_unpack_byte_1 GPRV4I32:$src)))]>;
-def MEDIA_UNPACK_2 : OneInOneOut<IL_OP_UNPACK_2, (outs GPRV4F32:$dst),
- (ins GPRV4I32:$src),
- !strconcat(IL_OP_UNPACK_2.Text, " $dst, $src"),
- [(set GPRV4F32:$dst,
- (v4f32 (int_AMDIL_media_unpack_byte_2 GPRV4I32:$src)))]>;
-def MEDIA_UNPACK_3 : OneInOneOut<IL_OP_UNPACK_3, (outs GPRV4F32:$dst),
- (ins GPRV4I32:$src),
- !strconcat(IL_OP_UNPACK_3.Text, " $dst, $src"),
- [(set GPRV4F32:$dst,
- (v4f32 (int_AMDIL_media_unpack_byte_3 GPRV4I32:$src)))]>;
-let Predicates = [Has32BitPtr] in {
-// All of the image functions
-def IMAGE1D_READ : ILFormat<IL_OP_SAMPLE, (outs GPRV4I32:$dst),
- (ins MEMI32:$ptr, GPRI32:$sampler, GPRV4F32:$addy),
- !strconcat(IL_OP_SAMPLE.Text,
- "_resource($ptr)_sampler($sampler)_coordtype(normalized) $dst, $addy"),
- [(set GPRV4I32:$dst,
- (int_AMDIL_image1d_read_norm ADDR:$ptr, GPRI32:$sampler, GPRV4F32:$addy))]>;
-def IMAGE1DA_READ : ILFormat<IL_OP_SAMPLE, (outs GPRV4I32:$dst),
- (ins MEMI32:$ptr, GPRI32:$sampler, GPRV4F32:$addy),
- !strconcat(IL_OP_SAMPLE.Text,
- "_resource($ptr)_sampler($sampler)_coordtype(normalized) $dst, $addy"),
- [(set GPRV4I32:$dst,
- (int_AMDIL_image1d_array_read_norm ADDR:$ptr, GPRI32:$sampler, GPRV4F32:$addy))]>;
-def IMAGE2D_READ : ILFormat<IL_OP_SAMPLE, (outs GPRV4I32:$dst),
- (ins MEMI32:$ptr, GPRI32:$sampler, GPRV4F32:$addy),
- !strconcat(IL_OP_SAMPLE.Text,
- "_resource($ptr)_sampler($sampler)_coordtype(normalized) $dst, $addy"),
- [(set GPRV4I32:$dst,
- (int_AMDIL_image2d_read_norm ADDR:$ptr, GPRI32:$sampler, GPRV4F32:$addy))]>;
-def IMAGE2DA_READ : ILFormat<IL_OP_SAMPLE, (outs GPRV4I32:$dst),
- (ins MEMI32:$ptr, GPRI32:$sampler, GPRV4F32:$addy),
- !strconcat(IL_OP_SAMPLE.Text,
- "_resource($ptr)_sampler($sampler)_coordtype(normalized) $dst, $addy"),
- [(set GPRV4I32:$dst,
- (int_AMDIL_image2d_array_read_norm ADDR:$ptr, GPRI32:$sampler, GPRV4F32:$addy))]>;
-def IMAGE3D_READ : ILFormat<IL_OP_SAMPLE, (outs GPRV4I32:$dst),
- (ins MEMI32:$ptr, GPRI32:$sampler, GPRV4F32:$addy),
- !strconcat(IL_OP_SAMPLE.Text,
- "_resource($ptr)_sampler($sampler)_coordtype(normalized) $dst, $addy"),
- [(set GPRV4I32:$dst,
- (int_AMDIL_image3d_read_norm ADDR:$ptr, GPRI32:$sampler, GPRV4F32:$addy))]>;
-def IMAGE1D_READ_UNNORM : ILFormat<IL_OP_SAMPLE, (outs GPRV4I32:$dst),
- (ins MEMI32:$ptr, GPRI32:$sampler, GPRV4F32:$addy),
- !strconcat(IL_OP_SAMPLE.Text,
- "_resource($ptr)_sampler($sampler)_coordtype(unnormalized) $dst, $addy"),
- [(set GPRV4I32:$dst,
- (int_AMDIL_image1d_read_unnorm ADDR:$ptr, GPRI32:$sampler, GPRV4F32:$addy))]>;
-def IMAGE1DA_READ_UNNORM : ILFormat<IL_OP_SAMPLE, (outs GPRV4I32:$dst),
- (ins MEMI32:$ptr, GPRI32:$sampler, GPRV4F32:$addy),
- !strconcat(IL_OP_SAMPLE.Text,
- "_resource($ptr)_sampler($sampler)_coordtype(unnormalized) $dst, $addy"),
- [(set GPRV4I32:$dst,
- (int_AMDIL_image1d_array_read_unnorm ADDR:$ptr, GPRI32:$sampler, GPRV4F32:$addy))]>;
-def IMAGE2D_READ_UNNORM : ILFormat<IL_OP_SAMPLE, (outs GPRV4I32:$dst),
- (ins MEMI32:$ptr, GPRI32:$sampler, GPRV4F32:$addy),
- !strconcat(IL_OP_SAMPLE.Text,
- "_resource($ptr)_sampler($sampler)_coordtype(unnormalized) $dst, $addy"),
- [(set GPRV4I32:$dst,
- (int_AMDIL_image2d_read_unnorm ADDR:$ptr, GPRI32:$sampler, GPRV4F32:$addy))]>;
-def IMAGE2DA_READ_UNNORM : ILFormat<IL_OP_SAMPLE, (outs GPRV4I32:$dst),
- (ins MEMI32:$ptr, GPRI32:$sampler, GPRV4F32:$addy),
- !strconcat(IL_OP_SAMPLE.Text,
- "_resource($ptr)_sampler($sampler)_coordtype(unnormalized) $dst, $addy"),
- [(set GPRV4I32:$dst,
- (int_AMDIL_image2d_array_read_unnorm ADDR:$ptr, GPRI32:$sampler, GPRV4F32:$addy))]>;
-def IMAGE3D_READ_UNNORM : ILFormat<IL_OP_SAMPLE, (outs GPRV4I32:$dst),
- (ins MEMI32:$ptr, GPRI32:$sampler, GPRV4F32:$addy),
- !strconcat(IL_OP_SAMPLE.Text,
- "_resource($ptr)_sampler($sampler)_coordtype(unnormalized) $dst, $addy"),
- [(set GPRV4I32:$dst,
- (int_AMDIL_image3d_read_unnorm ADDR:$ptr, GPRI32:$sampler, GPRV4F32:$addy))]>;
-def IMAGE1D_INFO0 : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins MEMI32:$ptr),
- !strconcat(IL_OP_MOV.Text, " $dst, $ptr"),
- [(set GPRV4I32:$dst, (int_AMDIL_image1d_info0 ADDR:$ptr))]>;
-def IMAGE1D_INFO1 : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins MEMI32:$ptr),
- !strconcat(IL_OP_MOV.Text, " $dst, $ptr"),
- [(set GPRV4I32:$dst, (int_AMDIL_image1d_info1 ADDR:$ptr))]>;
-def IMAGE1DA_INFO0 : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins MEMI32:$ptr),
- !strconcat(IL_OP_MOV.Text, " $dst, $ptr"),
- [(set GPRV4I32:$dst, (int_AMDIL_image1d_array_info0 ADDR:$ptr))]>;
-def IMAGE1DA_INFO1 : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins MEMI32:$ptr),
- !strconcat(IL_OP_MOV.Text, " $dst, $ptr"),
- [(set GPRV4I32:$dst, (int_AMDIL_image1d_array_info1 ADDR:$ptr))]>;
-def IMAGE2D_INFO0 : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins MEMI32:$ptr),
- !strconcat(IL_OP_MOV.Text, " $dst, $ptr"),
- [(set GPRV4I32:$dst, (int_AMDIL_image2d_info0 ADDR:$ptr))]>;
-def IMAGE2D_INFO1 : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins MEMI32:$ptr),
- !strconcat(IL_OP_MOV.Text, " $dst, $ptr"),
- [(set GPRV4I32:$dst, (int_AMDIL_image2d_info1 ADDR:$ptr))]>;
-def IMAGE2DA_INFO0 : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins MEMI32:$ptr),
- !strconcat(IL_OP_MOV.Text, " $dst, $ptr"),
- [(set GPRV4I32:$dst, (int_AMDIL_image2d_array_info0 ADDR:$ptr))]>;
-def IMAGE2DA_INFO1 : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins MEMI32:$ptr),
- !strconcat(IL_OP_MOV.Text, " $dst, $ptr"),
- [(set GPRV4I32:$dst, (int_AMDIL_image2d_array_info1 ADDR:$ptr))]>;
-def IMAGE3D_INFO0 : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins MEMI32:$ptr),
- !strconcat(IL_OP_MOV.Text, " $dst, $ptr"),
- [(set GPRV4I32:$dst, (int_AMDIL_image3d_info0 ADDR:$ptr))]>;
-def IMAGE3D_INFO1 : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins MEMI32:$ptr),
- !strconcat(IL_OP_MOV.Text, " $dst, $ptr"),
- [(set GPRV4I32:$dst, (int_AMDIL_image3d_info1 ADDR:$ptr))]>;
-def IMAGE1D_WRITE : ILFormat<IL_OP_UAV_STORE, (outs),
- (ins MEMI32:$ptr, GPRV2I32:$addy, GPRV4I32:$data),
- !strconcat(IL_OP_UAV_STORE.Text,
- "_id($ptr) $addy, $data"),
- [(int_AMDIL_image1d_write ADDR:$ptr, GPRV2I32:$addy, GPRV4I32:$data)]>;
-def IMAGE1DA_WRITE : ILFormat<IL_OP_UAV_STORE, (outs),
- (ins MEMI32:$ptr, GPRV2I32:$addy, GPRV4I32:$data),
- !strconcat(IL_OP_UAV_STORE.Text,
- "_id($ptr) $addy, $data"),
- [(int_AMDIL_image1d_array_write ADDR:$ptr, GPRV2I32:$addy, GPRV4I32:$data)]>;
-def IMAGE2D_WRITE : ILFormat<IL_OP_UAV_STORE, (outs),
- (ins MEMI32:$ptr, GPRV2I32:$addy, GPRV4I32:$data),
- !strconcat(IL_OP_UAV_STORE.Text,
- "_id($ptr) $addy, $data"),
- [(int_AMDIL_image2d_write ADDR:$ptr, GPRV2I32:$addy, GPRV4I32:$data)]>;
-def IMAGE2DA_WRITE : ILFormat<IL_OP_UAV_STORE, (outs),
- (ins MEMI32:$ptr, GPRV2I32:$addy, GPRV4I32:$data),
- !strconcat(IL_OP_UAV_STORE.Text,
- "_id($ptr) $addy, $data"),
- [(int_AMDIL_image2d_array_write ADDR:$ptr, GPRV2I32:$addy, GPRV4I32:$data)]>;
-def IMAGE3D_WRITE : ILFormat<IL_OP_UAV_STORE, (outs),
- (ins MEMI32:$ptr, GPRV4I32:$addy, GPRV4I32:$data),
- !strconcat(IL_OP_UAV_STORE.Text,
- "_id($ptr) $addy, $data"),
- [(int_AMDIL_image3d_write ADDR:$ptr, GPRV4I32:$addy, GPRV4I32:$data)]>;
-let hasSideEffects = 1, isNotDuplicable = 1 in {
- // All of the noret atomic functions
- def ATOM_G_ADD_NORET : BinAtomNoRet<IL_OP_UAV_ADD,
- "_id($id)", atom_g_add_noret>;
- def ATOM_G_AND_NORET : BinAtomNoRet<IL_OP_UAV_AND,
- "_id($id)", atom_g_and_noret>;
- def ATOM_G_MAX_NORET : BinAtomNoRet<IL_OP_UAV_MAX,
- "_id($id)", atom_g_max_noret>;
- def ATOM_G_MIN_NORET : BinAtomNoRet<IL_OP_UAV_MIN,
- "_id($id)", atom_g_min_noret>;
- def ATOM_G_UMAX_NORET : BinAtomNoRet<IL_OP_UAV_UMAX,
- "_id($id)", atom_g_umax_noret>;
- def ATOM_G_UMIN_NORET : BinAtomNoRet<IL_OP_UAV_UMIN,
- "_id($id)", atom_g_umin_noret>;
- def ATOM_G_OR_NORET : BinAtomNoRet<IL_OP_UAV_OR,
- "_id($id)", atom_g_or_noret>;
- def ATOM_G_RSUB_NORET : BinAtomNoRet<IL_OP_UAV_RSUB,
- "_id($id)", atom_g_rsub_noret>;
- def ATOM_G_SUB_NORET : BinAtomNoRet<IL_OP_UAV_SUB,
- "_id($id)", atom_g_sub_noret>;
- def ATOM_G_XOR_NORET : BinAtomNoRet<IL_OP_UAV_XOR,
- "_id($id)", atom_g_xor_noret>;
- def ATOM_G_INC_NORET : BinAtomNoRet<IL_OP_UAV_INC,
- "_id($id)", atom_g_inc_noret>;
- def ATOM_G_DEC_NORET : BinAtomNoRet<IL_OP_UAV_DEC,
- "_id($id)", atom_g_dec_noret>;
- def ATOM_G_CMPXCHG_NORET : CmpXChgNoRet<IL_OP_UAV_CMP,
- "_id($id)", atom_g_cmpxchg_noret>;
- def ATOM_A_ADD_NORET : BinAtomNoRet<IL_OP_UAV_ADD,
- "_id($id)_arena", atom_g_add_noret>;
- def ATOM_A_AND_NORET : BinAtomNoRet<IL_OP_UAV_AND,
- "_id($id)_arena", atom_g_and_noret>;
- def ATOM_A_MAX_NORET : BinAtomNoRet<IL_OP_UAV_MAX,
- "_id($id)_arena", atom_g_max_noret>;
- def ATOM_A_MIN_NORET : BinAtomNoRet<IL_OP_UAV_MIN,
- "_id($id)_arena", atom_g_min_noret>;
- def ATOM_A_UMAX_NORET : BinAtomNoRet<IL_OP_UAV_UMAX,
- "_id($id)_arena", atom_g_umax_noret>;
- def ATOM_A_UMIN_NORET : BinAtomNoRet<IL_OP_UAV_UMIN,
- "_id($id)_arena", atom_g_umin_noret>;
- def ATOM_A_OR_NORET : BinAtomNoRet<IL_OP_UAV_OR,
- "_id($id)_arena", atom_g_or_noret>;
- def ATOM_A_RSUB_NORET : BinAtomNoRet<IL_OP_UAV_RSUB,
- "_id($id)_arena", atom_g_rsub_noret>;
- def ATOM_A_SUB_NORET : BinAtomNoRet<IL_OP_UAV_SUB,
- "_id($id)_arena", atom_g_sub_noret>;
- def ATOM_A_XOR_NORET : BinAtomNoRet<IL_OP_UAV_XOR,
- "_id($id)_arena", atom_g_xor_noret>;
- def ATOM_A_INC_NORET : BinAtomNoRet<IL_OP_UAV_INC,
- "_id($id)_arena", atom_g_inc_noret>;
- def ATOM_A_DEC_NORET : BinAtomNoRet<IL_OP_UAV_DEC,
- "_id($id)_arena", atom_g_dec_noret>;
- def ATOM_A_CMPXCHG_NORET : CmpXChgNoRet<IL_OP_UAV_CMP,
- "_id($id)_arena", atom_g_cmpxchg_noret>;
- def ATOM_L_ADD_NORET : BinAtomNoRet<IL_OP_LDS_ADD,
- "_resource($id)", atom_l_add_noret>;
- def ATOM_L_AND_NORET : BinAtomNoRet<IL_OP_LDS_AND,
- "_resource($id)", atom_l_and_noret>;
- def ATOM_L_MAX_NORET : BinAtomNoRet<IL_OP_LDS_MAX,
- "_resource($id)", atom_l_max_noret>;
- def ATOM_L_MIN_NORET : BinAtomNoRet<IL_OP_LDS_MIN,
- "_resource($id)", atom_l_min_noret>;
- def ATOM_L_UMAX_NORET : BinAtomNoRet<IL_OP_LDS_UMAX,
- "_resource($id)", atom_l_umax_noret>;
- def ATOM_L_UMIN_NORET : BinAtomNoRet<IL_OP_LDS_UMIN,
- "_resource($id)", atom_l_umin_noret>;
- def ATOM_L_MSKOR_NORET : TriAtomNoRet<IL_OP_LDS_MSKOR,
- "_resource($id)", atom_l_mskor_noret>;
- def ATOM_L_OR_NORET : BinAtomNoRet<IL_OP_LDS_OR,
- "_resource($id)", atom_l_or_noret>;
- def ATOM_L_RSUB_NORET : BinAtomNoRet<IL_OP_LDS_RSUB,
- "_resource($id)", atom_l_rsub_noret>;
- def ATOM_L_SUB_NORET : BinAtomNoRet<IL_OP_LDS_SUB,
- "_resource($id)", atom_l_sub_noret>;
- def ATOM_L_XOR_NORET : BinAtomNoRet<IL_OP_LDS_XOR,
- "_resource($id)", atom_l_xor_noret>;
- def ATOM_L_INC_NORET : BinAtomNoRet<IL_OP_LDS_INC,
- "_resource($id)", atom_l_inc_noret>;
- def ATOM_L_DEC_NORET : BinAtomNoRet<IL_OP_LDS_DEC,
- "_resource($id)", atom_l_dec_noret>;
- def ATOM_L_CMPXCHG_NORET : TriAtomNoRet<IL_OP_LDS_CMP,
- "_resource($id)", atom_l_cmpxchg_noret>;
- def ATOM_R_ADD_NORET : BinAtomNoRet<IL_OP_GDS_ADD,
- "_resource($id)", atom_r_add_noret>;
- def ATOM_R_AND_NORET : BinAtomNoRet<IL_OP_GDS_AND,
- "_resource($id)", atom_r_and_noret>;
- def ATOM_R_MAX_NORET : BinAtomNoRet<IL_OP_GDS_MAX,
- "_resource($id)", atom_r_max_noret>;
- def ATOM_R_MIN_NORET : BinAtomNoRet<IL_OP_GDS_MIN,
- "_resource($id)", atom_r_min_noret>;
- def ATOM_R_UMAX_NORET : BinAtomNoRet<IL_OP_GDS_UMAX,
- "_resource($id)", atom_r_umax_noret>;
- def ATOM_R_UMIN_NORET : BinAtomNoRet<IL_OP_GDS_UMIN,
- "_resource($id)", atom_r_umin_noret>;
- def ATOM_R_MSKOR_NORET : TriAtomNoRet<IL_OP_GDS_MSKOR,
- "_resource($id)", atom_r_mskor_noret>;
- def ATOM_R_OR_NORET : BinAtomNoRet<IL_OP_GDS_OR,
- "_resource($id)", atom_r_or_noret>;
- def ATOM_R_RSUB_NORET : BinAtomNoRet<IL_OP_GDS_RSUB,
- "_resource($id)", atom_r_rsub_noret>;
- def ATOM_R_SUB_NORET : BinAtomNoRet<IL_OP_GDS_SUB,
- "_resource($id)", atom_r_sub_noret>;
- def ATOM_R_XOR_NORET : BinAtomNoRet<IL_OP_GDS_XOR,
- "_resource($id)", atom_r_xor_noret>;
- def ATOM_R_INC_NORET : BinAtomNoRet<IL_OP_GDS_INC,
- "_resource($id)", atom_r_inc_noret>;
- def ATOM_R_DEC_NORET : BinAtomNoRet<IL_OP_GDS_DEC,
- "_resource($id)", atom_r_dec_noret>;
- def ATOM_R_CMPXCHG_NORET : CmpXChgNoRet<IL_OP_GDS_CMP,
- "_resource($id)", atom_r_cmpxchg_noret>;
- def APPEND_ALLOC_NORET : AppendNoRet<IL_OP_APPEND_BUF_ALLOC,
- "_id($id)", append_alloc_noret>;
- def APPEND_CONSUME_NORET : AppendNoRet<IL_OP_APPEND_BUF_CONSUME,
- "_id($id)", append_consume_noret>;
- // All of the atomic functions that return
- def ATOM_G_ADD : BinAtom<IL_OP_UAV_READ_ADD,
- "_id($id)", atom_g_add>;
- def ATOM_G_AND : BinAtom<IL_OP_UAV_READ_AND,
- "_id($id)", atom_g_and>;
- def ATOM_G_MAX : BinAtom<IL_OP_UAV_READ_MAX,
- "_id($id)", atom_g_max>;
- def ATOM_G_MIN : BinAtom<IL_OP_UAV_READ_MIN,
- "_id($id)", atom_g_min>;
- def ATOM_G_UMAX : BinAtom<IL_OP_UAV_READ_UMAX,
- "_id($id)", atom_g_umax>;
- def ATOM_G_UMIN : BinAtom<IL_OP_UAV_READ_UMIN,
- "_id($id)", atom_g_umin>;
- def ATOM_G_OR : BinAtom<IL_OP_UAV_READ_OR,
- "_id($id)", atom_g_or>;
- def ATOM_G_RSUB : BinAtom<IL_OP_UAV_READ_RSUB,
- "_id($id)", atom_g_rsub>;
- def ATOM_G_SUB : BinAtom<IL_OP_UAV_READ_SUB,
- "_id($id)", atom_g_sub>;
- def ATOM_G_XOR : BinAtom<IL_OP_UAV_READ_XOR,
- "_id($id)", atom_g_xor>;
- def ATOM_G_INC : BinAtom<IL_OP_UAV_READ_INC,
- "_id($id)", atom_g_inc>;
- def ATOM_G_DEC : BinAtom<IL_OP_UAV_READ_DEC,
- "_id($id)", atom_g_dec>;
- def ATOM_G_XCHG : BinAtom<IL_OP_UAV_READ_XCHG,
- "_id($id)", atom_g_xchg>;
- def ATOM_G_CMPXCHG : CmpXChg<IL_OP_UAV_READ_CMPXCHG,
- "_id($id)", atom_g_cmpxchg>;
- // Arena atomic accesses
- def ATOM_A_ADD : BinAtom<IL_OP_UAV_READ_ADD,
- "_id($id)_arena", atom_g_add>;
- def ATOM_A_AND : BinAtom<IL_OP_UAV_READ_AND,
- "_id($id)_arena", atom_g_and>;
- def ATOM_A_MAX : BinAtom<IL_OP_UAV_READ_MAX,
- "_id($id)_arena", atom_g_max>;
- def ATOM_A_MIN : BinAtom<IL_OP_UAV_READ_MIN,
- "_id($id)_arena", atom_g_min>;
- def ATOM_A_UMAX : BinAtom<IL_OP_UAV_READ_UMAX,
- "_id($id)_arena", atom_g_umax>;
- def ATOM_A_UMIN : BinAtom<IL_OP_UAV_READ_UMIN,
- "_id($id)_arena", atom_g_umin>;
- def ATOM_A_OR : BinAtom<IL_OP_UAV_READ_OR,
- "_id($id)_arena", atom_g_or>;
- def ATOM_A_RSUB : BinAtom<IL_OP_UAV_READ_RSUB,
- "_id($id)_arena", atom_g_rsub>;
- def ATOM_A_SUB : BinAtom<IL_OP_UAV_READ_SUB,
- "_id($id)_arena", atom_g_sub>;
- def ATOM_A_XOR : BinAtom<IL_OP_UAV_READ_XOR,
- "_id($id)_arena", atom_g_xor>;
- def ATOM_A_INC : BinAtom<IL_OP_UAV_READ_INC,
- "_id($id)_arena", atom_g_inc>;
- def ATOM_A_DEC : BinAtom<IL_OP_UAV_READ_DEC,
- "_id($id)_arena", atom_g_dec>;
- def ATOM_A_XCHG : BinAtom<IL_OP_UAV_READ_XCHG,
- "_id($id)_arena", atom_g_xchg>;
- def ATOM_A_CMPXCHG : CmpXChg<IL_OP_UAV_READ_CMPXCHG,
- "_id($id)_arena", atom_g_cmpxchg>;
- def ATOM_L_ADD : BinAtom<IL_OP_LDS_READ_ADD,
- "_resource($id)", atom_l_add>;
- def ATOM_L_AND : BinAtom<IL_OP_LDS_READ_AND,
- "_resource($id)", atom_l_and>;
- def ATOM_L_MAX : BinAtom<IL_OP_LDS_READ_MAX,
- "_resource($id)", atom_l_max>;
- def ATOM_L_MIN : BinAtom<IL_OP_LDS_READ_MIN,
- "_resource($id)", atom_l_min>;
- def ATOM_L_UMAX : BinAtom<IL_OP_LDS_READ_UMAX,
- "_resource($id)", atom_l_umax>;
- def ATOM_L_UMIN : BinAtom<IL_OP_LDS_READ_UMIN,
- "_resource($id)", atom_l_umin>;
- def ATOM_L_OR : BinAtom<IL_OP_LDS_READ_OR,
- "_resource($id)", atom_l_or>;
- def ATOM_L_MSKOR : TriAtom<IL_OP_LDS_READ_MSKOR,
- "_resource($id)", atom_l_mskor>;
- def ATOM_L_RSUB : BinAtom<IL_OP_LDS_READ_RSUB,
- "_resource($id)", atom_l_rsub>;
- def ATOM_L_SUB : BinAtom<IL_OP_LDS_READ_SUB,
- "_resource($id)", atom_l_sub>;
- def ATOM_L_XOR : BinAtom<IL_OP_LDS_READ_XOR,
- "_resource($id)", atom_l_xor>;
- def ATOM_L_INC : BinAtom<IL_OP_LDS_READ_INC,
- "_resource($id)", atom_l_inc>;
- def ATOM_L_DEC : BinAtom<IL_OP_LDS_READ_DEC,
- "_resource($id)", atom_l_dec>;
- def ATOM_L_XCHG : BinAtom<IL_OP_LDS_READ_XCHG,
- "_resource($id)", atom_l_xchg>;
- def ATOM_L_CMPXCHG : TriAtom<IL_OP_LDS_READ_CMPXCHG,
- "_resource($id)", atom_l_cmpxchg>;
- def ATOM_R_ADD : BinAtom<IL_OP_GDS_READ_ADD,
- "_resource($id)", atom_r_add>;
- def ATOM_R_AND : BinAtom<IL_OP_GDS_READ_AND,
- "_resource($id)", atom_r_and>;
- def ATOM_R_MAX : BinAtom<IL_OP_GDS_READ_MAX,
- "_resource($id)", atom_r_max>;
- def ATOM_R_MIN : BinAtom<IL_OP_GDS_READ_MIN,
- "_resource($id)", atom_r_min>;
- def ATOM_R_UMAX : BinAtom<IL_OP_GDS_READ_UMAX,
- "_resource($id)", atom_r_umax>;
- def ATOM_R_UMIN : BinAtom<IL_OP_GDS_READ_UMIN,
- "_resource($id)", atom_r_umin>;
- def ATOM_R_OR : BinAtom<IL_OP_GDS_READ_OR,
- "_resource($id)", atom_r_or>;
- def ATOM_R_MSKOR : TriAtom<IL_OP_GDS_READ_MSKOR,
- "_resource($id)", atom_r_mskor>;
- def ATOM_R_RSUB : BinAtom<IL_OP_GDS_READ_RSUB,
- "_resource($id)", atom_r_rsub>;
- def ATOM_R_SUB : BinAtom<IL_OP_GDS_READ_SUB,
- "_resource($id)", atom_r_sub>;
- def ATOM_R_XOR : BinAtom<IL_OP_GDS_READ_XOR,
- "_resource($id)", atom_r_xor>;
- def ATOM_R_INC : BinAtom<IL_OP_GDS_READ_INC,
- "_resource($id)", atom_r_inc>;
- def ATOM_R_DEC : BinAtom<IL_OP_GDS_READ_DEC,
- "_resource($id)", atom_r_dec>;
- def ATOM_R_XCHG : BinAtom<IL_OP_GDS_READ_XCHG,
- "_resource($id)", atom_r_xchg>;
- def ATOM_R_CMPXCHG : CmpXChg<IL_OP_GDS_READ_CMPXCHG,
- "_resource($id)", atom_r_cmpxchg>;
- def APPEND_ALLOC : Append<IL_OP_APPEND_BUF_ALLOC,
- "_id($id)", append_alloc>;
- def APPEND_CONSUME : Append<IL_OP_APPEND_BUF_CONSUME,
- "_id($id)", append_consume>;
-}
-}
-let Predicates = [Has64BitPtr] in {
-// All of the image functions
-def IMAGE1D64_READ : ILFormat<IL_OP_SAMPLE, (outs GPRV4I32:$dst),
- (ins MEMI64:$ptr, GPRI32:$sampler, GPRV4F32:$addy),
- !strconcat(IL_OP_SAMPLE.Text,
- "_resource($ptr)_sampler($sampler)_coordtype(normalized) $dst, $addy"),
- [(set GPRV4I32:$dst,
- (int_AMDIL_image1d_read_norm ADDR64:$ptr, GPRI32:$sampler, GPRV4F32:$addy))]>;
-def IMAGE1DA64_READ : ILFormat<IL_OP_SAMPLE, (outs GPRV4I32:$dst),
- (ins MEMI64:$ptr, GPRI32:$sampler, GPRV4F32:$addy),
- !strconcat(IL_OP_SAMPLE.Text,
- "_resource($ptr)_sampler($sampler)_coordtype(normalized) $dst, $addy"),
- [(set GPRV4I32:$dst,
- (int_AMDIL_image1d_array_read_norm ADDR64:$ptr, GPRI32:$sampler, GPRV4F32:$addy))]>;
-def IMAGE2D64_READ : ILFormat<IL_OP_SAMPLE, (outs GPRV4I32:$dst),
- (ins MEMI64:$ptr, GPRI32:$sampler, GPRV4F32:$addy),
- !strconcat(IL_OP_SAMPLE.Text,
- "_resource($ptr)_sampler($sampler)_coordtype(normalized) $dst, $addy"),
- [(set GPRV4I32:$dst,
- (int_AMDIL_image2d_read_norm ADDR64:$ptr, GPRI32:$sampler, GPRV4F32:$addy))]>;
-def IMAGE2DA64_READ : ILFormat<IL_OP_SAMPLE, (outs GPRV4I32:$dst),
- (ins MEMI64:$ptr, GPRI32:$sampler, GPRV4F32:$addy),
- !strconcat(IL_OP_SAMPLE.Text,
- "_resource($ptr)_sampler($sampler)_coordtype(normalized) $dst, $addy"),
- [(set GPRV4I32:$dst,
- (int_AMDIL_image2d_array_read_norm ADDR64:$ptr, GPRI32:$sampler, GPRV4F32:$addy))]>;
-def IMAGE3D64_READ : ILFormat<IL_OP_SAMPLE, (outs GPRV4I32:$dst),
- (ins MEMI64:$ptr, GPRI32:$sampler, GPRV4F32:$addy),
- !strconcat(IL_OP_SAMPLE.Text,
- "_resource($ptr)_sampler($sampler)_coordtype(normalized) $dst, $addy"),
- [(set GPRV4I32:$dst,
- (int_AMDIL_image3d_read_norm ADDR64:$ptr, GPRI32:$sampler, GPRV4F32:$addy))]>;
-def IMAGE1D64_READ_UNNORM : ILFormat<IL_OP_SAMPLE, (outs GPRV4I32:$dst),
- (ins MEMI64:$ptr, GPRI32:$sampler, GPRV4F32:$addy),
- !strconcat(IL_OP_SAMPLE.Text,
- "_resource($ptr)_sampler($sampler)_coordtype(unnormalized) $dst, $addy"),
- [(set GPRV4I32:$dst,
- (int_AMDIL_image1d_read_unnorm ADDR64:$ptr, GPRI32:$sampler, GPRV4F32:$addy))]>;
-def IMAGE1DA64_READ_UNNORM : ILFormat<IL_OP_SAMPLE, (outs GPRV4I32:$dst),
- (ins MEMI64:$ptr, GPRI32:$sampler, GPRV4F32:$addy),
- !strconcat(IL_OP_SAMPLE.Text,
- "_resource($ptr)_sampler($sampler)_coordtype(unnormalized) $dst, $addy"),
- [(set GPRV4I32:$dst,
- (int_AMDIL_image1d_array_read_unnorm ADDR64:$ptr, GPRI32:$sampler, GPRV4F32:$addy))]>;
-def IMAGE2D64_READ_UNNORM : ILFormat<IL_OP_SAMPLE, (outs GPRV4I32:$dst),
- (ins MEMI64:$ptr, GPRI32:$sampler, GPRV4F32:$addy),
- !strconcat(IL_OP_SAMPLE.Text,
- "_resource($ptr)_sampler($sampler)_coordtype(unnormalized) $dst, $addy"),
- [(set GPRV4I32:$dst,
- (int_AMDIL_image2d_read_unnorm ADDR64:$ptr, GPRI32:$sampler, GPRV4F32:$addy))]>;
-def IMAGE2DA64_READ_UNNORM : ILFormat<IL_OP_SAMPLE, (outs GPRV4I32:$dst),
- (ins MEMI64:$ptr, GPRI32:$sampler, GPRV4F32:$addy),
- !strconcat(IL_OP_SAMPLE.Text,
- "_resource($ptr)_sampler($sampler)_coordtype(unnormalized) $dst, $addy"),
- [(set GPRV4I32:$dst,
- (int_AMDIL_image2d_array_read_unnorm ADDR64:$ptr, GPRI32:$sampler, GPRV4F32:$addy))]>;
-def IMAGE3D64_READ_UNNORM : ILFormat<IL_OP_SAMPLE, (outs GPRV4I32:$dst),
- (ins MEMI64:$ptr, GPRI32:$sampler, GPRV4F32:$addy),
- !strconcat(IL_OP_SAMPLE.Text,
- "_resource($ptr)_sampler($sampler)_coordtype(unnormalized) $dst, $addy"),
- [(set GPRV4I32:$dst,
- (int_AMDIL_image3d_read_unnorm ADDR64:$ptr, GPRI32:$sampler, GPRV4F32:$addy))]>;
-def IMAGE1D64_INFO0 : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins MEMI64:$ptr),
- !strconcat(IL_OP_MOV.Text, " $dst, $ptr"),
- [(set GPRV4I32:$dst, (int_AMDIL_image1d_info0 ADDR64:$ptr))]>;
-def IMAGE1D64_INFO1 : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins MEMI64:$ptr),
- !strconcat(IL_OP_MOV.Text, " $dst, $ptr"),
- [(set GPRV4I32:$dst, (int_AMDIL_image1d_info1 ADDR64:$ptr))]>;
-def IMAGE1DA64_INFO0 : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins MEMI64:$ptr),
- !strconcat(IL_OP_MOV.Text, " $dst, $ptr"),
- [(set GPRV4I32:$dst, (int_AMDIL_image1d_array_info0 ADDR64:$ptr))]>;
-def IMAGE1DA64_INFO1 : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins MEMI64:$ptr),
- !strconcat(IL_OP_MOV.Text, " $dst, $ptr"),
- [(set GPRV4I32:$dst, (int_AMDIL_image1d_array_info1 ADDR64:$ptr))]>;
-def IMAGE2DA64_INFO0 : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins MEMI64:$ptr),
- !strconcat(IL_OP_MOV.Text, " $dst, $ptr"),
- [(set GPRV4I32:$dst, (int_AMDIL_image2d_array_info0 ADDR64:$ptr))]>;
-def IMAGE2DA64_INFO1 : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins MEMI64:$ptr),
- !strconcat(IL_OP_MOV.Text, " $dst, $ptr"),
- [(set GPRV4I32:$dst, (int_AMDIL_image2d_array_info1 ADDR64:$ptr))]>;
-def IMAGE2D64_INFO0 : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins MEMI64:$ptr),
- !strconcat(IL_OP_MOV.Text, " $dst, $ptr"),
- [(set GPRV4I32:$dst, (int_AMDIL_image2d_info0 ADDR64:$ptr))]>;
-def IMAGE2D64_INFO1 : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins MEMI64:$ptr),
- !strconcat(IL_OP_MOV.Text, " $dst, $ptr"),
- [(set GPRV4I32:$dst, (int_AMDIL_image2d_info1 ADDR64:$ptr))]>;
-def IMAGE3D64_INFO0 : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins MEMI64:$ptr),
- !strconcat(IL_OP_MOV.Text, " $dst, $ptr"),
- [(set GPRV4I32:$dst, (int_AMDIL_image3d_info0 ADDR64:$ptr))]>;
-def IMAGE3D64_INFO1 : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- (ins MEMI64:$ptr),
- !strconcat(IL_OP_MOV.Text, " $dst, $ptr"),
- [(set GPRV4I32:$dst, (int_AMDIL_image3d_info1 ADDR64:$ptr))]>;
-def IMAGE1D64_WRITE : ILFormat<IL_OP_UAV_STORE, (outs),
- (ins MEMI64:$ptr, GPRV2I32:$addy, GPRV4I32:$data),
- !strconcat(IL_OP_UAV_STORE.Text,
- "_id($ptr) $addy, $data"),
- [(int_AMDIL_image1d_write ADDR64:$ptr, GPRV2I32:$addy, GPRV4I32:$data)]>;
-def IMAGE1DA64_WRITE : ILFormat<IL_OP_UAV_STORE, (outs),
- (ins MEMI64:$ptr, GPRV2I32:$addy, GPRV4I32:$data),
- !strconcat(IL_OP_UAV_STORE.Text,
- "_id($ptr) $addy, $data"),
- [(int_AMDIL_image1d_array_write ADDR64:$ptr, GPRV2I32:$addy, GPRV4I32:$data)]>;
-def IMAGE2D64_WRITE : ILFormat<IL_OP_UAV_STORE, (outs),
- (ins MEMI64:$ptr, GPRV2I32:$addy, GPRV4I32:$data),
- !strconcat(IL_OP_UAV_STORE.Text,
- "_id($ptr) $addy, $data"),
- [(int_AMDIL_image2d_write ADDR64:$ptr, GPRV2I32:$addy, GPRV4I32:$data)]>;
-def IMAGE2DA64_WRITE : ILFormat<IL_OP_UAV_STORE, (outs),
- (ins MEMI64:$ptr, GPRV2I32:$addy, GPRV4I32:$data),
- !strconcat(IL_OP_UAV_STORE.Text,
- "_id($ptr) $addy, $data"),
- [(int_AMDIL_image2d_array_write ADDR64:$ptr, GPRV2I32:$addy, GPRV4I32:$data)]>;
-def IMAGE3D64_WRITE : ILFormat<IL_OP_UAV_STORE, (outs),
- (ins MEMI64:$ptr, GPRV4I32:$addy, GPRV4I32:$data),
- !strconcat(IL_OP_UAV_STORE.Text,
- "_id($ptr) $addy, $data"),
- [(int_AMDIL_image3d_write ADDR64:$ptr, GPRV4I32:$addy, GPRV4I32:$data)]>;
-let hasSideEffects= 1 in {
- // All of the noret atomic functions
- def ATOM_G64_ADD_NORET : BinAtomNoRet64<IL_OP_UAV_ADD,
- "_id($id)", atom_g_add_noret>;
- def ATOM_G64_AND_NORET : BinAtomNoRet64<IL_OP_UAV_AND,
- "_id($id)", atom_g_and_noret>;
- def ATOM_G64_MAX_NORET : BinAtomNoRet64<IL_OP_UAV_MAX,
- "_id($id)", atom_g_max_noret>;
- def ATOM_G64_MIN_NORET : BinAtomNoRet64<IL_OP_UAV_MIN,
- "_id($id)", atom_g_min_noret>;
- def ATOM_G64_UMAX_NORET : BinAtomNoRet64<IL_OP_UAV_UMAX,
- "_id($id)", atom_g_umax_noret>;
- def ATOM_G64_UMIN_NORET : BinAtomNoRet64<IL_OP_UAV_UMIN,
- "_id($id)", atom_g_umin_noret>;
- def ATOM_G64_OR_NORET : BinAtomNoRet64<IL_OP_UAV_OR,
- "_id($id)", atom_g_or_noret>;
- def ATOM_G64_RSUB_NORET : BinAtomNoRet64<IL_OP_UAV_RSUB,
- "_id($id)", atom_g_rsub_noret>;
- def ATOM_G64_SUB_NORET : BinAtomNoRet64<IL_OP_UAV_SUB,
- "_id($id)", atom_g_sub_noret>;
- def ATOM_G64_XOR_NORET : BinAtomNoRet64<IL_OP_UAV_XOR,
- "_id($id)", atom_g_xor_noret>;
- def ATOM_G64_INC_NORET : BinAtomNoRet64<IL_OP_UAV_INC,
- "_id($id)", atom_g_inc_noret>;
- def ATOM_G64_DEC_NORET : BinAtomNoRet64<IL_OP_UAV_DEC,
- "_id($id)", atom_g_dec_noret>;
- def ATOM_G64_CMPXCHG_NORET : CmpXChgNoRet64<IL_OP_UAV_CMP,
- "_id($id)", atom_g_cmpxchg_noret>;
- def ATOM_A64_ADD_NORET : BinAtomNoRet64<IL_OP_UAV_ADD,
- "_id($id)_arena", atom_g_add_noret>;
- def ATOM_A64_AND_NORET : BinAtomNoRet64<IL_OP_UAV_AND,
- "_id($id)_arena", atom_g_and_noret>;
- def ATOM_A64_MAX_NORET : BinAtomNoRet64<IL_OP_UAV_MAX,
- "_id($id)_arena", atom_g_max_noret>;
- def ATOM_A64_MIN_NORET : BinAtomNoRet64<IL_OP_UAV_MIN,
- "_id($id)_arena", atom_g_min_noret>;
- def ATOM_A64_UMAX_NORET : BinAtomNoRet64<IL_OP_UAV_UMAX,
- "_id($id)_arena", atom_g_umax_noret>;
- def ATOM_A64_UMIN_NORET : BinAtomNoRet64<IL_OP_UAV_UMIN,
- "_id($id)_arena", atom_g_umin_noret>;
- def ATOM_A64_OR_NORET : BinAtomNoRet64<IL_OP_UAV_OR,
- "_id($id)_arena", atom_g_or_noret>;
- def ATOM_A64_RSUB_NORET : BinAtomNoRet64<IL_OP_UAV_RSUB,
- "_id($id)_arena", atom_g_rsub_noret>;
- def ATOM_A64_SUB_NORET : BinAtomNoRet64<IL_OP_UAV_SUB,
- "_id($id)_arena", atom_g_sub_noret>;
- def ATOM_A64_XOR_NORET : BinAtomNoRet64<IL_OP_UAV_XOR,
- "_id($id)_arena", atom_g_xor_noret>;
- def ATOM_A64_INC_NORET : BinAtomNoRet64<IL_OP_UAV_INC,
- "_id($id)_arena", atom_g_inc_noret>;
- def ATOM_A64_DEC_NORET : BinAtomNoRet64<IL_OP_UAV_DEC,
- "_id($id)_arena", atom_g_dec_noret>;
- def ATOM_A64_CMPXCHG_NORET : CmpXChgNoRet64<IL_OP_UAV_CMP,
- "_id($id)_arena", atom_g_cmpxchg_noret>;
- def ATOM_L64_ADD_NORET : BinAtomNoRet64<IL_OP_LDS_ADD,
- "_resource($id)", atom_l_add_noret>;
- def ATOM_L64_AND_NORET : BinAtomNoRet64<IL_OP_LDS_AND,
- "_resource($id)", atom_l_and_noret>;
- def ATOM_L64_MAX_NORET : BinAtomNoRet64<IL_OP_LDS_MAX,
- "_resource($id)", atom_l_max_noret>;
- def ATOM_L64_MIN_NORET : BinAtomNoRet64<IL_OP_LDS_MIN,
- "_resource($id)", atom_l_min_noret>;
- def ATOM_L64_UMAX_NORET : BinAtomNoRet64<IL_OP_LDS_UMAX,
- "_resource($id)", atom_l_umax_noret>;
- def ATOM_L64_UMIN_NORET : BinAtomNoRet64<IL_OP_LDS_UMIN,
- "_resource($id)", atom_l_umin_noret>;
- def ATOM_L64_MSKOR_NORET : TriAtomNoRet64<IL_OP_LDS_MSKOR,
- "_resource($id)", atom_l_mskor_noret>;
- def ATOM_L64_OR_NORET : BinAtomNoRet64<IL_OP_LDS_OR,
- "_resource($id)", atom_l_or_noret>;
- def ATOM_L64_RSUB_NORET : BinAtomNoRet64<IL_OP_LDS_RSUB,
- "_resource($id)", atom_l_rsub_noret>;
- def ATOM_L64_SUB_NORET : BinAtomNoRet64<IL_OP_LDS_SUB,
- "_resource($id)", atom_l_sub_noret>;
- def ATOM_L64_XOR_NORET : BinAtomNoRet64<IL_OP_LDS_XOR,
- "_resource($id)", atom_l_xor_noret>;
- def ATOM_L64_INC_NORET : BinAtomNoRet64<IL_OP_LDS_INC,
- "_resource($id)", atom_l_inc_noret>;
- def ATOM_L64_DEC_NORET : BinAtomNoRet64<IL_OP_LDS_DEC,
- "_resource($id)", atom_l_dec_noret>;
- def ATOM_L64_CMPXCHG_NORET : TriAtomNoRet64<IL_OP_LDS_CMP,
- "_resource($id)", atom_l_cmpxchg_noret>;
- def ATOM_R64_ADD_NORET : BinAtomNoRet64<IL_OP_GDS_ADD,
- "_resource($id)", atom_r_add_noret>;
- def ATOM_R64_AND_NORET : BinAtomNoRet64<IL_OP_GDS_AND,
- "_resource($id)", atom_r_and_noret>;
- def ATOM_R64_MAX_NORET : BinAtomNoRet64<IL_OP_GDS_MAX,
- "_resource($id)", atom_r_max_noret>;
- def ATOM_R64_MIN_NORET : BinAtomNoRet64<IL_OP_GDS_MIN,
- "_resource($id)", atom_r_min_noret>;
- def ATOM_R64_UMAX_NORET : BinAtomNoRet64<IL_OP_GDS_UMAX,
- "_resource($id)", atom_r_umax_noret>;
- def ATOM_R64_UMIN_NORET : BinAtomNoRet64<IL_OP_GDS_UMIN,
- "_resource($id)", atom_r_umin_noret>;
- def ATOM_R64_MSKOR_NORET : TriAtomNoRet64<IL_OP_GDS_MSKOR,
- "_resource($id)", atom_r_mskor_noret>;
- def ATOM_R64_OR_NORET : BinAtomNoRet64<IL_OP_GDS_OR,
- "_resource($id)", atom_r_or_noret>;
- def ATOM_R64_RSUB_NORET : BinAtomNoRet64<IL_OP_GDS_RSUB,
- "_resource($id)", atom_r_rsub_noret>;
- def ATOM_R64_SUB_NORET : BinAtomNoRet64<IL_OP_GDS_SUB,
- "_resource($id)", atom_r_sub_noret>;
- def ATOM_R64_XOR_NORET : BinAtomNoRet64<IL_OP_GDS_XOR,
- "_resource($id)", atom_r_xor_noret>;
- def ATOM_R64_INC_NORET : BinAtomNoRet64<IL_OP_GDS_INC,
- "_resource($id)", atom_r_inc_noret>;
- def ATOM_R64_DEC_NORET : BinAtomNoRet64<IL_OP_GDS_DEC,
- "_resource($id)", atom_r_dec_noret>;
- def ATOM_R64_CMPXCHG_NORET : CmpXChgNoRet64<IL_OP_GDS_CMP,
- "_resource($id)", atom_r_cmpxchg_noret>;
- def APPEND_ALLOC64_NORET : AppendNoRet64<IL_OP_APPEND_BUF_ALLOC,
- "_id($id)", append_alloc_noret>;
- def APPEND_CONSUME64_NORET : AppendNoRet64<IL_OP_APPEND_BUF_CONSUME,
- "_id($id)", append_consume_noret>;
- // All of the atomic functions that return
- def ATOM_G64_ADD : BinAtom64<IL_OP_UAV_READ_ADD,
- "_id($id)", atom_g_add>;
- def ATOM_G64_AND : BinAtom64<IL_OP_UAV_READ_AND,
- "_id($id)", atom_g_and>;
- def ATOM_G64_MAX : BinAtom64<IL_OP_UAV_READ_MAX,
- "_id($id)", atom_g_max>;
- def ATOM_G64_MIN : BinAtom64<IL_OP_UAV_READ_MIN,
- "_id($id)", atom_g_min>;
- def ATOM_G64_UMAX : BinAtom64<IL_OP_UAV_READ_UMAX,
- "_id($id)", atom_g_umax>;
- def ATOM_G64_UMIN : BinAtom64<IL_OP_UAV_READ_UMIN,
- "_id($id)", atom_g_umin>;
- def ATOM_G64_OR : BinAtom64<IL_OP_UAV_READ_OR,
- "_id($id)", atom_g_or>;
- def ATOM_G64_RSUB : BinAtom64<IL_OP_UAV_READ_RSUB,
- "_id($id)", atom_g_rsub>;
- def ATOM_G64_SUB : BinAtom64<IL_OP_UAV_READ_SUB,
- "_id($id)", atom_g_sub>;
- def ATOM_G64_XOR : BinAtom64<IL_OP_UAV_READ_XOR,
- "_id($id)", atom_g_xor>;
- def ATOM_G64_INC : BinAtom64<IL_OP_UAV_READ_INC,
- "_id($id)", atom_g_inc>;
- def ATOM_G64_DEC : BinAtom64<IL_OP_UAV_READ_DEC,
- "_id($id)", atom_g_dec>;
- def ATOM_G64_XCHG : BinAtom64<IL_OP_UAV_READ_XCHG,
- "_id($id)", atom_g_xchg>;
- def ATOM_G64_CMPXCHG : CmpXChg64<IL_OP_UAV_READ_CMPXCHG,
- "_id($id)", atom_g_cmpxchg>;
- // Arena atomic accesses
- def ATOM_A64_ADD : BinAtom64<IL_OP_UAV_READ_ADD,
- "_id($id)_arena", atom_g_add>;
- def ATOM_A64_AND : BinAtom64<IL_OP_UAV_READ_AND,
- "_id($id)_arena", atom_g_and>;
- def ATOM_A64_MAX : BinAtom64<IL_OP_UAV_READ_MAX,
- "_id($id)_arena", atom_g_max>;
- def ATOM_A64_MIN : BinAtom64<IL_OP_UAV_READ_MIN,
- "_id($id)_arena", atom_g_min>;
- def ATOM_A64_UMAX : BinAtom64<IL_OP_UAV_READ_UMAX,
- "_id($id)_arena", atom_g_umax>;
- def ATOM_A64_UMIN : BinAtom64<IL_OP_UAV_READ_UMIN,
- "_id($id)_arena", atom_g_umin>;
- def ATOM_A64_OR : BinAtom64<IL_OP_UAV_READ_OR,
- "_id($id)_arena", atom_g_or>;
- def ATOM_A64_RSUB : BinAtom64<IL_OP_UAV_READ_RSUB,
- "_id($id)_arena", atom_g_rsub>;
- def ATOM_A64_SUB : BinAtom64<IL_OP_UAV_READ_SUB,
- "_id($id)_arena", atom_g_sub>;
- def ATOM_A64_XOR : BinAtom64<IL_OP_UAV_READ_XOR,
- "_id($id)_arena", atom_g_xor>;
- def ATOM_A64_INC : BinAtom64<IL_OP_UAV_READ_INC,
- "_id($id)_arena", atom_g_inc>;
- def ATOM_A64_DEC : BinAtom64<IL_OP_UAV_READ_DEC,
- "_id($id)_arena", atom_g_dec>;
- def ATOM_A64_XCHG : BinAtom64<IL_OP_UAV_READ_XCHG,
- "_id($id)_arena", atom_g_xchg>;
- def ATOM_A64_CMPXCHG : CmpXChg64<IL_OP_UAV_READ_CMPXCHG,
- "_id($id)_arena", atom_g_cmpxchg>;
- def ATOM_L64_ADD : BinAtom64<IL_OP_LDS_READ_ADD,
- "_resource($id)", atom_l_add>;
- def ATOM_L64_AND : BinAtom64<IL_OP_LDS_READ_AND,
- "_resource($id)", atom_l_and>;
- def ATOM_L64_MAX : BinAtom64<IL_OP_LDS_READ_MAX,
- "_resource($id)", atom_l_max>;
- def ATOM_L64_MIN : BinAtom64<IL_OP_LDS_READ_MIN,
- "_resource($id)", atom_l_min>;
- def ATOM_L64_UMAX : BinAtom64<IL_OP_LDS_READ_UMAX,
- "_resource($id)", atom_l_umax>;
- def ATOM_L64_UMIN : BinAtom64<IL_OP_LDS_READ_UMIN,
- "_resource($id)", atom_l_umin>;
- def ATOM_L64_OR : BinAtom64<IL_OP_LDS_READ_OR,
- "_resource($id)", atom_l_or>;
- def ATOM_L64_MSKOR : TriAtom64<IL_OP_LDS_READ_MSKOR,
- "_resource($id)", atom_l_mskor>;
- def ATOM_L64_RSUB : BinAtom64<IL_OP_LDS_READ_RSUB,
- "_resource($id)", atom_l_rsub>;
- def ATOM_L64_SUB : BinAtom64<IL_OP_LDS_READ_SUB,
- "_resource($id)", atom_l_sub>;
- def ATOM_L64_XOR : BinAtom64<IL_OP_LDS_READ_XOR,
- "_resource($id)", atom_l_xor>;
- def ATOM_L64_INC : BinAtom64<IL_OP_LDS_READ_INC,
- "_resource($id)", atom_l_inc>;
- def ATOM_L64_DEC : BinAtom64<IL_OP_LDS_READ_DEC,
- "_resource($id)", atom_l_dec>;
- def ATOM_L64_XCHG : BinAtom64<IL_OP_LDS_READ_XCHG,
- "_resource($id)", atom_l_xchg>;
- def ATOM_L64_CMPXCHG : TriAtom64<IL_OP_LDS_READ_CMPXCHG,
- "_resource($id)", atom_l_cmpxchg>;
- def ATOM_R64_ADD : BinAtom64<IL_OP_GDS_READ_ADD,
- "_resource($id)", atom_r_add>;
- def ATOM_R64_AND : BinAtom64<IL_OP_GDS_READ_AND,
- "_resource($id)", atom_r_and>;
- def ATOM_R64_MAX : BinAtom64<IL_OP_GDS_READ_MAX,
- "_resource($id)", atom_r_max>;
- def ATOM_R64_MIN : BinAtom64<IL_OP_GDS_READ_MIN,
- "_resource($id)", atom_r_min>;
- def ATOM_R64_UMAX : BinAtom64<IL_OP_GDS_READ_UMAX,
- "_resource($id)", atom_r_umax>;
- def ATOM_R64_UMIN : BinAtom64<IL_OP_GDS_READ_UMIN,
- "_resource($id)", atom_r_umin>;
- def ATOM_R64_OR : BinAtom64<IL_OP_GDS_READ_OR,
- "_resource($id)", atom_r_or>;
- def ATOM_R64_MSKOR : TriAtom64<IL_OP_GDS_READ_MSKOR,
- "_resource($id)", atom_r_mskor>;
- def ATOM_R64_RSUB : BinAtom64<IL_OP_GDS_READ_RSUB,
- "_resource($id)", atom_r_rsub>;
- def ATOM_R64_SUB : BinAtom64<IL_OP_GDS_READ_SUB,
- "_resource($id)", atom_r_sub>;
- def ATOM_R64_XOR : BinAtom64<IL_OP_GDS_READ_XOR,
- "_resource($id)", atom_r_xor>;
- def ATOM_R64_INC : BinAtom64<IL_OP_GDS_READ_INC,
- "_resource($id)", atom_r_inc>;
- def ATOM_R64_DEC : BinAtom64<IL_OP_GDS_READ_DEC,
- "_resource($id)", atom_r_dec>;
- def ATOM_R64_XCHG : BinAtom64<IL_OP_GDS_READ_XCHG,
- "_resource($id)", atom_r_xchg>;
- def ATOM_R64_CMPXCHG : CmpXChg64<IL_OP_GDS_READ_CMPXCHG,
- "_resource($id)", atom_r_cmpxchg>;
- def APPEND_ALLOC64 : Append64<IL_OP_APPEND_BUF_ALLOC,
- "_id($id)", append_alloc>;
- def APPEND_CONSUME64 : Append64<IL_OP_APPEND_BUF_CONSUME,
- "_id($id)", append_consume>;
-}
-}
-/*
-def SEMAPHORE_INIT : BinaryOpNoRet<IL_OP_SEMAPHORE_INIT, (outs),
- (ins MEMI32:$ptr, i32imm:$val),
- !strconcat(IL_OP_SEMAPHORE_INIT.Text, "_id($ptr)_value($val)"),
- [(int_AMDIL_semaphore_init ADDR:$ptr, timm:$val)]>;
-
-def SEMAPHORE_WAIT : UnaryOpNoRet<IL_OP_SEMAPHORE_WAIT, (outs),
- (ins MEMI32:$ptr),
- !strconcat(IL_OP_SEMAPHORE_WAIT.Text, "_id($ptr)"),
- [(int_AMDIL_semaphore_wait ADDR:$ptr)]>;
-
-def SEMAPHORE_SIGNAL : UnaryOpNoRet<IL_OP_SEMAPHORE_SIGNAL, (outs),
- (ins MEMI32:$ptr),
- !strconcat(IL_OP_SEMAPHORE_SIGNAL.Text, "_id($ptr)"),
- [(int_AMDIL_semaphore_signal ADDR:$ptr)]>;
-*/