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