1# RUN: llvm-mc %s -triple=mips64el-unknown-linux -mcpu=mips64r2 -mattr=-xgot \
2# RUN:            -show-encoding | FileCheck --check-prefixes=CHECK,GOT %s
3# RUN: llvm-mc %s -triple=mips64el-unknown-linux -mcpu=mips64r2 -mattr=+xgot \
4# RUN:            -show-encoding | FileCheck --check-prefixes=CHECK,XGOT %s
5
6
7#
8# The GNU assembler implements 'dli' and 'dla' variants on 'li' and 'la'
9# supporting double-word lengths.  Test that not only are they present, bu
10# that they also seem to handle 64-bit values.
11#
12# XXXRW: Does using powers of ten make me a bad person?
13#
14# CHECK-DLA: lui	$12, %highest(function)  # encoding: [A,A,0x0c,0x3c]
15# CHECK-DLA:   fixup A - offset: 0, value: function@HIGHEST, kind: fixup_Mips_HIGHEST
16# CHECK-DLA: lui	$1, %hi(function)        # encoding: [A,A,0x01,0x3c]
17# CHECK-DLA:   fixup A - offset: 0, value: function@ABS_HI, kind: fixup_Mips_HI16
18# CHECK-DLA: daddiu	$12, $12, %higher(function) # encoding: [A,A,0x8c,0x65]
19# CHECK-DLA:   fixup A - offset: 0, value: function@HIGHER, kind: fixup_Mips_HIGHER
20# CHECK-DLA: daddiu	$1, $1, %lo(function)    # encoding: [A,A,0x21,0x64]
21# CHECK-DLA:   fixup A - offset: 0, value: function@ABS_LO, kind: fixup_Mips_LO16
22# CHECK-DLA: dsll32	$12, $12, 0             # encoding: [0x3c,0x60,0x0c,0x00]
23# CHECK-DLA: daddu	$12, $12, $1            # encoding: [0x2d,0x60,0x81,0x01]
24# CHECK-DLA: lui	$12, %highest(symbol)   # encoding: [A,A,0x0c,0x3c]
25# CHECK-DLA:  fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST
26# CHECK-DLA: daddiu	$12, $12, %higher(symbol) # encoding: [A,A,0x8c,0x65]
27# CHECK-DLA:  fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER
28# CHECK-DLA: dsll	$12, $12, 16            # encoding: [0x38,0x64,0x0c,0x00]
29# CHECK-DLA: daddiu	$12, $12, %hi(symbol)   # encoding: [A,A,0x8c,0x65]
30# CHECK-DLA:  fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16
31# CHECK-DLA: dsll	$12, $12, 16            # encoding: [0x38,0x64,0x0c,0x00]
32# CHECK-DLA: daddiu	$12, $12, %lo(symbol)   # encoding: [A,A,0x8c,0x65]
33# CHECK-DLA:  fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16
34
35
36
37	dla	$t0, symbol
38.set noat
39	dla	$t0, symbol
40.set at
41
42
43# Test the 'dli' and 'dla' 64-bit variants of 'li' and 'la'.
44
45# Immediate is <= 32 bits.
46  dli $5, 123
47# CHECK:     addiu $5, $zero, 123   # encoding: [0x7b,0x00,0x05,0x24]
48
49  dli $6, -2345
50# CHECK:     addiu $6, $zero, -2345 # encoding: [0xd7,0xf6,0x06,0x24]
51
52  dli $7, 65538
53# CHECK:     lui   $7, 1            # encoding: [0x01,0x00,0x07,0x3c]
54# CHECK:     ori   $7, $7, 2        # encoding: [0x02,0x00,0xe7,0x34]
55
56  dli $8, ~7
57# CHECK:     addiu $8, $zero, -8    # encoding: [0xf8,0xff,0x08,0x24]
58
59  dli $9, 0x10000
60# CHECK:     lui   $9, 1            # encoding: [0x01,0x00,0x09,0x3c]
61# CHECK-NOT: ori   $9, $9, 0        # encoding: [0x00,0x00,0x29,0x35]
62
63
64# Positive immediate which is > 48 bits.
65  dli $8, 0x1000000000000
66# CHECK: ori	$8, $zero, 32768        # encoding: [0x00,0x80,0x08,0x34]
67# CHECK: dsll	$8, $8, 33              # encoding: [0x7c,0x40,0x08,0x00]
68
69# Check that signed negative 32-bit immediates are loaded correctly:
70  li $10, ~(0x101010)
71# CHECK: lui $10, 65519        # encoding: [0xef,0xff,0x0a,0x3c]
72# CHECK: ori $10, $10, 61423   # encoding: [0xef,0xef,0x4a,0x35]
73# CHECK-NOT: dsll
74
75# Test bne with an immediate as the 2nd operand.
76  bne $2, 0x100010001, 1332
77# CHECK: addiu $1, $zero, 1         # encoding: [0x01,0x00,0x01,0x24]
78# CHECK: dsll $1, $1, 16            # encoding: [0x38,0x0c,0x01,0x00]
79# CHECK: ori  $1, $1, 1             # encoding: [0x01,0x00,0x21,0x34]
80# CHECK: dsll $1, $1, 16            # encoding: [0x38,0x0c,0x01,0x00]
81# CHECK: ori  $1, $1, 1             # encoding: [0x01,0x00,0x21,0x34]
82# CHECK: bne  $2, $1, 1332          # encoding: [0x4d,0x01,0x41,0x14]
83# CHECK: nop                        # encoding: [0x00,0x00,0x00,0x00]
84
85  bne $2, 0x1000100010001, 1332
86# CHECK: lui  $1, 1                 # encoding: [0x01,0x00,0x01,0x3c]
87# CHECK: ori  $1, $1, 1             # encoding: [0x01,0x00,0x21,0x34]
88# CHECK: dsll $1, $1, 16            # encoding: [0x38,0x0c,0x01,0x00]
89# CHECK: ori  $1, $1, 1             # encoding: [0x01,0x00,0x21,0x34]
90# CHECK: dsll $1, $1, 16            # encoding: [0x38,0x0c,0x01,0x00]
91# CHECK: ori  $1, $1, 1             # encoding: [0x01,0x00,0x21,0x34]
92# CHECK: bne  $2, $1, 1332          # encoding: [0x4d,0x01,0x41,0x14]
93# CHECK: nop                        # encoding: [0x00,0x00,0x00,0x00]
94
95  bne $2, -0x100010001, 1332
96# CHECK: addiu $1, $zero, -2        # encoding: [0xfe,0xff,0x01,0x24]
97# CHECK: dsll $1, $1, 16            # encoding: [0x38,0x0c,0x01,0x00]
98# CHECK: ori  $1, $1, 65534         # encoding: [0xfe,0xff,0x21,0x34]
99# CHECK: dsll $1, $1, 16            # encoding: [0x38,0x0c,0x01,0x00]
100# CHECK: ori  $1, $1, 65535         # encoding: [0xff,0xff,0x21,0x34]
101# CHECK: bne  $2, $1, 1332          # encoding: [0x4d,0x01,0x41,0x14]
102# CHECK: nop                        # encoding: [0x00,0x00,0x00,0x00]
103
104  bne $2, -0x1000100010001, 1332
105# CHECK: lui  $1, 65534             # encoding: [0xfe,0xff,0x01,0x3c]
106# CHECK: ori  $1, $1, 65534         # encoding: [0xfe,0xff,0x21,0x34]
107# CHECK: dsll $1, $1, 16            # encoding: [0x38,0x0c,0x01,0x00]
108# CHECK: ori  $1, $1, 65534         # encoding: [0xfe,0xff,0x21,0x34]
109# CHECK: dsll $1, $1, 16            # encoding: [0x38,0x0c,0x01,0x00]
110# CHECK: ori  $1, $1, 65535         # encoding: [0xff,0xff,0x21,0x34]
111# CHECK: bne  $2, $1, 1332          # encoding: [0x4d,0x01,0x41,0x14]
112# CHECK: nop                        # encoding: [0x00,0x00,0x00,0x00]
113
114# Test beq with an immediate as the 2nd operand.
115  beq $2, 0x100010001, 1332
116# CHECK: addiu $1, $zero, 1         # encoding: [0x01,0x00,0x01,0x24]
117# CHECK: dsll $1, $1, 16            # encoding: [0x38,0x0c,0x01,0x00]
118# CHECK: ori  $1, $1, 1             # encoding: [0x01,0x00,0x21,0x34]
119# CHECK: dsll $1, $1, 16            # encoding: [0x38,0x0c,0x01,0x00]
120# CHECK: ori  $1, $1, 1             # encoding: [0x01,0x00,0x21,0x34]
121# CHECK: beq  $2, $1, 1332          # encoding: [0x4d,0x01,0x41,0x10]
122# CHECK: nop                        # encoding: [0x00,0x00,0x00,0x00]
123
124  beq $2, 0x1000100010001, 1332
125# CHECK: lui  $1, 1                 # encoding: [0x01,0x00,0x01,0x3c]
126# CHECK: ori  $1, $1, 1             # encoding: [0x01,0x00,0x21,0x34]
127# CHECK: dsll $1, $1, 16            # encoding: [0x38,0x0c,0x01,0x00]
128# CHECK: ori  $1, $1, 1             # encoding: [0x01,0x00,0x21,0x34]
129# CHECK: dsll $1, $1, 16            # encoding: [0x38,0x0c,0x01,0x00]
130# CHECK: ori  $1, $1, 1             # encoding: [0x01,0x00,0x21,0x34]
131# CHECK: beq  $2, $1, 1332          # encoding: [0x4d,0x01,0x41,0x10]
132# CHECK: nop                        # encoding: [0x00,0x00,0x00,0x00]
133
134  beq $2, -0x100010001, 1332
135# CHECK: addiu $1, $zero, -2        # encoding: [0xfe,0xff,0x01,0x24]
136# CHECK: dsll $1, $1, 16            # encoding: [0x38,0x0c,0x01,0x00]
137# CHECK: ori  $1, $1, 65534         # encoding: [0xfe,0xff,0x21,0x34]
138# CHECK: dsll $1, $1, 16            # encoding: [0x38,0x0c,0x01,0x00]
139# CHECK: ori  $1, $1, 65535         # encoding: [0xff,0xff,0x21,0x34]
140# CHECK: beq  $2, $1, 1332          # encoding: [0x4d,0x01,0x41,0x10]
141# CHECK: nop                        # encoding: [0x00,0x00,0x00,0x00]
142
143  beq $2, -0x1000100010001, 1332
144# CHECK: lui  $1, 65534             # encoding: [0xfe,0xff,0x01,0x3c]
145# CHECK: ori  $1, $1, 65534         # encoding: [0xfe,0xff,0x21,0x34]
146# CHECK: dsll $1, $1, 16            # encoding: [0x38,0x0c,0x01,0x00]
147# CHECK: ori  $1, $1, 65534         # encoding: [0xfe,0xff,0x21,0x34]
148# CHECK: dsll $1, $1, 16            # encoding: [0x38,0x0c,0x01,0x00]
149# CHECK: ori  $1, $1, 65535         # encoding: [0xff,0xff,0x21,0x34]
150# CHECK: beq  $2, $1, 1332          # encoding: [0x4d,0x01,0x41,0x10]
151# CHECK: nop                        # encoding: [0x00,0x00,0x00,0x00]
152
153# Test one with a symbol in the third operand.
154sym:
155  bne $2, 0x100010001, sym
156# CHECK: addiu $1, $zero, 1         # encoding: [0x01,0x00,0x01,0x24]
157# CHECK: dsll $1, $1, 16            # encoding: [0x38,0x0c,0x01,0x00]
158# CHECK: ori  $1, $1, 1             # encoding: [0x01,0x00,0x21,0x34]
159# CHECK: dsll $1, $1, 16            # encoding: [0x38,0x0c,0x01,0x00]
160# CHECK: ori  $1, $1, 1             # encoding: [0x01,0x00,0x21,0x34]
161# CHECK: bne  $2, $1, sym           # encoding: [A,A,0x41,0x14]
162# CHECK: nop                        # encoding: [0x00,0x00,0x00,0x00]
163
164# Test ulhu with 64-bit immediate addresses.
165  ulhu $8, 0x100010001
166# CHECK: addiu $1, $zero, 1    # encoding: [0x01,0x00,0x01,0x24]
167# CHECK: ori  $1, $1, 1        # encoding: [0x01,0x00,0x21,0x34]
168# CHECK: dsll $1, $1, 16       # encoding: [0x38,0x0c,0x01,0x00]
169# CHECK: ori  $1, $1, 1        # encoding: [0x01,0x00,0x21,0x34]
170# CHECK: lbu  $8, 1($1)        # encoding: [0x01,0x00,0x28,0x90]
171# CHECK: lbu  $1, 0($1)        # encoding: [0x00,0x00,0x21,0x90]
172# CHECK: sll  $8, $8, 8        # encoding: [0x00,0x42,0x08,0x00]
173# CHECK: or   $8, $8, $1       # encoding: [0x25,0x40,0x01,0x01]
174
175  ulhu $8, 0x1000100010001
176# CHECK: lui  $1, 1            # encoding: [0x01,0x00,0x01,0x3c]
177# CHECK: ori  $1, $1, 1        # encoding: [0x01,0x00,0x21,0x34]
178# CHECK: dsll $1, $1, 16       # encoding: [0x38,0x0c,0x01,0x00]
179# CHECK: ori  $1, $1, 1        # encoding: [0x01,0x00,0x21,0x34]
180# CHECK: dsll $1, $1, 16       # encoding: [0x38,0x0c,0x01,0x00]
181# CHECK: ori  $1, $1, 1        # encoding: [0x01,0x00,0x21,0x34]
182# CHECK: lbu  $8, 1($1)        # encoding: [0x01,0x00,0x28,0x90]
183# CHECK: lbu  $1, 0($1)        # encoding: [0x00,0x00,0x21,0x90]
184# CHECK: sll  $8, $8, 8        # encoding: [0x00,0x42,0x08,0x00]
185# CHECK: or   $8, $8, $1       # encoding: [0x25,0x40,0x01,0x01]
186
187  ulhu $8, -0x100010001
188# CHECK: addiu $1, $zero, -2   # encoding: [0xfe,0xff,0x01,0x24]
189# CHECK: dsll $1, $1, 16       # encoding: [0x38,0x0c,0x01,0x00]
190# CHECK: ori  $1, $1, 65534    # encoding: [0xfe,0xff,0x21,0x34]
191# CHECK: dsll $1, $1, 16       # encoding: [0x38,0x0c,0x01,0x00]
192# CHECK: ori  $1, $1, 65535    # encoding: [0xff,0xff,0x21,0x34]
193# CHECK: lbu  $8, 1($1)        # encoding: [0x01,0x00,0x28,0x90]
194# CHECK: lbu  $1, 0($1)        # encoding: [0x00,0x00,0x21,0x90]
195# CHECK: sll  $8, $8, 8        # encoding: [0x00,0x42,0x08,0x00]
196# CHECK: or   $8, $8, $1       # encoding: [0x25,0x40,0x01,0x01]
197
198  ulhu $8, -0x1000100010001
199# CHECK: lui  $1, 65534        # encoding: [0xfe,0xff,0x01,0x3c]
200# CHECK: ori  $1, $1, 65534    # encoding: [0xfe,0xff,0x21,0x34]
201# CHECK: dsll $1, $1, 16       # encoding: [0x38,0x0c,0x01,0x00]
202# CHECK: ori  $1, $1, 65534    # encoding: [0xfe,0xff,0x21,0x34]
203# CHECK: dsll $1, $1, 16       # encoding: [0x38,0x0c,0x01,0x00]
204# CHECK: ori  $1, $1, 65535    # encoding: [0xff,0xff,0x21,0x34]
205# CHECK: lbu  $8, 1($1)        # encoding: [0x01,0x00,0x28,0x90]
206# CHECK: lbu  $1, 0($1)        # encoding: [0x00,0x00,0x21,0x90]
207# CHECK: sll  $8, $8, 8        # encoding: [0x00,0x42,0x08,0x00]
208# CHECK: or   $8, $8, $1       # encoding: [0x25,0x40,0x01,0x01]
209
210# Test ulhu with source register and 64-bit immediate offset.
211  ulhu $8, 0x100010001($9)
212# CHECK: addiu $1, $zero, 1    # encoding: [0x01,0x00,0x01,0x24]
213# CHECK: ori   $1, $1, 1       # encoding: [0x01,0x00,0x21,0x34]
214# CHECK: dsll  $1, $1, 16      # encoding: [0x38,0x0c,0x01,0x00]
215# CHECK: ori   $1, $1, 1       # encoding: [0x01,0x00,0x21,0x34]
216# CHECK: daddu $1, $1, $9      # encoding: [0x2d,0x08,0x29,0x00]
217# CHECK: lbu   $8, 1($1)       # encoding: [0x01,0x00,0x28,0x90]
218# CHECK: lbu   $1, 0($1)       # encoding: [0x00,0x00,0x21,0x90]
219# CHECK: sll   $8, $8, 8       # encoding: [0x00,0x42,0x08,0x00]
220# CHECK: or    $8, $8, $1      # encoding: [0x25,0x40,0x01,0x01]
221
222  ulhu $8, 0x1000100010001($9)
223# CHECK: lui   $1, 1           # encoding: [0x01,0x00,0x01,0x3c]
224# CHECK: ori   $1, $1, 1       # encoding: [0x01,0x00,0x21,0x34]
225# CHECK: dsll  $1, $1, 16      # encoding: [0x38,0x0c,0x01,0x00]
226# CHECK: ori   $1, $1, 1       # encoding: [0x01,0x00,0x21,0x34]
227# CHECK: dsll  $1, $1, 16      # encoding: [0x38,0x0c,0x01,0x00]
228# CHECK: ori   $1, $1, 1       # encoding: [0x01,0x00,0x21,0x34]
229# CHECK: daddu $1, $1, $9      # encoding: [0x2d,0x08,0x29,0x00]
230# CHECK: lbu   $8, 1($1)       # encoding: [0x01,0x00,0x28,0x90]
231# CHECK: lbu   $1, 0($1)       # encoding: [0x00,0x00,0x21,0x90]
232# CHECK: sll   $8, $8, 8       # encoding: [0x00,0x42,0x08,0x00]
233# CHECK: or    $8, $8, $1      # encoding: [0x25,0x40,0x01,0x01]
234
235  ulhu $8, -0x100010001($9)
236# CHECK: addiu $1, $zero, -2   # encoding: [0xfe,0xff,0x01,0x24]
237# CHECK: dsll  $1, $1, 16      # encoding: [0x38,0x0c,0x01,0x00]
238# CHECK: ori   $1, $1, 65534   # encoding: [0xfe,0xff,0x21,0x34]
239# CHECK: dsll  $1, $1, 16      # encoding: [0x38,0x0c,0x01,0x00]
240# CHECK: daddu $1, $1, $9      # encoding: [0x2d,0x08,0x29,0x00]
241# CHECK: lbu   $8, 1($1)       # encoding: [0x01,0x00,0x28,0x90]
242# CHECK: lbu   $1, 0($1)       # encoding: [0x00,0x00,0x21,0x90]
243# CHECK: sll   $8, $8, 8       # encoding: [0x00,0x42,0x08,0x00]
244# CHECK: or    $8, $8, $1      # encoding: [0x25,0x40,0x01,0x01]
245
246  ulhu $8, -0x1000100010001($9)
247# CHECK: lui   $1, 65534       # encoding: [0xfe,0xff,0x01,0x3c]
248# CHECK: ori   $1, $1, 65534   # encoding: [0xfe,0xff,0x21,0x34]
249# CHECK: dsll  $1, $1, 16      # encoding: [0x38,0x0c,0x01,0x00]
250# CHECK: ori   $1, $1, 65534   # encoding: [0xfe,0xff,0x21,0x34]
251# CHECK: dsll  $1, $1, 16      # encoding: [0x38,0x0c,0x01,0x00]
252# CHECK: ori   $1, $1, 65535   # encoding: [0xff,0xff,0x21,0x34]
253# CHECK: daddu $1, $1, $9      # encoding: [0x2d,0x08,0x29,0x00]
254# CHECK: lbu   $8, 1($1)       # encoding: [0x01,0x00,0x28,0x90]
255# CHECK: lbu   $1, 0($1)       # encoding: [0x00,0x00,0x21,0x90]
256# CHECK: sll   $8, $8, 8       # encoding: [0x00,0x42,0x08,0x00]
257# CHECK: or    $8, $8, $1      # encoding: [0x25,0x40,0x01,0x01]
258
259# Test ulw with 64-bit immediate addresses.
260  ulw $8, 0x100010001
261# CHECK: addiu $1, $zero, 1   # encoding: [0x01,0x00,0x01,0x24]
262# CHECK: ori  $1, $1, 1       # encoding: [0x01,0x00,0x21,0x34]
263# CHECK: dsll $1, $1, 16      # encoding: [0x38,0x0c,0x01,0x00]
264# CHECK: ori  $1, $1, 1       # encoding: [0x01,0x00,0x21,0x34]
265# CHECK: lwl  $8, 3($1)       # encoding: [0x03,0x00,0x28,0x88]
266# CHECK: lwr  $8, 0($1)       # encoding: [0x00,0x00,0x28,0x98]
267
268  ulw $8, 0x1000100010001
269# CHECK: lui  $1, 1           # encoding: [0x01,0x00,0x01,0x3c]
270# CHECK: ori  $1, $1, 1       # encoding: [0x01,0x00,0x21,0x34]
271# CHECK: dsll $1, $1, 16      # encoding: [0x38,0x0c,0x01,0x00]
272# CHECK: ori  $1, $1, 1       # encoding: [0x01,0x00,0x21,0x34]
273# CHECK: dsll $1, $1, 16      # encoding: [0x38,0x0c,0x01,0x00]
274# CHECK: ori  $1, $1, 1       # encoding: [0x01,0x00,0x21,0x34]
275# CHECK: lwl  $8, 3($1)       # encoding: [0x03,0x00,0x28,0x88]
276# CHECK: lwr  $8, 0($1)       # encoding: [0x00,0x00,0x28,0x98]
277
278  ulw $8, -0x100010001
279# CHECK: addiu $1, $zero, -2  # encoding: [0xfe,0xff,0x01,0x24]
280# CHECK: dsll $1, $1, 16      # encoding: [0x38,0x0c,0x01,0x00]
281# CHECK: ori  $1, $1, 65534   # encoding: [0xfe,0xff,0x21,0x34]
282# CHECK: dsll $1, $1, 16      # encoding: [0x38,0x0c,0x01,0x00]
283# CHECK: ori  $1, $1, 65535   # encoding: [0xff,0xff,0x21,0x34]
284# CHECK: lwl  $8, 3($1)       # encoding: [0x03,0x00,0x28,0x88]
285# CHECK: lwr  $8, 0($1)       # encoding: [0x00,0x00,0x28,0x98]
286
287  ulw $8, -0x1000100010001
288# CHECK: lui  $1, 65534       # encoding: [0xfe,0xff,0x01,0x3c]
289# CHECK: ori  $1, $1, 65534   # encoding: [0xfe,0xff,0x21,0x34]
290# CHECK: dsll $1, $1, 16      # encoding: [0x38,0x0c,0x01,0x00]
291# CHECK: ori  $1, $1, 65534   # encoding: [0xfe,0xff,0x21,0x34]
292# CHECK: dsll $1, $1, 16      # encoding: [0x38,0x0c,0x01,0x00]
293# CHECK: ori  $1, $1, 65535   # encoding: [0xff,0xff,0x21,0x34]
294# CHECK: lwl  $8, 3($1)       # encoding: [0x03,0x00,0x28,0x88]
295# CHECK: lwr  $8, 0($1)       # encoding: [0x00,0x00,0x28,0x98]
296
297# Test ulw with source register and 64-bit immediate offset.
298  ulw $8, 0x100010001($9)
299# CHECK: addiu $1, $zero, 1   # encoding: [0x01,0x00,0x01,0x24]
300# CHECK: ori   $1, $1, 1      # encoding: [0x01,0x00,0x21,0x34]
301# CHECK: dsll  $1, $1, 16     # encoding: [0x38,0x0c,0x01,0x00]
302# CHECK: ori   $1, $1, 1      # encoding: [0x01,0x00,0x21,0x34]
303# CHECK: daddu $1, $1, $9     # encoding: [0x2d,0x08,0x29,0x00]
304# CHECK: lwl   $8, 3($1)      # encoding: [0x03,0x00,0x28,0x88]
305# CHECK: lwr   $8, 0($1)      # encoding: [0x00,0x00,0x28,0x98]
306
307  ulw $8, 0x1000100010001($9)
308# CHECK: lui   $1, 1          # encoding: [0x01,0x00,0x01,0x3c]
309# CHECK: ori   $1, $1, 1      # encoding: [0x01,0x00,0x21,0x34]
310# CHECK: dsll  $1, $1, 16     # encoding: [0x38,0x0c,0x01,0x00]
311# CHECK: ori   $1, $1, 1      # encoding: [0x01,0x00,0x21,0x34]
312# CHECK: dsll  $1, $1, 16     # encoding: [0x38,0x0c,0x01,0x00]
313# CHECK: ori   $1, $1, 1      # encoding: [0x01,0x00,0x21,0x34]
314# CHECK: daddu $1, $1, $9     # encoding: [0x2d,0x08,0x29,0x00]
315# CHECK: lwl   $8, 3($1)      # encoding: [0x03,0x00,0x28,0x88]
316# CHECK: lwr   $8, 0($1)      # encoding: [0x00,0x00,0x28,0x98]
317
318  ulw $8, -0x100010001($9)
319# CHECK: addiu $1, $zero, -2  # encoding: [0xfe,0xff,0x01,0x24]
320# CHECK: dsll  $1, $1, 16     # encoding: [0x38,0x0c,0x01,0x00]
321# CHECK: ori   $1, $1, 65534  # encoding: [0xfe,0xff,0x21,0x34]
322# CHECK: dsll  $1, $1, 16     # encoding: [0x38,0x0c,0x01,0x00]
323# CHECK: ori   $1, $1, 65535  # encoding: [0xff,0xff,0x21,0x34]
324# CHECK: daddu $1, $1, $9     # encoding: [0x2d,0x08,0x29,0x00]
325# CHECK: lwl   $8, 3($1)      # encoding: [0x03,0x00,0x28,0x88]
326# CHECK: lwr   $8, 0($1)      # encoding: [0x00,0x00,0x28,0x98]
327
328  ulw $8, -0x1000100010001($9)
329# CHECK: lui   $1, 65534      # encoding: [0xfe,0xff,0x01,0x3c]
330# CHECK: ori   $1, $1, 65534  # encoding: [0xfe,0xff,0x21,0x34]
331# CHECK: dsll  $1, $1, 16     # encoding: [0x38,0x0c,0x01,0x00]
332# CHECK: ori   $1, $1, 65534  # encoding: [0xfe,0xff,0x21,0x34]
333# CHECK: dsll  $1, $1, 16     # encoding: [0x38,0x0c,0x01,0x00]
334# CHECK: ori   $1, $1, 65535  # encoding: [0xff,0xff,0x21,0x34]
335# CHECK: daddu $1, $1, $9     # encoding: [0x2d,0x08,0x29,0x00]
336# CHECK: lwl   $8, 3($1)      # encoding: [0x03,0x00,0x28,0x88]
337# CHECK: lwr   $8, 0($1)      # encoding: [0x00,0x00,0x28,0x98]
338
339# Test lb/sb/ld/sd/lld with offsets exceeding 16-bits in size.
340
341    ld  $4, 0x8000
342# CHECK:      lui     $4, 1
343# CHECK-NEXT: ld      $4, -32768($4)
344
345    ld  $4, 0x20008($3)
346# CHECK:      lui     $4, 2
347# CHECK-NEXT: addu    $4, $4, $3
348# CHECK-NEXT: ld      $4, 8($4)
349
350    ld  $4,0x100010004
351# CHECK:      addiu   $4, $zero, 1
352# CHECK-NEXT: dsll    $4, $4, 16
353# CHECK-NEXT: ori     $4, $4, 1
354# CHECK-NEXT: dsll    $4, $4, 16
355# CHECK-NEXT: ld      $4, 4($4)
356
357    ld  $4,0x1800180018004
358# CHECK:      lui     $4, 1
359# CHECK-NEXT: ori     $4, $4, 32769
360# CHECK-NEXT: dsll    $4, $4, 16
361# CHECK-NEXT: ori     $4, $4, 32770
362# CHECK-NEXT: dsll    $4, $4, 16
363# CHECK-NEXT: ld      $4, -32764($4)
364
365    ld  $4,0x1800180018004($3)
366# CHECK:      lui     $4, 1
367# CHECK-NEXT: ori     $4, $4, 32769
368# CHECK-NEXT: dsll    $4, $4, 16
369# CHECK-NEXT: ori     $4, $4, 32770
370# CHECK-NEXT: dsll    $4, $4, 16
371# CHECK-NEXT: daddu   $4, $4, $3
372# CHECK-NEXT: ld      $4, -32764($4)
373
374    sd  $4, 0x8000
375# CHECK:      lui     $1, 1
376# CHECK-NEXT: sd      $4, -32768($1)
377
378    sd  $4, 0x20008($3)
379# CHECK:      lui     $1, 2
380# CHECK-NEXT: addu    $1, $1, $3
381# CHECK-NEXT: sd      $4, 8($1)
382
383    sd  $4,0x100010004
384# CHECK:      addiu   $1, $zero, 1
385# CHECK-NEXT: dsll    $1, $1, 16
386# CHECK-NEXT: ori     $1, $1, 1
387# CHECK-NEXT: dsll    $1, $1, 16
388# CHECK-NEXT: sd      $4, 4($1)
389
390    sd  $4,0x1800180018004
391# CHECK:      lui     $1, 1
392# CHECK-NEXT: ori     $1, $1, 32769
393# CHECK-NEXT: dsll    $1, $1, 16
394# CHECK-NEXT: ori     $1, $1, 32770
395# CHECK-NEXT: dsll    $1, $1, 16
396# CHECK-NEXT: sd      $4, -32764($1)
397
398    sd  $4,0x1800180018004($3)
399# CHECK:      lui     $1, 1
400# CHECK-NEXT: ori     $1, $1, 32769
401# CHECK-NEXT: dsll    $1, $1, 16
402# CHECK-NEXT: ori     $1, $1, 32770
403# CHECK-NEXT: dsll    $1, $1, 16
404# CHECK-NEXT: daddu   $1, $1, $3
405# CHECK-NEXT: sd      $4, -32764($1)
406
407    lld $4, 0x8000
408# CHECK:      lui     $4, 1
409# CHECK-NEXT: lld     $4, -32768($4)
410
411    lld $4, 0x20008($3)
412# CHECK:      lui     $4, 2
413# CHECK-NEXT: addu    $4, $4, $3
414# CHECK-NEXT: lld     $4, 8($4)
415
416    lld $4,0x100010004
417# CHECK:      addiu   $4, $zero, 1
418# CHECK-NEXT: dsll    $4, $4, 16
419# CHECK-NEXT: ori     $4, $4, 1
420# CHECK-NEXT: dsll    $4, $4, 16
421# CHECK-NEXT: lld     $4, 4($4)
422
423    lld $4,0x1800180018004
424# CHECK:      lui     $4, 1
425# CHECK-NEXT: ori     $4, $4, 32769
426# CHECK-NEXT: dsll    $4, $4, 16
427# CHECK-NEXT: ori     $4, $4, 32770
428# CHECK-NEXT: dsll    $4, $4, 16
429# CHECK-NEXT: lld     $4, -32764($4)
430
431    lld $4,0x1800180018004($3)
432# CHECK:      lui     $4, 1
433# CHECK-NEXT: ori     $4, $4, 32769
434# CHECK-NEXT: dsll    $4, $4, 16
435# CHECK-NEXT: ori     $4, $4, 32770
436# CHECK-NEXT: dsll    $4, $4, 16
437# CHECK-NEXT: daddu   $4, $4, $3
438# CHECK-NEXT: lld     $4, -32764($4)
439
440    lb  $4,0x100010004
441# CHECK:      addiu   $4, $zero, 1
442# CHECK-NEXT: dsll    $4, $4, 16
443# CHECK-NEXT: ori     $4, $4, 1
444# CHECK-NEXT: dsll    $4, $4, 16
445# CHECK-NEXT: lb      $4, 4($4)
446
447    lb  $4,0x1800180018004
448# CHECK:      lui     $4, 1
449# CHECK-NEXT: ori     $4, $4, 32769
450# CHECK-NEXT: dsll    $4, $4, 16
451# CHECK-NEXT: ori     $4, $4, 32770
452# CHECK-NEXT: dsll    $4, $4, 16
453# CHECK-NEXT: lb      $4, -32764($4)
454
455    lb  $4,0x1800180018004($3)
456# CHECK:      lui     $4, 1
457# CHECK-NEXT: ori     $4, $4, 32769
458# CHECK-NEXT: dsll    $4, $4, 16
459# CHECK-NEXT: ori     $4, $4, 32770
460# CHECK-NEXT: dsll    $4, $4, 16
461# CHECK-NEXT: daddu   $4, $4, $3
462# CHECK-NEXT: lb      $4, -32764($4)
463
464    sb  $4,0x100010004
465# CHECK:      addiu   $1, $zero, 1
466# CHECK-NEXT: dsll    $1, $1, 16
467# CHECK-NEXT: ori     $1, $1, 1
468# CHECK-NEXT: dsll    $1, $1, 16
469# CHECK-NEXT: sb      $4, 4($1)
470
471    sb  $4,0x1800180018004
472# CHECK:      lui     $1, 1
473# CHECK-NEXT: ori     $1, $1, 32769
474# CHECK-NEXT: dsll    $1, $1, 16
475# CHECK-NEXT: ori     $1, $1, 32770
476# CHECK-NEXT: dsll    $1, $1, 16
477# CHECK-NEXT: sb      $4, -32764($1)
478
479    sb  $4,0x1800180018004($3)
480# CHECK:      lui     $1, 1
481# CHECK-NEXT: ori     $1, $1, 32769
482# CHECK-NEXT: dsll    $1, $1, 16
483# CHECK-NEXT: ori     $1, $1, 32770
484# CHECK-NEXT: dsll    $1, $1, 16
485# CHECK-NEXT: daddu   $1, $1, $3
486# CHECK-NEXT: sb      $4, -32764($1)
487
488    lh  $4,0x100010004
489# CHECK:      addiu   $4, $zero, 1
490# CHECK-NEXT: dsll    $4, $4, 16
491# CHECK-NEXT: ori     $4, $4, 1
492# CHECK-NEXT: dsll    $4, $4, 16
493# CHECK-NEXT: lh      $4, 4($4)
494
495    lh  $4,0x1800180018004
496# CHECK:      lui     $4, 1
497# CHECK-NEXT: ori     $4, $4, 32769
498# CHECK-NEXT: dsll    $4, $4, 16
499# CHECK-NEXT: ori     $4, $4, 32770
500# CHECK-NEXT: dsll    $4, $4, 16
501# CHECK-NEXT: lh      $4, -32764($4)
502
503    lh  $4,0x1800180018004($3)
504# CHECK:      lui     $4, 1
505# CHECK-NEXT: ori     $4, $4, 32769
506# CHECK-NEXT: dsll    $4, $4, 16
507# CHECK-NEXT: ori     $4, $4, 32770
508# CHECK-NEXT: dsll    $4, $4, 16
509# CHECK-NEXT: daddu   $4, $4, $3
510# CHECK-NEXT: lh      $4, -32764($4)
511
512    lhu $4,0x100010004
513# CHECK:      addiu   $4, $zero, 1
514# CHECK-NEXT: dsll    $4, $4, 16
515# CHECK-NEXT: ori     $4, $4, 1
516# CHECK-NEXT: dsll    $4, $4, 16
517# CHECK-NEXT: lhu     $4, 4($4)
518
519    lhu $4,0x1800180018004
520# CHECK:      lui     $4, 1
521# CHECK-NEXT: ori     $4, $4, 32769
522# CHECK-NEXT: dsll    $4, $4, 16
523# CHECK-NEXT: ori     $4, $4, 32770
524# CHECK-NEXT: dsll    $4, $4, 16
525# CHECK-NEXT: lhu     $4, -32764($4)
526
527    lhu $4,0x1800180018004($3)
528# CHECK:      lui     $4, 1
529# CHECK-NEXT: ori     $4, $4, 32769
530# CHECK-NEXT: dsll    $4, $4, 16
531# CHECK-NEXT: ori     $4, $4, 32770
532# CHECK-NEXT: dsll    $4, $4, 16
533# CHECK-NEXT: daddu   $4, $4, $3
534# CHECK-NEXT: lhu     $4, -32764($4)
535
536# LW/SW and LDC1/SDC1 of symbol address, done by MipsAsmParser::expandMemInst():
537  .option pic2
538  lw $10, symbol($4)
539# GOT:      ld      $10, %got_disp(symbol)($gp) # encoding: [A,A,0x8a,0xdf]
540# GOT-NEXT:                                     #   fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
541# GOT-NEXT: daddu   $10, $10, $4                # encoding: [0x2d,0x50,0x44,0x01]
542# GOT-NEXT: lw      $10, 0($10)                 # encoding: [0x00,0x00,0x4a,0x8d]
543
544# XGOT:      lui    $10, %got_hi(symbol)        # encoding: [A,A,0x0a,0x3c]
545# XGOT-NEXT:                                    #   fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16
546# XGOT-NEXT: daddu  $10, $10, $gp               # encoding: [0x2d,0x50,0x5c,0x01]
547# XGOT-NEXT: ld     $10, %got_lo(symbol)($10)   # encoding: [A,A,0x4a,0xdd]
548# XGOT-NEXT:                                    #   fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16
549# XGOT-NEXT: daddu  $10, $10, $4                # encoding: [0x2d,0x50,0x44,0x01]
550# XGOT-NEXT: lw     $10, 0($10)                 # encoding: [0x00,0x00,0x4a,0x8d]
551
552  sw $10, symbol($9)
553# GOT:      ld      $1, %got_disp(symbol)($gp)  # encoding: [A,A,0x81,0xdf]
554# GOT-NEXT:                                     #   fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
555# GOT-NEXT: daddu   $1, $1, $9                  # encoding: [0x2d,0x08,0x29,0x00]
556# GOT-NEXT: sw      $10, 0($1)                  # encoding: [0x00,0x00,0x2a,0xac]
557
558# XGOT:      lui    $1, %got_hi(symbol)         # encoding: [A,A,0x01,0x3c]
559# XGOT-NEXT:                                    #   fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16
560# XGOT-NEXT: daddu  $1, $1, $gp                 # encoding: [0x2d,0x08,0x3c,0x00]
561# XGOT-NEXT: ld     $1, %got_lo(symbol)($1)     # encoding: [A,A,0x21,0xdc]
562# XGOT-NEXT:                                    #   fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16
563# XGOT-NEXT: daddu  $1, $1, $9                  # encoding: [0x2d,0x08,0x29,0x00]
564# XGOT-NEXT: sw     $10, 0($1)                  # encoding: [0x00,0x00,0x2a,0xac]
565
566  lw $8, sym+8
567# GOT:      ld      $8, %got_disp(sym)($gp)     # encoding: [A,A,0x88,0xdf]
568# GOT-NEXT:                                     #   fixup A - offset: 0, value: %got_disp(sym), kind: fixup_Mips_GOT_DISP
569# GOT-NEXT: lw      $8, 8($8)                   # encoding: [0x08,0x00,0x08,0x8d]
570
571# XGOT:      ld     $8, %got_disp(sym)($gp)     # encoding: [A,A,0x88,0xdf]
572# XGOT-NEXT:                                    #   fixup A - offset: 0, value: %got_disp(sym), kind: fixup_Mips_GOT_DISP
573# XGOT-NEXT: lw     $8, 8($8)                   # encoding: [0x08,0x00,0x08,0x8d]
574
575  sw $8, sym+8
576# GOT:      ld      $1, %got_disp(sym)($gp)     # encoding: [A,A,0x81,0xdf]
577# GOT-NEXT:                                     #   fixup A - offset: 0, value: %got_disp(sym), kind: fixup_Mips_GOT_DISP
578# GOT-NEXT: sw      $8, 8($1)                   # encoding: [0x08,0x00,0x28,0xac]
579
580# XGOT:      ld     $1, %got_disp(sym)($gp)     # encoding: [A,A,0x81,0xdf]
581# XGOT-NEXT:                                    #   fixup A - offset: 0, value: %got_disp(sym), kind: fixup_Mips_GOT_DISP
582# XGOT-NEXT: sw     $8, 8($1)                   # encoding: [0x08,0x00,0x28,0xac]
583
584  lw $10, 655483($4)
585# GOT:      lui     $10, 10                     # encoding: [0x0a,0x00,0x0a,0x3c]
586# GOT-NEXT: daddu   $10, $10, $4                # encoding: [0x2d,0x50,0x44,0x01]
587# GOT-NEXT: lw      $10, 123($10)               # encoding: [0x7b,0x00,0x4a,0x8d]
588
589# XGOT:      lui    $10, 10                     # encoding: [0x0a,0x00,0x0a,0x3c]
590# XGOT-NEXT: daddu  $10, $10, $4                # encoding: [0x2d,0x50,0x44,0x01]
591# XGOT-NEXT: lw     $10, 123($10)               # encoding: [0x7b,0x00,0x4a,0x8d]
592  sw $10, 123456($9)
593# GOT:      lui     $1, 2                       # encoding: [0x02,0x00,0x01,0x3c]
594# GOT-NEXT: daddu   $1, $1, $9                  # encoding: [0x2d,0x08,0x29,0x00]
595# GOT-NEXT: sw      $10, -7616($1)              # encoding: [0x40,0xe2,0x2a,0xac]
596
597# XGOT:      lui    $1, 2                       # encoding: [0x02,0x00,0x01,0x3c]
598# XGOT-NEXT: daddu  $1, $1, $9                  # encoding: [0x2d,0x08,0x29,0x00]
599# XGOT-NEXT: sw     $10, -7616($1)              # encoding: [0x40,0xe2,0x2a,0xac]
600
601  lw $8, symbol+8
602# GOT:      ld      $8, %got_disp(symbol)($gp)  # encoding: [A,A,0x88,0xdf]
603# GOT-NEXT:                                     #   fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
604# GOT-NEXT: lw      $8, 8($8)                   # encoding: [0x08,0x00,0x08,0x8d]
605
606# XGOT:      lui    $8, %got_hi(symbol)         # encoding: [A,A,0x08,0x3c]
607# XGOT-NEXT:                                    #   fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16
608# XGOT-NEXT: daddu  $8, $8, $gp                 # encoding: [0x2d,0x40,0x1c,0x01]
609# XGOT-NEXT: ld     $8, %got_lo(symbol)($8)     # encoding: [A,A,0x08,0xdd]
610# XGOT-NEXT:                                    #   fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16
611# XGOT-NEXT: lw     $8, 8($8)                   # encoding: [0x08,0x00,0x08,0x8d]
612
613  sw $8, symbol+8
614# GOT:      ld      $1, %got_disp(symbol)($gp)  # encoding: [A,A,0x81,0xdf]
615# GOT-NEXT:                                     #   fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
616# GOT-NEXT: sw $8, 8($1)                        # encoding: [0x08,0x00,0x28,0xac]
617
618# XGOT:      lui    $1, %got_hi(symbol)         # encoding: [A,A,0x01,0x3c]
619# XGOT-NEXT:                                    #   fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16
620# XGOT-NEXT: daddu  $1, $1, $gp                 # encoding: [0x2d,0x08,0x3c,0x00]
621# XGOT-NEXT: ld     $1, %got_lo(symbol)($1)     # encoding: [A,A,0x21,0xdc]
622# XGOT-NEXT:                                    #   fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16
623# XGOT-NEXT: sw     $8, 8($1)                   # encoding: [0x08,0x00,0x28,0xac]
624
625  ldc1 $f0, symbol
626# GOT:      ld      $1, %got_disp(symbol)($gp) # encoding: [A,A,0x81,0xdf]
627# GOT-NEXT:                                    #   fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
628# GOT-NEXT: ldc1    $f0, 0($1)                 # encoding: [0x00,0x00,0x20,0xd4]
629
630# XGOT:      lui    $1, %got_hi(symbol)         # encoding: [A,A,0x01,0x3c]
631# XGOT-NEXT:                                    #   fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16
632# XGOT-NEXT: daddu  $1, $1, $gp                 # encoding: [0x2d,0x08,0x3c,0x00]
633# XGOT-NEXT: ld     $1, %got_lo(symbol)($1)     # encoding: [A,A,0x21,0xdc]
634# XGOT-NEXT:                                    #   fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16
635# XGOT-NEXT: ldc1   $f0, 0($1)                  # encoding: [0x00,0x00,0x20,0xd4]
636
637  sdc1 $f0, symbol
638# GOT:      ld      $1, %got_disp(symbol)($gp) # encoding: [A,A,0x81,0xdf]
639# GOT-NEXT:                                    #   fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
640# GOT-NEXT: sdc1    $f0, 0($1)                 # encoding: [0x00,0x00,0x20,0xf4]
641
642# XGOT:      lui    $1, %got_hi(symbol)         # encoding: [A,A,0x01,0x3c]
643# XGOT-NEXT:                                    #   fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16
644# XGOT-NEXT: daddu  $1, $1, $gp                 # encoding: [0x2d,0x08,0x3c,0x00]
645# XGOT-NEXT: ld     $1, %got_lo(symbol)($1)     # encoding: [A,A,0x21,0xdc]
646# XGOT-NEXT:                                    #   fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16
647# XGOT-NEXT: sdc1   $f0, 0($1)                  # encoding: [0x00,0x00,0x20,0xf4]
648