1*9880d681SAndroid Build Coastguard Worker//===-- CIInstructions.td - CI Instruction Defintions ---------------------===// 2*9880d681SAndroid Build Coastguard Worker// 3*9880d681SAndroid Build Coastguard Worker// The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker// 5*9880d681SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker// 8*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker// Instruction definitions for CI and newer. 10*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 11*9880d681SAndroid Build Coastguard Worker// Remaining instructions: 12*9880d681SAndroid Build Coastguard Worker// S_CBRANCH_CDBGUSER 13*9880d681SAndroid Build Coastguard Worker// S_CBRANCH_CDBGSYS 14*9880d681SAndroid Build Coastguard Worker// S_CBRANCH_CDBGSYS_OR_USER 15*9880d681SAndroid Build Coastguard Worker// S_CBRANCH_CDBGSYS_AND_USER 16*9880d681SAndroid Build Coastguard Worker// DS_NOP 17*9880d681SAndroid Build Coastguard Worker// DS_GWS_SEMA_RELEASE_ALL 18*9880d681SAndroid Build Coastguard Worker// DS_WRAP_RTN_B32 19*9880d681SAndroid Build Coastguard Worker// DS_CNDXCHG32_RTN_B64 20*9880d681SAndroid Build Coastguard Worker// DS_WRITE_B96 21*9880d681SAndroid Build Coastguard Worker// DS_WRITE_B128 22*9880d681SAndroid Build Coastguard Worker// DS_CONDXCHG32_RTN_B128 23*9880d681SAndroid Build Coastguard Worker// DS_READ_B96 24*9880d681SAndroid Build Coastguard Worker// DS_READ_B128 25*9880d681SAndroid Build Coastguard Worker// BUFFER_LOAD_DWORDX3 26*9880d681SAndroid Build Coastguard Worker// BUFFER_STORE_DWORDX3 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 29*9880d681SAndroid Build Coastguard Worker// VOP1 Instructions 30*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerlet SubtargetPredicate = isCIVI in { 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workerlet SchedRW = [WriteDoubleAdd] in { 35*9880d681SAndroid Build Coastguard Workerdefm V_TRUNC_F64 : VOP1Inst <vop1<0x17>, "v_trunc_f64", 36*9880d681SAndroid Build Coastguard Worker VOP_F64_F64, ftrunc 37*9880d681SAndroid Build Coastguard Worker>; 38*9880d681SAndroid Build Coastguard Workerdefm V_CEIL_F64 : VOP1Inst <vop1<0x18>, "v_ceil_f64", 39*9880d681SAndroid Build Coastguard Worker VOP_F64_F64, fceil 40*9880d681SAndroid Build Coastguard Worker>; 41*9880d681SAndroid Build Coastguard Workerdefm V_FLOOR_F64 : VOP1Inst <vop1<0x1A>, "v_floor_f64", 42*9880d681SAndroid Build Coastguard Worker VOP_F64_F64, ffloor 43*9880d681SAndroid Build Coastguard Worker>; 44*9880d681SAndroid Build Coastguard Workerdefm V_RNDNE_F64 : VOP1Inst <vop1<0x19>, "v_rndne_f64", 45*9880d681SAndroid Build Coastguard Worker VOP_F64_F64, frint 46*9880d681SAndroid Build Coastguard Worker>; 47*9880d681SAndroid Build Coastguard Worker} // End SchedRW = [WriteDoubleAdd] 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Workerlet SchedRW = [WriteQuarterRate32] in { 50*9880d681SAndroid Build Coastguard Workerdefm V_LOG_LEGACY_F32 : VOP1Inst <vop1<0x45, 0x4c>, "v_log_legacy_f32", 51*9880d681SAndroid Build Coastguard Worker VOP_F32_F32 52*9880d681SAndroid Build Coastguard Worker>; 53*9880d681SAndroid Build Coastguard Workerdefm V_EXP_LEGACY_F32 : VOP1Inst <vop1<0x46, 0x4b>, "v_exp_legacy_f32", 54*9880d681SAndroid Build Coastguard Worker VOP_F32_F32 55*9880d681SAndroid Build Coastguard Worker>; 56*9880d681SAndroid Build Coastguard Worker} // End SchedRW = [WriteQuarterRate32] 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 59*9880d681SAndroid Build Coastguard Worker// VOP3 Instructions 60*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Workerdefm V_QSAD_PK_U16_U8 : VOP3Inst <vop3<0x173>, "v_qsad_pk_u16_u8", 63*9880d681SAndroid Build Coastguard Worker VOP_I32_I32_I32 64*9880d681SAndroid Build Coastguard Worker>; 65*9880d681SAndroid Build Coastguard Workerdefm V_MQSAD_U16_U8 : VOP3Inst <vop3<0x172>, "v_mqsad_u16_u8", 66*9880d681SAndroid Build Coastguard Worker VOP_I32_I32_I32 67*9880d681SAndroid Build Coastguard Worker>; 68*9880d681SAndroid Build Coastguard Workerdefm V_MQSAD_U32_U8 : VOP3Inst <vop3<0x175>, "v_mqsad_u32_u8", 69*9880d681SAndroid Build Coastguard Worker VOP_I32_I32_I32 70*9880d681SAndroid Build Coastguard Worker>; 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Workerlet isCommutable = 1 in { 73*9880d681SAndroid Build Coastguard Workerdefm V_MAD_U64_U32 : VOP3Inst <vop3<0x176>, "v_mad_u64_u32", 74*9880d681SAndroid Build Coastguard Worker VOP_I64_I32_I32_I64 75*9880d681SAndroid Build Coastguard Worker>; 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Worker// XXX - Does this set VCC? 78*9880d681SAndroid Build Coastguard Workerdefm V_MAD_I64_I32 : VOP3Inst <vop3<0x177>, "v_mad_i64_i32", 79*9880d681SAndroid Build Coastguard Worker VOP_I64_I32_I32_I64 80*9880d681SAndroid Build Coastguard Worker>; 81*9880d681SAndroid Build Coastguard Worker} // End isCommutable = 1 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 85*9880d681SAndroid Build Coastguard Worker// DS Instructions 86*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 87*9880d681SAndroid Build Coastguard Workerdefm DS_WRAP_RTN_F32 : DS_1A1D_RET <0x34, "ds_wrap_rtn_f32", VGPR_32, "ds_wrap_f32">; 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Worker// DS_CONDXCHG32_RTN_B64 90*9880d681SAndroid Build Coastguard Worker// DS_CONDXCHG32_RTN_B128 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 93*9880d681SAndroid Build Coastguard Worker// SMRD Instructions 94*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 95*9880d681SAndroid Build Coastguard Worker 96*9880d681SAndroid Build Coastguard Workerdefm S_DCACHE_INV_VOL : SMRD_Inval <smrd<0x1d, 0x22>, 97*9880d681SAndroid Build Coastguard Worker "s_dcache_inv_vol", int_amdgcn_s_dcache_inv_vol>; 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 100*9880d681SAndroid Build Coastguard Worker// MUBUF Instructions 101*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Workerlet DisableSIDecoder = 1 in { 104*9880d681SAndroid Build Coastguard Workerdefm BUFFER_WBINVL1_VOL : MUBUF_Invalidate <mubuf<0x70, 0x3f>, 105*9880d681SAndroid Build Coastguard Worker "buffer_wbinvl1_vol", int_amdgcn_buffer_wbinvl1_vol 106*9880d681SAndroid Build Coastguard Worker>; 107*9880d681SAndroid Build Coastguard Worker} 108*9880d681SAndroid Build Coastguard Worker 109*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 110*9880d681SAndroid Build Coastguard Worker// Flat Instructions 111*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Workerdefm FLAT_LOAD_UBYTE : FLAT_Load_Helper < 114*9880d681SAndroid Build Coastguard Worker flat<0x8, 0x10>, "flat_load_ubyte", VGPR_32 115*9880d681SAndroid Build Coastguard Worker>; 116*9880d681SAndroid Build Coastguard Workerdefm FLAT_LOAD_SBYTE : FLAT_Load_Helper < 117*9880d681SAndroid Build Coastguard Worker flat<0x9, 0x11>, "flat_load_sbyte", VGPR_32 118*9880d681SAndroid Build Coastguard Worker>; 119*9880d681SAndroid Build Coastguard Workerdefm FLAT_LOAD_USHORT : FLAT_Load_Helper < 120*9880d681SAndroid Build Coastguard Worker flat<0xa, 0x12>, "flat_load_ushort", VGPR_32 121*9880d681SAndroid Build Coastguard Worker>; 122*9880d681SAndroid Build Coastguard Workerdefm FLAT_LOAD_SSHORT : FLAT_Load_Helper < 123*9880d681SAndroid Build Coastguard Worker flat<0xb, 0x13>, "flat_load_sshort", VGPR_32> 124*9880d681SAndroid Build Coastguard Worker; 125*9880d681SAndroid Build Coastguard Workerdefm FLAT_LOAD_DWORD : FLAT_Load_Helper < 126*9880d681SAndroid Build Coastguard Worker flat<0xc, 0x14>, "flat_load_dword", VGPR_32 127*9880d681SAndroid Build Coastguard Worker>; 128*9880d681SAndroid Build Coastguard Workerdefm FLAT_LOAD_DWORDX2 : FLAT_Load_Helper < 129*9880d681SAndroid Build Coastguard Worker flat<0xd, 0x15>, "flat_load_dwordx2", VReg_64 130*9880d681SAndroid Build Coastguard Worker>; 131*9880d681SAndroid Build Coastguard Workerdefm FLAT_LOAD_DWORDX4 : FLAT_Load_Helper < 132*9880d681SAndroid Build Coastguard Worker flat<0xe, 0x17>, "flat_load_dwordx4", VReg_128 133*9880d681SAndroid Build Coastguard Worker>; 134*9880d681SAndroid Build Coastguard Workerdefm FLAT_LOAD_DWORDX3 : FLAT_Load_Helper < 135*9880d681SAndroid Build Coastguard Worker flat<0xf, 0x16>, "flat_load_dwordx3", VReg_96 136*9880d681SAndroid Build Coastguard Worker>; 137*9880d681SAndroid Build Coastguard Workerdefm FLAT_STORE_BYTE : FLAT_Store_Helper < 138*9880d681SAndroid Build Coastguard Worker flat<0x18>, "flat_store_byte", VGPR_32 139*9880d681SAndroid Build Coastguard Worker>; 140*9880d681SAndroid Build Coastguard Workerdefm FLAT_STORE_SHORT : FLAT_Store_Helper < 141*9880d681SAndroid Build Coastguard Worker flat <0x1a>, "flat_store_short", VGPR_32 142*9880d681SAndroid Build Coastguard Worker>; 143*9880d681SAndroid Build Coastguard Workerdefm FLAT_STORE_DWORD : FLAT_Store_Helper < 144*9880d681SAndroid Build Coastguard Worker flat<0x1c>, "flat_store_dword", VGPR_32 145*9880d681SAndroid Build Coastguard Worker>; 146*9880d681SAndroid Build Coastguard Workerdefm FLAT_STORE_DWORDX2 : FLAT_Store_Helper < 147*9880d681SAndroid Build Coastguard Worker flat<0x1d>, "flat_store_dwordx2", VReg_64 148*9880d681SAndroid Build Coastguard Worker>; 149*9880d681SAndroid Build Coastguard Workerdefm FLAT_STORE_DWORDX4 : FLAT_Store_Helper < 150*9880d681SAndroid Build Coastguard Worker flat<0x1e, 0x1f>, "flat_store_dwordx4", VReg_128 151*9880d681SAndroid Build Coastguard Worker>; 152*9880d681SAndroid Build Coastguard Workerdefm FLAT_STORE_DWORDX3 : FLAT_Store_Helper < 153*9880d681SAndroid Build Coastguard Worker flat<0x1f, 0x1e>, "flat_store_dwordx3", VReg_96 154*9880d681SAndroid Build Coastguard Worker>; 155*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_SWAP : FLAT_ATOMIC < 156*9880d681SAndroid Build Coastguard Worker flat<0x30, 0x40>, "flat_atomic_swap", VGPR_32, i32, atomic_swap_flat 157*9880d681SAndroid Build Coastguard Worker>; 158*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_CMPSWAP : FLAT_ATOMIC < 159*9880d681SAndroid Build Coastguard Worker flat<0x31, 0x41>, "flat_atomic_cmpswap", VGPR_32, i32, 160*9880d681SAndroid Build Coastguard Worker atomic_cmp_swap_flat, v2i32, VReg_64 161*9880d681SAndroid Build Coastguard Worker>; 162*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_ADD : FLAT_ATOMIC < 163*9880d681SAndroid Build Coastguard Worker flat<0x32, 0x42>, "flat_atomic_add", VGPR_32, i32, atomic_add_flat 164*9880d681SAndroid Build Coastguard Worker>; 165*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_SUB : FLAT_ATOMIC < 166*9880d681SAndroid Build Coastguard Worker flat<0x33, 0x43>, "flat_atomic_sub", VGPR_32, i32, atomic_sub_flat 167*9880d681SAndroid Build Coastguard Worker>; 168*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_SMIN : FLAT_ATOMIC < 169*9880d681SAndroid Build Coastguard Worker flat<0x35, 0x44>, "flat_atomic_smin", VGPR_32, i32, atomic_min_flat 170*9880d681SAndroid Build Coastguard Worker>; 171*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_UMIN : FLAT_ATOMIC < 172*9880d681SAndroid Build Coastguard Worker flat<0x36, 0x45>, "flat_atomic_umin", VGPR_32, i32, atomic_umin_flat 173*9880d681SAndroid Build Coastguard Worker>; 174*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_SMAX : FLAT_ATOMIC < 175*9880d681SAndroid Build Coastguard Worker flat<0x37, 0x46>, "flat_atomic_smax", VGPR_32, i32, atomic_max_flat 176*9880d681SAndroid Build Coastguard Worker>; 177*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_UMAX : FLAT_ATOMIC < 178*9880d681SAndroid Build Coastguard Worker flat<0x38, 0x47>, "flat_atomic_umax", VGPR_32, i32, atomic_umax_flat 179*9880d681SAndroid Build Coastguard Worker>; 180*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_AND : FLAT_ATOMIC < 181*9880d681SAndroid Build Coastguard Worker flat<0x39, 0x48>, "flat_atomic_and", VGPR_32, i32, atomic_and_flat 182*9880d681SAndroid Build Coastguard Worker>; 183*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_OR : FLAT_ATOMIC < 184*9880d681SAndroid Build Coastguard Worker flat<0x3a, 0x49>, "flat_atomic_or", VGPR_32, i32, atomic_or_flat 185*9880d681SAndroid Build Coastguard Worker>; 186*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_XOR : FLAT_ATOMIC < 187*9880d681SAndroid Build Coastguard Worker flat<0x3b, 0x4a>, "flat_atomic_xor", VGPR_32, i32, atomic_xor_flat 188*9880d681SAndroid Build Coastguard Worker>; 189*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_INC : FLAT_ATOMIC < 190*9880d681SAndroid Build Coastguard Worker flat<0x3c, 0x4b>, "flat_atomic_inc", VGPR_32, i32, atomic_inc_flat 191*9880d681SAndroid Build Coastguard Worker>; 192*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_DEC : FLAT_ATOMIC < 193*9880d681SAndroid Build Coastguard Worker flat<0x3d, 0x4c>, "flat_atomic_dec", VGPR_32, i32, atomic_dec_flat 194*9880d681SAndroid Build Coastguard Worker>; 195*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_SWAP_X2 : FLAT_ATOMIC < 196*9880d681SAndroid Build Coastguard Worker flat<0x50, 0x60>, "flat_atomic_swap_x2", VReg_64, i64, atomic_swap_flat 197*9880d681SAndroid Build Coastguard Worker>; 198*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_CMPSWAP_X2 : FLAT_ATOMIC < 199*9880d681SAndroid Build Coastguard Worker flat<0x51, 0x61>, "flat_atomic_cmpswap_x2", VReg_64, i64, 200*9880d681SAndroid Build Coastguard Worker atomic_cmp_swap_flat, v2i64, VReg_128 201*9880d681SAndroid Build Coastguard Worker>; 202*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_ADD_X2 : FLAT_ATOMIC < 203*9880d681SAndroid Build Coastguard Worker flat<0x52, 0x62>, "flat_atomic_add_x2", VReg_64, i64, atomic_add_flat 204*9880d681SAndroid Build Coastguard Worker>; 205*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_SUB_X2 : FLAT_ATOMIC < 206*9880d681SAndroid Build Coastguard Worker flat<0x53, 0x63>, "flat_atomic_sub_x2", VReg_64, i64, atomic_sub_flat 207*9880d681SAndroid Build Coastguard Worker>; 208*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_SMIN_X2 : FLAT_ATOMIC < 209*9880d681SAndroid Build Coastguard Worker flat<0x55, 0x64>, "flat_atomic_smin_x2", VReg_64, i64, atomic_min_flat 210*9880d681SAndroid Build Coastguard Worker>; 211*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_UMIN_X2 : FLAT_ATOMIC < 212*9880d681SAndroid Build Coastguard Worker flat<0x56, 0x65>, "flat_atomic_umin_x2", VReg_64, i64, atomic_umin_flat 213*9880d681SAndroid Build Coastguard Worker>; 214*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_SMAX_X2 : FLAT_ATOMIC < 215*9880d681SAndroid Build Coastguard Worker flat<0x57, 0x66>, "flat_atomic_smax_x2", VReg_64, i64, atomic_max_flat 216*9880d681SAndroid Build Coastguard Worker>; 217*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_UMAX_X2 : FLAT_ATOMIC < 218*9880d681SAndroid Build Coastguard Worker flat<0x58, 0x67>, "flat_atomic_umax_x2", VReg_64, i64, atomic_umax_flat 219*9880d681SAndroid Build Coastguard Worker>; 220*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_AND_X2 : FLAT_ATOMIC < 221*9880d681SAndroid Build Coastguard Worker flat<0x59, 0x68>, "flat_atomic_and_x2", VReg_64, i64, atomic_and_flat 222*9880d681SAndroid Build Coastguard Worker>; 223*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_OR_X2 : FLAT_ATOMIC < 224*9880d681SAndroid Build Coastguard Worker flat<0x5a, 0x69>, "flat_atomic_or_x2", VReg_64, i64, atomic_or_flat 225*9880d681SAndroid Build Coastguard Worker>; 226*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_XOR_X2 : FLAT_ATOMIC < 227*9880d681SAndroid Build Coastguard Worker flat<0x5b, 0x6a>, "flat_atomic_xor_x2", VReg_64, i64, atomic_xor_flat 228*9880d681SAndroid Build Coastguard Worker>; 229*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_INC_X2 : FLAT_ATOMIC < 230*9880d681SAndroid Build Coastguard Worker flat<0x5c, 0x6b>, "flat_atomic_inc_x2", VReg_64, i64, atomic_inc_flat 231*9880d681SAndroid Build Coastguard Worker>; 232*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_DEC_X2 : FLAT_ATOMIC < 233*9880d681SAndroid Build Coastguard Worker flat<0x5d, 0x6c>, "flat_atomic_dec_x2", VReg_64, i64, atomic_dec_flat 234*9880d681SAndroid Build Coastguard Worker>; 235*9880d681SAndroid Build Coastguard Worker 236*9880d681SAndroid Build Coastguard Worker} // End SubtargetPredicate = isCIVI 237*9880d681SAndroid Build Coastguard Worker 238*9880d681SAndroid Build Coastguard Worker// CI Only flat instructions 239*9880d681SAndroid Build Coastguard Worker 240*9880d681SAndroid Build Coastguard Workerlet SubtargetPredicate = isCI, VIAssemblerPredicate = DisableInst, DisableVIDecoder = 1 in { 241*9880d681SAndroid Build Coastguard Worker 242*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_FCMPSWAP : FLAT_ATOMIC < 243*9880d681SAndroid Build Coastguard Worker flat<0x3e>, "flat_atomic_fcmpswap", VGPR_32, f32, 244*9880d681SAndroid Build Coastguard Worker null_frag, v2f32, VReg_64 245*9880d681SAndroid Build Coastguard Worker>; 246*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_FMIN : FLAT_ATOMIC < 247*9880d681SAndroid Build Coastguard Worker flat<0x3f>, "flat_atomic_fmin", VGPR_32, f32 248*9880d681SAndroid Build Coastguard Worker>; 249*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_FMAX : FLAT_ATOMIC < 250*9880d681SAndroid Build Coastguard Worker flat<0x40>, "flat_atomic_fmax", VGPR_32, f32 251*9880d681SAndroid Build Coastguard Worker>; 252*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_FCMPSWAP_X2 : FLAT_ATOMIC < 253*9880d681SAndroid Build Coastguard Worker flat<0x5e>, "flat_atomic_fcmpswap_x2", VReg_64, f64, 254*9880d681SAndroid Build Coastguard Worker null_frag, v2f64, VReg_128 255*9880d681SAndroid Build Coastguard Worker>; 256*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_FMIN_X2 : FLAT_ATOMIC < 257*9880d681SAndroid Build Coastguard Worker flat<0x5f>, "flat_atomic_fmin_x2", VReg_64, f64 258*9880d681SAndroid Build Coastguard Worker>; 259*9880d681SAndroid Build Coastguard Workerdefm FLAT_ATOMIC_FMAX_X2 : FLAT_ATOMIC < 260*9880d681SAndroid Build Coastguard Worker flat<0x60>, "flat_atomic_fmax_x2", VReg_64, f64 261*9880d681SAndroid Build Coastguard Worker>; 262*9880d681SAndroid Build Coastguard Worker 263*9880d681SAndroid Build Coastguard Worker} // End SubtargetPredicate = isCI, VIAssemblerPredicate = DisableInst, DisableVIDecoder = 1 264*9880d681SAndroid Build Coastguard Worker 265*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 266*9880d681SAndroid Build Coastguard Worker// Flat Patterns 267*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 268*9880d681SAndroid Build Coastguard Worker 269*9880d681SAndroid Build Coastguard Workerlet Predicates = [isCIVI] in { 270*9880d681SAndroid Build Coastguard Worker 271*9880d681SAndroid Build Coastguard Worker// Patterns for global loads with no offset. 272*9880d681SAndroid Build Coastguard Workerclass FlatLoadPat <FLAT inst, SDPatternOperator node, ValueType vt> : Pat < 273*9880d681SAndroid Build Coastguard Worker (vt (node i64:$addr)), 274*9880d681SAndroid Build Coastguard Worker (inst $addr, 0, 0, 0) 275*9880d681SAndroid Build Coastguard Worker>; 276*9880d681SAndroid Build Coastguard Worker 277*9880d681SAndroid Build Coastguard Workerclass FlatLoadAtomicPat <FLAT inst, SDPatternOperator node, ValueType vt> : Pat < 278*9880d681SAndroid Build Coastguard Worker (vt (node i64:$addr)), 279*9880d681SAndroid Build Coastguard Worker (inst $addr, 1, 0, 0) 280*9880d681SAndroid Build Coastguard Worker>; 281*9880d681SAndroid Build Coastguard Worker 282*9880d681SAndroid Build Coastguard Workerdef : FlatLoadPat <FLAT_LOAD_UBYTE, flat_az_extloadi8, i32>; 283*9880d681SAndroid Build Coastguard Workerdef : FlatLoadPat <FLAT_LOAD_SBYTE, flat_sextloadi8, i32>; 284*9880d681SAndroid Build Coastguard Workerdef : FlatLoadPat <FLAT_LOAD_USHORT, flat_az_extloadi16, i32>; 285*9880d681SAndroid Build Coastguard Workerdef : FlatLoadPat <FLAT_LOAD_SSHORT, flat_sextloadi16, i32>; 286*9880d681SAndroid Build Coastguard Workerdef : FlatLoadPat <FLAT_LOAD_DWORD, flat_load, i32>; 287*9880d681SAndroid Build Coastguard Workerdef : FlatLoadPat <FLAT_LOAD_DWORDX2, flat_load, v2i32>; 288*9880d681SAndroid Build Coastguard Workerdef : FlatLoadPat <FLAT_LOAD_DWORDX4, flat_load, v4i32>; 289*9880d681SAndroid Build Coastguard Worker 290*9880d681SAndroid Build Coastguard Workerdef : FlatLoadAtomicPat <FLAT_LOAD_DWORD, atomic_flat_load, i32>; 291*9880d681SAndroid Build Coastguard Workerdef : FlatLoadAtomicPat <FLAT_LOAD_DWORDX2, atomic_flat_load, i64>; 292*9880d681SAndroid Build Coastguard Worker 293*9880d681SAndroid Build Coastguard Worker 294*9880d681SAndroid Build Coastguard Workerclass FlatStorePat <FLAT inst, SDPatternOperator node, ValueType vt> : Pat < 295*9880d681SAndroid Build Coastguard Worker (node vt:$data, i64:$addr), 296*9880d681SAndroid Build Coastguard Worker (inst $addr, $data, 0, 0, 0) 297*9880d681SAndroid Build Coastguard Worker>; 298*9880d681SAndroid Build Coastguard Worker 299*9880d681SAndroid Build Coastguard Workerclass FlatStoreAtomicPat <FLAT inst, SDPatternOperator node, ValueType vt> : Pat < 300*9880d681SAndroid Build Coastguard Worker // atomic store follows atomic binop convention so the address comes 301*9880d681SAndroid Build Coastguard Worker // first. 302*9880d681SAndroid Build Coastguard Worker (node i64:$addr, vt:$data), 303*9880d681SAndroid Build Coastguard Worker (inst $addr, $data, 1, 0, 0) 304*9880d681SAndroid Build Coastguard Worker>; 305*9880d681SAndroid Build Coastguard Worker 306*9880d681SAndroid Build Coastguard Workerdef : FlatStorePat <FLAT_STORE_BYTE, flat_truncstorei8, i32>; 307*9880d681SAndroid Build Coastguard Workerdef : FlatStorePat <FLAT_STORE_SHORT, flat_truncstorei16, i32>; 308*9880d681SAndroid Build Coastguard Workerdef : FlatStorePat <FLAT_STORE_DWORD, flat_store, i32>; 309*9880d681SAndroid Build Coastguard Workerdef : FlatStorePat <FLAT_STORE_DWORDX2, flat_store, v2i32>; 310*9880d681SAndroid Build Coastguard Workerdef : FlatStorePat <FLAT_STORE_DWORDX4, flat_store, v4i32>; 311*9880d681SAndroid Build Coastguard Worker 312*9880d681SAndroid Build Coastguard Workerdef : FlatStoreAtomicPat <FLAT_STORE_DWORD, atomic_flat_store, i32>; 313*9880d681SAndroid Build Coastguard Workerdef : FlatStoreAtomicPat <FLAT_STORE_DWORDX2, atomic_flat_store, i64>; 314*9880d681SAndroid Build Coastguard Worker 315*9880d681SAndroid Build Coastguard Workerclass FlatAtomicPat <FLAT inst, SDPatternOperator node, ValueType vt, 316*9880d681SAndroid Build Coastguard Worker ValueType data_vt = vt> : Pat < 317*9880d681SAndroid Build Coastguard Worker (vt (node i64:$addr, data_vt:$data)), 318*9880d681SAndroid Build Coastguard Worker (inst $addr, $data, 0, 0) 319*9880d681SAndroid Build Coastguard Worker>; 320*9880d681SAndroid Build Coastguard Worker 321*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_ADD_RTN, atomic_add_global, i32>; 322*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_SUB_RTN, atomic_sub_global, i32>; 323*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_INC_RTN, atomic_inc_global, i32>; 324*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_DEC_RTN, atomic_dec_global, i32>; 325*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_AND_RTN, atomic_and_global, i32>; 326*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_SMAX_RTN, atomic_max_global, i32>; 327*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_UMAX_RTN, atomic_umax_global, i32>; 328*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_SMIN_RTN, atomic_min_global, i32>; 329*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_UMIN_RTN, atomic_umin_global, i32>; 330*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_OR_RTN, atomic_or_global, i32>; 331*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_SWAP_RTN, atomic_swap_global, i32>; 332*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_CMPSWAP_RTN, atomic_cmp_swap_global, i32, v2i32>; 333*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_XOR_RTN, atomic_xor_global, i32>; 334*9880d681SAndroid Build Coastguard Worker 335*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_ADD_X2_RTN, atomic_add_global, i64>; 336*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_SUB_X2_RTN, atomic_sub_global, i64>; 337*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_INC_X2_RTN, atomic_inc_global, i64>; 338*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_DEC_X2_RTN, atomic_dec_global, i64>; 339*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_AND_X2_RTN, atomic_and_global, i64>; 340*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_SMAX_X2_RTN, atomic_max_global, i64>; 341*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_UMAX_X2_RTN, atomic_umax_global, i64>; 342*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_SMIN_X2_RTN, atomic_min_global, i64>; 343*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_UMIN_X2_RTN, atomic_umin_global, i64>; 344*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_OR_X2_RTN, atomic_or_global, i64>; 345*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_SWAP_X2_RTN, atomic_swap_global, i64>; 346*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_CMPSWAP_X2_RTN, atomic_cmp_swap_global, i64, v2i64>; 347*9880d681SAndroid Build Coastguard Workerdef : FlatAtomicPat <FLAT_ATOMIC_XOR_X2_RTN, atomic_xor_global, i64>; 348*9880d681SAndroid Build Coastguard Worker 349*9880d681SAndroid Build Coastguard Worker} // End Predicates = [isCIVI] 350