64bc15aeb2fbd33acb5583d0fab65b81ba623849
[oota-llvm.git] / test / MC / Mips / mips-expansions.s
1 # RUN: llvm-mc %s -triple=mipsel-unknown-linux -show-encoding -mcpu=mips32r2 | \
2 # RUN:   FileCheck %s --check-prefix=CHECK-LE
3 # RUN: llvm-mc %s -triple=mips-unknown-linux -show-encoding -mcpu=mips32r2 | \
4 # RUN:   FileCheck %s --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 ULHU with immediate operand.
135   ulhu $8, 0
136 # CHECK-BE: lbu  $1, 0($zero)      # encoding: [0x90,0x01,0x00,0x00]
137 # CHECK-BE: lbu  $8, 1($zero)      # encoding: [0x90,0x08,0x00,0x01]
138 # CHECK-BE: sll  $1, $1, 8         # encoding: [0x00,0x01,0x0a,0x00]
139 # CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
140 # CHECK-LE: lbu  $1, 1($zero)      # encoding: [0x01,0x00,0x01,0x90]
141 # CHECK-LE: lbu  $8, 0($zero)      # encoding: [0x00,0x00,0x08,0x90]
142 # CHECK-LE: sll  $1, $1, 8         # encoding: [0x00,0x0a,0x01,0x00]
143 # CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
144
145   ulhu $8, 2
146 # CHECK-BE: lbu  $1, 2($zero)      # encoding: [0x90,0x01,0x00,0x02]
147 # CHECK-BE: lbu  $8, 3($zero)      # encoding: [0x90,0x08,0x00,0x03]
148 # CHECK-BE: sll  $1, $1, 8         # encoding: [0x00,0x01,0x0a,0x00]
149 # CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
150 # CHECK-LE: lbu  $1, 3($zero)      # encoding: [0x03,0x00,0x01,0x90]
151 # CHECK-LE: lbu  $8, 2($zero)      # encoding: [0x02,0x00,0x08,0x90]
152 # CHECK-LE: sll  $1, $1, 8         # encoding: [0x00,0x0a,0x01,0x00]
153 # CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
154
155   ulhu $8, 0x8000
156 # CHECK-BE: ori  $1, $zero, 32768  # encoding: [0x34,0x01,0x80,0x00]
157 # CHECK-BE: lbu  $8, 0($1)         # encoding: [0x90,0x28,0x00,0x00]
158 # CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
159 # CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
160 # CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
161 # CHECK-LE: ori  $1, $zero, 32768  # encoding: [0x00,0x80,0x01,0x34]
162 # CHECK-LE: lbu  $8, 1($1)         # encoding: [0x01,0x00,0x28,0x90]
163 # CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
164 # CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
165 # CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
166
167   ulhu $8, -0x8000
168 # CHECK-BE: lbu  $1, -32768($zero) # encoding: [0x90,0x01,0x80,0x00]
169 # CHECK-BE: lbu  $8, -32767($zero) # encoding: [0x90,0x08,0x80,0x01]
170 # CHECK-BE: sll  $1, $1, 8         # encoding: [0x00,0x01,0x0a,0x00]
171 # CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
172 # CHECK-LE: lbu  $1, -32767($zero) # encoding: [0x01,0x80,0x01,0x90]
173 # CHECK-LE: lbu  $8, -32768($zero) # encoding: [0x00,0x80,0x08,0x90]
174 # CHECK-LE: sll  $1, $1, 8         # encoding: [0x00,0x0a,0x01,0x00]
175 # CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
176
177   ulhu $8, 0x10000
178 # CHECK-BE: lui  $1, 1             # encoding: [0x3c,0x01,0x00,0x01]
179 # CHECK-BE: lbu  $8, 0($1)         # encoding: [0x90,0x28,0x00,0x00]
180 # CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
181 # CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
182 # CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
183 # CHECK-LE: lui  $1, 1             # encoding: [0x01,0x00,0x01,0x3c]
184 # CHECK-LE: lbu  $8, 1($1)         # encoding: [0x01,0x00,0x28,0x90]
185 # CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
186 # CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
187 # CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
188
189   ulhu $8, 0x18888
190 # CHECK-BE: lui  $1, 1             # encoding: [0x3c,0x01,0x00,0x01]
191 # CHECK-BE: ori  $1, $1, 34952     # encoding: [0x34,0x21,0x88,0x88]
192 # CHECK-BE: lbu  $8, 0($1)         # encoding: [0x90,0x28,0x00,0x00]
193 # CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
194 # CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
195 # CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
196 # CHECK-LE: lui  $1, 1             # encoding: [0x01,0x00,0x01,0x3c]
197 # CHECK-LE: ori  $1, $1, 34952     # encoding: [0x88,0x88,0x21,0x34]
198 # CHECK-LE: lbu  $8, 1($1)         # encoding: [0x01,0x00,0x28,0x90]
199 # CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
200 # CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
201 # CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
202
203   ulhu $8, -32769
204 # CHECK-BE: lui  $1, 65535         # encoding: [0x3c,0x01,0xff,0xff]
205 # CHECK-BE: ori  $1, $1, 32767     # encoding: [0x34,0x21,0x7f,0xff]
206 # CHECK-BE: lbu  $8, 0($1)         # encoding: [0x90,0x28,0x00,0x00]
207 # CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
208 # CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
209 # CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
210 # CHECK-LE: lui  $1, 65535         # encoding: [0xff,0xff,0x01,0x3c]
211 # CHECK-LE: ori  $1, $1, 32767     # encoding: [0xff,0x7f,0x21,0x34]
212 # CHECK-LE: lbu  $8, 1($1)         # encoding: [0x01,0x00,0x28,0x90]
213 # CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
214 # CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
215 # CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
216
217   ulhu $8, 32767
218 # CHECK-BE: addiu $1, $zero, 32767  # encoding: [0x24,0x01,0x7f,0xff]
219 # CHECK-BE: lbu  $8, 0($1)          # encoding: [0x90,0x28,0x00,0x00]
220 # CHECK-BE: lbu  $1, 1($1)          # encoding: [0x90,0x21,0x00,0x01]
221 # CHECK-BE: sll  $8, $8, 8          # encoding: [0x00,0x08,0x42,0x00]
222 # CHECK-BE: or   $8, $8, $1         # encoding: [0x01,0x01,0x40,0x25]
223 # CHECK-LE: addiu $1, $zero, 32767  # encoding: [0xff,0x7f,0x01,0x24]
224 # CHECK-LE: lbu  $8, 1($1)          # encoding: [0x01,0x00,0x28,0x90]
225 # CHECK-LE: lbu  $1, 0($1)          # encoding: [0x00,0x00,0x21,0x90]
226 # CHECK-LE: sll  $8, $8, 8          # encoding: [0x00,0x42,0x08,0x00]
227 # CHECK-LE: or   $8, $8, $1         # encoding: [0x25,0x40,0x01,0x01]
228
229 # Test ULHU with immediate offset and a source register operand.
230   ulhu $8, 0($9)
231 # CHECK-BE: lbu  $1, 0($9)         # encoding: [0x91,0x21,0x00,0x00]
232 # CHECK-BE: lbu  $8, 1($9)         # encoding: [0x91,0x28,0x00,0x01]
233 # CHECK-BE: sll  $1, $1, 8         # encoding: [0x00,0x01,0x0a,0x00]
234 # CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
235 # CHECK-LE: lbu  $1, 1($9)         # encoding: [0x01,0x00,0x21,0x91]
236 # CHECK-LE: lbu  $8, 0($9)         # encoding: [0x00,0x00,0x28,0x91]
237 # CHECK-LE: sll  $1, $1, 8         # encoding: [0x00,0x0a,0x01,0x00]
238 # CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
239
240   ulhu $8, 2($9)
241 # CHECK-BE: lbu  $1, 2($9)         # encoding: [0x91,0x21,0x00,0x02]
242 # CHECK-BE: lbu  $8, 3($9)         # encoding: [0x91,0x28,0x00,0x03]
243 # CHECK-BE: sll  $1, $1, 8         # encoding: [0x00,0x01,0x0a,0x00]
244 # CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
245 # CHECK-LE: lbu  $1, 3($9)         # encoding: [0x03,0x00,0x21,0x91]
246 # CHECK-LE: lbu  $8, 2($9)         # encoding: [0x02,0x00,0x28,0x91]
247 # CHECK-LE: sll  $1, $1, 8         # encoding: [0x00,0x0a,0x01,0x00]
248 # CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
249
250   ulhu $8, 0x8000($9)
251 # CHECK-BE: ori  $1, $zero, 32768  # encoding: [0x34,0x01,0x80,0x00]
252 # CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
253 # CHECK-BE: lbu  $8, 0($1)         # encoding: [0x90,0x28,0x00,0x00]
254 # CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
255 # CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
256 # CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
257 # CHECK-LE: ori  $1, $zero, 32768  # encoding: [0x00,0x80,0x01,0x34]
258 # CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
259 # CHECK-LE: lbu  $8, 1($1)         # encoding: [0x01,0x00,0x28,0x90]
260 # CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
261 # CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
262 # CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
263
264   ulhu $8, -0x8000($9)
265 # CHECK-BE: lbu  $1, -32768($9)    # encoding: [0x91,0x21,0x80,0x00]
266 # CHECK-BE: lbu  $8, -32767($9)    # encoding: [0x91,0x28,0x80,0x01]
267 # CHECK-BE: sll  $1, $1, 8         # encoding: [0x00,0x01,0x0a,0x00]
268 # CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
269 # CHECK-LE: lbu  $1, -32767($9)    # encoding: [0x01,0x80,0x21,0x91]
270 # CHECK-LE: lbu  $8, -32768($9)    # encoding: [0x00,0x80,0x28,0x91]
271 # CHECK-LE: sll  $1, $1, 8         # encoding: [0x00,0x0a,0x01,0x00]
272 # CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
273
274   ulhu $8, 0x10000($9)
275 # CHECK-BE: lui  $1, 1             # encoding: [0x3c,0x01,0x00,0x01]
276 # CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
277 # CHECK-BE: lbu  $8, 0($1)         # encoding: [0x90,0x28,0x00,0x00]
278 # CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
279 # CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
280 # CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
281 # CHECK-LE: lui  $1, 1             # encoding: [0x01,0x00,0x01,0x3c]
282 # CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
283 # CHECK-LE: lbu  $8, 1($1)         # encoding: [0x01,0x00,0x28,0x90]
284 # CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
285 # CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
286 # CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
287
288   ulhu $8, 0x18888($9)
289 # CHECK-BE: lui  $1, 1             # encoding: [0x3c,0x01,0x00,0x01]
290 # CHECK-BE: ori  $1, $1, 34952     # encoding: [0x34,0x21,0x88,0x88]
291 # CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
292 # CHECK-BE: lbu  $8, 0($1)         # encoding: [0x90,0x28,0x00,0x00]
293 # CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
294 # CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
295 # CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
296 # CHECK-LE: lui  $1, 1             # encoding: [0x01,0x00,0x01,0x3c]
297 # CHECK-LE: ori  $1, $1, 34952     # encoding: [0x88,0x88,0x21,0x34]
298 # CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
299 # CHECK-LE: lbu  $8, 1($1)         # encoding: [0x01,0x00,0x28,0x90]
300 # CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
301 # CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
302 # CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
303
304   ulhu $8, -32769($9)
305 # CHECK-BE: lui  $1, 65535         # encoding: [0x3c,0x01,0xff,0xff]
306 # CHECK-BE: ori  $1, $1, 32767     # encoding: [0x34,0x21,0x7f,0xff]
307 # CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
308 # CHECK-BE: lbu  $8, 0($1)         # encoding: [0x90,0x28,0x00,0x00]
309 # CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
310 # CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
311 # CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
312 # CHECK-LE: lui  $1, 65535         # encoding: [0xff,0xff,0x01,0x3c]
313 # CHECK-LE: ori  $1, $1, 32767     # encoding: [0xff,0x7f,0x21,0x34]
314 # CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
315 # CHECK-LE: lbu  $8, 1($1)         # encoding: [0x01,0x00,0x28,0x90]
316 # CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
317 # CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
318 # CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
319
320   ulhu $8, 32767($9)
321 # CHECK-BE: addiu $1, $zero, 32767 # encoding: [0x24,0x01,0x7f,0xff]
322 # CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
323 # CHECK-BE: lbu  $8, 0($1)         # encoding: [0x90,0x28,0x00,0x00]
324 # CHECK-BE: lbu  $1, 1($1)         # encoding: [0x90,0x21,0x00,0x01]
325 # CHECK-BE: sll  $8, $8, 8         # encoding: [0x00,0x08,0x42,0x00]
326 # CHECK-BE: or   $8, $8, $1        # encoding: [0x01,0x01,0x40,0x25]
327 # CHECK-LE: addiu $1, $zero, 32767 # encoding: [0xff,0x7f,0x01,0x24]
328 # CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
329 # CHECK-LE: lbu  $8, 1($1)         # encoding: [0x01,0x00,0x28,0x90]
330 # CHECK-LE: lbu  $1, 0($1)         # encoding: [0x00,0x00,0x21,0x90]
331 # CHECK-LE: sll  $8, $8, 8         # encoding: [0x00,0x42,0x08,0x00]
332 # CHECK-LE: or   $8, $8, $1        # encoding: [0x25,0x40,0x01,0x01]
333
334 # Test ULW with immediate operand.
335   ulw $8, 0
336 # CHECK-BE: lwl  $8, 0($zero)      # encoding: [0x88,0x08,0x00,0x00]
337 # CHECK-BE: lwr  $8, 3($zero)      # encoding: [0x98,0x08,0x00,0x03]
338 # CHECK-LE: lwl $8, 3($zero)       # encoding: [0x03,0x00,0x08,0x88]
339 # CHECK-LE: lwr $8, 0($zero)       # encoding: [0x00,0x00,0x08,0x98]
340
341   ulw $8, 2
342 # CHECK-BE: lwl  $8, 2($zero)      # encoding: [0x88,0x08,0x00,0x02]
343 # CHECK-BE: lwr  $8, 5($zero)      # encoding: [0x98,0x08,0x00,0x05]
344 # CHECK-LE: lwl $8, 5($zero)       # encoding: [0x05,0x00,0x08,0x88]
345 # CHECK-LE: lwr $8, 2($zero)       # encoding: [0x02,0x00,0x08,0x98]
346
347   ulw $8, 0x8000
348 # CHECK-BE: ori  $1, $zero, 32768  # encoding: [0x34,0x01,0x80,0x00]
349 # CHECK-BE: lwl  $8, 0($1)         # encoding: [0x88,0x28,0x00,0x00]
350 # CHECK-BE: lwr  $8, 3($1)         # encoding: [0x98,0x28,0x00,0x03]
351 # CHECK-LE: ori $1, $zero, 32768   # encoding: [0x00,0x80,0x01,0x34]
352 # CHECK-LE: lwl $8, 3($1)          # encoding: [0x03,0x00,0x28,0x88]
353 # CHECK-LE: lwr $8, 0($1)          # encoding: [0x00,0x00,0x28,0x98]
354
355   ulw $8, -0x8000
356 # CHECK-BE: lwl  $8, -32768($zero) # encoding: [0x88,0x08,0x80,0x00]
357 # CHECK-BE: lwr  $8, -32765($zero) # encoding: [0x98,0x08,0x80,0x03]
358 # CHECK-LE: lwl $8, -32765($zero)  # encoding: [0x03,0x80,0x08,0x88]
359 # CHECK-LE: lwr $8, -32768($zero)  # encoding: [0x00,0x80,0x08,0x98]
360
361   ulw $8, 0x10000
362 # CHECK-BE: lui  $1, 1             # encoding: [0x3c,0x01,0x00,0x01]
363 # CHECK-BE: lwl  $8, 0($1)         # encoding: [0x88,0x28,0x00,0x00]
364 # CHECK-BE: lwr  $8, 3($1)         # encoding: [0x98,0x28,0x00,0x03]
365 # CHECK-LE: lui $1, 1              # encoding: [0x01,0x00,0x01,0x3c]
366 # CHECK-LE: lwl $8, 3($1)          # encoding: [0x03,0x00,0x28,0x88]
367 # CHECK-LE: lwr $8, 0($1)          # encoding: [0x00,0x00,0x28,0x98]
368
369   ulw $8, 0x18888
370 # CHECK-BE: lui  $1, 1             # encoding: [0x3c,0x01,0x00,0x01]
371 # CHECK-BE: ori  $1, $1, 34952     # encoding: [0x34,0x21,0x88,0x88]
372 # CHECK-BE: lwl  $8, 0($1)         # encoding: [0x88,0x28,0x00,0x00]
373 # CHECK-BE: lwr  $8, 3($1)         # encoding: [0x98,0x28,0x00,0x03]
374 # CHECK-LE: lui $1, 1              # encoding: [0x01,0x00,0x01,0x3c]
375 # CHECK-LE: ori $1, $1, 34952      # encoding: [0x88,0x88,0x21,0x34]
376 # CHECK-LE: lwl $8, 3($1)          # encoding: [0x03,0x00,0x28,0x88]
377 # CHECK-LE: lwr $8, 0($1)          # encoding: [0x00,0x00,0x28,0x98]
378
379   ulw $8, -32771
380 # CHECK-BE: lui  $1, 65535         # encoding: [0x3c,0x01,0xff,0xff]
381 # CHECK-BE: ori  $1, $1, 32765     # encoding: [0x34,0x21,0x7f,0xfd]
382 # CHECK-BE: lwl  $8, 0($1)         # encoding: [0x88,0x28,0x00,0x00]
383 # CHECK-BE: lwr  $8, 3($1)         # encoding: [0x98,0x28,0x00,0x03]
384 # CHECK-LE: lui $1, 65535          # encoding: [0xff,0xff,0x01,0x3c]
385 # CHECK-LE: ori $1, $1, 32765      # encoding: [0xfd,0x7f,0x21,0x34]
386 # CHECK-LE: lwl $8, 3($1)          # encoding: [0x03,0x00,0x28,0x88]
387 # CHECK-LE: lwr $8, 0($1)          # encoding: [0x00,0x00,0x28,0x98]
388
389   ulw $8, 32765
390 # CHECK-BE: addiu $1, $zero, 32765 # encoding: [0x24,0x01,0x7f,0xfd]
391 # CHECK-BE: lwl  $8, 0($1)         # encoding: [0x88,0x28,0x00,0x00]
392 # CHECK-BE: lwr  $8, 3($1)         # encoding: [0x98,0x28,0x00,0x03]
393 # CHECK-LE: addiu $1, $zero, 32765 # encoding: [0xfd,0x7f,0x01,0x24]
394 # CHECK-LE: lwl $8, 3($1)          # encoding: [0x03,0x00,0x28,0x88]
395 # CHECK-LE: lwr $8, 0($1)          # encoding: [0x00,0x00,0x28,0x98]
396
397 # Test ULW with immediate offset and a source register operand.
398   ulw $8, 0($9)
399 # CHECK-BE: lwl  $8, 0($9)         # encoding: [0x89,0x28,0x00,0x00]
400 # CHECK-BE: lwr  $8, 3($9)         # encoding: [0x99,0x28,0x00,0x03]
401 # CHECK-LE: lwl  $8, 3($9)         # encoding: [0x03,0x00,0x28,0x89]
402 # CHECK-LE: lwr  $8, 0($9)         # encoding: [0x00,0x00,0x28,0x99]
403
404   ulw $8, 2($9)
405 # CHECK-BE: lwl  $8, 2($9)         # encoding: [0x89,0x28,0x00,0x02]
406 # CHECK-BE: lwr  $8, 5($9)         # encoding: [0x99,0x28,0x00,0x05]
407 # CHECK-LE: lwl  $8, 5($9)         # encoding: [0x05,0x00,0x28,0x89]
408 # CHECK-LE: lwr  $8, 2($9)         # encoding: [0x02,0x00,0x28,0x99]
409
410   ulw $8, 0x8000($9)
411 # CHECK-BE: ori  $1, $zero, 32768  # encoding: [0x34,0x01,0x80,0x00]
412 # CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
413 # CHECK-BE: lwl  $8, 0($1)         # encoding: [0x88,0x28,0x00,0x00]
414 # CHECK-BE: lwr  $8, 3($1)         # encoding: [0x98,0x28,0x00,0x03]
415 # CHECK-LE: ori  $1, $zero, 32768  # encoding: [0x00,0x80,0x01,0x34]
416 # CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
417 # CHECK-LE: lwl  $8, 3($1)         # encoding: [0x03,0x00,0x28,0x88]
418 # CHECK-LE: lwr  $8, 0($1)         # encoding: [0x00,0x00,0x28,0x98]
419
420   ulw $8, -0x8000($9)
421 # CHECK-BE: lwl  $8, -32768($9)    # encoding: [0x89,0x28,0x80,0x00]
422 # CHECK-BE: lwr  $8, -32765($9)    # encoding: [0x99,0x28,0x80,0x03]
423 # CHECK-LE: lwl  $8, -32765($9)    # encoding: [0x03,0x80,0x28,0x89]
424 # CHECK-LE: lwr  $8, -32768($9)    # encoding: [0x00,0x80,0x28,0x99]
425
426   ulw $8, 0x10000($9)
427 # CHECK-BE: lui  $1, 1             # encoding: [0x3c,0x01,0x00,0x01]
428 # CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
429 # CHECK-BE: lwl  $8, 0($1)         # encoding: [0x88,0x28,0x00,0x00]
430 # CHECK-BE: lwr  $8, 3($1)         # encoding: [0x98,0x28,0x00,0x03]
431 # CHECK-LE: lui  $1, 1             # encoding: [0x01,0x00,0x01,0x3c]
432 # CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
433 # CHECK-LE: lwl  $8, 3($1)         # encoding: [0x03,0x00,0x28,0x88]
434 # CHECK-LE: lwr  $8, 0($1)         # encoding: [0x00,0x00,0x28,0x98]
435
436   ulw $8, 0x18888($9)
437 # CHECK-BE: lui  $1, 1             # encoding: [0x3c,0x01,0x00,0x01]
438 # CHECK-BE: ori  $1, $1, 34952     # encoding: [0x34,0x21,0x88,0x88]
439 # CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
440 # CHECK-BE: lwl  $8, 0($1)         # encoding: [0x88,0x28,0x00,0x00]
441 # CHECK-BE: lwr  $8, 3($1)         # encoding: [0x98,0x28,0x00,0x03]
442 # CHECK-LE: lui  $1, 1             # encoding: [0x01,0x00,0x01,0x3c]
443 # CHECK-LE: ori  $1, $1, 34952     # encoding: [0x88,0x88,0x21,0x34]
444 # CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
445 # CHECK-LE: lwl  $8, 3($1)         # encoding: [0x03,0x00,0x28,0x88]
446 # CHECK-LE: lwr  $8, 0($1)         # encoding: [0x00,0x00,0x28,0x98]
447
448   ulw $8, -32771($9)
449 # CHECK-BE: lui  $1, 65535         # encoding: [0x3c,0x01,0xff,0xff]
450 # CHECK-BE: ori  $1, $1, 32765     # encoding: [0x34,0x21,0x7f,0xfd]
451 # CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
452 # CHECK-BE: lwl  $8, 0($1)         # encoding: [0x88,0x28,0x00,0x00]
453 # CHECK-BE: lwr  $8, 3($1)         # encoding: [0x98,0x28,0x00,0x03]
454 # CHECK-LE: lui  $1, 65535         # encoding: [0xff,0xff,0x01,0x3c]
455 # CHECK-LE: ori  $1, $1, 32765     # encoding: [0xfd,0x7f,0x21,0x34]
456 # CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
457 # CHECK-LE: lwl  $8, 3($1)         # encoding: [0x03,0x00,0x28,0x88]
458 # CHECK-LE: lwr  $8, 0($1)         # encoding: [0x00,0x00,0x28,0x98]
459
460   ulw $8, 32765($9)
461 # CHECK-BE: addiu $1, $zero, 32765 # encoding: [0x24,0x01,0x7f,0xfd]
462 # CHECK-BE: addu $1, $1, $9        # encoding: [0x00,0x29,0x08,0x21]
463 # CHECK-BE: lwl  $8, 0($1)         # encoding: [0x88,0x28,0x00,0x00]
464 # CHECK-BE: lwr  $8, 3($1)         # encoding: [0x98,0x28,0x00,0x03]
465 # CHECK-LE: addiu $1, $zero, 32765 # encoding: [0xfd,0x7f,0x01,0x24]
466 # CHECK-LE: addu $1, $1, $9        # encoding: [0x21,0x08,0x29,0x00]
467 # CHECK-LE: lwl  $8, 3($1)         # encoding: [0x03,0x00,0x28,0x88]
468 # CHECK-LE: lwr  $8, 0($1)         # encoding: [0x00,0x00,0x28,0x98]
469
470 1:
471   add $4, $4, $4