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