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(gp+#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(gp+#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(gp+#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