xref: /llvm-project/lld/test/ELF/avr-reloc.s (revision a3816b5a573dbf57ba3082a919ca2de6b47257e9)
1; REQUIRES: avr
2; RUN: llvm-mc -filetype=obj -triple=avr -mcpu=atmega328p %s -o %t0.o
3; RUN: ld.lld %t0.o --defsym=a=0x12345678 --defsym=b=30 --defsym=c=0x15554 -o %t0
4; RUN: llvm-objdump -d --print-imm-hex --mcpu=atmega328p %t0 | \
5; RUN:     FileCheck --check-prefixes=CHECK,AVR %s
6; RUN: llvm-objdump -s --mcpu=atmega328p %t0 | \
7; RUN:     FileCheck --check-prefixes=HEX,AVRHEX %s
8; RUN: llvm-mc -filetype=obj -triple=avr -mcpu=attiny10 %s --defsym=TINY=1 -o %t1.o
9; RUN: ld.lld %t1.o --defsym=a=0x12345678 --defsym=b=30 --defsym=c=0x15554 -o %t1
10; RUN: llvm-objdump -d --print-imm-hex --mcpu=attiny10 %t1 | FileCheck %s
11; RUN: llvm-objdump -s --mcpu=attiny10 %t1 | \
12; RUN:     FileCheck --check-prefixes=HEX,TINYHEX %s
13
14.section .LDI,"ax",@progbits
15; CHECK-LABEL: section .LDI:
16; CHECK:       ldi     r20, 0x78
17; CHECK-NEXT:  ldi     r20, 0x56
18; CHECK-NEXT:  ldi     r20, 0x34
19; CHECK-NEXT:  ldi     r20, 0x12
20; CHECK-NEXT:  ldi     r20, 0x3c
21; CHECK-NEXT:  ldi     r20, 0x2b
22; CHECK-NEXT:  ldi     r20, 0x1a
23; CHECK-NEXT:  ldi     r20, 0xaa
24; CHECK-NEXT:  ldi     r20, 0xaa
25; CHECK-NEXT:  ldi     r20, 0xff
26
27ldi r20, lo8(a)     ; R_AVR_LO8_LDI
28ldi r20, hi8(a)     ; R_AVR_HI8_LDI
29ldi r20, hh8(a)     ; R_AVR_HH8_LDI
30ldi r20, hhi8(a)    ; R_AVR_MS8_LDI
31
32ldi r20, pm_lo8(a)  ; R_AVR_LO8_LDI_PM
33ldi r20, pm_hi8(a)  ; R_AVR_HI8_LDI_PM
34ldi r20, pm_hh8(a)  ; R_AVR_HH8_LDI_PM
35
36ldi r20, lo8_gs(c)  ; R_AVR_LO8_LDI_GS
37ldi r20, hi8_gs(c)  ; R_AVR_HI8_LDI_GS
38
39ldi r20, b+225
40
41.section .LDI_NEG,"ax",@progbits
42; CHECK-LABEL: section .LDI_NEG:
43; CHECK:       ldi     r20, 0x88
44; CHECK-NEXT:  ldi     r20, 0xa9
45; CHECK-NEXT:  ldi     r20, 0xcb
46; CHECK-NEXT:  ldi     r20, 0xed
47; CHECK-NEXT:  ldi     r20, 0xc4
48; CHECK-NEXT:  ldi     r20, 0xd4
49; CHECK-NEXT:  ldi     r20, 0xe5
50ldi r20, lo8(-(a))     ; R_AVR_LO8_LDI_NEG
51ldi r20, hi8(-(a))     ; R_AVR_HI8_LDI_NEG
52ldi r20, hh8(-(a))     ; R_AVR_HH8_LDI_NEG
53ldi r20, hhi8(-(a))    ; R_AVR_MS8_LDI_NEG
54
55ldi r20, pm_lo8(-(a))  ; R_AVR_LO8_LDI_PM_NEG
56ldi r20, pm_hi8(-(a))  ; R_AVR_HI8_LDI_PM_NEG
57ldi r20, pm_hh8(-(a))  ; R_AVR_HH8_LDI_PM_NEG
58
59.ifndef TINY
60.section .SIX,"ax",@progbits
61; AVR-LABEL:    section .SIX:
62; AVR:          std   Y+30, r9
63; AVR-NEXT:     ldd   r9, Y+30
64; AVR-NEXT:     adiw  r24, 0x1e
65; AVRHEX-LABEL: section .SIX:
66; AVRHEX-NEXT:  9e8e9e8c 4e96
67std Y+b, r9   ; R_AVR_6
68ldd r9, Y+b   ; R_AVR_6
69adiw r24, b   ; R_AVR_6_ADIW
70.endif
71
72.section .PORT,"ax",@progbits
73; CHECK-LABEL: section .PORT:
74; CHECK:       in     r20, 0x1e
75; CHECK-NEXT:  sbic   0x1e, 0x1
76in    r20, b  ; R_AVR_PORT6
77sbic  b, 1    ; R_AVR_PORT5
78
79.section .LDSSTS,"ax",@progbits
80; CHECK-LABEL: section .LDSSTS:
81; CHECK:       lds r20, 0x1e
82; CHECK-NEXT:  sts 0x1e, r21
83; HEX-LABEL:   section .LDSSTS:
84; AVRHEX:      {{.*}} 40911e00 50931e00
85; TINYHEX:     {{.*}} 4ea15ea9
86lds r20, b
87sts b, r21
88
89.section .DATA,"ax",@progbits
90; HEX-LABEL: section .DATA:
91; HEX-NEXT:  {{.*}} 1e1e000f 00785634 12785634
92.byte b        ; R_AVR_8
93.short b       ; R_AVR_16
94.short gs(b)   ; R_AVR_16_PM
95.long a        ; R_AVR_32
96.byte lo8(a)   ; R_AVR_8_LO8
97.byte hi8(a)   ; R_AVR_8_HI8
98.byte hlo8(a)  ; R_AVR_8_HLO8
99