1// RUN: not llvm-mc -arch=amdgcn -show-encoding %s | FileCheck --check-prefix=GCN --check-prefix=SICI %s 2// RUN: not llvm-mc -arch=amdgcn -mcpu=tahiti -show-encoding %s | FileCheck --check-prefix=GCN --check-prefix=SICI %s 3// RUN: not llvm-mc -arch=amdgcn -mcpu=bonaire -show-encoding %s | FileCheck --check-prefix=GCN --check-prefix=SICI %s 4// RUN: not llvm-mc -arch=amdgcn -mcpu=fiji -show-encoding %s | FileCheck --check-prefix=GCN --check-prefix=GFX89 %s 5// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx900 -show-encoding %s | FileCheck --check-prefix=GCN --check-prefix=GFX89 --check-prefix=GFX9 %s 6// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx1010 -show-encoding %s | FileCheck --check-prefix=GCN --check-prefix=GFX10 %s 7 8// RUN: not llvm-mc -arch=amdgcn -show-encoding %s 2>&1 | FileCheck --check-prefix=NOSICIVI %s 9// RUN: not llvm-mc -arch=amdgcn -mcpu=tahiti -show-encoding %s 2>&1 | FileCheck --check-prefix=NOSICIVI %s 10// RUN: not llvm-mc -arch=amdgcn -mcpu=bonaire -show-encoding %s 2>&1 | FileCheck --check-prefix=NOSICIVI %s 11// RUN: not llvm-mc -arch=amdgcn -mcpu=fiji -show-encoding %s 2>&1 | FileCheck --check-prefix=NOSICIVI --check-prefix=NOVI --check-prefix=NOGFX89 %s 12// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx900 -show-encoding %s 2>&1 | FileCheck --check-prefix=NOGFX89 %s 13 14// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx1010 -show-encoding 2>&1 %s | FileCheck --check-prefix=GFX10-ERR %s 15 16s_add_u32 s1, s2, s3 17// GCN: s_add_u32 s1, s2, s3 ; encoding: [0x02,0x03,0x01,0x80] 18 19s_sub_u32 s1, s2, s3 20// GCN: s_sub_u32 s1, s2, s3 ; encoding: [0x02,0x03,0x81,0x80] 21 22s_add_i32 s1, s2, s3 23// GCN: s_add_i32 s1, s2, s3 ; encoding: [0x02,0x03,0x01,0x81] 24 25s_sub_i32 s1, s2, s3 26// GCN: s_sub_i32 s1, s2, s3 ; encoding: [0x02,0x03,0x81,0x81] 27 28s_addc_u32 s1, s2, s3 29// GCN: s_addc_u32 s1, s2, s3 ; encoding: [0x02,0x03,0x01,0x82] 30 31s_subb_u32 s1, s2, s3 32// GCN: s_subb_u32 s1, s2, s3 ; encoding: [0x02,0x03,0x81,0x82] 33 34s_min_i32 s1, s2, s3 35// GCN: s_min_i32 s1, s2, s3 ; encoding: [0x02,0x03,0x01,0x83] 36 37s_min_u32 s1, s2, s3 38// GCN: s_min_u32 s1, s2, s3 ; encoding: [0x02,0x03,0x81,0x83] 39 40s_max_i32 s1, s2, s3 41// GCN: s_max_i32 s1, s2, s3 ; encoding: [0x02,0x03,0x01,0x84] 42 43s_max_u32 s1, s2, s3 44// GCN: s_max_u32 s1, s2, s3 ; encoding: [0x02,0x03,0x81,0x84] 45 46s_cselect_b32 s1, s2, s3 47// GCN: s_cselect_b32 s1, s2, s3 ; encoding: [0x02,0x03,0x01,0x85] 48 49s_cselect_b64 s[2:3], s[4:5], s[6:7] 50// GCN: s_cselect_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x85] 51 52s_and_b32 s2, s4, s6 53// SICI: s_and_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x87] 54// GFX89: s_and_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x86] 55 56s_and_b32 s2, 1234, 1234 57// SICI: s_and_b32 s2, 0x4d2, 0x4d2 ; encoding: [0xff,0xff,0x02,0x87,0xd2,0x04,0x00,0x00] 58// GFX89: s_and_b32 s2, 0x4d2, 0x4d2 ; encoding: [0xff,0xff,0x02,0x86,0xd2,0x04,0x00,0x00] 59 60s_and_b32 s2, 0xFFFF0000, -65536 61// SICI: s_and_b32 s2, 0xffff0000, 0xffff0000 ; encoding: [0xff,0xff,0x02,0x87,0x00,0x00,0xff,0xff] 62// GFX89: s_and_b32 s2, 0xffff0000, 0xffff0000 ; encoding: [0xff,0xff,0x02,0x86,0x00,0x00,0xff,0xff] 63 64s_and_b64 null, s[4:5], s[6:7] 65// GFX10: s_and_b64 null, s[4:5], s[6:7] ; encoding: [0x04,0x06,0xfd,0x87] 66// NOSICIVI: error: not a valid operand. 67 68s_and_b64 s[2:3], s[4:5], s[6:7] 69// SICI: s_and_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x87] 70// GFX89: s_and_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x86] 71 72s_or_b32 s2, s4, s6 73// SICI: s_or_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x88] 74// GFX89: s_or_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x87] 75 76s_or_b64 s[2:3], s[4:5], s[6:7] 77// SICI: s_or_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x88] 78// GFX89: s_or_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x87] 79 80s_xor_b32 s2, s4, s6 81// SICI: s_xor_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x89] 82// GFX89: s_xor_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x88] 83 84s_xor_b64 s[2:3], s[4:5], s[6:7] 85// SICI: s_xor_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x89] 86// GFX89: s_xor_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x88] 87 88s_andn2_b32 s2, s4, s6 89// SICI: s_andn2_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8a] 90// GFX89: s_andn2_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x89] 91 92s_andn2_b64 s[2:3], s[4:5], s[6:7] 93// SICI: s_andn2_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x8a] 94// GFX89: s_andn2_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x89] 95 96s_orn2_b32 s2, s4, s6 97// SICI: s_orn2_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8b] 98// GFX89: s_orn2_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8a] 99 100s_orn2_b64 s[2:3], s[4:5], s[6:7] 101// SICI: s_orn2_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x8b] 102// GFX89: s_orn2_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x8a] 103 104s_nand_b32 s2, s4, s6 105// SICI: s_nand_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8c] 106// GFX89: s_nand_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8b] 107 108s_nand_b64 s[2:3], s[4:5], s[6:7] 109// SICI: s_nand_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x8c] 110// GFX89: s_nand_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x8b] 111 112s_nor_b32 s2, s4, s6 113// SICI: s_nor_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8d] 114// GFX89: s_nor_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8c] 115 116s_nor_b64 s[2:3], s[4:5], s[6:7] 117// SICI: s_nor_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x8d] 118// GFX89: s_nor_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x8c] 119 120s_xnor_b32 s2, s4, s6 121// SICI: s_xnor_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8e] 122// GFX89: s_xnor_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8d] 123 124s_xnor_b64 s[2:3], s[4:5], s[6:7] 125// SICI: s_xnor_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x8e] 126// GFX89: s_xnor_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x8d] 127 128s_lshl_b32 s2, s4, s6 129// SICI: s_lshl_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8f] 130// GFX89: s_lshl_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8e] 131 132s_lshl_b64 s[2:3], s[4:5], s6 133// SICI: s_lshl_b64 s[2:3], s[4:5], s6 ; encoding: [0x04,0x06,0x82,0x8f] 134// GFX89: s_lshl_b64 s[2:3], s[4:5], s6 ; encoding: [0x04,0x06,0x82,0x8e] 135 136s_lshr_b32 s2, s4, s6 137// SICI: s_lshr_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x90] 138// GFX89: s_lshr_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8f] 139 140s_lshr_b64 s[2:3], s[4:5], s6 141// SICI: s_lshr_b64 s[2:3], s[4:5], s6 ; encoding: [0x04,0x06,0x82,0x90] 142// GFX89: s_lshr_b64 s[2:3], s[4:5], s6 ; encoding: [0x04,0x06,0x82,0x8f] 143 144s_ashr_i32 s2, s4, s6 145// SICI: s_ashr_i32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x91] 146// GFX89: s_ashr_i32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x90] 147 148s_ashr_i64 s[2:3], s[4:5], s6 149// SICI: s_ashr_i64 s[2:3], s[4:5], s6 ; encoding: [0x04,0x06,0x82,0x91] 150// GFX89: s_ashr_i64 s[2:3], s[4:5], s6 ; encoding: [0x04,0x06,0x82,0x90] 151 152s_ashr_i64 s[2:3], -65536, 0xFFFF0000 153// SICI: s_ashr_i64 s[2:3], 0xffff0000, 0xffff0000 ; encoding: [0xff,0xff,0x82,0x91,0x00,0x00,0xff,0xff] 154// GFX89: s_ashr_i64 s[2:3], 0xffff0000, 0xffff0000 ; encoding: [0xff,0xff,0x82,0x90,0x00,0x00,0xff,0xff] 155 156s_bfm_b32 s2, s4, s6 157// SICI: s_bfm_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x92] 158// GFX89: s_bfm_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x91] 159 160s_bfm_b64 s[2:3], s4, s6 161// SICI: s_bfm_b64 s[2:3], s4, s6 ; encoding: [0x04,0x06,0x82,0x92] 162// GFX89: s_bfm_b64 s[2:3], s4, s6 ; encoding: [0x04,0x06,0x82,0x91] 163 164s_mul_i32 s2, s4, s6 165// SICI: s_mul_i32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x93] 166// GFX89: s_mul_i32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x92] 167 168s_bfe_u32 s2, s4, s6 169// SICI: s_bfe_u32 s2, s4, s6 ; encoding: [0x04,0x06,0x82,0x93] 170// GFX89: s_bfe_u32 s2, s4, s6 ; encoding: [0x04,0x06,0x82,0x92] 171 172s_bfe_i32 s2, s4, s6 173// SICI: s_bfe_i32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x94] 174// GFX89: s_bfe_i32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x93] 175 176s_bfe_u64 s[2:3], s[4:5], s6 177// SICI: s_bfe_u64 s[2:3], s[4:5], s6 ; encoding: [0x04,0x06,0x82,0x94] 178// GFX89: s_bfe_u64 s[2:3], s[4:5], s6 ; encoding: [0x04,0x06,0x82,0x93] 179 180s_bfe_i64 s[2:3], s[4:5], s6 181// SICI: s_bfe_i64 s[2:3], s[4:5], s6 ; encoding: [0x04,0x06,0x02,0x95] 182// GFX89: s_bfe_i64 s[2:3], s[4:5], s6 ; encoding: [0x04,0x06,0x02,0x94] 183 184s_cbranch_g_fork s[4:5], s[6:7] 185// SICI: s_cbranch_g_fork s[4:5], s[6:7] ; encoding: [0x04,0x06,0x80,0x95] 186// GFX89: s_cbranch_g_fork s[4:5], s[6:7] ; encoding: [0x04,0x06,0x80,0x94] 187// GFX10-ERR: error: instruction not supported on this GPU 188 189s_cbranch_g_fork 1, s[6:7] 190// SICI: s_cbranch_g_fork 1, s[6:7] ; encoding: [0x81,0x06,0x80,0x95] 191// GFX89: s_cbranch_g_fork 1, s[6:7] ; encoding: [0x81,0x06,0x80,0x94] 192// GFX10-ERR: error: instruction not supported on this GPU 193 194s_cbranch_g_fork s[6:7], 2 195// SICI: s_cbranch_g_fork s[6:7], 2 ; encoding: [0x06,0x82,0x80,0x95] 196// GFX89: s_cbranch_g_fork s[6:7], 2 ; encoding: [0x06,0x82,0x80,0x94] 197// GFX10-ERR: error: instruction not supported on this GPU 198 199s_absdiff_i32 s2, s4, s6 200// SICI: s_absdiff_i32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x96] 201// GFX89: s_absdiff_i32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x95] 202 203s_add_u32 s101, s102, s103 204// SICI: s_add_u32 s101, s102, s103 ; encoding: [0x66,0x67,0x65,0x80] 205// NOGFX89: error: not a valid operand 206 207s_lshl1_add_u32 s5, s1, s2 208// GFX9: s_lshl1_add_u32 s5, s1, s2 ; encoding: [0x01,0x02,0x05,0x97] 209// NOSICIVI: error 210 211s_lshl1_add_u32 s5, -1, s2 212// GFX9: s_lshl1_add_u32 s5, -1, s2 ; encoding: [0xc1,0x02,0x05,0x97] 213// NOSICIVI: error 214 215s_lshl1_add_u32 s5, s1, 0 216// GFX9: s_lshl1_add_u32 s5, s1, 0 ; encoding: [0x01,0x80,0x05,0x97] 217// NOSICIVI: error 218 219s_lshl1_add_u32 s5, s1, 0x3f717273 220// GFX9: s_lshl1_add_u32 s5, s1, 0x3f717273 ; encoding: [0x01,0xff,0x05,0x97,0x73,0x72,0x71,0x3f] 221// NOSICIVI: error 222 223s_lshl2_add_u32 s101, s1, s2 224// GFX9: s_lshl2_add_u32 s101, s1, s2 ; encoding: [0x01,0x02,0xe5,0x97] 225// NOSICIVI: error 226 227s_lshl2_add_u32 s5, 0xaf123456, s2 228// GFX9: s_lshl2_add_u32 s5, 0xaf123456, s2 ; encoding: [0xff,0x02,0x85,0x97,0x56,0x34,0x12,0xaf] 229// NOSICIVI: error 230 231s_lshl3_add_u32 s5, 0x3f717273, s2 232// GFX9: s_lshl3_add_u32 s5, 0x3f717273, s2 ; encoding: [0xff,0x02,0x05,0x98,0x73,0x72,0x71,0x3f] 233// NOSICIVI: error 234 235s_lshl3_add_u32 s5, s1, s101 236// GFX9: s_lshl3_add_u32 s5, s1, s101 ; encoding: [0x01,0x65,0x05,0x98] 237// NOSICIVI: error 238 239s_lshl4_add_u32 s5, s1, 0xaf123456 240// GFX9: s_lshl4_add_u32 s5, s1, 0xaf123456 ; encoding: [0x01,0xff,0x85,0x98,0x56,0x34,0x12,0xaf] 241// NOSICIVI: error 242 243s_lshl4_add_u32 s5, -1, s2 244// GFX9: s_lshl4_add_u32 s5, -1, s2 ; encoding: [0xc1,0x02,0x85,0x98] 245// NOSICIVI: error 246 247s_mul_hi_i32 s5, s101, s2 248// GFX9: s_mul_hi_i32 s5, s101, s2 ; encoding: [0x65,0x02,0x85,0x96] 249// NOSICIVI: error 250 251s_mul_hi_i32 s5, 0, s2 252// GFX9: s_mul_hi_i32 s5, 0, s2 ; encoding: [0x80,0x02,0x85,0x96] 253// NOSICIVI: error 254 255s_mul_hi_i32 s5, 0x3f717273, s2 256// GFX9: s_mul_hi_i32 s5, 0x3f717273, s2 ; encoding: [0xff,0x02,0x85,0x96,0x73,0x72,0x71,0x3f] 257// NOSICIVI: error 258 259s_mul_hi_i32 s5, s1, s101 260// GFX9: s_mul_hi_i32 s5, s1, s101 ; encoding: [0x01,0x65,0x85,0x96] 261// NOSICIVI: error 262 263s_mul_hi_i32 s5, s1, 0 264// GFX9: s_mul_hi_i32 s5, s1, 0 ; encoding: [0x01,0x80,0x85,0x96] 265// NOSICIVI: error 266 267s_mul_hi_u32 s5, s1, 0x3f717273 268// GFX9: s_mul_hi_u32 s5, s1, 0x3f717273 ; encoding: [0x01,0xff,0x05,0x96,0x73,0x72,0x71,0x3f] 269// NOSICIVI: error 270 271s_mul_hi_u32 s5, s1, s101 272// GFX9: s_mul_hi_u32 s5, s1, s101 ; encoding: [0x01,0x65,0x05,0x96] 273// NOSICIVI: error 274 275s_mul_hi_u32 s5, s1, 0 276// GFX9: s_mul_hi_u32 s5, s1, 0 ; encoding: [0x01,0x80,0x05,0x96] 277// NOSICIVI: error 278