xref: /llvm-project/llvm/test/MC/RISCV/insn.s (revision 4b3d439e7e7b4e794e523caea9863d67ff8cf85f)
1# RUN: llvm-mc %s -triple=riscv32 -mattr=+f -M no-aliases -show-encoding \
2# RUN:     | FileCheck -check-prefixes=CHECK-ASM %s
3# RUN: llvm-mc %s -triple riscv64 -mattr=+f -M no-aliases -show-encoding \
4# RUN:     | FileCheck -check-prefixes=CHECK-ASM %s
5# RUN: llvm-mc -filetype=obj -triple=riscv32 -mattr=+f < %s \
6# RUN:     | llvm-objdump --mattr=+f -M no-aliases -d -r - \
7# RUN:     | FileCheck -check-prefixes=CHECK-OBJ %s
8# RUN: llvm-mc -filetype=obj -triple=riscv64 -mattr=+f < %s \
9# RUN:     | llvm-objdump --mattr=+f -M no-aliases -d -r - \
10# RUN:     | FileCheck -check-prefixes=CHECK-OBJ %s
11
12target:
13
14# CHECK-ASM: .insn r 51, 0, 0, a0, a1, a2
15# CHECK-ASM: encoding: [0x33,0x85,0xc5,0x00]
16# CHECK-OBJ: add a0, a1, a2
17.insn r  0x33,  0,  0, a0, a1, a2
18# CHECK-ASM: .insn r 51, 0, 0, a0, a1, a2
19# CHECK-ASM: encoding: [0x33,0x85,0xc5,0x00]
20# CHECK-OBJ: add a0, a1, a2
21.insn r  OP,  0,  0, a0, a1, a2
22
23# CHECK-ASM: .insn i 19, 0, a0, a1, 13
24# CHECK-ASM: encoding: [0x13,0x85,0xd5,0x00]
25# CHECK-OBJ: addi a0, a1, 0xd
26.insn i  0x13,  0, a0, a1, 13
27# CHECK-ASM: .insn i 19, 0, a0, a1, 13
28# CHECK-ASM: encoding: [0x13,0x85,0xd5,0x00]
29# CHECK-OBJ: addi a0, a1, 0xd
30.insn i  OP_IMM,  0, a0, a1, 13
31
32# CHECK-ASM: .insn i 103, 0, a0, 10(a1)
33# CHECK-ASM: encoding: [0x67,0x85,0xa5,0x00]
34# CHECK-OBJ: jalr a0, 0xa(a1)
35.insn i  0x67,  0, a0, 10(a1)
36# CHECK-ASM: .insn i 103, 0, a0, 10(a1)
37# CHECK-ASM: encoding: [0x67,0x85,0xa5,0x00]
38# CHECK-OBJ: jalr a0, 0xa(a1)
39.insn i  JALR,  0, a0, 10(a1)
40
41# CHECK-ASM: .insn i 103, 0, a0, 0(a1)
42# CHECK-ASM: encoding: [0x67,0x85,0x05,0x00]
43# CHECK-OBJ: jalr a0, 0x0(a1)
44.insn i  0x67,  0, a0, (a1)
45# CHECK-ASM: .insn i 103, 0, a0, 0(a1)
46# CHECK-ASM: encoding: [0x67,0x85,0x05,0x00]
47# CHECK-OBJ: jalr a0, 0x0(a1)
48.insn i  JALR,  0, a0, (a1)
49
50# CHECK-ASM: .insn i 3, 0, a0, 4(a1)
51# CHECK-ASM: encoding: [0x03,0x85,0x45,0x00]
52# CHECK-OBJ: lb a0, 0x4(a1)
53.insn i   0x3,  0, a0, 4(a1)
54# CHECK-ASM: .insn i 3, 0, a0, 4(a1)
55# CHECK-ASM: encoding: [0x03,0x85,0x45,0x00]
56# CHECK-OBJ: lb a0, 0x4(a1)
57.insn i   LOAD,  0, a0, 4(a1)
58
59# CHECK-ASM: .insn i 3, 0, a0, 0(a1)
60# CHECK-ASM: encoding: [0x03,0x85,0x05,0x00]
61# CHECK-OBJ: lb a0, 0x0(a1)
62.insn i   0x3,  0, a0, (a1)
63# CHECK-ASM: .insn i 3, 0, a0, 0(a1)
64# CHECK-ASM: encoding: [0x03,0x85,0x05,0x00]
65# CHECK-OBJ: lb a0, 0x0(a1)
66.insn i   LOAD,  0, a0, (a1)
67
68# CHECK-ASM: .insn b 99, 0, a0, a1, target
69# CHECK-ASM: [0x63'A',A,0xb5'A',A]
70# CHECK-OBJ: beq a0, a1, 0x0 <target>
71.insn sb 0x63,  0, a0, a1, target
72# CHECK-ASM: .insn b 99, 0, a0, a1, target
73# CHECK-ASM: [0x63'A',A,0xb5'A',A]
74# CHECK-OBJ: beq a0, a1, 0x0 <target>
75.insn sb BRANCH,  0, a0, a1, target
76
77# CHECK-ASM: .insn b 99, 0, a0, a1, target
78# CHECK-ASM: [0x63'A',A,0xb5'A',A]
79# CHECK-OBJ: beq a0, a1, 0x0 <target>
80.insn b  0x63,  0, a0, a1, target
81# CHECK-ASM: .insn b 99, 0, a0, a1, target
82# CHECK-ASM: [0x63'A',A,0xb5'A',A]
83# CHECK-OBJ: beq a0, a1, 0x0 <target>
84.insn b  BRANCH,  0, a0, a1, target
85
86# CHECK-ASM: .insn s 35, 0, a0, 4(a1)
87# CHECK-ASM: encoding: [0x23,0x82,0xa5,0x00]
88# CHECK-OBJ: sb a0, 0x4(a1)
89.insn s  0x23,  0, a0, 4(a1)
90# CHECK-ASM: .insn s 35, 0, a0, 4(a1)
91# CHECK-ASM: encoding: [0x23,0x82,0xa5,0x00]
92# CHECK-OBJ: sb a0, 0x4(a1)
93.insn s  STORE,  0, a0, 4(a1)
94
95# CHECK-ASM: .insn s 35, 0, a0, 0(a1)
96# CHECK-ASM: encoding: [0x23,0x80,0xa5,0x00]
97# CHECK-OBJ: sb a0, 0x0(a1)
98.insn s  0x23,  0, a0, (a1)
99# CHECK-ASM: .insn s 35, 0, a0, 0(a1)
100# CHECK-ASM: encoding: [0x23,0x80,0xa5,0x00]
101# CHECK-OBJ: sb a0, 0x0(a1)
102.insn s  STORE,  0, a0, (a1)
103
104# CHECK-ASM: .insn u 55, a0, 4095
105# CHECK-ASM: encoding: [0x37,0xf5,0xff,0x00]
106# CHECK-OBJ: lui a0, 0xfff
107.insn u  0x37, a0, 0xfff
108# CHECK-ASM: .insn u 55, a0, 4095
109# CHECK-ASM: encoding: [0x37,0xf5,0xff,0x00]
110# CHECK-OBJ: lui a0, 0xfff
111.insn u  LUI, a0, 0xfff
112
113# CHECK-ASM: .insn j 111, a0, target
114# CHECK-ASM: encoding: [0x6f,0bAAAA0101,A,A]
115# CHECK-OBJ: jal a0, 0x0 <target>
116.insn uj 0x6f, a0, target
117# CHECK-ASM: .insn j 111, a0, target
118# CHECK-ASM: encoding: [0x6f,0bAAAA0101,A,A]
119# CHECK-OBJ: jal a0, 0x0 <target>
120.insn uj JAL, a0, target
121
122# CHECK-ASM: .insn j 111, a0, target
123# CHECK-ASM: encoding: [0x6f,0bAAAA0101,A,A]
124# CHECK-OBJ: jal a0, 0x0 <target>
125.insn j  0x6f, a0, target
126# CHECK-ASM: .insn j 111, a0, target
127# CHECK-ASM: encoding: [0x6f,0bAAAA0101,A,A]
128# CHECK-OBJ: jal a0, 0x0 <target>
129.insn j  JAL, a0, target
130
131# CHECK-ASM: .insn r4 67, 0, 0, fa0, fa1, fa2, fa3
132# CHECK-ASM: encoding: [0x43,0x85,0xc5,0x68]
133# CHECK-OBJ: fmadd.s fa0, fa1, fa2, fa3, rne
134.insn r  0x43,  0,  0, fa0, fa1, fa2, fa3
135# CHECK-ASM: .insn r4 67, 0, 0, fa0, fa1, fa2, fa3
136# CHECK-ASM: encoding: [0x43,0x85,0xc5,0x68]
137# CHECK-OBJ: fmadd.s fa0, fa1, fa2, fa3, rne
138.insn r  MADD,  0,  0, fa0, fa1, fa2, fa3
139
140# CHECK-ASM: .insn r4 67, 0, 0, fa0, fa1, fa2, fa3
141# CHECK-ASM: encoding: [0x43,0x85,0xc5,0x68]
142# CHECK-OBJ: fmadd.s fa0, fa1, fa2, fa3, rne
143.insn r4 0x43,  0,  0, fa0, fa1, fa2, fa3
144# CHECK-ASM: .insn r4 67, 0, 0, fa0, fa1, fa2, fa3
145# CHECK-ASM: encoding: [0x43,0x85,0xc5,0x68]
146# CHECK-OBJ: fmadd.s fa0, fa1, fa2, fa3, rne
147.insn r4 MADD,  0,  0, fa0, fa1, fa2, fa3
148
149# CHECK-ASM: .insn i 3, 5, t1, -2048(t2)
150# CHECK-ASM: encoding: [0x03,0xd3,0x03,0x80]
151# CHECK-OBJ: lhu t1, -0x800(t2)
152.insn i 0x3, 0x5, x6, %lo(2048)(x7)
153# CHECK-ASM: .insn i 3, 5, t1, -2048(t2)
154# CHECK-ASM: encoding: [0x03,0xd3,0x03,0x80]
155# CHECK-OBJ: lhu t1, -0x800(t2)
156.insn i LOAD, 0x5, x6, %lo(2048)(x7)
157
158# CHECK-ASM: .insn 0x4, 19
159# CHECK-ASM: encoding: [0x13,0x00,0x00,0x00]
160# CHECK-OBJ: addi zero, zero, 0x0
161.insn 0x13
162
163# CHECK-ASM: .insn 0x4, 19
164# CHECK-ASM: encoding: [0x13,0x00,0x00,0x00]
165# CHECK-OBJ: addi zero, zero, 0x0
166.insn 0x4, 0x13
167
168# CHECK-ASM: .insn 0x6, 31
169# CHECK-ASM: encoding: [0x1f,0x00,0x00,0x00,0x00,0x00]
170# CHECK-OBJ: <unknown>
171.insn 6, 0x1f
172
173# CHECK-ASM: .insn 0x8, 63
174# CHECK-ASM: encoding: [0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00]
175# CHECK-OBJ: <unknown>
176.insn 8, 0x3f
177
178# CHECK-ASM: .insn 0x6, 281474976710623
179# CHECK-ASM: encoding: [0xdf,0xff,0xff,0xff,0xff,0xff]
180# CHECK-OBJ: <unknown>
181.insn 0x6, 0xffffffffffdf
182
183# CHECK-ASM: .insn 0x8, -65
184# CHECK-ASM: encoding: [0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff]
185# CHECK-OBJ: <unknown>
186.insn 0x8, 0xffffffffffffffbf
187
188# CHECK-ASM: .insn 0x4, 3971
189# CHECK-ASM: encoding: [0x83,0x0f,0x00,0x00]
190# CHECK-OBJ: lb t6, 0x0(zero)
191.insn 0x2 + 0x2, 0x3 | (31 << 7)
192
193# CHECK-ASM: .insn 0x8, -576460752303423297
194# CHECK-ASM: encoding: [0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0xf8]
195# CHECK-OBJ: <unknown>
196.insn 0x4 * 0x2, 0xbf | (31 << 59)
197
198odd_lengths:
199# CHECK-ASM-LABEL: odd_lengths:
200# CHECK-OBJ-LABEL: <odd_lengths>:
201
202## These deliberately disagree with the lengths objdump expects them to have, so
203## keep them at the end so that the disassembled instruction stream is not out
204## of sync with the encoded instruction stream. We don't check for `<unknown>`
205## as we could get any number of those, so instead check for the encoding
206## halfwords. These might be split into odd 16-bit chunks, so each chunk is on
207## one line.
208
209# CHECK-ASM: .insn 0x4, 65503
210# CHECK-ASM: encoding: [0xdf,0xff,0x00,0x00]
211# CHECK-OBJ: ffdf
212# CHECK-OBJ: 0000
213.insn 0xffdf
214
215# CHECK-ASM: .insn 0x4, 65471
216# CHECK-ASM: encoding: [0xbf,0xff,0x00,0x00]
217# CHECK-OBJ: ffbf
218# CHECK-OBJ: 0000
219.insn 0xffbf
220