1# RUN: llvm-mc %s -triple=riscv64 -riscv-no-aliases \
2# RUN:     | FileCheck -check-prefixes=CHECK-EXPAND,CHECK-INST %s
3# RUN: llvm-mc %s -triple=riscv64 \
4# RUN:     | FileCheck -check-prefixes=CHECK-EXPAND,CHECK-ALIAS %s
5# RUN: llvm-mc -filetype=obj -triple riscv64 < %s \
6# RUN:     | llvm-objdump -riscv-no-aliases -d - \
7# RUN:     | FileCheck -check-prefixes=CHECK-OBJ-NOALIAS,CHECK-EXPAND,CHECK-INST %s
8# RUN: llvm-mc -filetype=obj -triple riscv64 < %s \
9# RUN:     | llvm-objdump -d - \
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# TODO ld
18# TODO sd
19
20# CHECK-INST: addi a0, zero, 0
21# CHECK-ALIAS: mv a0, zero
22li x10, 0
23# CHECK-EXPAND: addi a0, zero, 1
24li x10, 1
25# CHECK-EXPAND: addi a0, zero, -1
26li x10, -1
27# CHECK-EXPAND: addi a0, zero, 2047
28li x10, 2047
29# CHECK-EXPAND: addi a0, zero, -2047
30li x10, -2047
31# CHECK-EXPAND: lui a1, 1
32# CHECK-EXPAND: addiw a1, a1, -2048
33li x11, 2048
34# CHECK-EXPAND: addi a1, zero, -2048
35li x11, -2048
36# CHECK-EXPAND: lui a1, 1
37# CHECK-EXPAND: addiw a1, a1, -2047
38li x11, 2049
39# CHECK-EXPAND: lui a1, 1048575
40# CHECK-EXPAND: addiw a1, a1, 2047
41li x11, -2049
42# CHECK-EXPAND: lui a1, 1
43# CHECK-EXPAND: addiw a1, a1, -1
44li x11, 4095
45# CHECK-EXPAND: lui a1, 1048575
46# CHECK-EXPAND: addiw a1, a1, 1
47li x11, -4095
48# CHECK-EXPAND: lui a2, 1
49li x12, 4096
50# CHECK-EXPAND: lui a2, 1048575
51li x12, -4096
52# CHECK-EXPAND: lui a2, 1
53# CHECK-EXPAND: addiw a2, a2, 1
54li x12, 4097
55# CHECK-EXPAND: lui a2, 1048575
56# CHECK-EXPAND: addiw a2, a2, -1
57li x12, -4097
58# CHECK-EXPAND: lui a2, 524288
59# CHECK-EXPAND: addiw a2, a2, -1
60li x12, 2147483647
61# CHECK-EXPAND: lui a2, 524288
62# CHECK-EXPAND: addiw a2, a2, 1
63li x12, -2147483647
64# CHECK-EXPAND: lui a2, 524288
65li x12, -2147483648
66# CHECK-EXPAND: lui a2, 524288
67li x12, -0x80000000
68
69# CHECK-EXPAND: addi a2, zero, 1
70# CHECK-EXPAND: slli a2, a2, 31
71li x12, 0x80000000
72# CHECK-EXPAND: addi a2, zero, 1
73# CHECK-EXPAND: slli a2, a2, 32
74# CHECK-EXPAND: addi a2, a2, -1
75li x12, 0xFFFFFFFF
76
77# CHECK-EXPAND: addi t0, zero, 1
78# CHECK-EXPAND: slli t0, t0, 32
79li t0, 0x100000000
80# CHECK-EXPAND: addi t1, zero, -1
81# CHECK-EXPAND: slli t1, t1, 63
82li t1, 0x8000000000000000
83# CHECK-EXPAND: addi t1, zero, -1
84# CHECK-EXPAND: slli t1, t1, 63
85li t1, -0x8000000000000000
86# CHECK-EXPAND: lui t2, 9321
87# CHECK-EXPAND: addiw t2, t2, -1329
88# CHECK-EXPAND: slli t2, t2, 35
89li t2, 0x1234567800000000
90# CHECK-EXPAND: addi t3, zero, 7
91# CHECK-EXPAND: slli t3, t3, 36
92# CHECK-EXPAND: addi t3, t3, 11
93# CHECK-EXPAND: slli t3, t3, 24
94# CHECK-EXPAND: addi t3, t3, 15
95li t3, 0x700000000B00000F
96# CHECK-EXPAND: lui t4, 583
97# CHECK-EXPAND: addiw t4, t4, -1875
98# CHECK-EXPAND: slli t4, t4, 14
99# CHECK-EXPAND: addi t4, t4, -947
100# CHECK-EXPAND: slli t4, t4, 12
101# CHECK-EXPAND: addi t4, t4, 1511
102# CHECK-EXPAND: slli t4, t4, 13
103# CHECK-EXPAND: addi t4, t4, -272
104li t4, 0x123456789abcdef0
105# CHECK-EXPAND: addi t5, zero, -1
106li t5, 0xFFFFFFFFFFFFFFFF
107
108# CHECK-EXPAND: addi a0, zero, 1110
109li a0, %lo(0x123456)
110# CHECK-OBJ-NOALIAS: addi a0, zero, 0
111# CHECK-OBJ: R_RISCV_PCREL_LO12
112li a0, %pcrel_lo(0x123456)
113
114# CHECK-OBJ-NOALIAS: addi a0, zero, 0
115# CHECK-OBJ: R_RISCV_LO12
116li a0, %lo(foo)
117# CHECK-OBJ-NOALIAS: addi a0, zero, 0
118# CHECK-OBJ: R_RISCV_PCREL_LO12
119li a0, %pcrel_lo(foo)
120
121.equ CONST, 0x123456
122# CHECK-EXPAND: lui a0, 291
123# CHECK-EXPAND: addiw a0, a0, 1110
124li a0, CONST
125
126.equ CONST, 0x654321
127# CHECK-EXPAND: lui a0, 1620
128# CHECK-EXPAND: addiw a0, a0, 801
129li a0, CONST
130
131# CHECK-INST: subw t6, zero, ra
132# CHECK-ALIAS: negw t6, ra
133negw x31, x1
134# CHECK-INST: addiw t6, ra, 0
135# CHECK-ALIAS: sext.w t6, ra
136sext.w x31, x1
137
138# The following aliases are accepted as input but the canonical form
139# of the instruction will always be printed.
140# CHECK-INST: addiw a2, a3, 4
141# CHECK-ALIAS: addiw a2, a3, 4
142addw a2,a3,4
143
144# CHECK-INST: slliw a2, a3, 4
145# CHECK-ALIAS: slliw a2, a3, 4
146sllw a2,a3,4
147
148# CHECK-INST: srliw a2, a3, 4
149# CHECK-ALIAS: srliw a2, a3, 4
150srlw a2,a3,4
151
152# CHECK-INST: sraiw a2, a3, 4
153# CHECK-ALIAS: sraiw a2, a3, 4
154sraw a2,a3,4
155
156# CHECK-EXPAND: lwu a0, 0(a1)
157lwu x10, (x11)
158# CHECK-EXPAND: ld a0, 0(a1)
159ld x10, (x11)
160# CHECK-EXPAND: sd a0, 0(a1)
161sd x10, (x11)
162