1# RUN: llvm-mc -triple riscv32 -riscv-no-aliases < %s -show-encoding \
2# RUN:     | FileCheck -check-prefix=INSTR -check-prefix=FIXUP %s
3# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+c < %s \
4# RUN:     | llvm-readobj -r | FileCheck -check-prefix=RELOC %s
5
6# Check prefixes:
7# RELOC - Check the relocation in the object.
8# FIXUP - Check the fixup on the instruction.
9# INSTR - Check the instruction is handled properly by the ASMPrinter
10
11.long foo
12# RELOC: R_RISCV_32 foo
13
14.quad foo
15# RELOC: R_RISCV_64 foo
16
17lui t1, %hi(foo)
18# RELOC: R_RISCV_HI20 foo 0x0
19# INSTR: lui t1, %hi(foo)
20# FIXUP: fixup A - offset: 0, value: %hi(foo), kind: fixup_riscv_hi20
21
22lui t1, %hi(foo+4)
23# RELOC: R_RISCV_HI20 foo 0x4
24# INSTR: lui t1, %hi(foo+4)
25# FIXUP: fixup A - offset: 0, value: %hi(foo+4), kind: fixup_riscv_hi20
26
27addi t1, t1, %lo(foo)
28# RELOC: R_RISCV_LO12_I foo 0x0
29# INSTR: addi t1, t1, %lo(foo)
30# FIXUP: fixup A - offset: 0, value: %lo(foo), kind: fixup_riscv_lo12_i
31
32addi t1, t1, %lo(foo+4)
33# RELOC: R_RISCV_LO12_I foo 0x4
34# INSTR: addi t1, t1, %lo(foo+4)
35# FIXUP: fixup A - offset: 0, value: %lo(foo+4), kind: fixup_riscv_lo12_i
36
37sb t1, %lo(foo)(a2)
38# RELOC: R_RISCV_LO12_S foo 0x0
39# INSTR: sb t1, %lo(foo)(a2)
40# FIXUP: fixup A - offset: 0, value: %lo(foo), kind: fixup_riscv_lo12_s
41
42sb t1, %lo(foo+4)(a2)
43# RELOC: R_RISCV_LO12_S foo 0x4
44# INSTR: sb t1, %lo(foo+4)(a2)
45# FIXUP: fixup A - offset: 0, value: %lo(foo+4), kind: fixup_riscv_lo12_s
46
47auipc t1, %pcrel_hi(foo)
48# RELOC: R_RISCV_PCREL_HI20 foo 0x0
49# INSTR: auipc t1, %pcrel_hi(foo)
50# FIXUP: fixup A - offset: 0, value: %pcrel_hi(foo), kind: fixup_riscv_pcrel_hi20
51
52auipc t1, %pcrel_hi(foo+4)
53# RELOC: R_RISCV_PCREL_HI20 foo 0x4
54# INSTR: auipc t1, %pcrel_hi(foo+4)
55# FIXUP: fixup A - offset: 0, value: %pcrel_hi(foo+4), kind: fixup_riscv_pcrel_hi20
56
57addi t1, t1, %pcrel_lo(foo)
58# RELOC: R_RISCV_PCREL_LO12_I foo 0x0
59# INSTR: addi t1, t1, %pcrel_lo(foo)
60# FIXUP: fixup A - offset: 0, value: %pcrel_lo(foo), kind: fixup_riscv_pcrel_lo12_i
61
62addi t1, t1, %pcrel_lo(foo+4)
63# RELOC: R_RISCV_PCREL_LO12_I foo 0x4
64# INSTR: addi t1, t1, %pcrel_lo(foo+4)
65# FIXUP: fixup A - offset: 0, value: %pcrel_lo(foo+4), kind: fixup_riscv_pcrel_lo12_i
66
67sb t1, %pcrel_lo(foo)(a2)
68# RELOC: R_RISCV_PCREL_LO12_S foo 0x0
69# INSTR: sb t1, %pcrel_lo(foo)(a2)
70# FIXUP: fixup A - offset: 0, value: %pcrel_lo(foo), kind: fixup_riscv_pcrel_lo12_s
71
72sb t1, %pcrel_lo(foo+4)(a2)
73# RELOC: R_RISCV_PCREL_LO12_S foo 0x4
74# INSTR: sb t1, %pcrel_lo(foo+4)(a2)
75# FIXUP: fixup A - offset: 0, value: %pcrel_lo(foo+4), kind: fixup_riscv_pcrel_lo12_s
76
77jal zero, foo
78# RELOC: R_RISCV_JAL
79# INSTR: jal zero, foo
80# FIXUP: fixup A - offset: 0, value: foo, kind: fixup_riscv_jal
81
82bgeu a0, a1, foo
83# RELOC: R_RISCV_BRANCH
84# INSTR: bgeu a0, a1, foo
85# FIXUP: fixup A - offset: 0, value: foo, kind: fixup_riscv_branch
86