xref: /llvm-project/llvm/test/CodeGen/BPF/assembler-disassembler.s (revision 2aacb56e8361213c1bd69c2ceafdea3aa0ca9125)
1d0d1431aSEduard Zingerman// RUN: llvm-mc -triple bpfel --mcpu=v3 --assemble --filetype=obj %s \
2d0d1431aSEduard Zingerman// RUN:   | llvm-objdump -d --mattr=+alu32 - \
3d0d1431aSEduard Zingerman// RUN:   | FileCheck %s
4d0d1431aSEduard Zingerman
5d0d1431aSEduard Zingerman// CHECK: 07 01 00 00 2a 00 00 00	r1 += 0x2a
6d0d1431aSEduard Zingerman// CHECK: 0f 21 00 00 00 00 00 00	r1 += r2
7d0d1431aSEduard Zingermanr1 += 42
8d0d1431aSEduard Zingermanr1 += r2
9d0d1431aSEduard Zingerman// CHECK: 17 01 00 00 2a 00 00 00	r1 -= 0x2a
10d0d1431aSEduard Zingerman// CHECK: 1f 21 00 00 00 00 00 00	r1 -= r2
11d0d1431aSEduard Zingermanr1 -= 42
12d0d1431aSEduard Zingermanr1 -= r2
13d0d1431aSEduard Zingerman// CHECK: 27 01 00 00 2a 00 00 00	r1 *= 0x2a
14d0d1431aSEduard Zingerman// CHECK: 2f 21 00 00 00 00 00 00	r1 *= r2
15d0d1431aSEduard Zingermanr1 *= 42
16d0d1431aSEduard Zingermanr1 *= r2
17d0d1431aSEduard Zingerman// CHECK: 37 01 00 00 2a 00 00 00	r1 /= 0x2a
18d0d1431aSEduard Zingerman// CHECK: 3f 21 00 00 00 00 00 00	r1 /= r2
19d0d1431aSEduard Zingermanr1 /= 42
20d0d1431aSEduard Zingermanr1 /= r2
21d0d1431aSEduard Zingerman// CHECK: 47 01 00 00 2a 00 00 00	r1 |= 0x2a
22d0d1431aSEduard Zingerman// CHECK: 4f 21 00 00 00 00 00 00	r1 |= r2
23d0d1431aSEduard Zingermanr1 |= 42
24d0d1431aSEduard Zingermanr1 |= r2
25d0d1431aSEduard Zingerman// CHECK: 57 01 00 00 2a 00 00 00	r1 &= 0x2a
26d0d1431aSEduard Zingerman// CHECK: 5f 21 00 00 00 00 00 00	r1 &= r2
27d0d1431aSEduard Zingermanr1 &= 42
28d0d1431aSEduard Zingermanr1 &= r2
29d0d1431aSEduard Zingerman// CHECK: 67 01 00 00 2a 00 00 00	r1 <<= 0x2a
30d0d1431aSEduard Zingerman// CHECK: 6f 21 00 00 00 00 00 00	r1 <<= r2
31d0d1431aSEduard Zingermanr1 <<= 42
32d0d1431aSEduard Zingermanr1 <<= r2
33d0d1431aSEduard Zingerman// CHECK: 77 01 00 00 2a 00 00 00	r1 >>= 0x2a
34d0d1431aSEduard Zingerman// CHECK: 7f 21 00 00 00 00 00 00	r1 >>= r2
35d0d1431aSEduard Zingermanr1 >>= 42
36d0d1431aSEduard Zingermanr1 >>= r2
37d0d1431aSEduard Zingerman// CHECK: 97 01 00 00 2a 00 00 00	r1 %= 0x2a
38d0d1431aSEduard Zingerman// CHECK: 9f 21 00 00 00 00 00 00	r1 %= r2
39d0d1431aSEduard Zingermanr1 %= 42
40d0d1431aSEduard Zingermanr1 %= r2
41d0d1431aSEduard Zingerman// CHECK: a7 01 00 00 2a 00 00 00	r1 ^= 0x2a
42d0d1431aSEduard Zingerman// CHECK: af 21 00 00 00 00 00 00	r1 ^= r2
43d0d1431aSEduard Zingermanr1 ^= 42
44d0d1431aSEduard Zingermanr1 ^= r2
45d0d1431aSEduard Zingerman// CHECK: b7 01 00 00 2a 00 00 00	r1 = 0x2a
46d0d1431aSEduard Zingerman// CHECK: bf 21 00 00 00 00 00 00	r1 = r2
47d0d1431aSEduard Zingermanr1 = 42
48d0d1431aSEduard Zingermanr1 = r2
49d0d1431aSEduard Zingerman// CHECK: c7 01 00 00 2a 00 00 00	r1 s>>= 0x2a
50d0d1431aSEduard Zingerman// CHECK: cf 21 00 00 00 00 00 00	r1 s>>= r2
51d0d1431aSEduard Zingermanr1 s>>= 42
52d0d1431aSEduard Zingermanr1 s>>= r2
53d0d1431aSEduard Zingerman// CHECK: 87 01 00 00 00 00 00 00	r1 = -r1
54d0d1431aSEduard Zingermanr1 = -r1
55d0d1431aSEduard Zingerman
56d0d1431aSEduard Zingerman// CHECK: 18 01 00 00 2a 00 00 00 00 00 00 00 00 00 00 00	r1 = 0x2a ll
57d0d1431aSEduard Zingermanr1 = 42 ll
58d0d1431aSEduard Zingerman
59d0d1431aSEduard Zingerman// CHECK: 04 01 00 00 2a 00 00 00	w1 += 0x2a
60d0d1431aSEduard Zingerman// CHECK: 0c 21 00 00 00 00 00 00	w1 += w2
61d0d1431aSEduard Zingermanw1 += 42
62d0d1431aSEduard Zingermanw1 += w2
63d0d1431aSEduard Zingerman// CHECK: 14 01 00 00 2a 00 00 00	w1 -= 0x2a
64d0d1431aSEduard Zingerman// CHECK: 1c 21 00 00 00 00 00 00	w1 -= w2
65d0d1431aSEduard Zingermanw1 -= 42
66d0d1431aSEduard Zingermanw1 -= w2
67d0d1431aSEduard Zingerman// CHECK: 24 01 00 00 2a 00 00 00	w1 *= 0x2a
68d0d1431aSEduard Zingerman// CHECK: 2c 21 00 00 00 00 00 00	w1 *= w2
69d0d1431aSEduard Zingermanw1 *= 42
70d0d1431aSEduard Zingermanw1 *= w2
71d0d1431aSEduard Zingerman// CHECK: 34 01 00 00 2a 00 00 00	w1 /= 0x2a
72d0d1431aSEduard Zingerman// CHECK: 3c 21 00 00 00 00 00 00	w1 /= w2
73d0d1431aSEduard Zingermanw1 /= 42
74d0d1431aSEduard Zingermanw1 /= w2
75d0d1431aSEduard Zingerman// CHECK: 44 01 00 00 2a 00 00 00	w1 |= 0x2a
76d0d1431aSEduard Zingerman// CHECK: 4c 21 00 00 00 00 00 00	w1 |= w2
77d0d1431aSEduard Zingermanw1 |= 42
78d0d1431aSEduard Zingermanw1 |= w2
79d0d1431aSEduard Zingerman// CHECK: 54 01 00 00 2a 00 00 00	w1 &= 0x2a
80d0d1431aSEduard Zingerman// CHECK: 5c 21 00 00 00 00 00 00	w1 &= w2
81d0d1431aSEduard Zingermanw1 &= 42
82d0d1431aSEduard Zingermanw1 &= w2
83d0d1431aSEduard Zingerman// CHECK: 64 01 00 00 2a 00 00 00	w1 <<= 0x2a
84d0d1431aSEduard Zingerman// CHECK: 6c 21 00 00 00 00 00 00	w1 <<= w2
85d0d1431aSEduard Zingermanw1 <<= 42
86d0d1431aSEduard Zingermanw1 <<= w2
87d0d1431aSEduard Zingerman// CHECK: 74 01 00 00 2a 00 00 00	w1 >>= 0x2a
88d0d1431aSEduard Zingerman// CHECK: 7c 21 00 00 00 00 00 00	w1 >>= w2
89d0d1431aSEduard Zingermanw1 >>= 42
90d0d1431aSEduard Zingermanw1 >>= w2
91d0d1431aSEduard Zingerman// CHECK: 94 01 00 00 2a 00 00 00	w1 %= 0x2a
92d0d1431aSEduard Zingerman// CHECK: 9c 21 00 00 00 00 00 00	w1 %= w2
93d0d1431aSEduard Zingermanw1 %= 42
94d0d1431aSEduard Zingermanw1 %= w2
95d0d1431aSEduard Zingerman// CHECK: a4 01 00 00 2a 00 00 00	w1 ^= 0x2a
96d0d1431aSEduard Zingerman// CHECK: ac 21 00 00 00 00 00 00	w1 ^= w2
97d0d1431aSEduard Zingermanw1 ^= 42
98d0d1431aSEduard Zingermanw1 ^= w2
99d0d1431aSEduard Zingerman// CHECK: b4 01 00 00 2a 00 00 00	w1 = 0x2a
100d0d1431aSEduard Zingerman// CHECK: bc 21 00 00 00 00 00 00	w1 = w2
101d0d1431aSEduard Zingermanw1 = 42
102d0d1431aSEduard Zingermanw1 = w2
103d0d1431aSEduard Zingerman// CHECK: c4 01 00 00 2a 00 00 00	w1 s>>= 0x2a
104d0d1431aSEduard Zingerman// CHECK: cc 21 00 00 00 00 00 00	w1 s>>= w2
105d0d1431aSEduard Zingermanw1 s>>= 42
106d0d1431aSEduard Zingermanw1 s>>= w2
107d0d1431aSEduard Zingerman// CHECK: 84 01 00 00 00 00 00 00	w1 = -w1
108d0d1431aSEduard Zingermanw1 = -w1
109d0d1431aSEduard Zingerman
110d0d1431aSEduard Zingerman// CHECK: dc 01 00 00 10 00 00 00	r1 = be16 r1
111d0d1431aSEduard Zingerman// CHECK: dc 02 00 00 20 00 00 00	r2 = be32 r2
112d0d1431aSEduard Zingerman// CHECK: dc 03 00 00 40 00 00 00	r3 = be64 r3
113d0d1431aSEduard Zingermanr1 = be16 r1
114d0d1431aSEduard Zingermanr2 = be32 r2
115d0d1431aSEduard Zingermanr3 = be64 r3
116d0d1431aSEduard Zingerman// CHECK: d4 01 00 00 10 00 00 00	r1 = le16 r1
117d0d1431aSEduard Zingerman// CHECK: d4 02 00 00 20 00 00 00	r2 = le32 r2
118d0d1431aSEduard Zingerman// CHECK: d4 03 00 00 40 00 00 00	r3 = le64 r3
119d0d1431aSEduard Zingermanr1 = le16 r1
120d0d1431aSEduard Zingermanr2 = le32 r2
121d0d1431aSEduard Zingermanr3 = le64 r3
122d0d1431aSEduard Zingerman// CHECK: 05 00 00 00 00 00 00 00	goto +0x0
123d0d1431aSEduard Zingermangoto +0
124d0d1431aSEduard Zingerman
125d0d1431aSEduard Zingerman// CHECK: 15 01 00 00 2a 00 00 00	if r1 == 0x2a goto +0x0
126d0d1431aSEduard Zingerman// CHECK: 1d 21 00 00 00 00 00 00	if r1 == r2 goto +0x0
127d0d1431aSEduard Zingermanif r1 == 42 goto +0
128d0d1431aSEduard Zingermanif r1 == r2 goto +0
129d0d1431aSEduard Zingerman// CHECK: 55 01 00 00 2a 00 00 00	if r1 != 0x2a goto +0x0
130d0d1431aSEduard Zingerman// CHECK: 5d 21 00 00 00 00 00 00	if r1 != r2 goto +0x0
131d0d1431aSEduard Zingermanif r1 != 42 goto +0
132d0d1431aSEduard Zingermanif r1 != r2 goto +0
133d0d1431aSEduard Zingerman// CHECK: 25 01 00 00 2a 00 00 00	if r1 > 0x2a goto +0x0
134d0d1431aSEduard Zingerman// CHECK: 2d 21 00 00 00 00 00 00	if r1 > r2 goto +0x0
135d0d1431aSEduard Zingermanif r1 > 42 goto +0
136d0d1431aSEduard Zingermanif r1 > r2 goto +0
137d0d1431aSEduard Zingerman// CHECK: 35 01 00 00 2a 00 00 00	if r1 >= 0x2a goto +0x0
138d0d1431aSEduard Zingerman// CHECK: 3d 21 00 00 00 00 00 00	if r1 >= r2 goto +0x0
139d0d1431aSEduard Zingermanif r1 >= 42 goto +0
140d0d1431aSEduard Zingermanif r1 >= r2 goto +0
141d0d1431aSEduard Zingerman// CHECK: 65 01 00 00 2a 00 00 00	if r1 s> 0x2a goto +0x0
142d0d1431aSEduard Zingerman// CHECK: 6d 21 00 00 00 00 00 00	if r1 s> r2 goto +0x0
143d0d1431aSEduard Zingermanif r1 s> 42 goto +0
144d0d1431aSEduard Zingermanif r1 s> r2 goto +0
145d0d1431aSEduard Zingerman// CHECK: 75 01 00 00 2a 00 00 00	if r1 s>= 0x2a goto +0x0
146d0d1431aSEduard Zingerman// CHECK: 7d 21 00 00 00 00 00 00	if r1 s>= r2 goto +0x0
147d0d1431aSEduard Zingermanif r1 s>= 42 goto +0
148d0d1431aSEduard Zingermanif r1 s>= r2 goto +0
149d0d1431aSEduard Zingerman// CHECK: a5 01 00 00 2a 00 00 00	if r1 < 0x2a goto +0x0
150d0d1431aSEduard Zingerman// CHECK: ad 21 00 00 00 00 00 00	if r1 < r2 goto +0x0
151d0d1431aSEduard Zingermanif r1 < 42 goto +0
152d0d1431aSEduard Zingermanif r1 < r2 goto +0
153d0d1431aSEduard Zingerman// CHECK: b5 01 00 00 2a 00 00 00	if r1 <= 0x2a goto +0x0
154d0d1431aSEduard Zingerman// CHECK: bd 21 00 00 00 00 00 00	if r1 <= r2 goto +0x0
155d0d1431aSEduard Zingermanif r1 <= 42 goto +0
156d0d1431aSEduard Zingermanif r1 <= r2 goto +0
157d0d1431aSEduard Zingerman// CHECK: c5 01 00 00 2a 00 00 00	if r1 s< 0x2a goto +0x0
158d0d1431aSEduard Zingerman// CHECK: cd 21 00 00 00 00 00 00	if r1 s< r2 goto +0x0
159d0d1431aSEduard Zingermanif r1 s< 42 goto +0
160d0d1431aSEduard Zingermanif r1 s< r2 goto +0
161d0d1431aSEduard Zingerman// CHECK: d5 01 00 00 2a 00 00 00	if r1 s<= 0x2a goto +0x0
162d0d1431aSEduard Zingerman// CHECK: dd 21 00 00 00 00 00 00	if r1 s<= r2 goto +0x0
163d0d1431aSEduard Zingermanif r1 s<= 42 goto +0
164d0d1431aSEduard Zingermanif r1 s<= r2 goto +0
165d0d1431aSEduard Zingerman
166d0d1431aSEduard Zingerman// CHECK: 16 01 00 00 2a 00 00 00	if w1 == 0x2a goto +0x0
167d0d1431aSEduard Zingerman// CHECK: 1e 21 00 00 00 00 00 00	if w1 == w2 goto +0x0
168d0d1431aSEduard Zingermanif w1 == 42 goto +0
169d0d1431aSEduard Zingermanif w1 == w2 goto +0
170d0d1431aSEduard Zingerman// CHECK: 56 01 00 00 2a 00 00 00	if w1 != 0x2a goto +0x0
171d0d1431aSEduard Zingerman// CHECK: 5e 21 00 00 00 00 00 00	if w1 != w2 goto +0x0
172d0d1431aSEduard Zingermanif w1 != 42 goto +0
173d0d1431aSEduard Zingermanif w1 != w2 goto +0
174d0d1431aSEduard Zingerman// CHECK: 26 01 00 00 2a 00 00 00	if w1 > 0x2a goto +0x0
175d0d1431aSEduard Zingerman// CHECK: 2e 21 00 00 00 00 00 00	if w1 > w2 goto +0x0
176d0d1431aSEduard Zingermanif w1 > 42 goto +0
177d0d1431aSEduard Zingermanif w1 > w2 goto +0
178d0d1431aSEduard Zingerman// CHECK: 36 01 00 00 2a 00 00 00	if w1 >= 0x2a goto +0x0
179d0d1431aSEduard Zingerman// CHECK: 3e 21 00 00 00 00 00 00	if w1 >= w2 goto +0x0
180d0d1431aSEduard Zingermanif w1 >= 42 goto +0
181d0d1431aSEduard Zingermanif w1 >= w2 goto +0
182d0d1431aSEduard Zingerman// CHECK: 66 01 00 00 2a 00 00 00	if w1 s> 0x2a goto +0x0
183d0d1431aSEduard Zingerman// CHECK: 6e 21 00 00 00 00 00 00	if w1 s> w2 goto +0x0
184d0d1431aSEduard Zingermanif w1 s> 42 goto +0
185d0d1431aSEduard Zingermanif w1 s> w2 goto +0
186d0d1431aSEduard Zingerman// CHECK: 76 01 00 00 2a 00 00 00	if w1 s>= 0x2a goto +0x0
187d0d1431aSEduard Zingerman// CHECK: 7e 21 00 00 00 00 00 00	if w1 s>= w2 goto +0x0
188d0d1431aSEduard Zingermanif w1 s>= 42 goto +0
189d0d1431aSEduard Zingermanif w1 s>= w2 goto +0
190d0d1431aSEduard Zingerman// CHECK: a6 01 00 00 2a 00 00 00	if w1 < 0x2a goto +0x0
191d0d1431aSEduard Zingerman// CHECK: ae 21 00 00 00 00 00 00	if w1 < w2 goto +0x0
192d0d1431aSEduard Zingermanif w1 < 42 goto +0
193d0d1431aSEduard Zingermanif w1 < w2 goto +0
194d0d1431aSEduard Zingerman// CHECK: b6 01 00 00 2a 00 00 00	if w1 <= 0x2a goto +0x0
195d0d1431aSEduard Zingerman// CHECK: be 21 00 00 00 00 00 00	if w1 <= w2 goto +0x0
196d0d1431aSEduard Zingermanif w1 <= 42 goto +0
197d0d1431aSEduard Zingermanif w1 <= w2 goto +0
198d0d1431aSEduard Zingerman// CHECK: c6 01 00 00 2a 00 00 00	if w1 s< 0x2a goto +0x0
199d0d1431aSEduard Zingerman// CHECK: ce 21 00 00 00 00 00 00	if w1 s< w2 goto +0x0
200d0d1431aSEduard Zingermanif w1 s< 42 goto +0
201d0d1431aSEduard Zingermanif w1 s< w2 goto +0
202d0d1431aSEduard Zingerman// CHECK: d6 01 00 00 2a 00 00 00	if w1 s<= 0x2a goto +0x0
203d0d1431aSEduard Zingerman// CHECK: de 21 00 00 00 00 00 00	if w1 s<= w2 goto +0x0
204d0d1431aSEduard Zingermanif w1 s<= 42 goto +0
205d0d1431aSEduard Zingermanif w1 s<= w2 goto +0
206d0d1431aSEduard Zingerman
207d0d1431aSEduard Zingerman// CHECK: 85 00 00 00 2a 00 00 00	call 0x2a
208d0d1431aSEduard Zingermancall +42
209d0d1431aSEduard Zingerman// CHECK: 95 00 00 00 00 00 00 00	exit
210d0d1431aSEduard Zingermanexit
211d0d1431aSEduard Zingerman
212d0d1431aSEduard Zingerman// Note: For the group below w1 is used as a destination for sizes u8, u16, u32.
213d0d1431aSEduard Zingerman//       This is disassembler quirk, but is technically not wrong, as there are
214d0d1431aSEduard Zingerman//       no different encodings for 'r1 = load' vs 'w1 = load'.
215d0d1431aSEduard Zingerman//
216d0d1431aSEduard Zingerman// CHECK: 71 21 2a 00 00 00 00 00	w1 = *(u8 *)(r2 + 0x2a)
217d0d1431aSEduard Zingerman// CHECK: 69 21 2a 00 00 00 00 00	w1 = *(u16 *)(r2 + 0x2a)
218d0d1431aSEduard Zingerman// CHECK: 61 21 2a 00 00 00 00 00	w1 = *(u32 *)(r2 + 0x2a)
219d0d1431aSEduard Zingerman// CHECK: 79 21 2a 00 00 00 00 00	r1 = *(u64 *)(r2 + 0x2a)
220d0d1431aSEduard Zingermanr1 = *(u8*)(r2 + 42)
221d0d1431aSEduard Zingermanr1 = *(u16*)(r2 + 42)
222d0d1431aSEduard Zingermanr1 = *(u32*)(r2 + 42)
223d0d1431aSEduard Zingermanr1 = *(u64*)(r2 + 42)
224d0d1431aSEduard Zingerman
225d0d1431aSEduard Zingerman// Note: For the group below w1 is used as a source for sizes u8, u16, u32.
226d0d1431aSEduard Zingerman//       This is disassembler quirk, but is technically not wrong, as there are
227d0d1431aSEduard Zingerman//       no different encodings for 'store r1' vs 'store w1'.
228d0d1431aSEduard Zingerman//
229d0d1431aSEduard Zingerman// CHECK: 73 12 2a 00 00 00 00 00	*(u8 *)(r2 + 0x2a) = w1
230d0d1431aSEduard Zingerman// CHECK: 6b 12 2a 00 00 00 00 00	*(u16 *)(r2 + 0x2a) = w1
231d0d1431aSEduard Zingerman// CHECK: 63 12 2a 00 00 00 00 00	*(u32 *)(r2 + 0x2a) = w1
232d0d1431aSEduard Zingerman// CHECK: 7b 12 2a 00 00 00 00 00	*(u64 *)(r2 + 0x2a) = r1
233d0d1431aSEduard Zingerman*(u8*)(r2 + 42) = r1
234d0d1431aSEduard Zingerman*(u16*)(r2 + 42) = r1
235d0d1431aSEduard Zingerman*(u32*)(r2 + 42) = r1
236d0d1431aSEduard Zingerman*(u64*)(r2 + 42) = r1
237d0d1431aSEduard Zingerman
238d0d1431aSEduard Zingerman// CHECK: c3 21 01 00 00 00 00 00	lock *(u32 *)(r1 + 0x1) += w2
239d0d1431aSEduard Zingerman// CHECK: c3 21 01 00 50 00 00 00	lock *(u32 *)(r1 + 0x1) &= w2
240d0d1431aSEduard Zingerman// CHECK: c3 21 01 00 40 00 00 00	lock *(u32 *)(r1 + 0x1) |= w2
241d0d1431aSEduard Zingerman// CHECK: c3 21 01 00 a0 00 00 00	lock *(u32 *)(r1 + 0x1) ^= w2
242d0d1431aSEduard Zingermanlock *(u32*)(r1 + 1) += w2
243d0d1431aSEduard Zingermanlock *(u32*)(r1 + 1) &= w2
244d0d1431aSEduard Zingermanlock *(u32*)(r1 + 1) |= w2
245d0d1431aSEduard Zingermanlock *(u32*)(r1 + 1) ^= w2
246d0d1431aSEduard Zingerman// CHECK: db 21 01 00 00 00 00 00	lock *(u64 *)(r1 + 0x1) += r2
247d0d1431aSEduard Zingerman// CHECK: db 21 01 00 50 00 00 00	lock *(u64 *)(r1 + 0x1) &= r2
248d0d1431aSEduard Zingerman// CHECK: db 21 01 00 40 00 00 00	lock *(u64 *)(r1 + 0x1) |= r2
249d0d1431aSEduard Zingerman// CHECK: db 21 01 00 a0 00 00 00	lock *(u64 *)(r1 + 0x1) ^= r2
250d0d1431aSEduard Zingermanlock *(u64*)(r1 + 1) += r2
251d0d1431aSEduard Zingermanlock *(u64*)(r1 + 1) &= r2
252d0d1431aSEduard Zingermanlock *(u64*)(r1 + 1) |= r2
253d0d1431aSEduard Zingermanlock *(u64*)(r1 + 1) ^= r2
254d0d1431aSEduard Zingerman// CHECK: c3 01 00 00 01 00 00 00	w0 = atomic_fetch_add((u32 *)(r1 + 0x0), w0)
255d0d1431aSEduard Zingerman// CHECK: c3 01 00 00 51 00 00 00	w0 = atomic_fetch_and((u32 *)(r1 + 0x0), w0)
256d0d1431aSEduard Zingerman// CHECK: c3 01 00 00 a1 00 00 00	w0 = atomic_fetch_xor((u32 *)(r1 + 0x0), w0)
257d0d1431aSEduard Zingerman// CHECK: c3 01 00 00 41 00 00 00	w0 = atomic_fetch_or((u32 *)(r1 + 0x0), w0)
258d0d1431aSEduard Zingermanw0 = atomic_fetch_add((u32 *)(r1 + 0), w0)
259d0d1431aSEduard Zingermanw0 = atomic_fetch_and((u32 *)(r1 + 0), w0)
260d0d1431aSEduard Zingermanw0 = atomic_fetch_xor((u32 *)(r1 + 0), w0)
261d0d1431aSEduard Zingermanw0 = atomic_fetch_or((u32 *)(r1 + 0), w0)
262d0d1431aSEduard Zingerman// CHECK: db 01 00 00 01 00 00 00	r0 = atomic_fetch_add((u64 *)(r1 + 0x0), r0)
263d0d1431aSEduard Zingerman// CHECK: db 01 00 00 51 00 00 00	r0 = atomic_fetch_and((u64 *)(r1 + 0x0), r0)
264d0d1431aSEduard Zingerman// CHECK: db 01 00 00 a1 00 00 00	r0 = atomic_fetch_xor((u64 *)(r1 + 0x0), r0)
265d0d1431aSEduard Zingerman// CHECK: db 01 00 00 41 00 00 00	r0 = atomic_fetch_or((u64 *)(r1 + 0x0), r0)
266d0d1431aSEduard Zingermanr0 = atomic_fetch_add((u64 *)(r1 + 0), r0)
267d0d1431aSEduard Zingermanr0 = atomic_fetch_and((u64 *)(r1 + 0), r0)
268d0d1431aSEduard Zingermanr0 = atomic_fetch_xor((u64 *)(r1 + 0), r0)
269d0d1431aSEduard Zingermanr0 = atomic_fetch_or((u64 *)(r1 + 0), r0)
270d0d1431aSEduard Zingerman// CHECK: c3 01 00 00 e1 00 00 00	w0 = xchg32_32(r1 + 0x0, w0)
271d0d1431aSEduard Zingerman// CHECK: db 01 00 00 e1 00 00 00	r0 = xchg_64(r1 + 0x0, r0)
272d0d1431aSEduard Zingermanw0 = xchg32_32(r1 + 0, w0)
273d0d1431aSEduard Zingermanr0 = xchg_64(r1 + 0, r0)
274d0d1431aSEduard Zingerman// CHECK: c3 11 00 00 f1 00 00 00	w0 = cmpxchg32_32(r1 + 0x0, w0, w1)
275d0d1431aSEduard Zingerman// CHECK: db 11 00 00 f1 00 00 00	r0 = cmpxchg_64(r1 + 0x0, r0, r1)
276d0d1431aSEduard Zingermanw0 = cmpxchg32_32(r1 + 0, w0, w1)
277d0d1431aSEduard Zingermanr0 = cmpxchg_64(r1 + 0, r0, r1)
278d0d1431aSEduard Zingerman
279d0d1431aSEduard Zingerman// CHECK: 30 00 00 00 2a 00 00 00	r0 = *(u8 *)skb[0x2a]
280d0d1431aSEduard Zingerman// CHECK: 28 00 00 00 2a 00 00 00	r0 = *(u16 *)skb[0x2a]
281d0d1431aSEduard Zingerman// CHECK: 20 00 00 00 2a 00 00 00	r0 = *(u32 *)skb[0x2a]
282d0d1431aSEduard Zingermanr0 = *(u8*)skb[42]
283d0d1431aSEduard Zingermanr0 = *(u16*)skb[42]
284d0d1431aSEduard Zingermanr0 = *(u32*)skb[42]
285d0d1431aSEduard Zingerman
286d0d1431aSEduard Zingerman// CHECK: 50 10 00 00 00 00 00 00	r0 = *(u8 *)skb[r1]
287d0d1431aSEduard Zingerman// CHECK: 48 10 00 00 00 00 00 00	r0 = *(u16 *)skb[r1]
288d0d1431aSEduard Zingerman// CHECK: 40 10 00 00 00 00 00 00	r0 = *(u32 *)skb[r1]
289d0d1431aSEduard Zingermanr0 = *(u8*)skb[r1]
290d0d1431aSEduard Zingermanr0 = *(u16*)skb[r1]
291d0d1431aSEduard Zingermanr0 = *(u32*)skb[r1]
292*2aacb56eS4ast
293*2aacb56eS4ast// CHECK: bf 10 01 00 01 00 00 00	r0 = addr_space_cast(r1, 0x0, 0x1)
294*2aacb56eS4ast// CHECK: bf 21 01 00 00 00 01 00	r1 = addr_space_cast(r2, 0x1, 0x0)
295*2aacb56eS4ast// CHECK: bf 43 01 00 2a 00 07 00	r3 = addr_space_cast(r4, 0x7, 0x2a)
296*2aacb56eS4astr0 = addr_space_cast(r1, 0, 1)
297*2aacb56eS4astr1 = addr_space_cast(r2, 1, 0)
298*2aacb56eS4astr3 = addr_space_cast(r4, 7, 42)
299