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: 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=VI %s 5 // RUN: not llvm-mc -arch=amdgcn -mcpu=fiji -show-encoding %s 2>&1 | FileCheck --check-prefix=NOVI %s 6 7 s_add_u32 s1, s2, s3 8 // GCN: s_add_u32 s1, s2, s3 ; encoding: [0x02,0x03,0x01,0x80] 9 10 s_sub_u32 s1, s2, s3 11 // GCN: s_sub_u32 s1, s2, s3 ; encoding: [0x02,0x03,0x81,0x80] 12 13 s_add_i32 s1, s2, s3 14 // GCN: s_add_i32 s1, s2, s3 ; encoding: [0x02,0x03,0x01,0x81] 15 16 s_sub_i32 s1, s2, s3 17 // GCN: s_sub_i32 s1, s2, s3 ; encoding: [0x02,0x03,0x81,0x81] 18 19 s_addc_u32 s1, s2, s3 20 // GCN: s_addc_u32 s1, s2, s3 ; encoding: [0x02,0x03,0x01,0x82] 21 22 s_subb_u32 s1, s2, s3 23 // GCN: s_subb_u32 s1, s2, s3 ; encoding: [0x02,0x03,0x81,0x82] 24 25 s_min_i32 s1, s2, s3 26 // GCN: s_min_i32 s1, s2, s3 ; encoding: [0x02,0x03,0x01,0x83] 27 28 s_min_u32 s1, s2, s3 29 // GCN: s_min_u32 s1, s2, s3 ; encoding: [0x02,0x03,0x81,0x83] 30 31 s_max_i32 s1, s2, s3 32 // GCN: s_max_i32 s1, s2, s3 ; encoding: [0x02,0x03,0x01,0x84] 33 34 s_max_u32 s1, s2, s3 35 // GCN: s_max_u32 s1, s2, s3 ; encoding: [0x02,0x03,0x81,0x84] 36 37 s_cselect_b32 s1, s2, s3 38 // GCN: s_cselect_b32 s1, s2, s3 ; encoding: [0x02,0x03,0x01,0x85] 39 40 s_cselect_b64 s[2:3], s[4:5], s[6:7] 41 // GCN: s_cselect_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x85] 42 43 s_and_b32 s2, s4, s6 44 // SICI: s_and_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x87] 45 // VI: s_and_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x86] 46 47 s_and_b64 s[2:3], s[4:5], s[6:7] 48 // SICI: s_and_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x87] 49 // VI: s_and_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x86] 50 51 s_or_b32 s2, s4, s6 52 // SICI: s_or_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x88] 53 // VI: s_or_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x87] 54 55 s_or_b64 s[2:3], s[4:5], s[6:7] 56 // SICI: s_or_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x88] 57 // VI: s_or_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x87] 58 59 s_xor_b32 s2, s4, s6 60 // SICI: s_xor_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x89] 61 // VI: s_xor_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x88] 62 63 s_xor_b64 s[2:3], s[4:5], s[6:7] 64 // SICI: s_xor_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x89] 65 // VI: s_xor_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x88] 66 67 s_andn2_b32 s2, s4, s6 68 // SICI: s_andn2_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8a] 69 // VI: s_andn2_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x89] 70 71 s_andn2_b64 s[2:3], s[4:5], s[6:7] 72 // SICI: s_andn2_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x8a] 73 // VI: s_andn2_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x89] 74 75 s_orn2_b32 s2, s4, s6 76 // SICI: s_orn2_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8b] 77 // VI: s_orn2_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8a] 78 79 s_orn2_b64 s[2:3], s[4:5], s[6:7] 80 // SICI: s_orn2_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x8b] 81 // VI: s_orn2_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x8a] 82 83 s_nand_b32 s2, s4, s6 84 // SICI: s_nand_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8c] 85 // VI: s_nand_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8b] 86 87 s_nand_b64 s[2:3], s[4:5], s[6:7] 88 // SICI: s_nand_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x8c] 89 // VI: s_nand_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x8b] 90 91 s_nor_b32 s2, s4, s6 92 // SICI: s_nor_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8d] 93 // VI: s_nor_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8c] 94 95 s_nor_b64 s[2:3], s[4:5], s[6:7] 96 // SICI: s_nor_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x8d] 97 // VI: s_nor_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x8c] 98 99 s_xnor_b32 s2, s4, s6 100 // SICI: s_xnor_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8e] 101 // VI: s_xnor_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8d] 102 103 s_xnor_b64 s[2:3], s[4:5], s[6:7] 104 // SICI: s_xnor_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x8e] 105 // VI: s_xnor_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x8d] 106 107 s_lshl_b32 s2, s4, s6 108 // SICI: s_lshl_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8f] 109 // VI: s_lshl_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8e] 110 111 s_lshl_b64 s[2:3], s[4:5], s6 112 // SICI: s_lshl_b64 s[2:3], s[4:5], s6 ; encoding: [0x04,0x06,0x82,0x8f] 113 // VI: s_lshl_b64 s[2:3], s[4:5], s6 ; encoding: [0x04,0x06,0x82,0x8e] 114 115 s_lshr_b32 s2, s4, s6 116 // SICI: s_lshr_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x90] 117 // VI: s_lshr_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x8f] 118 119 s_lshr_b64 s[2:3], s[4:5], s6 120 // SICI: s_lshr_b64 s[2:3], s[4:5], s6 ; encoding: [0x04,0x06,0x82,0x90] 121 // VI: s_lshr_b64 s[2:3], s[4:5], s6 ; encoding: [0x04,0x06,0x82,0x8f] 122 123 s_ashr_i32 s2, s4, s6 124 // SICI: s_ashr_i32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x91] 125 // VI: s_ashr_i32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x90] 126 127 s_ashr_i64 s[2:3], s[4:5], s6 128 // SICI: s_ashr_i64 s[2:3], s[4:5], s6 ; encoding: [0x04,0x06,0x82,0x91] 129 // VI: s_ashr_i64 s[2:3], s[4:5], s6 ; encoding: [0x04,0x06,0x82,0x90] 130 131 s_bfm_b32 s2, s4, s6 132 // SICI: s_bfm_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x92] 133 // VI: s_bfm_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x91] 134 135 s_bfm_b64 s[2:3], s4, s6 136 // SICI: s_bfm_b64 s[2:3], s4, s6 ; encoding: [0x04,0x06,0x82,0x92] 137 // VI: s_bfm_b64 s[2:3], s4, s6 ; encoding: [0x04,0x06,0x82,0x91] 138 139 s_mul_i32 s2, s4, s6 140 // SICI: s_mul_i32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x93] 141 // VI: s_mul_i32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x92] 142 143 s_bfe_u32 s2, s4, s6 144 // SICI: s_bfe_u32 s2, s4, s6 ; encoding: [0x04,0x06,0x82,0x93] 145 // VI: s_bfe_u32 s2, s4, s6 ; encoding: [0x04,0x06,0x82,0x92] 146 147 s_bfe_i32 s2, s4, s6 148 // SICI: s_bfe_i32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x94] 149 // VI: s_bfe_i32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x93] 150 151 s_bfe_u64 s[2:3], s[4:5], s6 152 // SICI: s_bfe_u64 s[2:3], s[4:5], s6 ; encoding: [0x04,0x06,0x82,0x94] 153 // VI: s_bfe_u64 s[2:3], s[4:5], s6 ; encoding: [0x04,0x06,0x82,0x93] 154 155 s_bfe_i64 s[2:3], s[4:5], s6 156 // SICI: s_bfe_i64 s[2:3], s[4:5], s6 ; encoding: [0x04,0x06,0x02,0x95] 157 // VI: s_bfe_i64 s[2:3], s[4:5], s6 ; encoding: [0x04,0x06,0x02,0x94] 158 159 s_cbranch_g_fork s[4:5], s[6:7] 160 // SICI: s_cbranch_g_fork s[4:5], s[6:7] ; encoding: [0x04,0x06,0x80,0x95] 161 // VI: s_cbranch_g_fork s[4:5], s[6:7] ; encoding: [0x04,0x06,0x80,0x94] 162 163 s_absdiff_i32 s2, s4, s6 164 // SICI: s_absdiff_i32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x96] 165 // VI: s_absdiff_i32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x95] 166 167 s_add_u32 s101, s102, s103 168 // SICI: s_add_u32 s101, s102, s103 ; encoding: [0x66,0x67,0x65,0x80] 169 // NOVI: error: not a valid operand 170