xref: /llvm-project/llvm/test/MC/CSKY/basic-16bit.s (revision ec642ceebc1aacc8b16249df7734b8cf90ae2963)
1# RUN: llvm-mc %s -triple=csky -show-encoding -csky-no-aliases -mattr=+e1 \
2# RUN: -mattr=+e2 -mattr=+btst16 | FileCheck -check-prefixes=CHECK-ASM,CHECK-ASM-AND-OBJ %s
3# RUN: llvm-mc -filetype=obj -triple=csky -mattr=+e1 -mattr=+e2 -mattr=+btst16 < %s \
4# RUN:     | llvm-objdump --mattr=+e1 --mattr=+e2 --mattr=+btst16 -M no-aliases -M abi-names -d -r - \
5# RUN:     | FileCheck -check-prefixes=CHECK-ASM-AND-OBJ,CHECK-OBJ %s
6
7# CHECK-ASM-AND-OBJ: addi16 a0, a0, 2
8# CHECK-ASM: encoding: [0x06,0x58]
9addi16 a0, a0, 2
10
11# CHECK-ASM-AND-OBJ: addi16 a0, sp, 4
12# CHECK-ASM: encoding: [0x01,0x18]
13addi16 a0, sp, 4
14
15# CHECK-ASM-AND-OBJ: addi16 a0, a1, 2
16# CHECK-ASM: encoding: [0x06,0x59]
17addi16 a0, a1, 2
18
19# CHECK-ASM-AND-OBJ: addi16 sp, sp, 8
20# CHECK-ASM: encoding: [0x02,0x14]
21addi16 sp, sp, 8
22
23# CHECK-ASM-AND-OBJ: subi16 a0, a0, 2
24# CHECK-ASM: encoding: [0x07,0x58]
25subi16 a0, a0, 2
26
27# CHECK-ASM-AND-OBJ: subi16 a0, a1, 2
28# CHECK-ASM: encoding: [0x07,0x59]
29subi16 a0, a1, 2
30
31# CHECK-ASM-AND-OBJ: subi16 sp, sp, 8
32# CHECK-ASM: encoding: [0x22,0x14]
33subi16 sp, sp, 8
34
35# CHECK-ASM-AND-OBJ: lsli16 a0, a1, 2
36# CHECK-ASM: encoding: [0x02,0x41]
37lsli16 a0, a1, 2
38
39# CHECK-ASM-AND-OBJ: lsri16 a0, a1, 2
40# CHECK-ASM: encoding: [0x02,0x49]
41lsri16 a0, a1, 2
42
43# CHECK-ASM-AND-OBJ: asri16 a0, a1, 2
44# CHECK-ASM: encoding: [0x02,0x51]
45asri16 a0, a1, 2
46
47# CHECK-ASM-AND-OBJ: btsti16 a0, 2
48# CHECK-ASM: encoding: [0xc2,0x38]
49btsti16 a0, 2
50
51# CHECK-ASM-AND-OBJ: bclri16 a0, 2
52# CHECK-ASM: encoding: [0x82,0x38]
53bclri16 a0, 2
54
55# CHECK-ASM-AND-OBJ: bseti16 a0, 2
56# CHECK-ASM: encoding: [0xa2,0x38]
57bseti16 a0, 2
58
59# CHECK-ASM-AND-OBJ: cmpnei16 a0, 2
60# CHECK-ASM: encoding: [0x42,0x38]
61cmpnei16 a0, 2
62
63# CHECK-ASM-AND-OBJ: cmphsi16 a0, 2
64# CHECK-ASM: encoding: [0x01,0x38]
65cmphsi16 a0, 2
66
67# CHECK-ASM-AND-OBJ: cmplti16 a0, 2
68# CHECK-ASM: encoding: [0x21,0x38]
69cmplti16 a0, 2
70
71# CHECK-ASM-AND-OBJ: movi16 a0, 2
72# CHECK-ASM: encoding: [0x02,0x30]
73movi16 a0, 2
74
75# CHECK-ASM-AND-OBJ: addu16 a3, l0, l1
76# CHECK-ASM: encoding: [0x74,0x5c]
77addu16 a3, l0, l1
78
79# CHECK-ASM-AND-OBJ: subu16 a3, l0, l1
80# CHECK-ASM: encoding: [0x75,0x5c]
81subu16 a3, l0, l1
82
83# CHECK-ASM-AND-OBJ: and16 a3, l0
84# CHECK-ASM: encoding: [0xd0,0x68]
85and16 a3, l0
86
87# CHECK-ASM-AND-OBJ: andn16 a3, l0
88# CHECK-ASM: encoding: [0xd1,0x68]
89andn16 a3, l0
90
91# CHECK-ASM-AND-OBJ: or16 a3, l0
92# CHECK-ASM: encoding: [0xd0,0x6c]
93or16 a3, l0
94
95# CHECK-ASM-AND-OBJ: xor16 a3, l0
96# CHECK-ASM: encoding: [0xd1,0x6c]
97xor16 a3, l0
98
99# CHECK-ASM-AND-OBJ: nor16 a3, l0
100# CHECK-ASM: encoding: [0xd2,0x6c]
101nor16 a3, l0
102
103# CHECK-ASM-AND-OBJ: lsl16 a3, l0
104# CHECK-ASM: encoding: [0xd0,0x70]
105lsl16 a3, l0
106
107# CHECK-ASM-AND-OBJ: rotl16 a3, l0
108# CHECK-ASM: encoding: [0xd3,0x70]
109rotl16 a3, l0
110
111# CHECK-ASM-AND-OBJ: lsr16 a3, l0
112# CHECK-ASM: encoding: [0xd1,0x70]
113lsr16 a3, l0
114
115# CHECK-ASM-AND-OBJ: asr16 a3, l0
116# CHECK-ASM: encoding: [0xd2,0x70]
117asr16 a3, l0
118
119# CHECK-ASM-AND-OBJ: mult16 a3, l0
120# CHECK-ASM: encoding: [0xd0,0x7c]
121mult16 a3, l0
122
123# CHECK-ASM-AND-OBJ: addc16 a3, l0
124# CHECK-ASM: encoding: [0xd1,0x60]
125addc16 a3, l0
126
127# CHECK-ASM-AND-OBJ: subc16 a3, l0
128# CHECK-ASM: encoding: [0xd3,0x60]
129subc16 a3, l0
130
131# CHECK-OBJ: ld16.b a0, (a0, 0x2)
132# CHECK-ASM: ld16.b a0, (a0, 2)
133# CHECK-ASM: encoding: [0x02,0x80]
134ld16.b a0, (a0, 2)
135
136# CHECK-OBJ: ld16.h a0, (a0, 0x2)
137# CHECK-ASM: ld16.h a0, (a0, 2)
138# CHECK-ASM: encoding: [0x01,0x88]
139ld16.h a0, (a0, 2)
140
141# CHECK-OBJ: ld16.w a0, (a0, 0x4)
142# CHECK-ASM: ld16.w a0, (a0, 4)
143# CHECK-ASM: encoding: [0x01,0x90]
144ld16.w a0, (a0, 4)
145
146# CHECK-OBJ: ld16.w a0, (sp, 0x4)
147# CHECK-ASM: ld16.w a0, (sp, 4)
148# CHECK-ASM: encoding: [0x01,0x98]
149ld16.w a0, (sp, 4)
150
151# CHECK-OBJ: st16.b a0, (a0, 0x2)
152# CHECK-ASM: st16.b a0, (a0, 2)
153# CHECK-ASM: encoding: [0x02,0xa0]
154st16.b a0, (a0, 2)
155
156# CHECK-OBJ: st16.h a0, (a0, 0x2)
157# CHECK-ASM: st16.h a0, (a0, 2)
158# CHECK-ASM: encoding: [0x01,0xa8]
159st16.h a0, (a0, 2)
160
161# CHECK-OBJ: st16.w a0, (a0, 0x4)
162# CHECK-ASM: st16.w a0, (a0, 4)
163# CHECK-ASM: encoding: [0x01,0xb0]
164st16.w a0, (a0, 4)
165
166# CHECK-OBJ: st16.w a0, (sp, 0x4)
167# CHECK-ASM: st16.w a0, (sp, 4)
168# CHECK-ASM: encoding: [0x01,0xb8]
169st16.w a0, (sp, 4)
170
171# CHECK-ASM-AND-OBJ: revb16 a3, l0
172# CHECK-ASM: encoding: [0xd2,0x78]
173revb16 a3, l0
174
175# CHECK-ASM-AND-OBJ: revh16 a3, l0
176# CHECK-ASM: encoding: [0xd3,0x78]
177revh16 a3, l0
178
179# CHECK-ASM-AND-OBJ: mvcv16 a3
180# CHECK-ASM: encoding: [0xc3,0x64]
181mvcv16 a3
182
183# CHECK-ASM-AND-OBJ: cmpne16 a3, l0
184# CHECK-ASM: encoding: [0x0e,0x65]
185cmpne16 a3, l0
186
187# CHECK-ASM-AND-OBJ: cmphs16 a3, l0
188# CHECK-ASM: encoding: [0x0c,0x65]
189cmphs16 a3, l0
190
191# CHECK-ASM-AND-OBJ: cmplt16 a3, l0
192# CHECK-ASM: encoding: [0x0d,0x65]
193cmplt16 a3, l0
194
195# CHECK-ASM-AND-OBJ: tst16 a3, l0
196# CHECK-ASM: encoding: [0x0e,0x69]
197tst16 a3, l0
198
199# CHECK-ASM-AND-OBJ: tstnbz16 a3
200# CHECK-ASM: encoding: [0x0f,0x68]
201tstnbz16 a3
202
203# CHECK-ASM: br16 .L.test
204# CHECK-ASM: encoding: [A,0x04'A']
205# CHECK-ASM: fixup A - offset: 0, value: .L.test, kind: fixup_csky_pcrel_imm10_scale2
206.L.test:
207br16 .L.test
208
209# CHECK-ASM: bt16 .L.test2
210# CHECK-ASM: encoding: [A,0x08'A']
211# CHECK-ASM: fixup A - offset: 0, value: .L.test2, kind: fixup_csky_pcrel_imm10_scale2
212.L.test2:
213bt16 .L.test2
214
215# CHECK-ASM: bf16 .L.test3
216# CHECK-ASM: encoding: [A,0x0c'A']
217# CHECK-ASM: fixup A - offset: 0, value: .L.test3, kind: fixup_csky_pcrel_imm10_scale2
218.L.test3:
219bf16 .L.test3
220
221# CHECK-ASM-AND-OBJ: jmp16 a3
222# CHECK-ASM: encoding: [0x0c,0x78]
223jmp16 a3
224
225# CHECK-ASM-AND-OBJ: jsr16 a3
226# CHECK-ASM: encoding: [0xcd,0x7b]
227jsr16 a3
228
229# CHECK-ASM: lrw16 a0, [.L.test14]
230# CHECK-ASM: encoding: [A,A]
231# CHECK-ASM: fixup A - offset: 0, value: .L.test14, kind: fixup_csky_pcrel_uimm7_scale4
232.L.test14:
233lrw16 a0, [.L.test14]
234
235# RUN: not llvm-mc -triple csky -mattr=+e1 -mattr=+e2 -mattr=+btst16 --defsym=ERR=1 < %s 2>&1 | FileCheck %s
236
237.ifdef ERR
238
239# oimm8
240addi16 a0, 0 # CHECK: :[[#@LINE]]:12: error: immediate must be an integer in the range [1, 256]
241
242# oimm5
243cmphsi16 a0, 0 # CHECK: :[[#@LINE]]:14: error: immediate must be an integer in the range [1, 32]
244
245# uimm5
246lsli16 a0, a0, 32 # CHECK: :[[#@LINE]]:16: error: immediate must be an integer in the range [0, 31]
247
248# uimm5/uimm5_1/uimm5_2
249ld32.b a0, (a0, -1)  # CHECK: :[[@LINE]]:17: error: immediate must be an integer in the range [0, 4095]
250ld32.h a0, (a0, 4095)  # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 2 bytes in the range [0, 4094]
251ld32.h a0, (a0, 4093)  # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 2 bytes in the range [0, 4094]
252ld32.w a0, (a0, 4093)  # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 4 bytes in the range [0, 4092]
253ld32.w a0, (a0, 2)  # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 4 bytes in the range [0, 4092]
254
255st32.b a0, (a0, -1)  # CHECK: :[[@LINE]]:17: error: immediate must be an integer in the range [0, 4095]
256st32.h a0, (a0, 4095)  # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 2 bytes in the range [0, 4094]
257st32.h a0, (a0, 4093)  # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 2 bytes in the range [0, 4094]
258st32.w a0, (a0, 4093)  # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 4 bytes in the range [0, 4092]
259st32.w a0, (a0, 2)  # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 4 bytes in the range [0, 4092]
260
261# Invalid mnemonics
262subs t0, t2, t1 # CHECK: :[[#@LINE]]:1: error: unrecognized instruction mnemonic
263nandi t0, t2, 0 # CHECK: :[[#@LINE]]:1: error: unrecognized instruction mnemonic
264
265# Invalid register names
266addi16 foo, sp, 10 # CHECK: :[[#@LINE]]:8: error: unknown operand
267lsli16 a10, a2, 0x20 # CHECK: :[[#@LINE]]:8: error: unknown operand
268asri16 x16, s0, s0 # CHECK: :[[#@LINE]]:8: error: unknown operand
269
270# Invalid operand types
271lsli16 a0, 22, 220 # CHECK: :[[#@LINE]]:12: error: invalid operand for instruction
272subu16 a0, a1, 1 # CHECK: :[[#@LINE]]:16: error: invalid operand for instruction
273
274# Too many operands
275lsli16 a0, a1, 0x11, 0x60 # CHECK: :[[@LINE]]:22: error: invalid operand for instruction
276
277# Too few operands
278lsli16 a0 # CHECK: :[[#@LINE]]:1: error: too few operands for instruction
279lsl16 a0  # CHECK: :[[#@LINE]]:1: error: too few operands for instruction
280
281.endif
282