Home | History | Annotate | Download | only in instructions
      1 # RUN: llvm-mc -triple hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s
      2 # Hexagon Programmer's Reference Manual 11.1.3 ALU32/PRED
      3 
      4 # Conditional add
      5 # CHECK: f1 c3 75 74
      6 if (p3) r17 = add(r21, #31)
      7 # CHECK: 03 40 45 85
      8 # CHECK-NEXT: f1 e3 75 74
      9 { p3 = r5
     10   if (p3.new) r17 = add(r21, #31) }
     11 # CHECK: f1 c3 f5 74
     12 if (!p3) r17 = add(r21, #31)
     13 # CHECK: 03 40 45 85
     14 # CHECK-NEXT: f1 e3 f5 74
     15 { p3 = r5
     16   if (!p3.new) r17 = add(r21, #31) }
     17 # CHECK: 71 df 15 fb
     18 if (p3) r17 = add(r21, r31)
     19 # CHECK: 03 40 45 85
     20 # CHECK-NEXT: 71 ff 15 fb
     21 { p3 = r5
     22   if (p3.new) r17 = add(r21, r31) }
     23 # CHECK: f1 df 15 fb
     24 if (!p3) r17 = add(r21, r31)
     25 # CHECK: 03 40 45 85
     26 # CHECK-NEXT: f1 ff 15 fb
     27 { p3 = r5
     28   if (!p3.new) r17 = add(r21, r31) }
     29 
     30 # Conditional shift halfword
     31 # CHECK: 11 e3 15 70
     32 if (p3) r17 = aslh(r21)
     33 # CHECK: 03 40 45 85
     34 # CHECK-NEXT: 11 e7 15 70
     35 { p3 = r5
     36   if (p3.new) r17 = aslh(r21) }
     37 # CHECK: 11 eb 15 70
     38 if (!p3) r17 = aslh(r21)
     39 # CHECK: 03 40 45 85
     40 # CHECK-NEXT: 11 ef 15 70
     41 { p3 = r5
     42   if (!p3.new) r17 = aslh(r21) }
     43 # CHECK: 11 e3 35 70
     44 if (p3) r17 = asrh(r21)
     45 # CHECK: 03 40 45 85
     46 # CHECK-NEXT: 11 e7 35 70
     47 { p3 = r5
     48   if (p3.new) r17 = asrh(r21) }
     49 # CHECK: 11 eb 35 70
     50 if (!p3) r17 = asrh(r21)
     51 # CHECK: 03 40 45 85
     52 # CHECK-NEXT: 11 ef 35 70
     53 { p3 = r5
     54   if (!p3.new) r17 = asrh(r21) }
     55 
     56 # Conditional combine
     57 # CHECK: 70 df 15 fd
     58 if (p3) r17:16 = combine(r21, r31)
     59 # CHECK: f0 df 15 fd
     60 if (!p3) r17:16 = combine(r21, r31)
     61 # CHECK: 03 40 45 85
     62 # CHECK-NEXT: 70 ff 15 fd
     63 { p3 = r5
     64   if (p3.new) r17:16 = combine(r21, r31) }
     65 # CHECK: 03 40 45 85
     66 # CHECK-NEXT: f0 ff 15 fd
     67 { p3 = r5
     68   if (!p3.new) r17:16 = combine(r21, r31) }
     69 
     70 # Conditional logical operations
     71 # CHECK: 71 df 15 f9
     72 if (p3) r17 = and(r21, r31)
     73 # CHECK: f1 df 15 f9
     74 if (!p3) r17 = and(r21, r31)
     75 # CHECK: 03 40 45 85
     76 # CHECK-NEXT: 71 ff 15 f9
     77 { p3 = r5
     78   if (p3.new) r17 = and(r21, r31) }
     79 # CHECK: 03 40 45 85
     80 # CHECK-NEXT: f1 ff 15 f9
     81 { p3 = r5
     82   if (!p3.new) r17 = and(r21, r31) }
     83 # CHECK: 71 df 35 f9
     84 if (p3) r17 = or(r21, r31)
     85 # CHECK: f1 df 35 f9
     86 if (!p3) r17 = or(r21, r31)
     87 # CHECK: 03 40 45 85
     88 # CHECK-NEXT: 71 ff 35 f9
     89 { p3 = r5
     90   if (p3.new) r17 = or(r21, r31) }
     91 # CHECK: 03 40 45 85
     92 # CHECK-NEXT: f1 ff 35 f9
     93 { p3 = r5
     94   if (!p3.new) r17 = or(r21, r31) }
     95 # CHECK: 71 df 75 f9
     96 if (p3) r17 = xor(r21, r31)
     97 # CHECK: f1 df 75 f9
     98 if (!p3) r17 = xor(r21, r31)
     99 # CHECK: 03 40 45 85
    100 # CHECK-NEXT: 71 ff 75 f9
    101 { p3 = r5
    102   if (p3.new) r17 = xor(r21, r31) }
    103 # CHECK: 03 40 45 85
    104 # CHECK-NEXT: f1 ff 75 f9
    105 { p3 = r5
    106   if (!p3.new) r17 = xor(r21, r31) }
    107 
    108 # Conditional subtract
    109 # CHECK: 71 df 35 fb
    110 if (p3) r17 = sub(r31, r21)
    111 # CHECK: f1 df 35 fb
    112 if (!p3) r17 = sub(r31, r21)
    113 # CHECK: 03 40 45 85
    114 # CHECK-NEXT: 71 ff 35 fb
    115 { p3 = r5
    116   if (p3.new) r17 = sub(r31, r21) }
    117 # CHECK: 03 40 45 85
    118 # CHECK-NEXT: f1 ff 35 fb
    119 { p3 = r5
    120   if (!p3.new) r17 = sub(r31, r21) }
    121 
    122 # Conditional sign extend
    123 # CHECK: 11 e3 b5 70
    124 if (p3) r17 = sxtb(r21)
    125 # CHECK: 11 eb b5 70
    126 if (!p3) r17 = sxtb(r21)
    127 # CHECK: 03 40 45 85
    128 # CHECK-NEXT: 11 e7 b5 70
    129 { p3 = r5
    130   if (p3.new) r17 = sxtb(r21) }
    131 # CHECK: 03 40 45 85
    132 # CHECK-NEXT: 11 ef b5 70
    133 { p3 = r5
    134   if (!p3.new) r17 = sxtb(r21) }
    135 # CHECK: 11 e3 f5 70
    136 if (p3) r17 = sxth(r21)
    137 # CHECK: 11 eb f5 70
    138 if (!p3) r17 = sxth(r21)
    139 # CHECK: 03 40 45 85
    140 # CHECK-NEXT: 11 e7 f5 70
    141 { p3 = r5
    142   if (p3.new) r17 = sxth(r21) }
    143 # CHECK: 03 40 45 85
    144 # CHECK-NEXT: 11 ef f5 70
    145 { p3 = r5
    146   if (!p3.new) r17 = sxth(r21) }
    147 
    148 # Conditional transfer
    149 # CHECK: b1 c2 60 7e
    150 if (p3) r17 = #21
    151 # CHECK: b1 c2 e0 7e
    152 if (!p3) r17 = #21
    153 # CHECK: 03 40 45 85
    154 # CHECK-NEXT: b1 e2 60 7e
    155 { p3 = r5
    156   if (p3.new) r17 = #21 }
    157 # CHECK: 03 40 45 85
    158 # CHECK-NEXT: b1 e2 e0 7e
    159 { p3 = r5
    160   if (!p3.new) r17 = #21 }
    161 
    162 # Conditional zero extend
    163 # CHECK: 11 e3 95 70
    164 if (p3) r17 = zxtb(r21)
    165 # CHECK: 11 eb 95 70
    166 if (!p3) r17 = zxtb(r21)
    167 # CHECK: 03 40 45 85
    168 # CHECK-NEXT: 11 e7 95 70
    169 { p3 = r5
    170   if (p3.new) r17 = zxtb(r21) }
    171 # CHECK: 03 40 45 85
    172 # CHECK-NEXT: 11 ef 95 70
    173 { p3 = r5
    174   if (!p3.new) r17 = zxtb(r21) }
    175 # CHECK: 11 e3 d5 70
    176 if (p3) r17 = zxth(r21)
    177 # CHECK: 11 eb d5 70
    178 if (!p3) r17 = zxth(r21)
    179 # CHECK: 03 40 45 85
    180 # CHECK-NEXT: 11 e7 d5 70
    181 { p3 = r5
    182   if (p3.new) r17 = zxth(r21) }
    183 # CHECK: 03 40 45 85
    184 # CHECK-NEXT: 11 ef d5 70
    185 { p3 = r5
    186   if (!p3.new) r17 = zxth(r21) }
    187 
    188 # Compare
    189 # CHECK: e3 c3 15 75
    190 p3 = cmp.eq(r21, #31)
    191 # CHECK: f3 c3 15 75
    192 p3 = !cmp.eq(r21, #31)
    193 # CHECK: e3 c3 55 75
    194 p3 = cmp.gt(r21, #31)
    195 # CHECK: f3 c3 55 75
    196 p3 = !cmp.gt(r21, #31)
    197 # CHECK: e3 c3 95 75
    198 p3 = cmp.gtu(r21, #31)
    199 # CHECK: f3 c3 95 75
    200 p3 = !cmp.gtu(r21, #31)
    201 # CHECK: 03 df 15 f2
    202 p3 = cmp.eq(r21, r31)
    203 # CHECK: 13 df 15 f2
    204 p3 = !cmp.eq(r21, r31)
    205 # CHECK: 03 df 55 f2
    206 p3 = cmp.gt(r21, r31)
    207 # CHECK: 13 df 55 f2
    208 p3 = !cmp.gt(r21, r31)
    209 # CHECK: 03 df 75 f2
    210 p3 = cmp.gtu(r21, r31)
    211 # CHECK: 13 df 75 f2
    212 p3 = !cmp.gtu(r21, r31)
    213 
    214 # Compare to general register
    215 # CHECK: f1 e3 55 73
    216 r17 = cmp.eq(r21, #31)
    217 # CHECK: f1 e3 75 73
    218 r17 = !cmp.eq(r21, #31)
    219 # CHECK: 11 df 55 f3
    220 r17 = cmp.eq(r21, r31)
    221 # CHECK: 11 df 75 f3
    222 r17 = !cmp.eq(r21, r31)
    223