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=fiji -show-encoding %s 2>&1 | FileCheck --check-prefix=GCN --check-prefix=VI --check-prefix=GFX89 %s 3 // RUN: not llvm-mc -arch=amdgcn -mcpu=gfx900 -show-encoding %s 2>&1 | FileCheck --check-prefix=GCN --check-prefix=GFX89 --check-prefix=GFX9 %s 4 5 // RUN: not llvm-mc -arch=amdgcn -show-encoding %s 2>&1 | FileCheck --check-prefix=NOSICI --check-prefix=NOSICIVI %s 6 // RUN: not llvm-mc -arch=amdgcn -mcpu=fiji -show-encoding %s 2>&1 | FileCheck --check-prefix=NOVI --check-prefix=NOSICIVI --check-prefix=NOGFX89 %s 7 // RUN: not llvm-mc -arch=amdgcn -mcpu=gfx900 -show-encoding %s 2>&1 | FileCheck --check-prefix=NOGFX89 %s 8 9 s_mov_b32 s1, s2 10 // SICI: s_mov_b32 s1, s2 ; encoding: [0x02,0x03,0x81,0xbe] 11 // GFX89: s_mov_b32 s1, s2 ; encoding: [0x02,0x00,0x81,0xbe] 12 13 s_mov_b32 s1, 1 14 // SICI: s_mov_b32 s1, 1 ; encoding: [0x81,0x03,0x81,0xbe] 15 // GFX89: s_mov_b32 s1, 1 ; encoding: [0x81,0x00,0x81,0xbe] 16 17 s_mov_b32 s1, 100 18 // SICI: s_mov_b32 s1, 0x64 ; encoding: [0xff,0x03,0x81,0xbe,0x64,0x00,0x00,0x00] 19 // GFX89: s_mov_b32 s1, 0x64 ; encoding: [0xff,0x00,0x81,0xbe,0x64,0x00,0x00,0x00] 20 21 // Literal constant sign bit 22 s_mov_b32 s1, 0x80000000 23 // SICI: s_mov_b32 s1, 0x80000000 ; encoding: [0xff,0x03,0x81,0xbe,0x00,0x00,0x00,0x80] 24 // GFX89: s_mov_b32 s1, 0x80000000 ; encoding: [0xff,0x00,0x81,0xbe,0x00,0x00,0x00,0x80] 25 26 // Negative 32-bit constant 27 s_mov_b32 s0, 0xfe5163ab 28 // SICI: s_mov_b32 s0, 0xfe5163ab ; encoding: [0xff,0x03,0x80,0xbe,0xab,0x63,0x51,0xfe] 29 // GFX89: s_mov_b32 s0, 0xfe5163ab ; encoding: [0xff,0x00,0x80,0xbe,0xab,0x63,0x51,0xfe] 30 31 s_mov_b64 s[2:3], s[4:5] 32 // SICI: s_mov_b64 s[2:3], s[4:5] ; encoding: [0x04,0x04,0x82,0xbe] 33 // GFX89: s_mov_b64 s[2:3], s[4:5] ; encoding: [0x04,0x01,0x82,0xbe] 34 35 s_mov_b64 s[2:3], 0xffffffffffffffff 36 // SICI: s_mov_b64 s[2:3], -1 ; encoding: [0xc1,0x04,0x82,0xbe] 37 // GFX89: s_mov_b64 s[2:3], -1 ; encoding: [0xc1,0x01,0x82,0xbe] 38 39 s_mov_b64 s[2:3], 0xffffffff 40 // SICI: s_mov_b64 s[2:3], 0xffffffff ; encoding: [0xff,0x04,0x82,0xbe,0xff,0xff,0xff,0xff] 41 // GFX89: s_mov_b64 s[2:3], 0xffffffff ; encoding: [0xff,0x01,0x82,0xbe,0xff,0xff,0xff,0xff] 42 43 s_mov_b64 s[0:1], 0x80000000 44 // SICI: s_mov_b64 s[0:1], 0x80000000 ; encoding: [0xff,0x04,0x80,0xbe,0x00,0x00,0x00,0x80] 45 // GFX89: s_mov_b64 s[0:1], 0x80000000 ; encoding: [0xff,0x01,0x80,0xbe,0x00,0x00,0x00,0x80] 46 47 s_mov_b64 s[102:103], -1 48 // SICI: s_mov_b64 s[102:103], -1 ; encoding: [0xc1,0x04,0xe6,0xbe] 49 // NOGFX89: error: not a valid operand 50 51 s_cmov_b32 s1, 200 52 // SICI: s_cmov_b32 s1, 0xc8 ; encoding: [0xff,0x05,0x81,0xbe,0xc8,0x00,0x00,0x00] 53 // GFX89: s_cmov_b32 s1, 0xc8 ; encoding: [0xff,0x02,0x81,0xbe,0xc8,0x00,0x00,0x00] 54 55 s_cmov_b32 s1, 1.0 56 // SICI: s_cmov_b32 s1, 1.0 ; encoding: [0xf2,0x05,0x81,0xbe] 57 // GFX89: s_cmov_b32 s1, 1.0 ; encoding: [0xf2,0x02,0x81,0xbe] 58 59 s_cmov_b32 s1, s2 60 // SICI: s_cmov_b32 s1, s2 ; encoding: [0x02,0x05,0x81,0xbe] 61 // GFX89: s_cmov_b32 s1, s2 ; encoding: [0x02,0x02,0x81,0xbe] 62 63 //s_cmov_b64 s[2:3], 1.0 64 //GCN-FIXME: s_cmov_b64 s[2:3], 1.0 ; encoding: [0xf2,0x05,0x82,0xb3] 65 66 s_cmov_b64 s[2:3], s[4:5] 67 // SICI: s_cmov_b64 s[2:3], s[4:5] ; encoding: [0x04,0x06,0x82,0xbe] 68 // GFX89: s_cmov_b64 s[2:3], s[4:5] ; encoding: [0x04,0x03,0x82,0xbe] 69 70 s_not_b32 s1, s2 71 // SICI: s_not_b32 s1, s2 ; encoding: [0x02,0x07,0x81,0xbe] 72 // GFX89: s_not_b32 s1, s2 ; encoding: [0x02,0x04,0x81,0xbe] 73 74 s_not_b64 s[2:3], s[4:5] 75 // SICI: s_not_b64 s[2:3], s[4:5] ; encoding: [0x04,0x08,0x82,0xbe] 76 // GFX89: s_not_b64 s[2:3], s[4:5] ; encoding: [0x04,0x05,0x82,0xbe] 77 78 s_wqm_b32 s1, s2 79 // SICI: s_wqm_b32 s1, s2 ; encoding: [0x02,0x09,0x81,0xbe] 80 // GFX89: s_wqm_b32 s1, s2 ; encoding: [0x02,0x06,0x81,0xbe] 81 82 s_wqm_b64 s[2:3], s[4:5] 83 // SICI: s_wqm_b64 s[2:3], s[4:5] ; encoding: [0x04,0x0a,0x82,0xbe] 84 // GFX89: s_wqm_b64 s[2:3], s[4:5] ; encoding: [0x04,0x07,0x82,0xbe] 85 86 s_brev_b32 s1, s2 87 // SICI: s_brev_b32 s1, s2 ; encoding: [0x02,0x0b,0x81,0xbe] 88 // GFX89: s_brev_b32 s1, s2 ; encoding: [0x02,0x08,0x81,0xbe] 89 90 s_brev_b64 s[2:3], s[4:5] 91 // SICI: s_brev_b64 s[2:3], s[4:5] ; encoding: [0x04,0x0c,0x82,0xbe] 92 // GFX89: s_brev_b64 s[2:3], s[4:5] ; encoding: [0x04,0x09,0x82,0xbe] 93 94 s_bcnt0_i32_b32 s1, s2 95 // SICI: s_bcnt0_i32_b32 s1, s2 ; encoding: [0x02,0x0d,0x81,0xbe] 96 // GFX89: s_bcnt0_i32_b32 s1, s2 ; encoding: [0x02,0x0a,0x81,0xbe] 97 98 s_bcnt0_i32_b64 s1, s[2:3] 99 // SICI: s_bcnt0_i32_b64 s1, s[2:3] ; encoding: [0x02,0x0e,0x81,0xbe] 100 // GFX89: s_bcnt0_i32_b64 s1, s[2:3] ; encoding: [0x02,0x0b,0x81,0xbe] 101 102 s_bcnt1_i32_b32 s1, s2 103 // SICI: s_bcnt1_i32_b32 s1, s2 ; encoding: [0x02,0x0f,0x81,0xbe] 104 // GFX89: s_bcnt1_i32_b32 s1, s2 ; encoding: [0x02,0x0c,0x81,0xbe] 105 106 s_bcnt1_i32_b64 s1, s[2:3] 107 // SICI: s_bcnt1_i32_b64 s1, s[2:3] ; encoding: [0x02,0x10,0x81,0xbe] 108 // GFX89: s_bcnt1_i32_b64 s1, s[2:3] ; encoding: [0x02,0x0d,0x81,0xbe] 109 110 s_ff0_i32_b32 s1, s2 111 // SICI: s_ff0_i32_b32 s1, s2 ; encoding: [0x02,0x11,0x81,0xbe] 112 // GFX89: s_ff0_i32_b32 s1, s2 ; encoding: [0x02,0x0e,0x81,0xbe] 113 114 s_ff0_i32_b64 s1, s[2:3] 115 // SICI: s_ff0_i32_b64 s1, s[2:3] ; encoding: [0x02,0x12,0x81,0xbe] 116 // GFX89: s_ff0_i32_b64 s1, s[2:3] ; encoding: [0x02,0x0f,0x81,0xbe] 117 118 s_ff1_i32_b32 s1, s2 119 // SICI: s_ff1_i32_b32 s1, s2 ; encoding: [0x02,0x13,0x81,0xbe] 120 // GFX89: s_ff1_i32_b32 s1, s2 ; encoding: [0x02,0x10,0x81,0xbe] 121 122 s_ff1_i32_b64 s1, s[2:3] 123 // SICI: s_ff1_i32_b64 s1, s[2:3] ; encoding: [0x02,0x14,0x81,0xbe] 124 // GFX89: s_ff1_i32_b64 s1, s[2:3] ; encoding: [0x02,0x11,0x81,0xbe] 125 126 s_flbit_i32_b32 s1, s2 127 // SICI: s_flbit_i32_b32 s1, s2 ; encoding: [0x02,0x15,0x81,0xbe] 128 // GFX89: s_flbit_i32_b32 s1, s2 ; encoding: [0x02,0x12,0x81,0xbe] 129 130 s_flbit_i32_b64 s1, s[2:3] 131 // SICI: s_flbit_i32_b64 s1, s[2:3] ; encoding: [0x02,0x16,0x81,0xbe] 132 // GFX89: s_flbit_i32_b64 s1, s[2:3] ; encoding: [0x02,0x13,0x81,0xbe] 133 134 s_flbit_i32 s1, s2 135 // SICI: s_flbit_i32 s1, s2 ; encoding: [0x02,0x17,0x81,0xbe] 136 // GFX89: s_flbit_i32 s1, s2 ; encoding: [0x02,0x14,0x81,0xbe] 137 138 s_flbit_i32_i64 s1, s[2:3] 139 // SICI: s_flbit_i32_i64 s1, s[2:3] ; encoding: [0x02,0x18,0x81,0xbe] 140 // GFX89: s_flbit_i32_i64 s1, s[2:3] ; encoding: [0x02,0x15,0x81,0xbe] 141 142 s_sext_i32_i8 s1, s2 143 // SICI: s_sext_i32_i8 s1, s2 ; encoding: [0x02,0x19,0x81,0xbe] 144 // GFX89: s_sext_i32_i8 s1, s2 ; encoding: [0x02,0x16,0x81,0xbe] 145 146 s_sext_i32_i16 s1, s2 147 // SICI: s_sext_i32_i16 s1, s2 ; encoding: [0x02,0x1a,0x81,0xbe] 148 // GFX89: s_sext_i32_i16 s1, s2 ; encoding: [0x02,0x17,0x81,0xbe] 149 150 s_bitset0_b32 s1, s2 151 // SICI: s_bitset0_b32 s1, s2 ; encoding: [0x02,0x1b,0x81,0xbe] 152 // GFX89: s_bitset0_b32 s1, s2 ; encoding: [0x02,0x18,0x81,0xbe] 153 154 s_bitset0_b64 s[2:3], s4 155 // SICI: s_bitset0_b64 s[2:3], s4 ; encoding: [0x04,0x1c,0x82,0xbe] 156 // GFX89: s_bitset0_b64 s[2:3], s4 ; encoding: [0x04,0x19,0x82,0xbe] 157 158 s_bitset1_b32 s1, s2 159 // SICI: s_bitset1_b32 s1, s2 ; encoding: [0x02,0x1d,0x81,0xbe] 160 // GFX89: s_bitset1_b32 s1, s2 ; encoding: [0x02,0x1a,0x81,0xbe] 161 162 s_bitset1_b64 s[2:3], s4 163 // SICI: s_bitset1_b64 s[2:3], s4 ; encoding: [0x04,0x1e,0x82,0xbe] 164 // GFX89: s_bitset1_b64 s[2:3], s4 ; encoding: [0x04,0x1b,0x82,0xbe] 165 166 s_getpc_b64 s[2:3] 167 // SICI: s_getpc_b64 s[2:3] ; encoding: [0x00,0x1f,0x82,0xbe] 168 // GFX89: s_getpc_b64 s[2:3] ; encoding: [0x00,0x1c,0x82,0xbe] 169 170 s_setpc_b64 s[4:5] 171 // SICI: s_setpc_b64 s[4:5] ; encoding: [0x04,0x20,0x80,0xbe] 172 // GFX89: s_setpc_b64 s[4:5] ; encoding: [0x04,0x1d,0x80,0xbe] 173 174 s_swappc_b64 s[2:3], s[4:5] 175 // SICI: s_swappc_b64 s[2:3], s[4:5] ; encoding: [0x04,0x21,0x82,0xbe] 176 // GFX89: s_swappc_b64 s[2:3], s[4:5] ; encoding: [0x04,0x1e,0x82,0xbe] 177 178 s_rfe_b64 s[4:5] 179 // SICI: s_rfe_b64 s[4:5] ; encoding: [0x04,0x22,0x80,0xbe] 180 // GFX89: s_rfe_b64 s[4:5] ; encoding: [0x04,0x1f,0x80,0xbe] 181 182 s_and_saveexec_b64 s[2:3], s[4:5] 183 // SICI: s_and_saveexec_b64 s[2:3], s[4:5] ; encoding: [0x04,0x24,0x82,0xbe] 184 // GFX89: s_and_saveexec_b64 s[2:3], s[4:5] ; encoding: [0x04,0x20,0x82,0xbe] 185 186 s_or_saveexec_b64 s[2:3], s[4:5] 187 // SICI: s_or_saveexec_b64 s[2:3], s[4:5] ; encoding: [0x04,0x25,0x82,0xbe] 188 // GFX89: s_or_saveexec_b64 s[2:3], s[4:5] ; encoding: [0x04,0x21,0x82,0xbe] 189 190 s_xor_saveexec_b64 s[2:3], s[4:5] 191 // SICI: s_xor_saveexec_b64 s[2:3], s[4:5] ; encoding: [0x04,0x26,0x82,0xbe] 192 // GFX89: s_xor_saveexec_b64 s[2:3], s[4:5] ; encoding: [0x04,0x22,0x82,0xbe] 193 194 s_andn2_saveexec_b64 s[2:3], s[4:5] 195 // SICI: s_andn2_saveexec_b64 s[2:3], s[4:5] ; encoding: [0x04,0x27,0x82,0xbe] 196 // GFX89: s_andn2_saveexec_b64 s[2:3], s[4:5] ; encoding: [0x04,0x23,0x82,0xbe] 197 198 s_orn2_saveexec_b64 s[2:3], s[4:5] 199 // SICI: s_orn2_saveexec_b64 s[2:3], s[4:5] ; encoding: [0x04,0x28,0x82,0xbe] 200 // GFX89: s_orn2_saveexec_b64 s[2:3], s[4:5] ; encoding: [0x04,0x24,0x82,0xbe] 201 202 s_nand_saveexec_b64 s[2:3], s[4:5] 203 // SICI: s_nand_saveexec_b64 s[2:3], s[4:5] ; encoding: [0x04,0x29,0x82,0xbe] 204 // GFX89: s_nand_saveexec_b64 s[2:3], s[4:5] ; encoding: [0x04,0x25,0x82,0xbe] 205 206 s_nor_saveexec_b64 s[2:3], s[4:5] 207 // SICI: s_nor_saveexec_b64 s[2:3], s[4:5] ; encoding: [0x04,0x2a,0x82,0xbe] 208 // GFX89: s_nor_saveexec_b64 s[2:3], s[4:5] ; encoding: [0x04,0x26,0x82,0xbe] 209 210 s_xnor_saveexec_b64 s[2:3], s[4:5] 211 // SICI: s_xnor_saveexec_b64 s[2:3], s[4:5] ; encoding: [0x04,0x2b,0x82,0xbe] 212 // GFX89: s_xnor_saveexec_b64 s[2:3], s[4:5] ; encoding: [0x04,0x27,0x82,0xbe] 213 214 s_quadmask_b32 s1, s2 215 // SICI: s_quadmask_b32 s1, s2 ; encoding: [0x02,0x2c,0x81,0xbe] 216 // GFX89: s_quadmask_b32 s1, s2 ; encoding: [0x02,0x28,0x81,0xbe] 217 218 s_quadmask_b64 s[2:3], s[4:5] 219 // SICI: s_quadmask_b64 s[2:3], s[4:5] ; encoding: [0x04,0x2d,0x82,0xbe] 220 // GFX89: s_quadmask_b64 s[2:3], s[4:5] ; encoding: [0x04,0x29,0x82,0xbe] 221 222 s_movrels_b32 s1, s2 223 // SICI: s_movrels_b32 s1, s2 ; encoding: [0x02,0x2e,0x81,0xbe] 224 // GFX89: s_movrels_b32 s1, s2 ; encoding: [0x02,0x2a,0x81,0xbe] 225 226 s_movrels_b64 s[2:3], s[4:5] 227 // SICI: s_movrels_b64 s[2:3], s[4:5] ; encoding: [0x04,0x2f,0x82,0xbe] 228 // GFX89: s_movrels_b64 s[2:3], s[4:5] ; encoding: [0x04,0x2b,0x82,0xbe] 229 230 s_movreld_b32 s1, s2 231 // SICI: s_movreld_b32 s1, s2 ; encoding: [0x02,0x30,0x81,0xbe] 232 // GFX89: s_movreld_b32 s1, s2 ; encoding: [0x02,0x2c,0x81,0xbe] 233 234 s_movreld_b64 s[2:3], s[4:5] 235 // SICI: s_movreld_b64 s[2:3], s[4:5] ; encoding: [0x04,0x31,0x82,0xbe] 236 // GFX89: s_movreld_b64 s[2:3], s[4:5] ; encoding: [0x04,0x2d,0x82,0xbe] 237 238 s_cbranch_join s4 239 // SICI: s_cbranch_join s4 ; encoding: [0x04,0x32,0x80,0xbe] 240 // GFX89: s_cbranch_join s4 ; encoding: [0x04,0x2e,0x80,0xbe] 241 242 s_cbranch_join 1 243 // NOSICI: error: invalid operand for instruction 244 // NOGFX89: error: invalid operand for instruction 245 246 s_cbranch_join 100 247 // NOSICI: error: invalid operand for instruction 248 // NOGFX89: error: invalid operand for instruction 249 250 s_abs_i32 s1, s2 251 // SICI: s_abs_i32 s1, s2 ; encoding: [0x02,0x34,0x81,0xbe] 252 // GFX89: s_abs_i32 s1, s2 ; encoding: [0x02,0x30,0x81,0xbe] 253 254 s_mov_fed_b32 s1, s2 255 // SICI: s_mov_fed_b32 s1, s2 ; encoding: [0x02,0x35,0x81,0xbe] 256 257 s_set_gpr_idx_idx s0 258 // GFX89: s_set_gpr_idx_idx s0 ; encoding: [0x00,0x32,0x80,0xbe] 259 // NOSICI: error: instruction not supported on this GPU 260 261 s_andn1_saveexec_b64 s[100:101], s[2:3] 262 // GFX9: s_andn1_saveexec_b64 s[100:101], s[2:3] ; encoding: [0x02,0x33,0xe4,0xbe] 263 // NOSICIVI: error: instruction not supported on this GPU 264 265 s_andn1_saveexec_b64 s[10:11], s[4:5] 266 // GFX9: s_andn1_saveexec_b64 s[10:11], s[4:5] ; encoding: [0x04,0x33,0x8a,0xbe] 267 // NOSICIVI: error: instruction not supported on this GPU 268 269 s_andn1_saveexec_b64 s[10:11], -1 270 // GFX9: s_andn1_saveexec_b64 s[10:11], -1 ; encoding: [0xc1,0x33,0x8a,0xbe] 271 // NOSICIVI: error: instruction not supported on this GPU 272 273 s_andn1_saveexec_b64 s[10:11], 0xaf123456 274 // GFX9: s_andn1_saveexec_b64 s[10:11], 0xaf123456 ; encoding: [0xff,0x33,0x8a,0xbe,0x56,0x34,0x12,0xaf] 275 // NOSICIVI: error: instruction not supported on this GPU 276 277 s_andn1_wrexec_b64 s[10:11], s[2:3] 278 // GFX9: s_andn1_wrexec_b64 s[10:11], s[2:3] ; encoding: [0x02,0x35,0x8a,0xbe] 279 // NOSICIVI: error: instruction not supported on this GPU 280 281 s_andn2_wrexec_b64 s[12:13], s[2:3] 282 // GFX9: s_andn2_wrexec_b64 s[12:13], s[2:3] ; encoding: [0x02,0x36,0x8c,0xbe] 283 // NOSICIVI: error: instruction not supported on this GPU 284 285 s_orn1_saveexec_b64 s[10:11], 0 286 // GFX9: s_orn1_saveexec_b64 s[10:11], 0 ; encoding: [0x80,0x34,0x8a,0xbe] 287 // NOSICIVI: error: instruction not supported on this GPU 288 289 s_bitreplicate_b64_b32 s[10:11], s101 290 // GFX9: s_bitreplicate_b64_b32 s[10:11], s101 ; encoding: [0x65,0x37,0x8a,0xbe] 291 // NOSICIVI: error: instruction not supported on this GPU 292 293 s_bitreplicate_b64_b32 s[10:11], -1 294 // GFX9: s_bitreplicate_b64_b32 s[10:11], -1 ; encoding: [0xc1,0x37,0x8a,0xbe] 295 // NOSICIVI: error: instruction not supported on this GPU 296 297 s_bitreplicate_b64_b32 s[10:11], 0x3f717273 298 // GFX9: s_bitreplicate_b64_b32 s[10:11], 0x3f717273 ; encoding: [0xff,0x37,0x8a,0xbe,0x73,0x72,0x71,0x3f] 299 // NOSICIVI: error: instruction not supported on this GPU 300