1# RUN: llvm-mc %s -triple=riscv32 -riscv-no-aliases \
2# RUN:     | FileCheck -check-prefixes=CHECK-EXPAND,CHECK-INST %s
3# RUN: llvm-mc %s -triple=riscv32 \
4# RUN:     | FileCheck -check-prefixes=CHECK-EXPAND,CHECK-ALIAS %s
5# RUN: llvm-mc -filetype=obj -triple riscv32 < %s \
6# RUN:     | llvm-objdump -M no-aliases -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 -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# 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: addi 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: addi a1, a1, -2047
38li x11, 2049
39# CHECK-EXPAND: lui a1, 1048575
40# CHECK-EXPAND: addi a1, a1, 2047
41li x11, -2049
42# CHECK-EXPAND: lui a1, 1
43# CHECK-EXPAND: addi a1, a1, -1
44li x11, 4095
45# CHECK-EXPAND: lui a1, 1048575
46# CHECK-EXPAND: addi 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: addi a2, a2, 1
54li x12, 4097
55# CHECK-EXPAND: lui a2, 1048575
56# CHECK-EXPAND: addi a2, a2, -1
57li x12, -4097
58# CHECK-EXPAND: lui a2, 524288
59# CHECK-EXPAND: addi a2, a2, -1
60li x12, 2147483647
61# CHECK-EXPAND: lui a2, 524288
62# CHECK-EXPAND: addi 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: lui a2, 524288
70li x12, 0x80000000
71# CHECK-EXPAND: addi a2, zero, -1
72li x12, 0xFFFFFFFF
73
74# CHECK-EXPAND: addi a0, zero, 1110
75li a0, %lo(0x123456)
76
77# CHECK-OBJ-NOALIAS: addi a0, zero, 0
78# CHECK-OBJ: R_RISCV_LO12
79li a0, %lo(foo)
80# CHECK-OBJ-NOALIAS: addi a0, zero, 0
81# CHECK-OBJ: R_RISCV_PCREL_LO12
82li a0, %pcrel_lo(.Lpcrel_hi0)
83
84.equ CONST, 0x123456
85# CHECK-EXPAND: lui a0, 291
86# CHECK-EXPAND: addi a0, a0, 1110
87li a0, CONST
88# CHECK-EXPAND: lui a0, 291
89# CHECK-EXPAND: addi a0, a0, 1111
90li a0, CONST+1
91
92.equ CONST, 0x654321
93# CHECK-EXPAND: lui a0, 1620
94# CHECK-EXPAND: addi a0, a0, 801
95li a0, CONST
96
97# CHECK-INST: csrrs t4, instreth, zero
98# CHECK-ALIAS: rdinstreth t4
99rdinstreth x29
100# CHECK-INST: csrrs s11, cycleh, zero
101# CHECK-ALIAS: rdcycleh s11
102rdcycleh x27
103# CHECK-INST: csrrs t3, timeh, zero
104# CHECK-ALIAS: rdtimeh t3
105rdtimeh x28
106
107# CHECK-EXPAND: lb a0, 0(a1)
108lb x10, (x11)
109# CHECK-EXPAND: lh a0, 0(a1)
110lh x10, (x11)
111# CHECK-EXPAND: lw a0, 0(a1)
112lw x10, (x11)
113# CHECK-EXPAND: lbu a0, 0(a1)
114lbu x10, (x11)
115# CHECK-EXPAND: lhu a0, 0(a1)
116lhu x10, (x11)
117
118# CHECK-EXPAND: sb a0, 0(a1)
119sb x10, (x11)
120# CHECK-EXPAND: sh a0, 0(a1)
121sh x10, (x11)
122# CHECK-EXPAND: sw a0, 0(a1)
123sw x10, (x11)
124