deps: update v8 to 4.3.61.21
[platform/upstream/nodejs.git] / deps / v8 / test / cctest / test-disasm-mips64.cc
1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are
4 // met:
5 //
6 //     * Redistributions of source code must retain the above copyright
7 //       notice, this list of conditions and the following disclaimer.
8 //     * Redistributions in binary form must reproduce the above
9 //       copyright notice, this list of conditions and the following
10 //       disclaimer in the documentation and/or other materials provided
11 //       with the distribution.
12 //     * Neither the name of Google Inc. nor the names of its
13 //       contributors may be used to endorse or promote products derived
14 //       from this software without specific prior written permission.
15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 //
28
29 #include <stdlib.h>
30
31 #include "src/v8.h"
32
33 #include "src/debug.h"
34 #include "src/disasm.h"
35 #include "src/disassembler.h"
36 #include "src/macro-assembler.h"
37 #include "test/cctest/cctest.h"
38
39 using namespace v8::internal;
40
41
42 bool DisassembleAndCompare(byte* pc, const char* compare_string) {
43   disasm::NameConverter converter;
44   disasm::Disassembler disasm(converter);
45   EmbeddedVector<char, 128> disasm_buffer;
46
47   disasm.InstructionDecode(disasm_buffer, pc);
48
49   if (strcmp(compare_string, disasm_buffer.start()) != 0) {
50     fprintf(stderr,
51             "expected: \n"
52             "%s\n"
53             "disassembled: \n"
54             "%s\n\n",
55             compare_string, disasm_buffer.start());
56     return false;
57   }
58   return true;
59 }
60
61
62 // Set up V8 to a state where we can at least run the assembler and
63 // disassembler. Declare the variables and allocate the data structures used
64 // in the rest of the macros.
65 #define SET_UP()                                          \
66   CcTest::InitializeVM();                                 \
67   Isolate* isolate = CcTest::i_isolate();                  \
68   HandleScope scope(isolate);                             \
69   byte *buffer = reinterpret_cast<byte*>(malloc(4*1024)); \
70   Assembler assm(isolate, buffer, 4*1024);                \
71   bool failure = false;
72
73
74 // This macro assembles one instruction using the preallocated assembler and
75 // disassembles the generated instruction, comparing the output to the expected
76 // value. If the comparison fails an error message is printed, but the test
77 // continues to run until the end.
78 #define COMPARE(asm_, compare_string) \
79   { \
80     int pc_offset = assm.pc_offset(); \
81     byte *progcounter = &buffer[pc_offset]; \
82     assm.asm_; \
83     if (!DisassembleAndCompare(progcounter, compare_string)) failure = true; \
84   }
85
86
87 // Verify that all invocations of the COMPARE macro passed successfully.
88 // Exit with a failure if at least one of the tests failed.
89 #define VERIFY_RUN() \
90 if (failure) { \
91     V8_Fatal(__FILE__, __LINE__, "MIPS Disassembler tests failed.\n"); \
92   }
93
94
95 TEST(Type0) {
96   SET_UP();
97
98   COMPARE(addu(a0, a1, a2),
99           "00a62021       addu    a0, a1, a2");
100   COMPARE(daddu(a0, a1, a2),
101           "00a6202d       daddu   a0, a1, a2");
102   COMPARE(addu(a6, a7, t0),
103           "016c5021       addu    a6, a7, t0");
104   COMPARE(daddu(a6, a7, t0),
105           "016c502d       daddu   a6, a7, t0");
106   COMPARE(addu(v0, v1, s0),
107           "00701021       addu    v0, v1, s0");
108   COMPARE(daddu(v0, v1, s0),
109           "0070102d       daddu   v0, v1, s0");
110
111   COMPARE(subu(a0, a1, a2),
112           "00a62023       subu    a0, a1, a2");
113   COMPARE(dsubu(a0, a1, a2),
114           "00a6202f       dsubu   a0, a1, a2");
115   COMPARE(subu(a6, a7, t0),
116           "016c5023       subu    a6, a7, t0");
117   COMPARE(dsubu(a6, a7, t0),
118           "016c502f       dsubu   a6, a7, t0");
119   COMPARE(subu(v0, v1, s0),
120           "00701023       subu    v0, v1, s0");
121   COMPARE(dsubu(v0, v1, s0),
122           "0070102f       dsubu   v0, v1, s0");
123
124   if (kArchVariant != kMips64r6) {
125     COMPARE(mult(a0, a1),
126             "00850018       mult    a0, a1");
127     COMPARE(dmult(a0, a1),
128             "0085001c       dmult   a0, a1");
129     COMPARE(mult(a6, a7),
130             "014b0018       mult    a6, a7");
131     COMPARE(dmult(a6, a7),
132             "014b001c       dmult   a6, a7");
133     COMPARE(mult(v0, v1),
134             "00430018       mult    v0, v1");
135     COMPARE(dmult(v0, v1),
136             "0043001c       dmult   v0, v1");
137
138     COMPARE(multu(a0, a1),
139             "00850019       multu   a0, a1");
140     COMPARE(dmultu(a0, a1),
141             "0085001d       dmultu  a0, a1");
142     COMPARE(multu(a6, a7),
143             "014b0019       multu   a6, a7");
144     COMPARE(dmultu(a6, a7),
145             "014b001d       dmultu  a6, a7");
146     COMPARE(multu(v0, v1),
147             "00430019       multu   v0, v1");
148     COMPARE(dmultu(v0, v1),
149             "0043001d       dmultu  v0, v1");
150
151     COMPARE(div(a0, a1),
152             "0085001a       div     a0, a1");
153     COMPARE(div(a6, a7),
154             "014b001a       div     a6, a7");
155     COMPARE(div(v0, v1),
156             "0043001a       div     v0, v1");
157     COMPARE(ddiv(a0, a1),
158             "0085001e       ddiv    a0, a1");
159     COMPARE(ddiv(a6, a7),
160             "014b001e       ddiv    a6, a7");
161     COMPARE(ddiv(v0, v1),
162             "0043001e       ddiv    v0, v1");
163
164     COMPARE(divu(a0, a1),
165             "0085001b       divu    a0, a1");
166     COMPARE(divu(a6, a7),
167             "014b001b       divu    a6, a7");
168     COMPARE(divu(v0, v1),
169             "0043001b       divu    v0, v1");
170     COMPARE(ddivu(a0, a1),
171             "0085001f       ddivu   a0, a1");
172     COMPARE(ddivu(a6, a7),
173             "014b001f       ddivu   a6, a7");
174     COMPARE(ddivu(v0, v1),
175             "0043001f       ddivu   v0, v1");
176     COMPARE(mul(a0, a1, a2),
177             "70a62002       mul     a0, a1, a2");
178     COMPARE(mul(a6, a7, t0),
179             "716c5002       mul     a6, a7, t0");
180     COMPARE(mul(v0, v1, s0),
181             "70701002       mul     v0, v1, s0");
182   } else {  // MIPS64r6.
183     COMPARE(mul(a0, a1, a2),
184             "00a62098       mul    a0, a1, a2");
185     COMPARE(muh(a0, a1, a2),
186             "00a620d8       muh    a0, a1, a2");
187     COMPARE(dmul(a0, a1, a2),
188             "00a6209c       dmul   a0, a1, a2");
189     COMPARE(dmuh(a0, a1, a2),
190             "00a620dc       dmuh   a0, a1, a2");
191     COMPARE(mul(a5, a6, a7),
192             "014b4898       mul    a5, a6, a7");
193     COMPARE(muh(a5, a6, a7),
194             "014b48d8       muh    a5, a6, a7");
195     COMPARE(dmul(a5, a6, a7),
196             "014b489c       dmul   a5, a6, a7");
197     COMPARE(dmuh(a5, a6, a7),
198             "014b48dc       dmuh   a5, a6, a7");
199     COMPARE(mul(v0, v1, a0),
200             "00641098       mul    v0, v1, a0");
201     COMPARE(muh(v0, v1, a0),
202             "006410d8       muh    v0, v1, a0");
203     COMPARE(dmul(v0, v1, a0),
204             "0064109c       dmul   v0, v1, a0");
205     COMPARE(dmuh(v0, v1, a0),
206             "006410dc       dmuh   v0, v1, a0");
207
208     COMPARE(mulu(a0, a1, a2),
209             "00a62099       mulu   a0, a1, a2");
210     COMPARE(muhu(a0, a1, a2),
211             "00a620d9       muhu   a0, a1, a2");
212     COMPARE(dmulu(a0, a1, a2),
213             "00a6209d       dmulu  a0, a1, a2");
214     COMPARE(dmuhu(a0, a1, a2),
215             "00a620dd       dmuhu  a0, a1, a2");
216     COMPARE(mulu(a5, a6, a7),
217             "014b4899       mulu   a5, a6, a7");
218     COMPARE(muhu(a5, a6, a7),
219             "014b48d9       muhu   a5, a6, a7");
220     COMPARE(dmulu(a5, a6, a7),
221             "014b489d       dmulu  a5, a6, a7");
222     COMPARE(dmuhu(a5, a6, a7),
223             "014b48dd       dmuhu  a5, a6, a7");
224     COMPARE(mulu(v0, v1, a0),
225             "00641099       mulu   v0, v1, a0");
226     COMPARE(muhu(v0, v1, a0),
227             "006410d9       muhu   v0, v1, a0");
228     COMPARE(dmulu(v0, v1, a0),
229             "0064109d       dmulu  v0, v1, a0");
230     COMPARE(dmuhu(v0, v1, a0),
231             "006410dd       dmuhu  v0, v1, a0");
232
233     COMPARE(div(a0, a1, a2),
234             "00a6209a       div    a0, a1, a2");
235     COMPARE(mod(a0, a1, a2),
236             "00a620da       mod    a0, a1, a2");
237     COMPARE(ddiv(a0, a1, a2),
238             "00a6209e       ddiv   a0, a1, a2");
239     COMPARE(dmod(a0, a1, a2),
240             "00a620de       dmod   a0, a1, a2");
241     COMPARE(div(a5, a6, a7),
242             "014b489a       div    a5, a6, a7");
243     COMPARE(mod(a5, a6, a7),
244             "014b48da       mod    a5, a6, a7");
245     COMPARE(ddiv(a5, a6, a7),
246             "014b489e       ddiv   a5, a6, a7");
247     COMPARE(dmod(a5, a6, a7),
248             "014b48de       dmod   a5, a6, a7");
249     COMPARE(div(v0, v1, a0),
250             "0064109a       div    v0, v1, a0");
251     COMPARE(mod(v0, v1, a0),
252             "006410da       mod    v0, v1, a0");
253     COMPARE(ddiv(v0, v1, a0),
254             "0064109e       ddiv   v0, v1, a0");
255     COMPARE(dmod(v0, v1, a0),
256             "006410de       dmod   v0, v1, a0");
257
258     COMPARE(divu(a0, a1, a2),
259             "00a6209b       divu   a0, a1, a2");
260     COMPARE(modu(a0, a1, a2),
261             "00a620db       modu   a0, a1, a2");
262     COMPARE(ddivu(a0, a1, a2),
263             "00a6209f       ddivu  a0, a1, a2");
264     COMPARE(dmodu(a0, a1, a2),
265             "00a620df       dmodu  a0, a1, a2");
266     COMPARE(divu(a5, a6, a7),
267             "014b489b       divu   a5, a6, a7");
268     COMPARE(modu(a5, a6, a7),
269             "014b48db       modu   a5, a6, a7");
270     COMPARE(ddivu(a5, a6, a7),
271             "014b489f       ddivu  a5, a6, a7");
272     COMPARE(dmodu(a5, a6, a7),
273             "014b48df       dmodu  a5, a6, a7");
274     COMPARE(divu(v0, v1, a0),
275             "0064109b       divu   v0, v1, a0");
276     COMPARE(modu(v0, v1, a0),
277             "006410db       modu   v0, v1, a0");
278     COMPARE(ddivu(v0, v1, a0),
279             "0064109f       ddivu  v0, v1, a0");
280     COMPARE(dmodu(v0, v1, a0),
281             "006410df       dmodu  v0, v1, a0");
282
283     COMPARE(bovc(a0, a0, static_cast<int16_t>(0)),
284             "20840000       bovc  a0, a0, 0");
285     COMPARE(bovc(a1, a0, static_cast<int16_t>(0)),
286             "20a40000       bovc  a1, a0, 0");
287     COMPARE(bovc(a1, a0, 32767),
288             "20a47fff       bovc  a1, a0, 32767");
289     COMPARE(bovc(a1, a0, -32768),
290             "20a48000       bovc  a1, a0, -32768");
291
292     COMPARE(bnvc(a0, a0, static_cast<int16_t>(0)),
293             "60840000       bnvc  a0, a0, 0");
294     COMPARE(bnvc(a1, a0, static_cast<int16_t>(0)),
295             "60a40000       bnvc  a1, a0, 0");
296     COMPARE(bnvc(a1, a0, 32767),
297             "60a47fff       bnvc  a1, a0, 32767");
298     COMPARE(bnvc(a1, a0, -32768),
299             "60a48000       bnvc  a1, a0, -32768");
300
301     COMPARE(beqzc(a0, 0),
302             "d8800000       beqzc   a0, 0x0");
303     COMPARE(beqzc(a0, 0xfffff),                   // 0x0fffff ==  1048575.
304             "d88fffff       beqzc   a0, 0xfffff");
305     COMPARE(beqzc(a0, 0x100000),                  // 0x100000 == -1048576.
306             "d8900000       beqzc   a0, 0x100000");
307
308     COMPARE(bnezc(a0, 0),
309             "f8800000       bnezc   a0, 0x0");
310     COMPARE(bnezc(a0, 0xfffff),                   // 0x0fffff ==  1048575.
311             "f88fffff       bnezc   a0, 0xfffff");
312     COMPARE(bnezc(a0, 0x100000),                  // 0x100000 == -1048576.
313             "f8900000       bnezc   a0, 0x100000");
314   }
315
316   COMPARE(addiu(a0, a1, 0x0),
317           "24a40000       addiu   a0, a1, 0");
318   COMPARE(addiu(s0, s1, 32767),
319           "26307fff       addiu   s0, s1, 32767");
320   COMPARE(addiu(a6, a7, -32768),
321           "256a8000       addiu   a6, a7, -32768");
322   COMPARE(addiu(v0, v1, -1),
323           "2462ffff       addiu   v0, v1, -1");
324   COMPARE(daddiu(a0, a1, 0x0),
325           "64a40000       daddiu  a0, a1, 0");
326   COMPARE(daddiu(s0, s1, 32767),
327           "66307fff       daddiu  s0, s1, 32767");
328   COMPARE(daddiu(a6, a7, -32768),
329           "656a8000       daddiu  a6, a7, -32768");
330   COMPARE(daddiu(v0, v1, -1),
331           "6462ffff       daddiu  v0, v1, -1");
332
333   COMPARE(and_(a0, a1, a2),
334           "00a62024       and     a0, a1, a2");
335   COMPARE(and_(s0, s1, s2),
336           "02328024       and     s0, s1, s2");
337   COMPARE(and_(a6, a7, t0),
338           "016c5024       and     a6, a7, t0");
339   COMPARE(and_(v0, v1, a2),
340           "00661024       and     v0, v1, a2");
341
342   COMPARE(or_(a0, a1, a2),
343           "00a62025       or      a0, a1, a2");
344   COMPARE(or_(s0, s1, s2),
345           "02328025       or      s0, s1, s2");
346   COMPARE(or_(a6, a7, t0),
347           "016c5025       or      a6, a7, t0");
348   COMPARE(or_(v0, v1, a2),
349           "00661025       or      v0, v1, a2");
350
351   COMPARE(xor_(a0, a1, a2),
352           "00a62026       xor     a0, a1, a2");
353   COMPARE(xor_(s0, s1, s2),
354           "02328026       xor     s0, s1, s2");
355   COMPARE(xor_(a6, a7, t0),
356           "016c5026       xor     a6, a7, t0");
357   COMPARE(xor_(v0, v1, a2),
358           "00661026       xor     v0, v1, a2");
359
360   COMPARE(nor(a0, a1, a2),
361           "00a62027       nor     a0, a1, a2");
362   COMPARE(nor(s0, s1, s2),
363           "02328027       nor     s0, s1, s2");
364   COMPARE(nor(a6, a7, t0),
365           "016c5027       nor     a6, a7, t0");
366   COMPARE(nor(v0, v1, a2),
367           "00661027       nor     v0, v1, a2");
368
369   COMPARE(andi(a0, a1, 0x1),
370           "30a40001       andi    a0, a1, 0x1");
371   COMPARE(andi(v0, v1, 0xffff),
372           "3062ffff       andi    v0, v1, 0xffff");
373
374   COMPARE(ori(a0, a1, 0x1),
375           "34a40001       ori     a0, a1, 0x1");
376   COMPARE(ori(v0, v1, 0xffff),
377           "3462ffff       ori     v0, v1, 0xffff");
378
379   COMPARE(xori(a0, a1, 0x1),
380           "38a40001       xori    a0, a1, 0x1");
381   COMPARE(xori(v0, v1, 0xffff),
382           "3862ffff       xori    v0, v1, 0xffff");
383
384   COMPARE(lui(a0, 0x1),
385           "3c040001       lui     a0, 0x1");
386   COMPARE(lui(v0, 0xffff),
387           "3c02ffff       lui     v0, 0xffff");
388
389   COMPARE(sll(a0, a1, 0),
390           "00052000       sll     a0, a1, 0");
391   COMPARE(sll(s0, s1, 8),
392           "00118200       sll     s0, s1, 8");
393   COMPARE(sll(a6, a7, 24),
394           "000b5600       sll     a6, a7, 24");
395   COMPARE(sll(v0, v1, 31),
396           "000317c0       sll     v0, v1, 31");
397   COMPARE(dsll(a0, a1, 0),
398           "00052038       dsll    a0, a1, 0");
399   COMPARE(dsll(s0, s1, 8),
400           "00118238       dsll    s0, s1, 8");
401   COMPARE(dsll(a6, a7, 24),
402           "000b5638       dsll    a6, a7, 24");
403   COMPARE(dsll(v0, v1, 31),
404           "000317f8       dsll    v0, v1, 31");
405
406   COMPARE(sllv(a0, a1, a2),
407           "00c52004       sllv    a0, a1, a2");
408   COMPARE(sllv(s0, s1, s2),
409           "02518004       sllv    s0, s1, s2");
410   COMPARE(sllv(a6, a7, t0),
411           "018b5004       sllv    a6, a7, t0");
412   COMPARE(sllv(v0, v1, fp),
413           "03c31004       sllv    v0, v1, fp");
414   COMPARE(dsllv(a0, a1, a2),
415           "00c52014       dsllv   a0, a1, a2");
416   COMPARE(dsllv(s0, s1, s2),
417           "02518014       dsllv   s0, s1, s2");
418   COMPARE(dsllv(a6, a7, t0),
419           "018b5014       dsllv   a6, a7, t0");
420   COMPARE(dsllv(v0, v1, fp),
421           "03c31014       dsllv   v0, v1, fp");
422
423   COMPARE(srl(a0, a1, 0),
424           "00052002       srl     a0, a1, 0");
425   COMPARE(srl(s0, s1, 8),
426           "00118202       srl     s0, s1, 8");
427   COMPARE(srl(a6, a7, 24),
428           "000b5602       srl     a6, a7, 24");
429   COMPARE(srl(v0, v1, 31),
430           "000317c2       srl     v0, v1, 31");
431   COMPARE(dsrl(a0, a1, 0),
432           "0005203a       dsrl    a0, a1, 0");
433   COMPARE(dsrl(s0, s1, 8),
434           "0011823a       dsrl    s0, s1, 8");
435   COMPARE(dsrl(a6, a7, 24),
436           "000b563a       dsrl    a6, a7, 24");
437   COMPARE(dsrl(v0, v1, 31),
438           "000317fa       dsrl    v0, v1, 31");
439
440   COMPARE(srlv(a0, a1, a2),
441           "00c52006       srlv    a0, a1, a2");
442   COMPARE(srlv(s0, s1, s2),
443           "02518006       srlv    s0, s1, s2");
444   COMPARE(srlv(a6, a7, t0),
445           "018b5006       srlv    a6, a7, t0");
446   COMPARE(srlv(v0, v1, fp),
447           "03c31006       srlv    v0, v1, fp");
448   COMPARE(dsrlv(a0, a1, a2),
449           "00c52016       dsrlv   a0, a1, a2");
450   COMPARE(dsrlv(s0, s1, s2),
451           "02518016       dsrlv   s0, s1, s2");
452   COMPARE(dsrlv(a6, a7, t0),
453           "018b5016       dsrlv   a6, a7, t0");
454   COMPARE(dsrlv(v0, v1, fp),
455           "03c31016       dsrlv   v0, v1, fp");
456
457   COMPARE(sra(a0, a1, 0),
458           "00052003       sra     a0, a1, 0");
459   COMPARE(sra(s0, s1, 8),
460           "00118203       sra     s0, s1, 8");
461   COMPARE(sra(a6, a7, 24),
462           "000b5603       sra     a6, a7, 24");
463   COMPARE(sra(v0, v1, 31),
464           "000317c3       sra     v0, v1, 31");
465   COMPARE(dsra(a0, a1, 0),
466           "0005203b       dsra    a0, a1, 0");
467   COMPARE(dsra(s0, s1, 8),
468           "0011823b       dsra    s0, s1, 8");
469   COMPARE(dsra(a6, a7, 24),
470           "000b563b       dsra    a6, a7, 24");
471   COMPARE(dsra(v0, v1, 31),
472           "000317fb       dsra    v0, v1, 31");
473
474   COMPARE(srav(a0, a1, a2),
475           "00c52007       srav    a0, a1, a2");
476   COMPARE(srav(s0, s1, s2),
477           "02518007       srav    s0, s1, s2");
478   COMPARE(srav(a6, a7, t0),
479           "018b5007       srav    a6, a7, t0");
480   COMPARE(srav(v0, v1, fp),
481           "03c31007       srav    v0, v1, fp");
482   COMPARE(dsrav(a0, a1, a2),
483           "00c52017       dsrav   a0, a1, a2");
484   COMPARE(dsrav(s0, s1, s2),
485           "02518017       dsrav   s0, s1, s2");
486   COMPARE(dsrav(a6, a7, t0),
487           "018b5017       dsrav   a6, a7, t0");
488   COMPARE(dsrav(v0, v1, fp),
489           "03c31017       dsrav   v0, v1, fp");
490
491   if (kArchVariant == kMips64r2) {
492     COMPARE(rotr(a0, a1, 0),
493             "00252002       rotr    a0, a1, 0");
494     COMPARE(rotr(s0, s1, 8),
495             "00318202       rotr    s0, s1, 8");
496     COMPARE(rotr(a6, a7, 24),
497             "002b5602       rotr    a6, a7, 24");
498     COMPARE(rotr(v0, v1, 31),
499             "002317c2       rotr    v0, v1, 31");
500     COMPARE(drotr(a0, a1, 0),
501             "0025203a       drotr   a0, a1, 0");
502     COMPARE(drotr(s0, s1, 8),
503             "0031823a       drotr   s0, s1, 8");
504     COMPARE(drotr(a6, a7, 24),
505             "002b563a       drotr   a6, a7, 24");
506     COMPARE(drotr(v0, v1, 31),
507             "002317fa       drotr   v0, v1, 31");
508
509     COMPARE(rotrv(a0, a1, a2),
510             "00c52046       rotrv   a0, a1, a2");
511     COMPARE(rotrv(s0, s1, s2),
512             "02518046       rotrv   s0, s1, s2");
513     COMPARE(rotrv(a6, a7, t0),
514             "018b5046       rotrv   a6, a7, t0");
515     COMPARE(rotrv(v0, v1, fp),
516             "03c31046       rotrv   v0, v1, fp");
517     COMPARE(drotrv(a0, a1, a2),
518             "00c52056       drotrv  a0, a1, a2");
519     COMPARE(drotrv(s0, s1, s2),
520             "02518056       drotrv  s0, s1, s2");
521     COMPARE(drotrv(a6, a7, t0),
522             "018b5056       drotrv  a6, a7, t0");
523     COMPARE(drotrv(v0, v1, fp),
524             "03c31056       drotrv  v0, v1, fp");
525   }
526
527   COMPARE(break_(0),
528           "0000000d       break, code: 0x00000 (0)");
529   COMPARE(break_(261120),
530           "00ff000d       break, code: 0x3fc00 (261120)");
531   COMPARE(break_(1047552),
532           "03ff000d       break, code: 0xffc00 (1047552)");
533
534   COMPARE(tge(a0, a1, 0),
535           "00850030       tge     a0, a1, code: 0x000");
536   COMPARE(tge(s0, s1, 1023),
537           "0211fff0       tge     s0, s1, code: 0x3ff");
538   COMPARE(tgeu(a0, a1, 0),
539           "00850031       tgeu    a0, a1, code: 0x000");
540   COMPARE(tgeu(s0, s1, 1023),
541           "0211fff1       tgeu    s0, s1, code: 0x3ff");
542   COMPARE(tlt(a0, a1, 0),
543           "00850032       tlt     a0, a1, code: 0x000");
544   COMPARE(tlt(s0, s1, 1023),
545           "0211fff2       tlt     s0, s1, code: 0x3ff");
546   COMPARE(tltu(a0, a1, 0),
547           "00850033       tltu    a0, a1, code: 0x000");
548   COMPARE(tltu(s0, s1, 1023),
549           "0211fff3       tltu    s0, s1, code: 0x3ff");
550   COMPARE(teq(a0, a1, 0),
551           "00850034       teq     a0, a1, code: 0x000");
552   COMPARE(teq(s0, s1, 1023),
553           "0211fff4       teq     s0, s1, code: 0x3ff");
554   COMPARE(tne(a0, a1, 0),
555           "00850036       tne     a0, a1, code: 0x000");
556   COMPARE(tne(s0, s1, 1023),
557           "0211fff6       tne     s0, s1, code: 0x3ff");
558
559   COMPARE(mfhi(a0),
560           "00002010       mfhi    a0");
561   COMPARE(mfhi(s2),
562           "00009010       mfhi    s2");
563   COMPARE(mfhi(t0),
564           "00006010       mfhi    t0");
565   COMPARE(mfhi(v1),
566           "00001810       mfhi    v1");
567   COMPARE(mflo(a0),
568           "00002012       mflo    a0");
569   COMPARE(mflo(s2),
570           "00009012       mflo    s2");
571   COMPARE(mflo(t0),
572           "00006012       mflo    t0");
573   COMPARE(mflo(v1),
574           "00001812       mflo    v1");
575
576   COMPARE(slt(a0, a1, a2),
577           "00a6202a       slt     a0, a1, a2");
578   COMPARE(slt(s0, s1, s2),
579           "0232802a       slt     s0, s1, s2");
580   COMPARE(slt(a6, a7, t0),
581           "016c502a       slt     a6, a7, t0");
582   COMPARE(slt(v0, v1, a2),
583           "0066102a       slt     v0, v1, a2");
584   COMPARE(sltu(a0, a1, a2),
585           "00a6202b       sltu    a0, a1, a2");
586   COMPARE(sltu(s0, s1, s2),
587           "0232802b       sltu    s0, s1, s2");
588   COMPARE(sltu(a6, a7, t0),
589           "016c502b       sltu    a6, a7, t0");
590   COMPARE(sltu(v0, v1, a2),
591           "0066102b       sltu    v0, v1, a2");
592
593   COMPARE(slti(a0, a1, 0),
594           "28a40000       slti    a0, a1, 0");
595   COMPARE(slti(s0, s1, 32767),
596           "2a307fff       slti    s0, s1, 32767");
597   COMPARE(slti(a6, a7, -32768),
598           "296a8000       slti    a6, a7, -32768");
599   COMPARE(slti(v0, v1, -1),
600           "2862ffff       slti    v0, v1, -1");
601   COMPARE(sltiu(a0, a1, 0),
602           "2ca40000       sltiu   a0, a1, 0");
603   COMPARE(sltiu(s0, s1, 32767),
604           "2e307fff       sltiu   s0, s1, 32767");
605   COMPARE(sltiu(a6, a7, -32768),
606           "2d6a8000       sltiu   a6, a7, -32768");
607   COMPARE(sltiu(v0, v1, -1),
608           "2c62ffff       sltiu   v0, v1, -1");
609   COMPARE(movz(a0, a1, a2),
610           "00a6200a       movz    a0, a1, a2");
611   COMPARE(movz(s0, s1, s2),
612           "0232800a       movz    s0, s1, s2");
613   COMPARE(movz(a6, a7, t0),
614           "016c500a       movz    a6, a7, t0");
615   COMPARE(movz(v0, v1, a2),
616           "0066100a       movz    v0, v1, a2");
617   COMPARE(movn(a0, a1, a2),
618           "00a6200b       movn    a0, a1, a2");
619   COMPARE(movn(s0, s1, s2),
620           "0232800b       movn    s0, s1, s2");
621   COMPARE(movn(a6, a7, t0),
622           "016c500b       movn    a6, a7, t0");
623   COMPARE(movn(v0, v1, a2),
624           "0066100b       movn    v0, v1, a2");
625
626   COMPARE(movt(a0, a1, 1),
627           "00a52001       movt    a0, a1, 1");
628   COMPARE(movt(s0, s1, 2),
629           "02298001       movt    s0, s1, 2");
630   COMPARE(movt(a6, a7, 3),
631           "016d5001       movt    a6, a7, 3");
632   COMPARE(movt(v0, v1, 7),
633           "007d1001       movt    v0, v1, 7");
634   COMPARE(movf(a0, a1, 0),
635           "00a02001       movf    a0, a1, 0");
636   COMPARE(movf(s0, s1, 4),
637           "02308001       movf    s0, s1, 4");
638   COMPARE(movf(a6, a7, 5),
639           "01745001       movf    a6, a7, 5");
640   COMPARE(movf(v0, v1, 6),
641           "00781001       movf    v0, v1, 6");
642
643   if (kArchVariant == kMips64r6) {
644     COMPARE(clz(a0, a1),
645             "00a02050       clz     a0, a1");
646     COMPARE(clz(s6, s7),
647             "02e0b050       clz     s6, s7");
648     COMPARE(clz(v0, v1),
649             "00601050       clz     v0, v1");
650   } else {
651     COMPARE(clz(a0, a1),
652             "70a42020       clz     a0, a1");
653     COMPARE(clz(s6, s7),
654             "72f6b020       clz     s6, s7");
655     COMPARE(clz(v0, v1),
656             "70621020       clz     v0, v1");
657   }
658
659   COMPARE(ins_(a0, a1, 31, 1),
660           "7ca4ffc4       ins     a0, a1, 31, 1");
661   COMPARE(ins_(s6, s7, 30, 2),
662           "7ef6ff84       ins     s6, s7, 30, 2");
663   COMPARE(ins_(v0, v1, 0, 32),
664           "7c62f804       ins     v0, v1, 0, 32");
665   COMPARE(ext_(a0, a1, 31, 1),
666           "7ca407c0       ext     a0, a1, 31, 1");
667   COMPARE(ext_(s6, s7, 30, 2),
668           "7ef60f80       ext     s6, s7, 30, 2");
669   COMPARE(ext_(v0, v1, 0, 32),
670           "7c62f800       ext     v0, v1, 0, 32");
671
672   VERIFY_RUN();
673 }