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