xref: /llvm-project/llvm/test/MC/AVR/modifiers.s (revision 6fb39e496411a64af8fa5484385ef3ff42d2a5f4)
1; RUN: llvm-mc -triple avr -show-encoding < %s | FileCheck %s
2
3; TODO: Add support for lo8(-foo + 3), and add test
4; FIXME: most of these tests use values (i.e. 0x0815) that are out of bounds.
5
6foo:
7    ldi r24, lo8(0x42)
8    ldi r24, lo8(0x2342)
9
10    ldi r24, lo8(0x23)
11    ldi r24, hi8(0x2342)
12
13; CHECK: ldi  r24, lo8(66)          ; encoding: [0x82,0xe4]
14; CHECK: ldi  r24, lo8(9026)        ; encoding: [0x82,0xe4]
15
16; CHECK: ldi  r24, lo8(35)          ; encoding: [0x83,0xe2]
17; CHECK: ldi  r24, hi8(9026)        ; encoding: [0x83,0xe2]
18
19bar:
20    ldi r24, lo8(bar)
21    ldi r24, hi8(bar)
22
23; CHECK: ldi  r24, lo8(bar)         ; encoding: [0x80'A',0xe0]
24; CHECK:                            ; fixup A - offset: 0, value: lo8(bar), kind: fixup_lo8_ldi
25; CHECK: ldi  r24, hi8(bar)         ; encoding: [0x80'A',0xe0]
26; CHECK:                            ; fixup A - offset: 0, value: hi8(bar), kind: fixup_hi8_ldi
27
28lo8:
29    ldi r24, lo8(0x0815)
30    ldi r24, lo8(foo)
31    ldi r24, lo8(bar + 5)
32
33; CHECK: ldi  r24, lo8(2069)        ; encoding: [0x85,0xe1]
34; CHECK: ldi  r24, lo8(foo)         ; encoding: [0x80'A',0xe0]
35; CHECK:                            ; fixup A - offset: 0, value: lo8(foo), kind: fixup_lo8_ldi
36; CHECK: ldi  r24, lo8(bar+5)       ; encoding: [0x80'A',0xe0]
37; CHECK:                            ; fixup A - offset: 0, value: lo8(bar+5), kind: fixup_lo8_ldi
38
39lo8_neg:
40    ldi r24, lo8(-(123456))
41    ldi r24, lo8(-(foo))
42
43; CHECK: ldi  r24, lo8(-(123456))   ; encoding: [0x80,0xec]
44; CHECK: ldi  r24, lo8(-(foo))      ; encoding: [0x80'A',0xe0]
45; CHECK:                            ; fixup A - offset: 0, value: lo8(-(foo)), kind: fixup_lo8_ldi_neg
46
47hi8:
48    ldi r24, hi8(0x0815)
49    ldi r24, hi8(foo)
50    ldi r24, hi8(bar + 5)
51
52; CHECK: ldi  r24, hi8(2069)        ; encoding: [0x88,0xe0]
53; CHECK: ldi  r24, hi8(foo)         ; encoding: [0x80'A',0xe0]
54; CHECK:                            ; fixup A - offset: 0, value: hi8(foo), kind: fixup_hi8_ldi
55; CHECK: ldi  r24, hi8(bar+5)       ; encoding: [0x80'A',0xe0]
56; CHECK:                            ; fixup A - offset: 0, value: hi8(bar+5), kind: fixup_hi8_ldi
57
58hi8_neg:
59    ldi r24, hi8(-(123456))
60    ldi r24, hi8(-(foo))
61
62; CHECK: ldi  r24, hi8(-(123456))   ; encoding: [0x8d,0xe1]
63; CHECK: ldi  r24, hi8(-(foo))      ; encoding: [0x80'A',0xe0]
64; CHECK:                            ; fixup A - offset: 0, value: hi8(-(foo)), kind: fixup_hi8_ldi_neg
65
66hh8:
67    ldi r24, hh8(0x0815)
68    ldi r24, hh8(foo)
69    ldi r24, hh8(bar + 5)
70
71; CHECK: ldi  r24, hh8(2069)        ; encoding: [0x80,0xe0]
72; CHECK: ldi  r24, hh8(foo)         ; encoding: [0x80'A',0xe0]
73; CHECK:                            ; fixup A - offset: 0, value: hh8(foo), kind: fixup_hh8_ldi
74; CHECK: ldi  r24, hh8(bar+5)       ; encoding: [0x80'A',0xe0]
75; CHECK:                            ; fixup A - offset: 0, value: hh8(bar+5), kind: fixup_hh8_ldi
76
77hh8_neg:
78    ldi r24, hh8(-(123456))
79    ldi r24, hh8(-(foo))
80
81; CHECK: ldi  r24, hh8(-(123456))     ; encoding: [0x8e,0xef]
82; CHECK: ldi  r24, hh8(-(foo))        ; encoding: [0x80'A',0xe0]
83; CHECK:                            ; fixup A - offset: 0, value: hh8(-(foo)), kind: fixup_hh8_ldi_neg
84
85hlo8: ; synonym with hh8() above, hence the... odd results
86    ldi r24, hlo8(0x0815)
87    ldi r24, hlo8(foo)
88    ldi r24, hlo8(bar + 5)
89
90; CHECK: ldi  r24, hh8(2069)        ; encoding: [0x80,0xe0]
91; CHECK: ldi  r24, hh8(foo)         ; encoding: [0x80'A',0xe0]
92; CHECK:                            ; fixup A - offset: 0, value: hh8(foo), kind: fixup_hh8_ldi
93; CHECK: ldi  r24, hh8(bar+5)       ; encoding: [0x80'A',0xe0]
94; CHECK:                            ; fixup A - offset: 0, value: hh8(bar+5), kind: fixup_hh8_ldi
95
96hlo8_neg:
97    ldi r24, hlo8(-(123456))
98    ldi r24, hlo8(-(foo))
99
100; CHECK: ldi  r24, hh8(-(123456))  ; encoding: [0x8e,0xef]
101; CHECK: ldi  r24, hh8(-(foo))     ; encoding: [0x80'A',0xe0]
102; CHECK:                           ; fixup A - offset: 0, value: hh8(-(foo)), kind: fixup_hh8_ldi_neg
103
104hhi8:
105    ldi r24, hhi8(0x0815)
106    ldi r24, hhi8(foo)
107    ldi r24, hhi8(bar + 5)
108
109; CHECK: ldi  r24, hhi8(2069)       ; encoding: [0x80,0xe0]
110; CHECK: ldi  r24, hhi8(foo)        ; encoding: [0x80'A',0xe0]
111; CHECK:                            ; fixup A - offset: 0, value: hhi8(foo), kind: fixup_ms8_ldi
112; CHECK: ldi  r24, hhi8(bar+5)      ; encoding: [0x80'A',0xe0]
113; CHECK:                            ; fixup A - offset: 0, value: hhi8(bar+5), kind: fixup_ms8_ldi
114
115hhi8_neg:
116    ldi r24, hhi8(-(123456))
117    ldi r24, hhi8(-(foo))
118
119
120; CHECK: ldi  r24, hhi8(-(123456))  ; encoding: [0x8f,0xef]
121; CHECK: ldi  r24, hhi8(-(foo))     ; encoding: [0x80'A',0xe0]
122; CHECK:                            ; fixup A - offset: 0, value: hhi8(-(foo)), kind: fixup_ms8_ldi_neg
123
124pm_lo8:
125    ldi r24, pm_lo8(0x0815)
126    ldi r24, pm_lo8(foo)
127    ldi r24, pm_lo8(bar + 5)
128
129; CHECK: ldi  r24, pm_lo8(2069)     ; encoding: [0x8a,0xe0]
130; CHECK: ldi  r24, pm_lo8(foo)      ; encoding: [0x80'A',0xe0]
131; CHECK:                            ; fixup A - offset: 0, value: pm_lo8(foo), kind: fixup_lo8_ldi_pm
132; CHECK: ldi  r24, pm_lo8(bar+5)    ; encoding: [0x80'A',0xe0]
133; CHECK:                            ; fixup A - offset: 0, value: pm_lo8(bar+5), kind: fixup_lo8_ldi_pm
134
135pm_hi8:
136    ldi r24, pm_hi8(0x0815)
137    ldi r24, pm_hi8(foo)
138    ldi r24, pm_hi8(bar + 5)
139
140; CHECK: ldi  r24, pm_hi8(2069)     ; encoding: [0x84,0xe0]
141; CHECK: ldi  r24, pm_hi8(foo)      ; encoding: [0x80'A',0xe0]
142; CHECK:                            ; fixup A - offset: 0, value: pm_hi8(foo), kind: fixup_hi8_ldi_pm
143; CHECK: ldi  r24, pm_hi8(bar+5)    ; encoding: [0x80'A',0xe0]
144; CHECK:                            ; fixup A - offset: 0, value: pm_hi8(bar+5), kind: fixup_hi8_ldi_pm
145
146pm_hh8:
147    ldi r24, pm_hh8(0x0815)
148    ldi r24, pm_hh8(foo)
149    ldi r24, pm_hh8(bar + 5)
150
151; CHECK: ldi  r24, pm_hh8(2069)     ; encoding: [0x80,0xe0]
152; CHECK: ldi  r24, pm_hh8(foo)      ; encoding: [0x80'A',0xe0]
153; CHECK:                            ; fixup A - offset: 0, value: pm_hh8(foo), kind: fixup_hh8_ldi_pm
154; CHECK: ldi  r24, pm_hh8(bar+5)    ; encoding: [0x80'A',0xe0]
155; CHECK:                            ; fixup A - offset: 0, value: pm_hh8(bar+5), kind: fixup_hh8_ldi_pm
156
157pm_lo8_neg:
158    ldi r24, pm_lo8(-(0x0815))
159    ldi r24, pm_lo8(-(foo))
160    ldi r24, pm_lo8(-(bar + 5))
161
162; CHECK: ldi  r24, pm_lo8(-(2069))   ; encoding: [0x85,0xef]
163; CHECK: ldi  r24, pm_lo8(-(foo))    ; encoding: [0x80'A',0xe0]
164; CHECK:                             ; fixup A - offset: 0, value: pm_lo8(-(foo)), kind: fixup_lo8_ldi_pm_neg
165; CHECK: ldi  r24, pm_lo8(-(bar+5))  ; encoding: [0x80'A',0xe0]
166; CHECK:                             ; fixup A - offset: 0, value: pm_lo8(-(bar+5)), kind: fixup_lo8_ldi_pm_neg
167
168pm_hi8_neg:
169    ldi r24, pm_hi8(-(0x0815))
170    ldi r24, pm_hi8(-(foo))
171    ldi r24, pm_hi8(-(bar + 5))
172
173; CHECK: ldi  r24, pm_hi8(-(2069))   ; encoding: [0x8b,0xef]
174; CHECK: ldi  r24, pm_hi8(-(foo))    ; encoding: [0x80'A',0xe0]
175; CHECK:                             ; fixup A - offset: 0, value: pm_hi8(-(foo)), kind: fixup_hi8_ldi_pm_neg
176; CHECK: ldi  r24, pm_hi8(-(bar+5))  ; encoding: [0x80'A',0xe0]
177; CHECK:                             ; fixup A - offset: 0, value: pm_hi8(-(bar+5)), kind: fixup_hi8_ldi_pm_neg
178
179pm_hh8_neg:
180    ldi r24, pm_hh8(-(0x0815))
181    ldi r24, pm_hh8(-(foo))
182    ldi r24, pm_hh8(-(bar + 5))
183
184; CHECK: ldi  r24, pm_hh8(-(2069))   ; encoding: [0x8f,0xef]
185; CHECK: ldi  r24, pm_hh8(-(foo))    ; encoding: [0x80'A',0xe0]
186; CHECK:                             ; fixup A - offset: 0, value: pm_hh8(-(foo)), kind: fixup_hh8_ldi_pm_neg
187; CHECK: ldi  r24, pm_hh8(-(bar+5))  ; encoding: [0x80'A',0xe0]
188; CHECK:                             ; fixup A - offset: 0, value: pm_hh8(-(bar+5)), kind: fixup_hh8_ldi_pm_neg
189