xref: /llvm-project/llvm/test/MC/RISCV/rv32i-aliases-valid.s (revision 4b3d439e7e7b4e794e523caea9863d67ff8cf85f)
1# RUN: llvm-mc %s -triple=riscv32 -M no-aliases \
2# RUN:     | FileCheck -check-prefixes=CHECK-EXPAND,CHECK-INST,CHECK-ASM-NOALIAS %s
3# RUN: llvm-mc %s -triple=riscv32 \
4# RUN:     | FileCheck -check-prefixes=CHECK-EXPAND,CHECK-ALIAS,CHECK-ASM %s
5# RUN: llvm-mc -filetype=obj -triple riscv32 < %s \
6# RUN:     | llvm-objdump -M no-aliases --no-print-imm-hex -d -r - \
7# RUN:     | FileCheck -check-prefixes=CHECK-OBJ-NOALIAS,CHECK-EXPAND,CHECK-INST %s
8# RUN: llvm-mc -filetype=obj -triple riscv32 < %s \
9# RUN:     | llvm-objdump --no-print-imm-hex -d -r - \
10# RUN:     | FileCheck -check-prefixes=CHECK-EXPAND,CHECK-ALIAS %s
11
12# The following check prefixes are used in this test:
13# CHECK-INST.....Match the canonical instr (tests alias to instr. mapping)
14# CHECK-ALIAS....Match the alias (tests instr. to alias mapping)
15# CHECK-EXPAND...Match canonical instr. unconditionally (tests alias expansion)
16
17# Needed for testing valid %pcrel_lo expressions
18.Lpcrel_hi0: auipc a0, %pcrel_hi(foo)
19
20# Needed for testing li with a symbol difference
21.Lbuf: .skip 8
22.Lbuf_end:
23
24# CHECK-INST: addi a0, zero, 0
25# CHECK-ALIAS: li a0, 0
26li x10, 0
27# CHECK-INST: addi a0, zero, 1
28# CHECK-ALIAS: li a0, 1
29li x10, 1
30# CHECK-INST: addi a0, zero, -1
31# CHECK-ALIAS: li a0, -1
32li x10, -1
33# CHECK-INST: addi a0, zero, 2047
34# CHECK-ALIAS: li a0, 2047
35li x10, 2047
36# CHECK-INST: addi a0, zero, -2047
37# CHECK-ALIAS: li a0, -2047
38li x10, -2047
39# CHECK-INST: addi a1, zero, 1
40# CHECK-INST: slli a1, a1, 11
41# CHECK-ALIAS: li a1, 1
42# CHECK-ALIAS: slli a1, a1, 11
43li x11, 2048
44# CHECK-INST: addi a1, zero, -2048
45# CHECK-ALIAS: li a1, -2048
46li x11, -2048
47# CHECK-EXPAND: lui a1, 1
48# CHECK-EXPAND: addi a1, a1, -2047
49li x11, 2049
50# CHECK-EXPAND: lui a1, 1048575
51# CHECK-EXPAND: addi a1, a1, 2047
52li x11, -2049
53# CHECK-EXPAND: lui a1, 1
54# CHECK-EXPAND: addi a1, a1, -1
55li x11, 4095
56# CHECK-EXPAND: lui a1, 1048575
57# CHECK-EXPAND: addi a1, a1, 1
58li x11, -4095
59# CHECK-EXPAND: lui a2, 1
60li x12, 4096
61# CHECK-EXPAND: lui a2, 1048575
62li x12, -4096
63# CHECK-EXPAND: lui a2, 1
64# CHECK-EXPAND: addi a2, a2, 1
65li x12, 4097
66# CHECK-EXPAND: lui a2, 1048575
67# CHECK-EXPAND: addi a2, a2, -1
68li x12, -4097
69# CHECK-EXPAND: lui a2, 524288
70# CHECK-EXPAND: addi a2, a2, -1
71li x12, 2147483647
72# CHECK-EXPAND: lui a2, 524288
73# CHECK-EXPAND: addi a2, a2, 1
74li x12, -2147483647
75# CHECK-EXPAND: lui a2, 524288
76li x12, -2147483648
77# CHECK-EXPAND: lui a2, 524288
78li x12, -0x80000000
79
80# CHECK-EXPAND: lui a2, 524288
81li x12, 0x80000000
82# CHECK-INST: addi a2, zero, -1
83# CHECK-ALIAS: li a2, -1
84li x12, 0xFFFFFFFF
85
86# CHECK-INST: addi a0, zero, 1110
87# CHECK-ALIAS: li a0, 1110
88li a0, %lo(0x123456)
89
90# CHECK-OBJ-NOALIAS: addi a0, zero, 0
91# CHECK-OBJ: R_RISCV_LO12
92li a0, %lo(foo)
93# CHECK-OBJ-NOALIAS: addi a0, zero, 0
94# CHECK-OBJ: R_RISCV_PCREL_LO12
95li a0, %pcrel_lo(.Lpcrel_hi0)
96
97.equ CONST, 0x123456
98# CHECK-EXPAND: lui a0, 291
99# CHECK-EXPAND: addi a0, a0, 1110
100li a0, CONST
101# CHECK-EXPAND: lui a0, 291
102# CHECK-EXPAND: addi a0, a0, 1111
103li a0, CONST+1
104
105.equ CONST, 0x654321
106# CHECK-EXPAND: lui a0, 1620
107# CHECK-EXPAND: addi a0, a0, 801
108li a0, CONST
109
110.equ CONST, .Lbuf_end - .Lbuf
111# CHECK-ASM: li a0, CONST
112# CHECK-ASM-NOALIAS: addi a0, zero, CONST
113# CHECK-OBJ-NOALIAS: addi a0, zero, 8
114li a0, CONST
115
116# CHECK-ASM: addi a0, zero, .Lbuf_end-.Lbuf
117# CHECK-ASM-NOALIAS: addi a0, zero, .Lbuf_end-.Lbuf
118# CHECK-OBJ-NOALIAS: addi a0, zero, 8
119li a0, .Lbuf_end - .Lbuf
120
121# CHECK-INST: addi a0, zero, 0
122# CHECK-ALIAS: li a0, 0
123la x10, 0
124lla x10, 0
125# CHECK-INST: addi a0, zero, 1
126# CHECK-ALIAS: li a0, 1
127la x10, 1
128lla x10, 1
129# CHECK-INST: addi a0, zero, -1
130# CHECK-ALIAS: li a0, -1
131la x10, -1
132lla x10, -1
133# CHECK-INST: addi a0, zero, 2047
134# CHECK-ALIAS: li a0, 2047
135la x10, 2047
136lla x10, 2047
137# CHECK-INST: addi a0, zero, -2047
138# CHECK-ALIAS: li a0, -2047
139la x10, -2047
140lla x10, -2047
141# CHECK-INST: addi a1, zero, 1
142# CHECK-INST: slli a1, a1, 11
143# CHECK-ALIAS: li a1, 1
144# CHECK-ALIAS: slli a1, a1, 11
145la x11, 2048
146lla x11, 2048
147# CHECK-INST: addi a1, zero, -2048
148# CHECK-ALIAS: li a1, -2048
149la x11, -2048
150lla x11, -2048
151# CHECK-EXPAND: lui a1, 1
152# CHECK-EXPAND: addi a1, a1, -2047
153la x11, 2049
154lla x11, 2049
155# CHECK-EXPAND: lui a1, 1048575
156# CHECK-EXPAND: addi a1, a1, 2047
157la x11, -2049
158lla x11, -2049
159# CHECK-EXPAND: lui a1, 1
160# CHECK-EXPAND: addi a1, a1, -1
161la x11, 4095
162lla x11, 4095
163# CHECK-EXPAND: lui a1, 1048575
164# CHECK-EXPAND: addi a1, a1, 1
165la x11, -4095
166lla x11, -4095
167# CHECK-EXPAND: lui a2, 1
168la x12, 4096
169lla x12, 4096
170# CHECK-EXPAND: lui a2, 1048575
171la x12, -4096
172lla x12, -4096
173# CHECK-EXPAND: lui a2, 1
174# CHECK-EXPAND: addi a2, a2, 1
175la x12, 4097
176lla x12, 4097
177# CHECK-EXPAND: lui a2, 1048575
178# CHECK-EXPAND: addi a2, a2, -1
179la x12, -4097
180lla x12, -4097
181# CHECK-EXPAND: lui a2, 524288
182# CHECK-EXPAND: addi a2, a2, -1
183la x12, 2147483647
184lla x12, 2147483647
185# CHECK-EXPAND: lui a2, 524288
186# CHECK-EXPAND: addi a2, a2, 1
187la x12, -2147483647
188lla x12, -2147483647
189# CHECK-EXPAND: lui a2, 524288
190la x12, -2147483648
191lla x12, -2147483648
192# CHECK-EXPAND: lui a2, 524288
193la x12, -0x80000000
194lla x12, -0x80000000
195
196# CHECK-EXPAND: lui a2, 524288
197la x12, 0x80000000
198lla x12, 0x80000000
199# CHECK-INST: addi a2, zero, -1
200# CHECK-ALIAS: li a2, -1
201la x12, 0xFFFFFFFF
202lla x12, 0xFFFFFFFF
203
204.equ CONSTANT, 0x123456
205# CHECK-EXPAND: lui a0, 291
206# CHECK-EXPAND: addi a0, a0, 1110
207la a0, CONSTANT
208lla a0, CONSTANT
209# CHECK-EXPAND: lui a0, 291
210# CHECK-EXPAND: addi a0, a0, 1111
211la a0, CONSTANT+1
212lla a0, CONSTANT+1
213
214.equ CONSTANT, 0x654321
215# CHECK-EXPAND: lui a0, 1620
216# CHECK-EXPAND: addi a0, a0, 801
217la a0, CONSTANT
218lla a0, CONSTANT
219
220# CHECK-INST: csrrs t4, instreth, zero
221# CHECK-ALIAS: rdinstreth t4
222rdinstreth x29
223# CHECK-INST: csrrs s11, cycleh, zero
224# CHECK-ALIAS: rdcycleh s11
225rdcycleh x27
226# CHECK-INST: csrrs t3, timeh, zero
227# CHECK-ALIAS: rdtimeh t3
228rdtimeh x28
229
230# CHECK-EXPAND: lb a0, 0(a1)
231lb x10, (x11)
232# CHECK-EXPAND: lh a0, 0(a1)
233lh x10, (x11)
234# CHECK-EXPAND: lw a0, 0(a1)
235lw x10, (x11)
236# CHECK-EXPAND: lbu a0, 0(a1)
237lbu x10, (x11)
238# CHECK-EXPAND: lhu a0, 0(a1)
239lhu x10, (x11)
240
241# CHECK-EXPAND: sb a0, 0(a1)
242sb x10, (x11)
243# CHECK-EXPAND: sh a0, 0(a1)
244sh x10, (x11)
245# CHECK-EXPAND: sw a0, 0(a1)
246sw x10, (x11)
247
248# CHECK-EXPAND: slli a0, a1, 24
249# CHECK-EXPAND: srai a0, a0, 24
250sext.b x10, x11
251
252# CHECK-EXPAND: slli a0, a1, 16
253# CHECK-EXPAND: srai a0, a0, 16
254sext.h x10, x11
255
256# CHECK-INST: andi a0, a1, 255
257# CHECK-ALIAS: andi a0, a1, 255
258zext.b x10, x11
259
260# CHECK-EXPAND: slli a0, a1, 16
261# CHECK-EXPAND: srli a0, a0, 16
262zext.h x10, x11
263