1 # RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s 2 # Hexagon Programmer's Reference Manual 11.7.2 NV/ST 3 4 # Store new-value byte 5 # CHECK: 1f 40 7f 70 6 # CHECK-NEXT: 82 f5 b1 3b 7 { r31 = r31 8 memb(r17 + r21<<#3) = r31.new } 9 # CHECK: 1f 40 7f 70 10 # CHECK-NEXT: 11 c2 a0 48 11 { r31 = r31 12 memb(#17) = r31.new } 13 # CHECK: 1f 40 7f 70 14 # CHECK-NEXT: 15 c2 b1 a1 15 { r31 = r31 16 memb(r17+#21) = r31.new } 17 # CHECK: 1f 40 7f 70 18 # CHECK-NEXT: 02 e2 b1 a9 19 { r31 = r31 20 memb(r17 ++ I:circ(m1)) = r31.new } 21 # CHECK: 1f 40 7f 70 22 # CHECK-NEXT: 28 e2 b1 a9 23 { r31 = r31 24 memb(r17 ++ #5:circ(m1)) = r31.new } 25 # CHECK: 1f 40 7f 70 26 # CHECK-NEXT: 28 c2 b1 ab 27 { r31 = r31 28 memb(r17++#5) = r31.new } 29 # CHECK: 1f 40 7f 70 30 # CHECK-NEXT: 00 e2 b1 ad 31 { r31 = r31 32 memb(r17++m1) = r31.new } 33 # CHECK: 1f 40 7f 70 34 # CHECK-NEXT: 00 e2 b1 af 35 { r31 = r31 36 memb(r17 ++ m1:brev) = r31.new } 37 38 # Store new-value byte conditionally 39 # CHECK: 1f 40 7f 70 40 # CHECK-NEXT: e2 f5 b1 34 41 { r31 = r31 42 if (p3) memb(r17+r21<<#3) = r31.new } 43 # CHECK: 1f 40 7f 70 44 # CHECK-NEXT: e2 f5 b1 35 45 { r31 = r31 46 if (!p3) memb(r17+r21<<#3) = r31.new } 47 # CHECK: 03 40 45 85 48 # CHECK-NEXT: 1f 40 7f 70 49 # CHECK-NEXT: e2 f5 b1 36 50 { p3 = r5 51 r31 = r31 52 if (p3.new) memb(r17+r21<<#3) = r31.new } 53 # CHECK: 03 40 45 85 54 # CHECK-NEXT: 1f 40 7f 70 55 # CHECK-NEXT: e2 f5 b1 37 56 { p3 = r5 57 r31 = r31 58 if (!p3.new) memb(r17+r21<<#3) = r31.new } 59 # CHECK: 1f 40 7f 70 60 # CHECK-NEXT: ab c2 b1 40 61 { r31 = r31 62 if (p3) memb(r17+#21) = r31.new } 63 # CHECK: 1f 40 7f 70 64 # CHECK-NEXT: ab c2 b1 44 65 { r31 = r31 66 if (!p3) memb(r17+#21) = r31.new } 67 # CHECK: 03 40 45 85 68 # CHECK-NEXT: 1f 40 7f 70 69 # CHECK-NEXT: ab c2 b1 42 70 { p3 = r5 71 r31 = r31 72 if (p3.new) memb(r17+#21) = r31.new } 73 # CHECK: 03 40 45 85 74 # CHECK-NEXT: 1f 40 7f 70 75 # CHECK-NEXT: ab c2 b1 46 76 { p3 = r5 77 r31 = r31 78 if (!p3.new) memb(r17+#21) = r31.new } 79 # CHECK: 1f 40 7f 70 80 # CHECK-NEXT: 2b e2 b1 ab 81 { r31 = r31 82 if (p3) memb(r17++#5) = r31.new } 83 # CHECK: 1f 40 7f 70 84 # CHECK-NEXT: 2f e2 b1 ab 85 { r31 = r31 86 if (!p3) memb(r17++#5) = r31.new } 87 # CHECK: 03 40 45 85 88 # CHECK-NEXT: 1f 40 7f 70 89 # CHECK-NEXT: ab e2 b1 ab 90 { p3 = r5 91 r31 = r31 92 if (p3.new) memb(r17++#5) = r31.new } 93 # CHECK: 03 40 45 85 94 # CHECK-NEXT: 1f 40 7f 70 95 # CHECK-NEXT: af e2 b1 ab 96 { p3 = r5 97 r31 = r31 98 if (!p3.new) memb(r17++#5) = r31.new } 99 100 # Store new-value halfword 101 # CHECK: 1f 40 7f 70 102 # CHECK-NEXT: 8a f5 b1 3b 103 { r31 = r31 104 memh(r17 + r21<<#3) = r31.new } 105 # CHECK: 1f 40 7f 70 106 # CHECK-NEXT: 15 ca a0 48 107 { r31 = r31 108 memh(#42) = r31.new } 109 # CHECK: 1f 40 7f 70 110 # CHECK-NEXT: 15 ca b1 a1 111 { r31 = r31 112 memh(r17+#42) = r31.new } 113 # CHECK: 1f 40 7f 70 114 # CHECK-NEXT: 02 ea b1 a9 115 { r31 = r31 116 memh(r17 ++ I:circ(m1)) = r31.new } 117 # CHECK: 1f 40 7f 70 118 # CHECK-NEXT: 28 ea b1 a9 119 { r31 = r31 120 memh(r17 ++ #10:circ(m1)) = r31.new } 121 # CHECK: 1f 40 7f 70 122 # CHECK-NEXT: 28 ca b1 ab 123 { r31 = r31 124 memh(r17++#10) = r31.new } 125 # CHECK: 1f 40 7f 70 126 # CHECK-NEXT: 00 ea b1 ad 127 { r31 = r31 128 memh(r17++m1) = r31.new } 129 # CHECK: 1f 40 7f 70 130 # CHECK-NEXT: 00 ea b1 af 131 { r31 = r31 132 memh(r17 ++ m1:brev) = r31.new } 133 134 # Store new-value halfword conditionally 135 # CHECK: 1f 40 7f 70 136 # CHECK-NEXT: ea f5 b1 34 137 { r31 = r31 138 if (p3) memh(r17+r21<<#3) = r31.new } 139 # CHECK: 1f 40 7f 70 140 # CHECK-NEXT: ea f5 b1 35 141 { r31 = r31 142 if (!p3) memh(r17+r21<<#3) = r31.new } 143 # CHECK: 03 40 45 85 144 # CHECK-NEXT: 1f 40 7f 70 145 # CHECK-NEXT: ea f5 b1 36 146 { p3 = r5 147 r31 = r31 148 if (p3.new) memh(r17+r21<<#3) = r31.new } 149 # CHECK: 03 40 45 85 150 # CHECK-NEXT: 1f 40 7f 70 151 # CHECK-NEXT: ea f5 b1 37 152 { p3 = r5 153 r31 = r31 154 if (!p3.new) memh(r17+r21<<#3) = r31.new } 155 # CHECK: 1f 40 7f 70 156 # CHECK-NEXT: ab ca b1 40 157 { r31 = r31 158 if (p3) memh(r17+#42) = r31.new } 159 # CHECK: 1f 40 7f 70 160 # CHECK-NEXT: ab ca b1 44 161 { r31 = r31 162 if (!p3) memh(r17+#42) = r31.new } 163 # CHECK: 03 40 45 85 164 # CHECK-NEXT: 1f 40 7f 70 165 # CHECK-NEXT: ab ca b1 42 166 { p3 = r5 167 r31 = r31 168 if (p3.new) memh(r17+#42) = r31.new } 169 # CHECK: 03 40 45 85 170 # CHECK-NEXT: 1f 40 7f 70 171 # CHECK-NEXT: ab ca b1 46 172 { p3 = r5 173 r31 = r31 174 if (!p3.new) memh(r17+#42) = r31.new } 175 # CHECK: 1f 40 7f 70 176 # CHECK-NEXT: 2b ea b1 ab 177 { r31 = r31 178 if (p3) memh(r17++#10) = r31.new } 179 # CHECK: 1f 40 7f 70 180 # CHECK-NEXT: 2f ea b1 ab 181 { r31 = r31 182 if (!p3) memh(r17++#10) = r31.new } 183 # CHECK: 03 40 45 85 184 # CHECK-NEXT: 1f 40 7f 70 185 # CHECK-NEXT: ab ea b1 ab 186 { p3 = r5 187 r31 = r31 188 if (p3.new) memh(r17++#10) = r31.new } 189 # CHECK: 03 40 45 85 190 # CHECK-NEXT: 1f 40 7f 70 191 # CHECK-NEXT: af ea b1 ab 192 { p3 = r5 193 r31 = r31 194 if (!p3.new) memh(r17++#10) = r31.new } 195 196 # Store new-value word 197 # CHECK: 1f 40 7f 70 198 # CHECK-NEXT: 92 f5 b1 3b 199 { r31 = r31 200 memw(r17 + r21<<#3) = r31.new } 201 # CHECK: 1f 40 7f 70 202 # CHECK-NEXT: 15 d2 a0 48 203 { r31 = r31 204 memw(#84) = r31.new } 205 # CHECK: 1f 40 7f 70 206 # CHECK-NEXT: 15 d2 b1 a1 207 { r31 = r31 208 memw(r17+#84) = r31.new } 209 # CHECK: 1f 40 7f 70 210 # CHECK-NEXT: 02 f2 b1 a9 211 { r31 = r31 212 memw(r17 ++ I:circ(m1)) = r31.new } 213 # CHECK: 1f 40 7f 70 214 # CHECK-NEXT: 28 f2 b1 a9 215 { r31 = r31 216 memw(r17 ++ #20:circ(m1)) = r31.new } 217 # CHECK: 1f 40 7f 70 218 # CHECK-NEXT: 28 d2 b1 ab 219 { r31 = r31 220 memw(r17++#20) = r31.new } 221 # CHECK: 1f 40 7f 70 222 # CHECK-NEXT: 00 f2 b1 ad 223 { r31 = r31 224 memw(r17++m1) = r31.new } 225 # CHECK: 1f 40 7f 70 226 # CHECK-NEXT: 00 f2 b1 af 227 { r31 = r31 228 memw(r17 ++ m1:brev) = r31.new } 229 230 # Store new-value word conditionally 231 # CHECK: 1f 40 7f 70 232 # CHECK-NEXT: f2 f5 b1 34 233 { r31 = r31 234 if (p3) memw(r17+r21<<#3) = r31.new } 235 # CHECK: 1f 40 7f 70 236 # CHECK-NEXT: f2 f5 b1 35 237 { r31 = r31 238 if (!p3) memw(r17+r21<<#3) = r31.new } 239 # CHECK: 03 40 45 85 240 # CHECK-NEXT: 1f 40 7f 70 241 # CHECK-NEXT: f2 f5 b1 36 242 { p3 = r5 243 r31 = r31 244 if (p3.new) memw(r17+r21<<#3) = r31.new } 245 # CHECK: 03 40 45 85 246 # CHECK-NEXT: 1f 40 7f 70 247 # CHECK-NEXT: f2 f5 b1 37 248 { p3 = r5 249 r31 = r31 250 if (!p3.new) memw(r17+r21<<#3) = r31.new } 251 # CHECK: 1f 40 7f 70 252 # CHECK-NEXT: ab d2 b1 40 253 { r31 = r31 254 if (p3) memw(r17+#84) = r31.new } 255 # CHECK: 1f 40 7f 70 256 # CHECK-NEXT: ab d2 b1 44 257 { r31 = r31 258 if (!p3) memw(r17+#84) = r31.new } 259 # CHECK: 03 40 45 85 260 # CHECK-NEXT: 1f 40 7f 70 261 # CHECK-NEXT: ab d2 b1 42 262 { p3 = r5 263 r31 = r31 264 if (p3.new) memw(r17+#84) = r31.new } 265 # CHECK: 03 40 45 85 266 # CHECK-NEXT: 1f 40 7f 70 267 # CHECK-NEXT: ab d2 b1 46 268 { p3 = r5 269 r31 = r31 270 if (!p3.new) memw(r17+#84) = r31.new } 271 # CHECK: 1f 40 7f 70 272 # CHECK-NEXT: 2b f2 b1 ab 273 { r31 = r31 274 if (p3) memw(r17++#20) = r31.new } 275 # CHECK: 1f 40 7f 70 276 # CHECK-NEXT: 2f f2 b1 ab 277 { r31 = r31 278 if (!p3) memw(r17++#20) = r31.new } 279 # CHECK: 03 40 45 85 280 # CHECK-NEXT: 1f 40 7f 70 281 # CHECK-NEXT: ab f2 b1 ab 282 { p3 = r5 283 r31 = r31 284 if (p3.new) memw(r17++#20) = r31.new } 285 # CHECK: 03 40 45 85 286 # CHECK-NEXT: 1f 40 7f 70 287 # CHECK-NEXT: af f2 b1 ab 288 { p3 = r5 289 r31 = r31 290 if (!p3.new) memw(r17++#20) = r31.new } 291