1# RUN: llvm-mc %s -triple=mipsel-unknown-linux -show-encoding -mcpu=mips32r2 | \
2# RUN:   FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-LE
3# RUN: llvm-mc %s -triple=mips-unknown-linux -show-encoding -mcpu=mips32r2 | \
4# RUN:   FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-BE
5
6# Check that the IAS expands macro instructions in the same way as GAS.
7
8# Load address, done by MipsAsmParser::expandLoadAddressReg()
9# and MipsAsmParser::expandLoadAddressImm():
10  la $8, 1f
11# CHECK-LE: lui     $8, %hi(($tmp0))      # encoding: [A,A,0x08,0x3c]
12# CHECK-LE:                             #   fixup A - offset: 0, value: %hi(($tmp0)), kind: fixup_Mips_HI16
13# CHECK-LE: addiu   $8, $8, %lo(($tmp0))  # encoding: [A,A,0x08,0x25]
14# CHECK-LE:                             #   fixup A - offset: 0, value: %lo(($tmp0)), kind: fixup_Mips_LO16
15
16# LW/SW and LDC1/SDC1 of symbol address, done by MipsAsmParser::expandMemInst():
17  .set noat
18  lw $10, symbol($4)
19# CHECK-LE: lui     $10, %hi(symbol)        # encoding: [A,A,0x0a,0x3c]
20# CHECK-LE:                                 #   fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16
21# CHECK-LE: addu    $10, $10, $4            # encoding: [0x21,0x50,0x44,0x01]
22# CHECK-LE: lw      $10, %lo(symbol)($10)   # encoding: [A,A,0x4a,0x8d]
23# CHECK-LE:                                 #   fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16
24  .set at
25  sw $10, symbol($9)
26# CHECK-LE: lui     $1, %hi(symbol)         # encoding: [A,A,0x01,0x3c]
27# CHECK-LE:                                 #   fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16
28# CHECK-LE: addu    $1, $1, $9              # encoding: [0x21,0x08,0x29,0x00]
29# CHECK-LE: sw      $10, %lo(symbol)($1)    # encoding: [A,A,0x2a,0xac]
30# CHECK-LE:                                 #   fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16
31
32  lw $8, 1f
33# CHECK-LE: lui $8, %hi($tmp0)              # encoding: [A,A,0x08,0x3c]
34# CHECK-LE:                                 #   fixup A - offset: 0, value: ($tmp0)@ABS_HI, kind: fixup_Mips_HI16
35# CHECK-LE: lw  $8, %lo($tmp0)($8)          # encoding: [A,A,0x08,0x8d]
36# CHECK-LE:                                 #   fixup A - offset: 0, value: ($tmp0)@ABS_LO, kind: fixup_Mips_LO16
37  sw $8, 1f
38# CHECK-LE: lui $1, %hi($tmp0)              # encoding: [A,A,0x01,0x3c]
39# CHECK-LE:                                 #   fixup A - offset: 0, value: ($tmp0)@ABS_HI, kind: fixup_Mips_HI16
40# CHECK-LE: sw  $8, %lo($tmp0)($1)          # encoding: [A,A,0x28,0xac]
41# CHECK-LE:                                 #   fixup A - offset: 0, value: ($tmp0)@ABS_LO, kind: fixup_Mips_LO16
42
43  lw $10, 655483($4)
44# CHECK-LE: lui     $10, 10                 # encoding: [0x0a,0x00,0x0a,0x3c]
45# CHECK-LE: addu    $10, $10, $4            # encoding: [0x21,0x50,0x44,0x01]
46# CHECK-LE: lw      $10, 123($10)           # encoding: [0x7b,0x00,0x4a,0x8d]
47  sw $10, 123456($9)
48# CHECK-LE: lui     $1, 2                   # encoding: [0x02,0x00,0x01,0x3c]
49# CHECK-LE: addu    $1, $1, $9              # encoding: [0x21,0x08,0x29,0x00]
50# CHECK-LE: sw      $10, 57920($1)          # encoding: [0x40,0xe2,0x2a,0xac]
51
52  lw $8, symbol
53# CHECK-LE:     lui     $8, %hi(symbol)     # encoding: [A,A,0x08,0x3c]
54# CHECK-LE:                                 #   fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16
55# CHECK-LE-NOT: move    $8, $8              # encoding: [0x21,0x40,0x00,0x01]
56# CHECK-LE:     lw      $8, %lo(symbol)($8) # encoding: [A,A,0x08,0x8d]
57# CHECK-LE:                                 #   fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16
58  sw $8, symbol
59# CHECK-LE:     lui     $1, %hi(symbol)     # encoding: [A,A,0x01,0x3c]
60# CHECK-LE:                                 #   fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16
61# CHECK-LE-NOT: move    $1, $1              # encoding: [0x21,0x08,0x20,0x00]
62# CHECK-LE:     sw      $8, %lo(symbol)($1) # encoding: [A,A,0x28,0xac]
63# CHECK-LE:                                 #   fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16
64
65  ldc1 $f0, symbol
66# CHECK-LE: lui     $1, %hi(symbol)
67# CHECK-LE: ldc1    $f0, %lo(symbol)($1)
68  sdc1 $f0, symbol
69# CHECK-LE: lui     $1, %hi(symbol)
70# CHECK-LE: sdc1    $f0, %lo(symbol)($1)
71
72# Test BNE with an immediate as the 2nd operand.
73  bne $2, 0, 1332
74# CHECK-LE: bnez  $2, 1332          # encoding: [0x4d,0x01,0x40,0x14]
75# CHECK-LE: nop                     # encoding: [0x00,0x00,0x00,0x00]
76
77  bne $2, 123, 1332
78# CHECK-LE: addiu $1, $zero, 123    # encoding: [0x7b,0x00,0x01,0x24]
79# CHECK-LE: bne   $2, $1, 1332      # encoding: [0x4d,0x01,0x41,0x14]
80# CHECK-LE: nop                     # encoding: [0x00,0x00,0x00,0x00]
81
82  bne $2, -2345, 1332
83# CHECK-LE: addiu $1, $zero, -2345  # encoding: [0xd7,0xf6,0x01,0x24]
84# CHECK-LE: bne   $2, $1, 1332      # encoding: [0x4d,0x01,0x41,0x14]
85# CHECK-LE: nop                     # encoding: [0x00,0x00,0x00,0x00]
86
87  bne $2, 65538, 1332
88# CHECK-LE: lui   $1, 1             # encoding: [0x01,0x00,0x01,0x3c]
89# CHECK-LE: ori   $1, $1, 2         # encoding: [0x02,0x00,0x21,0x34]
90# CHECK-LE: bne   $2, $1, 1332      # encoding: [0x4d,0x01,0x41,0x14]
91# CHECK-LE: nop                     # encoding: [0x00,0x00,0x00,0x00]
92
93  bne $2, ~7, 1332
94# CHECK-LE: addiu $1, $zero, -8     # encoding: [0xf8,0xff,0x01,0x24]
95# CHECK-LE: bne   $2, $1, 1332      # encoding: [0x4d,0x01,0x41,0x14]
96# CHECK-LE: nop                     # encoding: [0x00,0x00,0x00,0x00]
97
98  bne $2, 0x10000, 1332
99# CHECK-LE: lui   $1, 1             # encoding: [0x01,0x00,0x01,0x3c]
100# CHECK-LE: bne   $2, $1, 1332      # encoding: [0x4d,0x01,0x41,0x14]
101# CHECK-LE: nop                     # encoding: [0x00,0x00,0x00,0x00]
102
103# Test BEQ with an immediate as the 2nd operand.
104  beq $2, 0, 1332
105# CHECK-LE: beqz  $2, 1332          # encoding: [0x4d,0x01,0x40,0x10]
106# CHECK-LE: nop                     # encoding: [0x00,0x00,0x00,0x00]
107
108  beq $2, 123, 1332
109# CHECK-LE: addiu $1, $zero, 123    # encoding: [0x7b,0x00,0x01,0x24]
110# CHECK-LE: beq   $2, $1, 1332      # encoding: [0x4d,0x01,0x41,0x10]
111# CHECK-LE: nop                     # encoding: [0x00,0x00,0x00,0x00]
112
113  beq $2, -2345, 1332
114# CHECK-LE: addiu $1, $zero, -2345  # encoding: [0xd7,0xf6,0x01,0x24]
115# CHECK-LE: beq   $2, $1, 1332      # encoding: [0x4d,0x01,0x41,0x10]
116# CHECK-LE: nop                     # encoding: [0x00,0x00,0x00,0x00]
117
118  beq $2, 65538, 1332
119# CHECK-LE: lui   $1, 1             # encoding: [0x01,0x00,0x01,0x3c]
120# CHECK-LE: ori   $1, $1, 2         # encoding: [0x02,0x00,0x21,0x34]
121# CHECK-LE: beq   $2, $1, 1332      # encoding: [0x4d,0x01,0x41,0x10]
122# CHECK-LE: nop                     # encoding: [0x00,0x00,0x00,0x00]
123
124  beq $2, ~7, 1332
125# CHECK-LE: addiu $1, $zero, -8     # encoding: [0xf8,0xff,0x01,0x24]
126# CHECK-LE: beq   $2, $1, 1332      # encoding: [0x4d,0x01,0x41,0x10]
127# CHECK-LE: nop                     # encoding: [0x00,0x00,0x00,0x00]
128
129  beq $2, 0x10000, 1332
130# CHECK-LE: lui   $1, 1             # encoding: [0x01,0x00,0x01,0x3c]
131# CHECK-LE: beq   $2, $1, 1332      # encoding: [0x4d,0x01,0x41,0x10]
132# CHECK-LE: nop                     # encoding: [0x00,0x00,0x00,0x00]
133
134# Test ULH with immediate operand.
135ulh_imm: # CHECK-LABEL: ulh_imm:
136  ulh $8, 0
137# CHECK-BE: lb   $1, 0($zero)      # encoding: [0x80,0x01,0x00,0x00]
138# CHECK-BE: lbu  $8, 1($zero)      # encoding: [0x90,0x08,0x00,0x01]
139# CHECK-BE: sll  $1, $1, 8         # encoding: [0x00,0x01,0x0a,0x00]
140# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
141# CHECK-LE: lb   $1, 1($zero)      # encoding: [0x01,0x00,0x01,0x80]
142# CHECK-LE: lbu  $8, 0($zero)      # encoding: [0x00,0x00,0x08,0x90]
143# CHECK-LE: sll  $1, $1, 8         # encoding: [0x00,0x0a,0x01,0x00]
144# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
145
146  ulh $8, 2
147# CHECK-BE: lb   $1, 2($zero)      # encoding: [0x80,0x01,0x00,0x02]
148# CHECK-BE: lbu  $8, 3($zero)      # encoding: [0x90,0x08,0x00,0x03]
149# CHECK-BE: sll  $1, $1, 8         # encoding: [0x00,0x01,0x0a,0x00]
150# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
151# CHECK-LE: lb   $1, 3($zero)      # encoding: [0x03,0x00,0x01,0x80]
152# CHECK-LE: lbu  $8, 2($zero)      # encoding: [0x02,0x00,0x08,0x90]
153# CHECK-LE: sll  $1, $1, 8         # encoding: [0x00,0x0a,0x01,0x00]
154# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
155
156  ulh $8, 0x8000
157# CHECK-BE: ori  $1, $zero, 32768  # encoding: [0x34,0x01,0x80,0x00]
158# CHECK-BE: lb   $8, 0($1)         # encoding: [0x80,0x28,0x00,0x00]
159# CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
160# CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
161# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
162# CHECK-LE: ori  $1, $zero, 32768  # encoding: [0x00,0x80,0x01,0x34]
163# CHECK-LE: lb   $8, 1($1)         # encoding: [0x01,0x00,0x28,0x80]
164# CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
165# CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
166# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
167
168  ulh $8, -0x8000
169# CHECK-BE: lb   $1, -32768($zero) # encoding: [0x80,0x01,0x80,0x00]
170# CHECK-BE: lbu  $8, -32767($zero) # encoding: [0x90,0x08,0x80,0x01]
171# CHECK-BE: sll  $1, $1, 8         # encoding: [0x00,0x01,0x0a,0x00]
172# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
173# CHECK-LE: lb   $1, -32767($zero) # encoding: [0x01,0x80,0x01,0x80]
174# CHECK-LE: lbu  $8, -32768($zero) # encoding: [0x00,0x80,0x08,0x90]
175# CHECK-LE: sll  $1, $1, 8         # encoding: [0x00,0x0a,0x01,0x00]
176# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
177
178  ulh $8, 0x10000
179# CHECK-BE: lui  $1, 1             # encoding: [0x3c,0x01,0x00,0x01]
180# CHECK-BE: lb   $8, 0($1)         # encoding: [0x80,0x28,0x00,0x00]
181# CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
182# CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
183# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
184# CHECK-LE: lui  $1, 1             # encoding: [0x01,0x00,0x01,0x3c]
185# CHECK-LE: lb   $8, 1($1)         # encoding: [0x01,0x00,0x28,0x80]
186# CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
187# CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
188# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
189
190  ulh $8, 0x18888
191# CHECK-BE: lui  $1, 1             # encoding: [0x3c,0x01,0x00,0x01]
192# CHECK-BE: ori  $1, $1, 34952     # encoding: [0x34,0x21,0x88,0x88]
193# CHECK-BE: lb   $8, 0($1)         # encoding: [0x80,0x28,0x00,0x00]
194# CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
195# CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
196# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
197# CHECK-LE: lui  $1, 1             # encoding: [0x01,0x00,0x01,0x3c]
198# CHECK-LE: ori  $1, $1, 34952     # encoding: [0x88,0x88,0x21,0x34]
199# CHECK-LE: lb   $8, 1($1)         # encoding: [0x01,0x00,0x28,0x80]
200# CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
201# CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
202# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
203
204  ulh $8, -32769
205# CHECK-BE: lui  $1, 65535         # encoding: [0x3c,0x01,0xff,0xff]
206# CHECK-BE: ori  $1, $1, 32767     # encoding: [0x34,0x21,0x7f,0xff]
207# CHECK-BE: lb   $8, 0($1)         # encoding: [0x80,0x28,0x00,0x00]
208# CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
209# CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
210# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
211# CHECK-LE: lui  $1, 65535         # encoding: [0xff,0xff,0x01,0x3c]
212# CHECK-LE: ori  $1, $1, 32767     # encoding: [0xff,0x7f,0x21,0x34]
213# CHECK-LE: lb   $8, 1($1)         # encoding: [0x01,0x00,0x28,0x80]
214# CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
215# CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
216# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
217
218  ulh $8, 32767
219# CHECK-BE: addiu $1, $zero, 32767  # encoding: [0x24,0x01,0x7f,0xff]
220# CHECK-BE: lb   $8, 0($1)          # encoding: [0x80,0x28,0x00,0x00]
221# CHECK-BE: lbu  $1, 1($1)          # encoding: [0x90,0x21,0x00,0x01]
222# CHECK-BE: sll  $8, $8, 8          # encoding: [0x00,0x08,0x42,0x00]
223# CHECK-BE: or   $8, $8, $1         # encoding: [0x01,0x01,0x40,0x25]
224# CHECK-LE: addiu $1, $zero, 32767  # encoding: [0xff,0x7f,0x01,0x24]
225# CHECK-LE: lb   $8, 1($1)          # encoding: [0x01,0x00,0x28,0x80]
226# CHECK-LE: lbu  $1, 0($1)          # encoding: [0x00,0x00,0x21,0x90]
227# CHECK-LE: sll  $8, $8, 8          # encoding: [0x00,0x42,0x08,0x00]
228# CHECK-LE: or   $8, $8, $1         # encoding: [0x25,0x40,0x01,0x01]
229
230# Test ULH with immediate offset and a source register operand.
231ulh_reg: # CHECK-LABEL: ulh_reg:
232  ulh $8, 0($9)
233# CHECK-BE: lb   $1, 0($9)         # encoding: [0x81,0x21,0x00,0x00]
234# CHECK-BE: lbu  $8, 1($9)         # encoding: [0x91,0x28,0x00,0x01]
235# CHECK-BE: sll  $1, $1, 8         # encoding: [0x00,0x01,0x0a,0x00]
236# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
237# CHECK-LE: lb   $1, 1($9)         # encoding: [0x01,0x00,0x21,0x81]
238# CHECK-LE: lbu  $8, 0($9)         # encoding: [0x00,0x00,0x28,0x91]
239# CHECK-LE: sll  $1, $1, 8         # encoding: [0x00,0x0a,0x01,0x00]
240# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
241
242  ulh $8, 2($9)
243# CHECK-BE: lb   $1, 2($9)         # encoding: [0x81,0x21,0x00,0x02]
244# CHECK-BE: lbu  $8, 3($9)         # encoding: [0x91,0x28,0x00,0x03]
245# CHECK-BE: sll  $1, $1, 8         # encoding: [0x00,0x01,0x0a,0x00]
246# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
247# CHECK-LE: lb   $1, 3($9)         # encoding: [0x03,0x00,0x21,0x81]
248# CHECK-LE: lbu  $8, 2($9)         # encoding: [0x02,0x00,0x28,0x91]
249# CHECK-LE: sll  $1, $1, 8         # encoding: [0x00,0x0a,0x01,0x00]
250# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
251
252  ulh $8, 0x8000($9)
253# CHECK-BE: ori  $1, $zero, 32768  # encoding: [0x34,0x01,0x80,0x00]
254# CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
255# CHECK-BE: lb   $8, 0($1)         # encoding: [0x80,0x28,0x00,0x00]
256# CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
257# CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
258# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
259# CHECK-LE: ori  $1, $zero, 32768  # encoding: [0x00,0x80,0x01,0x34]
260# CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
261# CHECK-LE: lb   $8, 1($1)         # encoding: [0x01,0x00,0x28,0x80]
262# CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
263# CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
264# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
265
266  ulh $8, -0x8000($9)
267# CHECK-BE: lb   $1, -32768($9)    # encoding: [0x81,0x21,0x80,0x00]
268# CHECK-BE: lbu  $8, -32767($9)    # encoding: [0x91,0x28,0x80,0x01]
269# CHECK-BE: sll  $1, $1, 8         # encoding: [0x00,0x01,0x0a,0x00]
270# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
271# CHECK-LE: lb   $1, -32767($9)    # encoding: [0x01,0x80,0x21,0x81]
272# CHECK-LE: lbu  $8, -32768($9)    # encoding: [0x00,0x80,0x28,0x91]
273# CHECK-LE: sll  $1, $1, 8         # encoding: [0x00,0x0a,0x01,0x00]
274# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
275
276  ulh $8, 0x10000($9)
277# CHECK-BE: lui  $1, 1             # encoding: [0x3c,0x01,0x00,0x01]
278# CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
279# CHECK-BE: lb   $8, 0($1)         # encoding: [0x80,0x28,0x00,0x00]
280# CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
281# CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
282# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
283# CHECK-LE: lui  $1, 1             # encoding: [0x01,0x00,0x01,0x3c]
284# CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
285# CHECK-LE: lb   $8, 1($1)         # encoding: [0x01,0x00,0x28,0x80]
286# CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
287# CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
288# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
289
290  ulh $8, 0x18888($9)
291# CHECK-BE: lui  $1, 1             # encoding: [0x3c,0x01,0x00,0x01]
292# CHECK-BE: ori  $1, $1, 34952     # encoding: [0x34,0x21,0x88,0x88]
293# CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
294# CHECK-BE: lb   $8, 0($1)         # encoding: [0x80,0x28,0x00,0x00]
295# CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
296# CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
297# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
298# CHECK-LE: lui  $1, 1             # encoding: [0x01,0x00,0x01,0x3c]
299# CHECK-LE: ori  $1, $1, 34952     # encoding: [0x88,0x88,0x21,0x34]
300# CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
301# CHECK-LE: lb   $8, 1($1)         # encoding: [0x01,0x00,0x28,0x80]
302# CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
303# CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
304# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
305
306  ulh $8, -32769($9)
307# CHECK-BE: lui  $1, 65535         # encoding: [0x3c,0x01,0xff,0xff]
308# CHECK-BE: ori  $1, $1, 32767     # encoding: [0x34,0x21,0x7f,0xff]
309# CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
310# CHECK-BE: lb   $8, 0($1)         # encoding: [0x80,0x28,0x00,0x00]
311# CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
312# CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
313# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
314# CHECK-LE: lui  $1, 65535         # encoding: [0xff,0xff,0x01,0x3c]
315# CHECK-LE: ori  $1, $1, 32767     # encoding: [0xff,0x7f,0x21,0x34]
316# CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
317# CHECK-LE: lb   $8, 1($1)         # encoding: [0x01,0x00,0x28,0x80]
318# CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
319# CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
320# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
321
322  ulh $8, 32767($9)
323# CHECK-BE: addiu $1, $zero, 32767 # encoding: [0x24,0x01,0x7f,0xff]
324# CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
325# CHECK-BE: lb   $8, 0($1)         # encoding: [0x80,0x28,0x00,0x00]
326# CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
327# CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
328# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
329# CHECK-LE: addiu $1, $zero, 32767 # encoding: [0xff,0x7f,0x01,0x24]
330# CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
331# CHECK-LE: lb   $8, 1($1)         # encoding: [0x01,0x00,0x28,0x80]
332# CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
333# CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
334# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
335
336# Test ULHU with immediate operand.
337ulhu_imm: # CHECK-LABEL: ulhu_imm:
338  ulhu $8, 0
339# CHECK-BE: lbu  $1, 0($zero)      # encoding: [0x90,0x01,0x00,0x00]
340# CHECK-BE: lbu  $8, 1($zero)      # encoding: [0x90,0x08,0x00,0x01]
341# CHECK-BE: sll  $1, $1, 8         # encoding: [0x00,0x01,0x0a,0x00]
342# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
343# CHECK-LE: lbu  $1, 1($zero)      # encoding: [0x01,0x00,0x01,0x90]
344# CHECK-LE: lbu  $8, 0($zero)      # encoding: [0x00,0x00,0x08,0x90]
345# CHECK-LE: sll  $1, $1, 8         # encoding: [0x00,0x0a,0x01,0x00]
346# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
347
348  ulhu $8, 2
349# CHECK-BE: lbu  $1, 2($zero)      # encoding: [0x90,0x01,0x00,0x02]
350# CHECK-BE: lbu  $8, 3($zero)      # encoding: [0x90,0x08,0x00,0x03]
351# CHECK-BE: sll  $1, $1, 8         # encoding: [0x00,0x01,0x0a,0x00]
352# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
353# CHECK-LE: lbu  $1, 3($zero)      # encoding: [0x03,0x00,0x01,0x90]
354# CHECK-LE: lbu  $8, 2($zero)      # encoding: [0x02,0x00,0x08,0x90]
355# CHECK-LE: sll  $1, $1, 8         # encoding: [0x00,0x0a,0x01,0x00]
356# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
357
358  ulhu $8, 0x8000
359# CHECK-BE: ori  $1, $zero, 32768  # encoding: [0x34,0x01,0x80,0x00]
360# CHECK-BE: lbu  $8, 0($1)         # encoding: [0x90,0x28,0x00,0x00]
361# CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
362# CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
363# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
364# CHECK-LE: ori  $1, $zero, 32768  # encoding: [0x00,0x80,0x01,0x34]
365# CHECK-LE: lbu  $8, 1($1)         # encoding: [0x01,0x00,0x28,0x90]
366# CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
367# CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
368# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
369
370  ulhu $8, -0x8000
371# CHECK-BE: lbu  $1, -32768($zero) # encoding: [0x90,0x01,0x80,0x00]
372# CHECK-BE: lbu  $8, -32767($zero) # encoding: [0x90,0x08,0x80,0x01]
373# CHECK-BE: sll  $1, $1, 8         # encoding: [0x00,0x01,0x0a,0x00]
374# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
375# CHECK-LE: lbu  $1, -32767($zero) # encoding: [0x01,0x80,0x01,0x90]
376# CHECK-LE: lbu  $8, -32768($zero) # encoding: [0x00,0x80,0x08,0x90]
377# CHECK-LE: sll  $1, $1, 8         # encoding: [0x00,0x0a,0x01,0x00]
378# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
379
380  ulhu $8, 0x10000
381# CHECK-BE: lui  $1, 1             # encoding: [0x3c,0x01,0x00,0x01]
382# CHECK-BE: lbu  $8, 0($1)         # encoding: [0x90,0x28,0x00,0x00]
383# CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
384# CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
385# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
386# CHECK-LE: lui  $1, 1             # encoding: [0x01,0x00,0x01,0x3c]
387# CHECK-LE: lbu  $8, 1($1)         # encoding: [0x01,0x00,0x28,0x90]
388# CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
389# CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
390# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
391
392  ulhu $8, 0x18888
393# CHECK-BE: lui  $1, 1             # encoding: [0x3c,0x01,0x00,0x01]
394# CHECK-BE: ori  $1, $1, 34952     # encoding: [0x34,0x21,0x88,0x88]
395# CHECK-BE: lbu  $8, 0($1)         # encoding: [0x90,0x28,0x00,0x00]
396# CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
397# CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
398# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
399# CHECK-LE: lui  $1, 1             # encoding: [0x01,0x00,0x01,0x3c]
400# CHECK-LE: ori  $1, $1, 34952     # encoding: [0x88,0x88,0x21,0x34]
401# CHECK-LE: lbu  $8, 1($1)         # encoding: [0x01,0x00,0x28,0x90]
402# CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
403# CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
404# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
405
406  ulhu $8, -32769
407# CHECK-BE: lui  $1, 65535         # encoding: [0x3c,0x01,0xff,0xff]
408# CHECK-BE: ori  $1, $1, 32767     # encoding: [0x34,0x21,0x7f,0xff]
409# CHECK-BE: lbu  $8, 0($1)         # encoding: [0x90,0x28,0x00,0x00]
410# CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
411# CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
412# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
413# CHECK-LE: lui  $1, 65535         # encoding: [0xff,0xff,0x01,0x3c]
414# CHECK-LE: ori  $1, $1, 32767     # encoding: [0xff,0x7f,0x21,0x34]
415# CHECK-LE: lbu  $8, 1($1)         # encoding: [0x01,0x00,0x28,0x90]
416# CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
417# CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
418# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
419
420  ulhu $8, 32767
421# CHECK-BE: addiu $1, $zero, 32767  # encoding: [0x24,0x01,0x7f,0xff]
422# CHECK-BE: lbu  $8, 0($1)          # encoding: [0x90,0x28,0x00,0x00]
423# CHECK-BE: lbu  $1, 1($1)          # encoding: [0x90,0x21,0x00,0x01]
424# CHECK-BE: sll  $8, $8, 8          # encoding: [0x00,0x08,0x42,0x00]
425# CHECK-BE: or   $8, $8, $1         # encoding: [0x01,0x01,0x40,0x25]
426# CHECK-LE: addiu $1, $zero, 32767  # encoding: [0xff,0x7f,0x01,0x24]
427# CHECK-LE: lbu  $8, 1($1)          # encoding: [0x01,0x00,0x28,0x90]
428# CHECK-LE: lbu  $1, 0($1)          # encoding: [0x00,0x00,0x21,0x90]
429# CHECK-LE: sll  $8, $8, 8          # encoding: [0x00,0x42,0x08,0x00]
430# CHECK-LE: or   $8, $8, $1         # encoding: [0x25,0x40,0x01,0x01]
431
432# Test ULHU with immediate offset and a source register operand.
433  ulhu $8, 0($9)
434# CHECK-BE: lbu  $1, 0($9)         # encoding: [0x91,0x21,0x00,0x00]
435# CHECK-BE: lbu  $8, 1($9)         # encoding: [0x91,0x28,0x00,0x01]
436# CHECK-BE: sll  $1, $1, 8         # encoding: [0x00,0x01,0x0a,0x00]
437# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
438# CHECK-LE: lbu  $1, 1($9)         # encoding: [0x01,0x00,0x21,0x91]
439# CHECK-LE: lbu  $8, 0($9)         # encoding: [0x00,0x00,0x28,0x91]
440# CHECK-LE: sll  $1, $1, 8         # encoding: [0x00,0x0a,0x01,0x00]
441# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
442
443  ulhu $8, 2($9)
444# CHECK-BE: lbu  $1, 2($9)         # encoding: [0x91,0x21,0x00,0x02]
445# CHECK-BE: lbu  $8, 3($9)         # encoding: [0x91,0x28,0x00,0x03]
446# CHECK-BE: sll  $1, $1, 8         # encoding: [0x00,0x01,0x0a,0x00]
447# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
448# CHECK-LE: lbu  $1, 3($9)         # encoding: [0x03,0x00,0x21,0x91]
449# CHECK-LE: lbu  $8, 2($9)         # encoding: [0x02,0x00,0x28,0x91]
450# CHECK-LE: sll  $1, $1, 8         # encoding: [0x00,0x0a,0x01,0x00]
451# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
452
453  ulhu $8, 0x8000($9)
454# CHECK-BE: ori  $1, $zero, 32768  # encoding: [0x34,0x01,0x80,0x00]
455# CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
456# CHECK-BE: lbu  $8, 0($1)         # encoding: [0x90,0x28,0x00,0x00]
457# CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
458# CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
459# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
460# CHECK-LE: ori  $1, $zero, 32768  # encoding: [0x00,0x80,0x01,0x34]
461# CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
462# CHECK-LE: lbu  $8, 1($1)         # encoding: [0x01,0x00,0x28,0x90]
463# CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
464# CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
465# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
466
467  ulhu $8, -0x8000($9)
468# CHECK-BE: lbu  $1, -32768($9)    # encoding: [0x91,0x21,0x80,0x00]
469# CHECK-BE: lbu  $8, -32767($9)    # encoding: [0x91,0x28,0x80,0x01]
470# CHECK-BE: sll  $1, $1, 8         # encoding: [0x00,0x01,0x0a,0x00]
471# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
472# CHECK-LE: lbu  $1, -32767($9)    # encoding: [0x01,0x80,0x21,0x91]
473# CHECK-LE: lbu  $8, -32768($9)    # encoding: [0x00,0x80,0x28,0x91]
474# CHECK-LE: sll  $1, $1, 8         # encoding: [0x00,0x0a,0x01,0x00]
475# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
476
477  ulhu $8, 0x10000($9)
478# CHECK-BE: lui  $1, 1             # encoding: [0x3c,0x01,0x00,0x01]
479# CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
480# CHECK-BE: lbu  $8, 0($1)         # encoding: [0x90,0x28,0x00,0x00]
481# CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
482# CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
483# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
484# CHECK-LE: lui  $1, 1             # encoding: [0x01,0x00,0x01,0x3c]
485# CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
486# CHECK-LE: lbu  $8, 1($1)         # encoding: [0x01,0x00,0x28,0x90]
487# CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
488# CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
489# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
490
491  ulhu $8, 0x18888($9)
492# CHECK-BE: lui  $1, 1             # encoding: [0x3c,0x01,0x00,0x01]
493# CHECK-BE: ori  $1, $1, 34952     # encoding: [0x34,0x21,0x88,0x88]
494# CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
495# CHECK-BE: lbu  $8, 0($1)         # encoding: [0x90,0x28,0x00,0x00]
496# CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
497# CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
498# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
499# CHECK-LE: lui  $1, 1             # encoding: [0x01,0x00,0x01,0x3c]
500# CHECK-LE: ori  $1, $1, 34952     # encoding: [0x88,0x88,0x21,0x34]
501# CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
502# CHECK-LE: lbu  $8, 1($1)         # encoding: [0x01,0x00,0x28,0x90]
503# CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
504# CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
505# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
506
507  ulhu $8, -32769($9)
508# CHECK-BE: lui  $1, 65535         # encoding: [0x3c,0x01,0xff,0xff]
509# CHECK-BE: ori  $1, $1, 32767     # encoding: [0x34,0x21,0x7f,0xff]
510# CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
511# CHECK-BE: lbu  $8, 0($1)         # encoding: [0x90,0x28,0x00,0x00]
512# CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
513# CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
514# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
515# CHECK-LE: lui  $1, 65535         # encoding: [0xff,0xff,0x01,0x3c]
516# CHECK-LE: ori  $1, $1, 32767     # encoding: [0xff,0x7f,0x21,0x34]
517# CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
518# CHECK-LE: lbu  $8, 1($1)         # encoding: [0x01,0x00,0x28,0x90]
519# CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
520# CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
521# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
522
523  ulhu $8, 32767($9)
524# CHECK-BE: addiu $1, $zero, 32767 # encoding: [0x24,0x01,0x7f,0xff]
525# CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
526# CHECK-BE: lbu  $8, 0($1)         # encoding: [0x90,0x28,0x00,0x00]
527# CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
528# CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
529# CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
530# CHECK-LE: addiu $1, $zero, 32767 # encoding: [0xff,0x7f,0x01,0x24]
531# CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
532# CHECK-LE: lbu  $8, 1($1)         # encoding: [0x01,0x00,0x28,0x90]
533# CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
534# CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
535# CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
536
537# Test ULW with immediate operand.
538  ulw $8, 0
539# CHECK-BE: lwl  $8, 0($zero)      # encoding: [0x88,0x08,0x00,0x00]
540# CHECK-BE: lwr  $8, 3($zero)      # encoding: [0x98,0x08,0x00,0x03]
541# CHECK-LE: lwl $8, 3($zero)       # encoding: [0x03,0x00,0x08,0x88]
542# CHECK-LE: lwr $8, 0($zero)       # encoding: [0x00,0x00,0x08,0x98]
543
544  ulw $8, 2
545# CHECK-BE: lwl  $8, 2($zero)      # encoding: [0x88,0x08,0x00,0x02]
546# CHECK-BE: lwr  $8, 5($zero)      # encoding: [0x98,0x08,0x00,0x05]
547# CHECK-LE: lwl $8, 5($zero)       # encoding: [0x05,0x00,0x08,0x88]
548# CHECK-LE: lwr $8, 2($zero)       # encoding: [0x02,0x00,0x08,0x98]
549
550  ulw $8, 0x8000
551# CHECK-BE: ori  $1, $zero, 32768  # encoding: [0x34,0x01,0x80,0x00]
552# CHECK-BE: lwl  $8, 0($1)         # encoding: [0x88,0x28,0x00,0x00]
553# CHECK-BE: lwr  $8, 3($1)         # encoding: [0x98,0x28,0x00,0x03]
554# CHECK-LE: ori $1, $zero, 32768   # encoding: [0x00,0x80,0x01,0x34]
555# CHECK-LE: lwl $8, 3($1)          # encoding: [0x03,0x00,0x28,0x88]
556# CHECK-LE: lwr $8, 0($1)          # encoding: [0x00,0x00,0x28,0x98]
557
558  ulw $8, -0x8000
559# CHECK-BE: lwl  $8, -32768($zero) # encoding: [0x88,0x08,0x80,0x00]
560# CHECK-BE: lwr  $8, -32765($zero) # encoding: [0x98,0x08,0x80,0x03]
561# CHECK-LE: lwl $8, -32765($zero)  # encoding: [0x03,0x80,0x08,0x88]
562# CHECK-LE: lwr $8, -32768($zero)  # encoding: [0x00,0x80,0x08,0x98]
563
564  ulw $8, 0x10000
565# CHECK-BE: lui  $1, 1             # encoding: [0x3c,0x01,0x00,0x01]
566# CHECK-BE: lwl  $8, 0($1)         # encoding: [0x88,0x28,0x00,0x00]
567# CHECK-BE: lwr  $8, 3($1)         # encoding: [0x98,0x28,0x00,0x03]
568# CHECK-LE: lui $1, 1              # encoding: [0x01,0x00,0x01,0x3c]
569# CHECK-LE: lwl $8, 3($1)          # encoding: [0x03,0x00,0x28,0x88]
570# CHECK-LE: lwr $8, 0($1)          # encoding: [0x00,0x00,0x28,0x98]
571
572  ulw $8, 0x18888
573# CHECK-BE: lui  $1, 1             # encoding: [0x3c,0x01,0x00,0x01]
574# CHECK-BE: ori  $1, $1, 34952     # encoding: [0x34,0x21,0x88,0x88]
575# CHECK-BE: lwl  $8, 0($1)         # encoding: [0x88,0x28,0x00,0x00]
576# CHECK-BE: lwr  $8, 3($1)         # encoding: [0x98,0x28,0x00,0x03]
577# CHECK-LE: lui $1, 1              # encoding: [0x01,0x00,0x01,0x3c]
578# CHECK-LE: ori $1, $1, 34952      # encoding: [0x88,0x88,0x21,0x34]
579# CHECK-LE: lwl $8, 3($1)          # encoding: [0x03,0x00,0x28,0x88]
580# CHECK-LE: lwr $8, 0($1)          # encoding: [0x00,0x00,0x28,0x98]
581
582  ulw $8, -32771
583# CHECK-BE: lui  $1, 65535         # encoding: [0x3c,0x01,0xff,0xff]
584# CHECK-BE: ori  $1, $1, 32765     # encoding: [0x34,0x21,0x7f,0xfd]
585# CHECK-BE: lwl  $8, 0($1)         # encoding: [0x88,0x28,0x00,0x00]
586# CHECK-BE: lwr  $8, 3($1)         # encoding: [0x98,0x28,0x00,0x03]
587# CHECK-LE: lui $1, 65535          # encoding: [0xff,0xff,0x01,0x3c]
588# CHECK-LE: ori $1, $1, 32765      # encoding: [0xfd,0x7f,0x21,0x34]
589# CHECK-LE: lwl $8, 3($1)          # encoding: [0x03,0x00,0x28,0x88]
590# CHECK-LE: lwr $8, 0($1)          # encoding: [0x00,0x00,0x28,0x98]
591
592  ulw $8, 32765
593# CHECK-BE: addiu $1, $zero, 32765 # encoding: [0x24,0x01,0x7f,0xfd]
594# CHECK-BE: lwl  $8, 0($1)         # encoding: [0x88,0x28,0x00,0x00]
595# CHECK-BE: lwr  $8, 3($1)         # encoding: [0x98,0x28,0x00,0x03]
596# CHECK-LE: addiu $1, $zero, 32765 # encoding: [0xfd,0x7f,0x01,0x24]
597# CHECK-LE: lwl $8, 3($1)          # encoding: [0x03,0x00,0x28,0x88]
598# CHECK-LE: lwr $8, 0($1)          # encoding: [0x00,0x00,0x28,0x98]
599
600# Test ULW with immediate offset and a source register operand.
601  ulw $8, 0($9)
602# CHECK-BE: lwl  $8, 0($9)         # encoding: [0x89,0x28,0x00,0x00]
603# CHECK-BE: lwr  $8, 3($9)         # encoding: [0x99,0x28,0x00,0x03]
604# CHECK-LE: lwl  $8, 3($9)         # encoding: [0x03,0x00,0x28,0x89]
605# CHECK-LE: lwr  $8, 0($9)         # encoding: [0x00,0x00,0x28,0x99]
606
607  ulw $8, 2($9)
608# CHECK-BE: lwl  $8, 2($9)         # encoding: [0x89,0x28,0x00,0x02]
609# CHECK-BE: lwr  $8, 5($9)         # encoding: [0x99,0x28,0x00,0x05]
610# CHECK-LE: lwl  $8, 5($9)         # encoding: [0x05,0x00,0x28,0x89]
611# CHECK-LE: lwr  $8, 2($9)         # encoding: [0x02,0x00,0x28,0x99]
612
613  ulw $8, 0x8000($9)
614# CHECK-BE: ori  $1, $zero, 32768  # encoding: [0x34,0x01,0x80,0x00]
615# CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
616# CHECK-BE: lwl  $8, 0($1)         # encoding: [0x88,0x28,0x00,0x00]
617# CHECK-BE: lwr  $8, 3($1)         # encoding: [0x98,0x28,0x00,0x03]
618# CHECK-LE: ori  $1, $zero, 32768  # encoding: [0x00,0x80,0x01,0x34]
619# CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
620# CHECK-LE: lwl  $8, 3($1)         # encoding: [0x03,0x00,0x28,0x88]
621# CHECK-LE: lwr  $8, 0($1)         # encoding: [0x00,0x00,0x28,0x98]
622
623  ulw $8, -0x8000($9)
624# CHECK-BE: lwl  $8, -32768($9)    # encoding: [0x89,0x28,0x80,0x00]
625# CHECK-BE: lwr  $8, -32765($9)    # encoding: [0x99,0x28,0x80,0x03]
626# CHECK-LE: lwl  $8, -32765($9)    # encoding: [0x03,0x80,0x28,0x89]
627# CHECK-LE: lwr  $8, -32768($9)    # encoding: [0x00,0x80,0x28,0x99]
628
629  ulw $8, 0x10000($9)
630# CHECK-BE: lui  $1, 1             # encoding: [0x3c,0x01,0x00,0x01]
631# CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
632# CHECK-BE: lwl  $8, 0($1)         # encoding: [0x88,0x28,0x00,0x00]
633# CHECK-BE: lwr  $8, 3($1)         # encoding: [0x98,0x28,0x00,0x03]
634# CHECK-LE: lui  $1, 1             # encoding: [0x01,0x00,0x01,0x3c]
635# CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
636# CHECK-LE: lwl  $8, 3($1)         # encoding: [0x03,0x00,0x28,0x88]
637# CHECK-LE: lwr  $8, 0($1)         # encoding: [0x00,0x00,0x28,0x98]
638
639  ulw $8, 0x18888($9)
640# CHECK-BE: lui  $1, 1             # encoding: [0x3c,0x01,0x00,0x01]
641# CHECK-BE: ori  $1, $1, 34952     # encoding: [0x34,0x21,0x88,0x88]
642# CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
643# CHECK-BE: lwl  $8, 0($1)         # encoding: [0x88,0x28,0x00,0x00]
644# CHECK-BE: lwr  $8, 3($1)         # encoding: [0x98,0x28,0x00,0x03]
645# CHECK-LE: lui  $1, 1             # encoding: [0x01,0x00,0x01,0x3c]
646# CHECK-LE: ori  $1, $1, 34952     # encoding: [0x88,0x88,0x21,0x34]
647# CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
648# CHECK-LE: lwl  $8, 3($1)         # encoding: [0x03,0x00,0x28,0x88]
649# CHECK-LE: lwr  $8, 0($1)         # encoding: [0x00,0x00,0x28,0x98]
650
651  ulw $8, -32771($9)
652# CHECK-BE: lui  $1, 65535         # encoding: [0x3c,0x01,0xff,0xff]
653# CHECK-BE: ori  $1, $1, 32765     # encoding: [0x34,0x21,0x7f,0xfd]
654# CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
655# CHECK-BE: lwl  $8, 0($1)         # encoding: [0x88,0x28,0x00,0x00]
656# CHECK-BE: lwr  $8, 3($1)         # encoding: [0x98,0x28,0x00,0x03]
657# CHECK-LE: lui  $1, 65535         # encoding: [0xff,0xff,0x01,0x3c]
658# CHECK-LE: ori  $1, $1, 32765     # encoding: [0xfd,0x7f,0x21,0x34]
659# CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
660# CHECK-LE: lwl  $8, 3($1)         # encoding: [0x03,0x00,0x28,0x88]
661# CHECK-LE: lwr  $8, 0($1)         # encoding: [0x00,0x00,0x28,0x98]
662
663  ulw $8, 32765($9)
664# CHECK-BE: addiu $1, $zero, 32765 # encoding: [0x24,0x01,0x7f,0xfd]
665# CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
666# CHECK-BE: lwl  $8, 0($1)         # encoding: [0x88,0x28,0x00,0x00]
667# CHECK-BE: lwr  $8, 3($1)         # encoding: [0x98,0x28,0x00,0x03]
668# CHECK-LE: addiu $1, $zero, 32765 # encoding: [0xfd,0x7f,0x01,0x24]
669# CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
670# CHECK-LE: lwl  $8, 3($1)         # encoding: [0x03,0x00,0x28,0x88]
671# CHECK-LE: lwr  $8, 0($1)         # encoding: [0x00,0x00,0x28,0x98]
672
6731:
674  add $4, $4, $4
675