xref: /llvm-project/llvm/test/ExecutionEngine/JITLink/RISCV/ELF_relax_align_rvc.s (revision 8c37e3e64bb1432f771ec4d191837e6b3be5bf0c)
1## Test that we can handle R_RISCV_ALIGN.
2
3# RUN: llvm-mc -filetype=obj -triple=riscv32 -mattr=+relax,+c %s -o %t.rv32
4# RUN: llvm-jitlink -noexec \
5# RUN:     -slab-allocate 100Kb -slab-address 0x0 -slab-page-size 4096 \
6# RUN:     -check %s %t.rv32
7
8# RUN: llvm-mc -filetype=obj -triple=riscv64 -mattr=+relax,+c %s -o %t.rv64
9# RUN: llvm-jitlink -noexec \
10# RUN:     -slab-allocate 100Kb -slab-address 0x0 -slab-page-size 4096 \
11# RUN:     -check %s %t.rv64
12
13# RUN: llvm-mc -filetype=obj -triple=riscv32 -mattr=+relax,+zca %s -o %t.rv32zca
14# RUN: llvm-jitlink -noexec \
15# RUN:     -slab-allocate 100Kb -slab-address 0x0 -slab-page-size 4096 \
16# RUN:     -check %s %t.rv32zca
17
18# RUN: llvm-mc -filetype=obj -triple=riscv64 -mattr=+relax,+zca %s -o %t.rv64zca
19# RUN: llvm-jitlink -noexec \
20# RUN:     -slab-allocate 100Kb -slab-address 0x0 -slab-page-size 4096 \
21# RUN:     -check %s %t.rv64zca
22
23    .globl main,align2,align4,align8,align16,align32
24    .type  main,@function
25main:
26    jump f, t0
27    .balign 2
28align2:
29    jump f, t0
30    .size align2,.-align2
31    .balign 4
32align4:
33    jump f, t0
34    .size align4,.-align4
35    .balign 8
36align8:
37    jump f, t0
38    .size align8,.-align8
39    .balign 16
40align16:
41    jump f, t0
42    .size align16,.-align16
43    .size main, .-main
44
45    .globl f
46f:
47    ret
48    .size f, .-f
49
50# jitlink-check: main = 0x0
51# jitlink-check: align2 = 0x2
52# jitlink-check: align4 = 0x4
53# jitlink-check: align8 = 0x8
54# jitlink-check: align16 = 0x10
55
56## main: c.j f
57# jitlink-check: (*{2}(main))[1:0] = 0x1
58# jitlink-check: (*{2}(main))[15:13] = 0x5
59# jitlink-check: decode_operand(main, 0)[11:0] = (f - main)[11:0]
60
61## align2: c.j f
62# jitlink-check: (*{2}(align2))[1:0] = 0x1
63# jitlink-check: (*{2}(align2))[15:13] = 0x5
64# jitlink-check: decode_operand(align2, 0)[11:0] = (f - align2)[11:0]
65
66## align4: c.j f; c.nop
67# jitlink-check: (*{2}(align4))[1:0] = 0x1
68# jitlink-check: (*{2}(align4))[15:13] = 0x5
69# jitlink-check: decode_operand(align4, 0)[11:0] = (f - align4)[11:0]
70# jitlink-check: (*{2}(align4+2)) = 0x1
71
72## align8: c.j f; nop; c.nop
73# jitlink-check: (*{2}(align8))[1:0] = 0x1
74# jitlink-check: (*{2}(align8))[15:13] = 0x5
75# jitlink-check: decode_operand(align8, 0)[11:0] = (f - align8)[11:0]
76# jitlink-check: (*{4}(align8+2)) = 0x13
77# jitlink-check: (*{2}(align8+6)) = 0x1
78
79## align16: c.j f
80# jitlink-check: (*{2}(align16))[1:0] = 0x1
81# jitlink-check: (*{2}(align16))[15:13] = 0x5
82# jitlink-check: decode_operand(align16, 0)[11:0] = (f - align16)[11:0]
83