xref: /llvm-project/llvm/test/MC/RISCV/compress-rv32i.s (revision 4b3d439e7e7b4e794e523caea9863d67ff8cf85f)
1# RUN: llvm-mc -triple riscv32 -mattr=+c -show-encoding < %s \
2# RUN:   | FileCheck -check-prefixes=CHECK,CHECK-ALIAS,CHECK-ALIASASM %s
3# RUN: llvm-mc -triple riscv32 -mattr=+c -show-encoding \
4# RUN:   -M no-aliases < %s | FileCheck -check-prefixes=CHECK,CHECK-INST,CHECK-INSTASM %s
5# RUN: llvm-mc -triple riscv32 -mattr=+c -filetype=obj < %s \
6# RUN:   | llvm-objdump  --triple=riscv32 --mattr=+c --no-print-imm-hex -d - \
7# RUN:   | FileCheck -check-prefixes=CHECK-BYTES,CHECK-ALIAS,CHECK-ALIASOBJ32 %s
8# RUN: llvm-mc -triple riscv32 -mattr=+c -filetype=obj < %s \
9# RUN:   | llvm-objdump  --triple=riscv32 --mattr=+c --no-print-imm-hex -d -M no-aliases - \
10# RUN:   | FileCheck -check-prefixes=CHECK-BYTES,CHECK-INST,CHECK-INSTOBJ32 %s
11
12# RUN: llvm-mc -triple riscv64 -mattr=+c -show-encoding < %s \
13# RUN:   | FileCheck -check-prefixes=CHECK-ALIAS,CHECK-ALIASASM %s
14# RUN: llvm-mc -triple riscv64 -mattr=+c -show-encoding \
15# RUN:   -M no-aliases < %s | FileCheck -check-prefixes=CHECK-INST,CHECK-INSTASM %s
16# RUN: llvm-mc -triple riscv64 -mattr=+c -filetype=obj < %s \
17# RUN:   | llvm-objdump  --triple=riscv64 --mattr=+c --no-print-imm-hex -d - \
18# RUN:   | FileCheck -check-prefixes=CHECK-BYTES,CHECK-ALIAS,CHECK-ALIASOBJ64 %s
19# RUN: llvm-mc -triple riscv64 -mattr=+c -filetype=obj < %s \
20# RUN:   | llvm-objdump  --triple=riscv64 --mattr=+c --no-print-imm-hex -d -M no-aliases - \
21# RUN:   | FileCheck -check-prefixes=CHECK-BYTES,CHECK-INST,CHECK-INSTOBJ64 %s
22
23# CHECK-BYTES: 852e
24# CHECK-ALIAS: mv a0, a1
25# CHECK-INST: c.mv a0, a1
26# CHECK: # encoding:  [0x2e,0x85]
27addi a0, a1, 0
28
29# CHECK-BYTES: 1fe0
30# CHECK-ALIAS: addi s0, sp, 1020
31# CHECK-INST: c.addi4spn s0, sp, 1020
32# CHECK: # encoding:  [0xe0,0x1f]
33addi s0, sp, 1020
34
35# CHECK-BYTES: 5fe0
36# CHECK-ALIAS: lw s0, 124(a5)
37# CHECK-INST: c.lw s0, 124(a5)
38# CHECK: # encoding: [0xe0,0x5f]
39lw s0, 124(a5)
40
41# CHECK-BYTES: dfe0
42# CHECK-ALIAS: sw s0, 124(a5)
43# CHECK-INST: c.sw s0, 124(a5)
44# CHECK: # encoding: [0xe0,0xdf]
45sw s0, 124(a5)
46
47# CHECK-BYTES: 0001
48# CHECK-ALIAS: nop
49# CHECK-INST: c.nop
50# CHECK: # encoding: [0x01,0x00]
51nop
52
53# CHECK-BYTES: 1081
54# CHECK-ALIAS: addi ra, ra, -32
55# CHECK-INST: c.addi ra, -32
56# CHECK: # encoding:  [0x81,0x10]
57addi ra, ra, -32
58
59# CHECK-BYTES: 5085
60# CHECK-ALIAS: li ra, -31
61# CHECK-INST: c.li ra, -31
62# CHECK: # encoding: [0x85,0x50]
63li ra, -31
64
65# CHECK-BYTES: 7139
66# CHECK-ALIAS: addi sp, sp, -64
67# CHECK-INST: c.addi16sp sp, -64
68# CHECK:  # encoding: [0x39,0x71]
69addi sp, sp, -64
70
71# CHECK-BYTES: 61fd
72# CHECK-ALIAS: lui gp, 31
73# CHECK-INST: c.lui gp, 31
74# CHECK: # encoding:  [0xfd,0x61]
75lui gp, 31
76
77# CHECK-BYTES: 807d
78# CHECK-ALIAS: srli s0, s0, 31
79# CHECK-INST: c.srli s0, 31
80# CHECK: # encoding:  [0x7d,0x80]
81srli s0, s0, 31
82
83# CHECK-BYTES: 847d
84# CHECK-ALIAS: srai s0, s0, 31
85# CHECK-INST: c.srai s0, 31
86# CHECK: # encoding: [0x7d,0x84]
87srai s0, s0, 31
88
89# CHECK-BYTES: 887d
90# CHECK-ALIAS: andi s0, s0, 31
91# CHECK-INST: c.andi s0, 31
92# CHECK: # encoding: [0x7d,0x88]
93andi s0, s0, 31
94
95# CHECK-BYTES: 8c1d
96# CHECK-ALIAS: sub s0, s0, a5
97# CHECK-INST: c.sub s0, a5
98# CHECK: # encoding: [0x1d,0x8c]
99sub s0, s0, a5
100
101# CHECK-BYTES: 8c3d
102# CHECK-ALIAS: xor s0, s0, a5
103# CHECK-INST: c.xor s0, a5
104# CHECK: # encoding: [0x3d,0x8c]
105xor s0, s0, a5
106
107# CHECK-BYTES: 8c3d
108# CHECK-ALIAS: xor s0, s0, a5
109# CHECK-INST: c.xor s0, a5
110# CHECK: # encoding: [0x3d,0x8c]
111xor s0, a5, s0
112
113# CHECK-BYTES: 8c5d
114# CHECK-ALIAS: or s0, s0, a5
115# CHECK-INST: c.or s0, a5
116# CHECK: # encoding:  [0x5d,0x8c]
117or s0, s0, a5
118
119# CHECK-BYTES: 8c45
120# CHECK-ALIAS: or s0, s0, s1
121# CHECK-INST: c.or s0, s1
122# CHECK:  # encoding: [0x45,0x8c]
123or  s0, s1, s0
124
125# CHECK-BYTES: 8c7d
126# CHECK-ALIAS: and s0, s0, a5
127# CHECK-INST: c.and s0, a5
128# CHECK: # encoding: [0x7d,0x8c]
129and s0, s0, a5
130
131# CHECK-BYTES: 8c7d
132# CHECK-ALIAS: and s0, s0, a5
133# CHECK-INST: c.and s0, a5
134# CHECK: # encoding: [0x7d,0x8c]
135and s0, a5, s0
136
137# CHECK-BYTES: b001
138# CHECK-ALIASASM: j -2048
139# CHECK-ALIASOBJ32: j 0xfffff826
140# CHECK-ALIASOBJ64: j 0xfffffffffffff826
141# CHECK-INSTASM: c.j -2048
142# CHECK-INSTOBJ32: c.j 0xfffff826
143# CHECK-INSTOBJ64: c.j 0xfffffffffffff826
144# CHECK:  # encoding: [0x01,0xb0]
145jal zero, -2048
146
147# CHECK-BYTES: d001
148# CHECK-ALIASASM: beqz s0, -256
149# CHECK-ALIASOBJ32: beqz s0, 0xffffff28
150# CHECK-ALIASOBJ64: beqz s0, 0xffffffffffffff28
151# CHECK-INSTASM: c.beqz s0, -256
152# CHECK-INSTOBJ32: c.beqz s0, 0xffffff28
153# CHECK-INSTOBJ64: c.beqz s0, 0xffffffffffffff28
154# CHECK: # encoding: [0x01,0xd0]
155beq s0, zero, -256
156
157# CHECK-BYTES: d001
158# CHECK-ALIASASM: beqz s0, -256
159# CHECK-ALIASOBJ32: beqz s0, 0xffffff2a
160# CHECK-ALIASOBJ64: beqz s0, 0xffffffffffffff2a
161# CHECK-INSTASM: c.beqz s0, -256
162# CHECK-INSTOBJ32: c.beqz s0, 0xffffff2a
163# CHECK-INSTOBJ64: c.beqz s0, 0xffffffffffffff2a
164# CHECK: # encoding: [0x01,0xd0]
165beq zero, s0, -256
166
167# CHECK-BYTES: ec7d
168# CHECK-ALIASASM: bnez s0, 254
169# CHECK-ALIASOBJ32: bnez s0, 0x12a
170# CHECK-ALIASOBJ64: bnez s0, 0x12a
171# CHECK-INSTASM: c.bnez s0, 254
172# CHECK-INSTOBJ32: c.bnez s0, 0x12a
173# CHECK-INSTOBJ64: c.bnez s0, 0x12a
174# CHECK: # encoding: [0x7d,0xec]
175bne s0, zero, 254
176
177# CHECK-BYTES: ec7d
178# CHECK-ALIASASM: bnez s0, 254
179# CHECK-ALIASOBJ32: bnez s0, 0x12c
180# CHECK-ALIASOBJ64: bnez s0, 0x12c
181# CHECK-INSTASM: c.bnez s0, 254
182# CHECK-INSTOBJ32: c.bnez s0, 0x12c
183# CHECK-INSTOBJ64: c.bnez s0, 0x12c
184# CHECK: # encoding: [0x7d,0xec]
185bne zero, s0, 254
186
187# CHECK-BYTES: 047e
188# CHECK-ALIAS: slli s0, s0, 31
189# CHECK-INST: c.slli s0, 31
190# CHECK: # encoding:  [0x7e,0x04]
191slli s0, s0, 31
192
193# CHECK-BYTES: 50fe
194# CHECK-ALIAS: lw ra, 252(sp)
195# CHECK-INST: c.lwsp  ra, 252(sp)
196# CHECK: # encoding:  [0xfe,0x50]
197lw ra, 252(sp)
198
199# CHECK-BYTES: 8082
200# CHECK-ALIAS: ret
201# CHECK-INST: c.jr ra
202# CHECK: # encoding:  [0x82,0x80]
203jalr zero, 0(ra)
204
205# CHECK-BYTES: 8092
206# CHECK-ALIAS: mv ra, tp
207# CHECK-INST: c.mv ra, tp
208# CHECK:  # encoding: [0x92,0x80]
209add ra, zero, tp
210
211# CHECK-BYTES: 8092
212# CHECK-ALIAS: mv ra, tp
213# CHECK-INST: c.mv ra, tp
214# CHECK:  # encoding: [0x92,0x80]
215add ra, tp, zero
216
217# CHECK-BYTES: 9002
218# CHECK-ALIAS: ebreak
219# CHECK-INST: c.ebreak
220# CHECK: # encoding: [0x02,0x90]
221ebreak
222
223# CHECK-BYTES: 9402
224# CHECK-ALIAS: jalr s0
225# CHECK-INST: c.jalr s0
226# CHECK: # encoding: [0x02,0x94]
227jalr ra, 0(s0)
228
229# CHECK-BYTES: 943e
230# CHECK-ALIAS: add s0, s0, a5
231# CHECK-INST: c.add s0, a5
232# CHECK: # encoding:  [0x3e,0x94]
233add s0, a5, s0
234
235# CHECK-BYTES: 943e
236# CHECK-ALIAS: add s0, s0, a5
237# CHECK-INST: c.add s0, a5
238# CHECK: # encoding:  [0x3e,0x94]
239add s0, s0, a5
240
241# CHECK-BYTES: df82
242# CHECK-ALIAS: sw zero, 252(sp)
243# CHECK-INST: c.swsp zero, 252(sp)
244# CHECK: # encoding: [0x82,0xdf]
245sw zero, 252(sp)
246
247# CHECK-BYTES: 0000
248# CHECK-ALIAS: unimp
249# CHECK-INST: c.unimp
250# CHECK: # encoding: [0x00,0x00]
251unimp
252