1# RUN: llvm-mc %s -triple=riscv32 -mattr=+c -riscv-no-aliases -show-encoding \
2# RUN:     | FileCheck -check-prefixes=CHECK-ASM,CHECK-ASM-AND-OBJ %s
3# RUN: llvm-mc -filetype=obj -triple=riscv32 -mattr=+c < %s \
4# RUN:     | llvm-objdump --mattr=+c -M no-aliases -d -r - \
5# RUN:     | FileCheck --check-prefixes=CHECK-OBJ,CHECK-ASM-AND-OBJ %s
6# RUN: llvm-mc %s -triple=riscv64 -mattr=+c -riscv-no-aliases -show-encoding \
7# RUN:     | FileCheck -check-prefixes=CHECK-ASM,CHECK-ASM-AND-OBJ %s
8# RUN: llvm-mc -filetype=obj -triple=riscv64 -mattr=+c < %s \
9# RUN:     | llvm-objdump --mattr=+c -M no-aliases -d -r - \
10# RUN:     | FileCheck --check-prefix=CHECK-ASM-AND-OBJ %s
11
12# TODO: more exhaustive testing of immediate encoding.
13
14# CHECK-ASM-AND-OBJ: c.lwsp ra, 0(sp)
15# CHECK-ASM: encoding: [0x82,0x40]
16c.lwsp ra, 0(sp)
17# CHECK-ASM-AND-OBJ: c.swsp ra, 252(sp)
18# CHECK-ASM: encoding: [0x86,0xdf]
19c.swsp ra, 252(sp)
20# CHECK-ASM-AND-OBJ: c.lw a2, 0(a0)
21# CHECK-ASM: encoding: [0x10,0x41]
22c.lw a2, 0(a0)
23# CHECK-ASM-AND-OBJ: c.sw a5, 124(a3)
24# CHECK-ASM: encoding: [0xfc,0xde]
25c.sw a5, 124(a3)
26
27# CHECK-OBJ: c.j 0xfffff808
28# CHECK-ASM: c.j -2048
29# CHECK-ASM: encoding: [0x01,0xb0]
30c.j -2048
31# CHECK-ASM-AND-OBJ: c.jr a7
32# CHECK-ASM: encoding: [0x82,0x88]
33c.jr a7
34# CHECK-ASM-AND-OBJ: c.jalr a1
35# CHECK-ASM: encoding: [0x82,0x95]
36c.jalr a1
37# CHECK-OBJ: c.beqz a3, 0xffffff0e
38# CHECK-ASM: c.beqz a3, -256
39# CHECK-ASM: encoding: [0x81,0xd2]
40c.beqz a3, -256
41# CHECK-OBJ: c.bnez a5, 0x10e
42# CHECK-ASM: c.bnez a5, 254
43# CHECK-ASM: encoding: [0xfd,0xef]
44c.bnez a5,  254
45
46# CHECK-ASM-AND-OBJ: c.li a7, 31
47# CHECK-ASM: encoding: [0xfd,0x48]
48c.li a7, 31
49# CHECK-ASM-AND-OBJ: c.addi a3, -32
50# CHECK-ASM: encoding: [0x81,0x16]
51c.addi a3, -32
52# CHECK-ASM-AND-OBJ: c.addi16sp sp, -512
53# CHECK-ASM: encoding: [0x01,0x71]
54c.addi16sp sp, -512
55# CHECK-ASM-AND-OBJ: c.addi16sp sp, 496
56# CHECK-ASM: encoding: [0x7d,0x61]
57c.addi16sp sp, 496
58# CHECK-ASM-AND-OBJ: c.addi4spn a3, sp, 1020
59# CHECK-ASM: encoding: [0xf4,0x1f]
60c.addi4spn a3, sp, 1020
61# CHECK-ASM-AND-OBJ: c.addi4spn a3, sp, 4
62# CHECK-ASM: encoding: [0x54,0x00]
63c.addi4spn a3, sp, 4
64# CHECK-ASM-AND-OBJ: c.slli a1, 1
65# CHECK-ASM: encoding: [0x86,0x05]
66c.slli a1, 1
67# CHECK-ASM-AND-OBJ: c.srli a3, 31
68# CHECK-ASM: encoding: [0xfd,0x82]
69c.srli a3, 31
70# CHECK-ASM-AND-OBJ: c.srai a4, 2
71# CHECK-ASM: encoding: [0x09,0x87]
72c.srai a4, 2
73# CHECK-ASM-AND-OBJ: c.andi a5, 15
74# CHECK-ASM: encoding: [0xbd,0x8b]
75c.andi a5, 15
76# CHECK-ASM-AND-OBJ: c.mv a7, s0
77# CHECK-ASM: encoding: [0xa2,0x88]
78c.mv a7, s0
79# CHECK-ASM-AND-OBJ: c.and a1, a2
80# CHECK-ASM: encoding: [0xf1,0x8d]
81c.and a1, a2
82# CHECK-ASM-AND-OBJ: c.or a2, a3
83# CHECK-ASM: encoding: [0x55,0x8e]
84c.or a2, a3
85# CHECK-ASM-AND-OBJ: c.xor a3, a4
86# CHECK-ASM: encoding: [0xb9,0x8e]
87c.xor a3, a4
88# CHECK-ASM-AND-OBJ: c.sub a4, a5
89# CHECK-ASM: encoding: [0x1d,0x8f]
90c.sub a4, a5
91# CHECK-ASM-AND-OBJ: c.nop
92# CHECK-ASM: encoding: [0x01,0x00]
93c.nop
94# CHECK-ASM-AND-OBJ: c.ebreak
95# CHECK-ASM: encoding: [0x02,0x90]
96c.ebreak
97# CHECK-ASM-AND-OBJ: c.lui s0, 1
98# CHECK-ASM: encoding: [0x05,0x64]
99c.lui s0, 1
100# CHECK-ASM-AND-OBJ: c.lui s0, 31
101# CHECK-ASM: encoding: [0x7d,0x64]
102c.lui s0, 31
103# CHECK-ASM-AND-OBJ: c.lui s0, 1048544
104# CHECK-ASM: encoding: [0x01,0x74]
105c.lui s0, 0xfffe0
106# CHECK-ASM-AND-OBJ: c.lui s0, 1048575
107# CHECK-ASM: encoding: [0x7d,0x74]
108c.lui s0, 0xfffff
109# CHECK-ASM-AND-OBJ: c.unimp
110# CHECK-ASM: encoding: [0x00,0x00]
111c.unimp
112