Home | History | Annotate | Download | only in AMDGPU
      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