xref: /llvm-project/lld/test/ELF/arm-thumb-alu.s (revision 5421ab46250691402a48c67e3cc2baf1b2c4ad58)
1// REQUIRES: arm
2
3// RUN: split-file %s %t
4// RUN: llvm-mc -filetype=obj -triple=thumbv6m-unknown-linux-gnueabi %t/asm -o %t.o
5// RUN: ld.lld --script %t/lds %t.o -o %t2
6// RUN: llvm-objdump -d %t2 --triple=thumbv6m-unknown-linux-gnueabi --no-show-raw-insn | FileCheck %s
7
8//--- lds
9SECTIONS {
10  .tests 0x00001000 : AT(0x00001000) { *(.tests) }
11  .sym1  0x11223344 : AT(0x11223344) { *(.sym1) }
12  .sym2  0x00ffffff : AT(0x00ffffff) { *(.sym2) }
13  .fn    0x55667788 : AT(0x55667788) { *(.fn) }
14}
15
16//--- asm
17  .section .tests, "ax", %progbits
18
19// CHECK-LABEL: <R_ARM_THM_ALU_ABS_G0_NC>:
20// CHECK:      adds    r0, #0x44
21// CHECK-NEXT: movs    r0, #0x44
22// CHECK-NEXT: movs    r0, #0x45
23// CHECK-NEXT: movs    r0, #0x43
24// CHECK-NEXT: movs    r0, #0xff
25// CHECK-NEXT: movs    r0, #0x0
26// CHECK-NEXT: movs    r0, #0xfe
27// CHECK-NEXT: movs    r0, #0x89
28// CHECK-NEXT: movs    r0, #0x8b
29R_ARM_THM_ALU_ABS_G0_NC:
30  adds r0, :lower0_7:sym1
31  movs r0, :lower0_7:sym1
32  movs r0, :lower0_7:sym1+1
33  movs r0, :lower0_7:sym1+0xff
34  movs r0, :lower0_7:sym2
35  movs r0, :lower0_7:sym2+1
36  movs r0, :lower0_7:sym2+0xff
37  movs r0, :lower0_7:fn
38  movs r0, :lower0_7:fn+2
39
40// CHECK-LABEL: <R_ARM_THM_ALU_ABS_G1_NC>:
41// CHECK:      adds    r0, #0x33
42// CHECK-NEXT: movs    r0, #0x33
43// CHECK-NEXT: movs    r0, #0x33
44// CHECK-NEXT: movs    r0, #0x34
45// CHECK-NEXT: movs    r0, #0xff
46// CHECK-NEXT: movs    r0, #0x0
47// CHECK-NEXT: movs    r0, #0x0
48// CHECK-NEXT: movs    r0, #0x77
49// CHECK-NEXT: movs    r0, #0x77
50R_ARM_THM_ALU_ABS_G1_NC:
51  adds r0, :lower8_15:sym1
52  movs r0, :lower8_15:sym1
53  movs r0, :lower8_15:sym1+1
54  movs r0, :lower8_15:sym1+0xff
55  movs r0, :lower8_15:sym2
56  movs r0, :lower8_15:sym2+1
57  movs r0, :lower8_15:sym2+0xff
58  movs r0, :lower8_15:fn
59  movs r0, :lower8_15:fn+2
60
61// CHECK-LABEL: <R_ARM_THM_ALU_ABS_G2_NC>:
62// CHECK:      adds    r0, #0x22
63// CHECK-NEXT: movs    r0, #0x22
64// CHECK-NEXT: movs    r0, #0x22
65// CHECK-NEXT: movs    r0, #0x22
66// CHECK-NEXT: movs    r0, #0xff
67// CHECK-NEXT: movs    r0, #0x0
68// CHECK-NEXT: movs    r0, #0x0
69// CHECK-NEXT: movs    r0, #0x66
70// CHECK-NEXT: movs    r0, #0x66
71R_ARM_THM_ALU_ABS_G2_NC:
72  adds r0, :upper0_7:sym1
73  movs r0, :upper0_7:sym1
74  movs r0, :upper0_7:sym1+1
75  movs r0, :upper0_7:sym1+0xff
76  movs r0, :upper0_7:sym2
77  movs r0, :upper0_7:sym2+1
78  movs r0, :upper0_7:sym2+0xff
79  movs r0, :upper0_7:fn
80  movs r0, :upper0_7:fn+2
81
82// CHECK-LABEL: <R_ARM_THM_ALU_ABS_G3>:
83// CHECK:      adds    r0, #0x11
84// CHECK-NEXT: movs    r0, #0x11
85// CHECK-NEXT: movs    r0, #0x11
86// CHECK-NEXT: movs    r0, #0x11
87// CHECK-NEXT: movs    r0, #0x0
88// CHECK-NEXT: movs    r0, #0x1
89// CHECK-NEXT: movs    r0, #0x1
90// CHECK-NEXT: movs    r0, #0x55
91// CHECK-NEXT: movs    r0, #0x55
92R_ARM_THM_ALU_ABS_G3:
93  adds r0, :upper8_15:sym1
94  movs r0, :upper8_15:sym1
95  movs r0, :upper8_15:sym1+1
96  movs r0, :upper8_15:sym1+0xff
97  movs r0, :upper8_15:sym2
98  movs r0, :upper8_15:sym2+1
99  movs r0, :upper8_15:sym2+0xff
100  movs r0, :upper8_15:fn
101  movs r0, :upper8_15:fn+2
102
103  .section .sym1, "aw", %progbits
104sym1:
105  .byte 0
106
107  .section .sym2, "aw", %progbits
108sym2:
109  .byte 0
110
111  .section .fn, "ax", %progbits
112  .thumb_func
113fn:
114  bx lr
115