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
7 # CHECK-ASM-AND-OBJ: addi16 a0, a0, 2
8 # CHECK-ASM: encoding: [0x06,0x58]
11 # CHECK-ASM-AND-OBJ: addi16 a0, sp, 4
12 # CHECK-ASM: encoding: [0x01,0x18]
15 # CHECK-ASM-AND-OBJ: addi16 a0, a1, 2
16 # CHECK-ASM: encoding: [0x06,0x59]
19 # CHECK-ASM-AND-OBJ: addi16 sp, sp, 8
20 # CHECK-ASM: encoding: [0x02,0x14]
23 # CHECK-ASM-AND-OBJ: subi16 a0, a0, 2
24 # CHECK-ASM: encoding: [0x07,0x58]
27 # CHECK-ASM-AND-OBJ: subi16 a0, a1, 2
28 # CHECK-ASM: encoding: [0x07,0x59]
31 # CHECK-ASM-AND-OBJ: subi16 sp, sp, 8
32 # CHECK-ASM: encoding: [0x22,0x14]
35 # CHECK-ASM-AND-OBJ: lsli16 a0, a1, 2
36 # CHECK-ASM: encoding: [0x02,0x41]
39 # CHECK-ASM-AND-OBJ: lsri16 a0, a1, 2
40 # CHECK-ASM: encoding: [0x02,0x49]
43 # CHECK-ASM-AND-OBJ: asri16 a0, a1, 2
44 # CHECK-ASM: encoding: [0x02,0x51]
47 # CHECK-ASM-AND-OBJ: btsti16 a0, 2
48 # CHECK-ASM: encoding: [0xc2,0x38]
51 # CHECK-ASM-AND-OBJ: bclri16 a0, 2
52 # CHECK-ASM: encoding: [0x82,0x38]
55 # CHECK-ASM-AND-OBJ: bseti16 a0, 2
56 # CHECK-ASM: encoding: [0xa2,0x38]
59 # CHECK-ASM-AND-OBJ: cmpnei16 a0, 2
60 # CHECK-ASM: encoding: [0x42,0x38]
63 # CHECK-ASM-AND-OBJ: cmphsi16 a0, 2
64 # CHECK-ASM: encoding: [0x01,0x38]
67 # CHECK-ASM-AND-OBJ: cmplti16 a0, 2
68 # CHECK-ASM: encoding: [0x21,0x38]
71 # CHECK-ASM-AND-OBJ: movi16 a0, 2
72 # CHECK-ASM: encoding: [0x02,0x30]
75 # CHECK-ASM-AND-OBJ: addu16 a3, l0, l1
76 # CHECK-ASM: encoding: [0x74,0x5c]
79 # CHECK-ASM-AND-OBJ: subu16 a3, l0, l1
80 # CHECK-ASM: encoding: [0x75,0x5c]
83 # CHECK-ASM-AND-OBJ: and16 a3, l0
84 # CHECK-ASM: encoding: [0xd0,0x68]
87 # CHECK-ASM-AND-OBJ: andn16 a3, l0
88 # CHECK-ASM: encoding: [0xd1,0x68]
91 # CHECK-ASM-AND-OBJ: or16 a3, l0
92 # CHECK-ASM: encoding: [0xd0,0x6c]
95 # CHECK-ASM-AND-OBJ: xor16 a3, l0
96 # CHECK-ASM: encoding: [0xd1,0x6c]
99 # CHECK-ASM-AND-OBJ: nor16 a3, l0
100 # CHECK-ASM: encoding: [0xd2,0x6c]
103 # CHECK-ASM-AND-OBJ: lsl16 a3, l0
104 # CHECK-ASM: encoding: [0xd0,0x70]
107 # CHECK-ASM-AND-OBJ: rotl16 a3, l0
108 # CHECK-ASM: encoding: [0xd3,0x70]
111 # CHECK-ASM-AND-OBJ: lsr16 a3, l0
112 # CHECK-ASM: encoding: [0xd1,0x70]
115 # CHECK-ASM-AND-OBJ: asr16 a3, l0
116 # CHECK-ASM: encoding: [0xd2,0x70]
119 # CHECK-ASM-AND-OBJ: mult16 a3, l0
120 # CHECK-ASM: encoding: [0xd0,0x7c]
123 # CHECK-ASM-AND-OBJ: addc16 a3, l0
124 # CHECK-ASM: encoding: [0xd1,0x60]
127 # CHECK-ASM-AND-OBJ: subc16 a3, l0
128 # CHECK-ASM: encoding: [0xd3,0x60]
131 # CHECK-OBJ: ld16.b a0, (a0, 0x2)
132 # CHECK-ASM: ld16.b a0, (a0, 2)
133 # CHECK-ASM: encoding: [0x02,0x80]
136 # CHECK-OBJ: ld16.h a0, (a0, 0x2)
137 # CHECK-ASM: ld16.h a0, (a0, 2)
138 # CHECK-ASM: encoding: [0x01,0x88]
141 # CHECK-OBJ: ld16.w a0, (a0, 0x4)
142 # CHECK-ASM: ld16.w a0, (a0, 4)
143 # CHECK-ASM: encoding: [0x01,0x90]
146 # CHECK-OBJ: ld16.w a0, (sp, 0x4)
147 # CHECK-ASM: ld16.w a0, (sp, 4)
148 # CHECK-ASM: encoding: [0x01,0x98]
151 # CHECK-OBJ: st16.b a0, (a0, 0x2)
152 # CHECK-ASM: st16.b a0, (a0, 2)
153 # CHECK-ASM: encoding: [0x02,0xa0]
156 # CHECK-OBJ: st16.h a0, (a0, 0x2)
157 # CHECK-ASM: st16.h a0, (a0, 2)
158 # CHECK-ASM: encoding: [0x01,0xa8]
161 # CHECK-OBJ: st16.w a0, (a0, 0x4)
162 # CHECK-ASM: st16.w a0, (a0, 4)
163 # CHECK-ASM: encoding: [0x01,0xb0]
166 # CHECK-OBJ: st16.w a0, (sp, 0x4)
167 # CHECK-ASM: st16.w a0, (sp, 4)
168 # CHECK-ASM: encoding: [0x01,0xb8]
171 # CHECK-ASM-AND-OBJ: revb16 a3, l0
172 # CHECK-ASM: encoding: [0xd2,0x78]
175 # CHECK-ASM-AND-OBJ: revh16 a3, l0
176 # CHECK-ASM: encoding: [0xd3,0x78]
179 # CHECK-ASM-AND-OBJ: mvcv16 a3
180 # CHECK-ASM: encoding: [0xc3,0x64]
183 # CHECK-ASM-AND-OBJ: cmpne16 a3, l0
184 # CHECK-ASM: encoding: [0x0e,0x65]
187 # CHECK-ASM-AND-OBJ: cmphs16 a3, l0
188 # CHECK-ASM: encoding: [0x0c,0x65]
191 # CHECK-ASM-AND-OBJ: cmplt16 a3, l0
192 # CHECK-ASM: encoding: [0x0d,0x65]
195 # CHECK-ASM-AND-OBJ: tst16 a3, l0
196 # CHECK-ASM: encoding: [0x0e,0x69]
199 # CHECK-ASM-AND-OBJ: tstnbz16 a3
200 # CHECK-ASM: encoding: [0x0f,0x68]
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
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
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
221 # CHECK-ASM-AND-OBJ: jmp16 a3
222 # CHECK-ASM: encoding: [0x0c,0x78]
225 # CHECK-ASM-AND-OBJ: jsr16 a3
226 # CHECK-ASM: encoding: [0xcd,0x7b]
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
233 lrw16 a0
, [.L.test14]
235 # RUN: not llvm-mc -triple csky -mattr=+e1 -mattr=+e2 -mattr=+btst16 --defsym=ERR=1 < %s 2>&1 | FileCheck %s
240 addi16 a0
, 0 # CHECK: :[[#@LINE]]:12: error: immediate must be an integer in the range [1, 256]
243 cmphsi16 a0
, 0 # CHECK: :[[#@LINE]]:14: error: immediate must be an integer in the range [1, 32]
246 lsli16 a0
, a0
, 32 # CHECK: :[[#@LINE]]:16: error: immediate must be an integer in the range [0, 31]
248 # uimm5/uimm5_1/uimm5_2
249 ld32.
b a0
, (a0
, -1) # CHECK: :[[@LINE]]:17: error: immediate must be an integer in the range [0, 4095]
250 ld32.h a0
, (a0
, 4095) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 2 bytes in the range [0, 4094]
251 ld32.h a0
, (a0
, 4093) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 2 bytes in the range [0, 4094]
252 ld32.w a0
, (a0
, 4093) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 4 bytes in the range [0, 4092]
253 ld32.w a0
, (a0
, 2) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 4 bytes in the range [0, 4092]
255 st32.
b a0
, (a0
, -1) # CHECK: :[[@LINE]]:17: error: immediate must be an integer in the range [0, 4095]
256 st32.h a0
, (a0
, 4095) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 2 bytes in the range [0, 4094]
257 st32.h a0
, (a0
, 4093) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 2 bytes in the range [0, 4094]
258 st32.w a0
, (a0
, 4093) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 4 bytes in the range [0, 4092]
259 st32.w a0
, (a0
, 2) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 4 bytes in the range [0, 4092]
262 subs t0
, t2
, t1
# CHECK: :[[#@LINE]]:1: error: unrecognized instruction mnemonic
263 nandi t0
, t2
, 0 # CHECK: :[[#@LINE]]:1: error: unrecognized instruction mnemonic
265 # Invalid register names
266 addi16 foo
, sp
, 10 # CHECK: :[[#@LINE]]:8: error: unknown operand
267 lsli16 a10
, a2
, 0x20 # CHECK: :[[#@LINE]]:8: error: unknown operand
268 asri16 x16
, s0
, s0
# CHECK: :[[#@LINE]]:8: error: unknown operand
270 # Invalid operand types
271 lsli16 a0
, 22, 220 # CHECK: :[[#@LINE]]:12: error: invalid operand for instruction
272 subu16 a0
, a1
, 1 # CHECK: :[[#@LINE]]:16: error: invalid operand for instruction
275 lsli16 a0
, a1
, 0x11, 0x60 # CHECK: :[[@LINE]]:22: error: invalid operand for instruction
278 lsli16 a0
# CHECK: :[[#@LINE]]:1: error: too few operands for instruction
279 lsl16 a0
# CHECK: :[[#@LINE]]:1: error: too few operands for instruction