OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 COMPARE(addu(v0, v1, s0), | 103 COMPARE(addu(v0, v1, s0), |
104 "00701021 addu v0, v1, s0"); | 104 "00701021 addu v0, v1, s0"); |
105 | 105 |
106 COMPARE(subu(a0, a1, a2), | 106 COMPARE(subu(a0, a1, a2), |
107 "00a62023 subu a0, a1, a2"); | 107 "00a62023 subu a0, a1, a2"); |
108 COMPARE(subu(t2, t3, t4), | 108 COMPARE(subu(t2, t3, t4), |
109 "016c5023 subu t2, t3, t4"); | 109 "016c5023 subu t2, t3, t4"); |
110 COMPARE(subu(v0, v1, s0), | 110 COMPARE(subu(v0, v1, s0), |
111 "00701023 subu v0, v1, s0"); | 111 "00701023 subu v0, v1, s0"); |
112 | 112 |
113 COMPARE(mult(a0, a1), | 113 if (!IsMipsArchVariant(kMips32r6)) { |
114 "00850018 mult a0, a1"); | 114 COMPARE(mult(a0, a1), |
115 COMPARE(mult(t2, t3), | 115 "00850018 mult a0, a1"); |
116 "014b0018 mult t2, t3"); | 116 COMPARE(mult(t2, t3), |
117 COMPARE(mult(v0, v1), | 117 "014b0018 mult t2, t3"); |
118 "00430018 mult v0, v1"); | 118 COMPARE(mult(v0, v1), |
| 119 "00430018 mult v0, v1"); |
119 | 120 |
120 COMPARE(multu(a0, a1), | 121 COMPARE(multu(a0, a1), |
121 "00850019 multu a0, a1"); | 122 "00850019 multu a0, a1"); |
122 COMPARE(multu(t2, t3), | 123 COMPARE(multu(t2, t3), |
123 "014b0019 multu t2, t3"); | 124 "014b0019 multu t2, t3"); |
124 COMPARE(multu(v0, v1), | 125 COMPARE(multu(v0, v1), |
125 "00430019 multu v0, v1"); | 126 "00430019 multu v0, v1"); |
126 | 127 |
127 COMPARE(div(a0, a1), | 128 COMPARE(div(a0, a1), |
128 "0085001a div a0, a1"); | 129 "0085001a div a0, a1"); |
129 COMPARE(div(t2, t3), | 130 COMPARE(div(t2, t3), |
130 "014b001a div t2, t3"); | 131 "014b001a div t2, t3"); |
131 COMPARE(div(v0, v1), | 132 COMPARE(div(v0, v1), |
132 "0043001a div v0, v1"); | 133 "0043001a div v0, v1"); |
133 | 134 |
134 COMPARE(divu(a0, a1), | 135 COMPARE(divu(a0, a1), |
135 "0085001b divu a0, a1"); | 136 "0085001b divu a0, a1"); |
136 COMPARE(divu(t2, t3), | 137 COMPARE(divu(t2, t3), |
137 "014b001b divu t2, t3"); | 138 "014b001b divu t2, t3"); |
138 COMPARE(divu(v0, v1), | 139 COMPARE(divu(v0, v1), |
139 "0043001b divu v0, v1"); | 140 "0043001b divu v0, v1"); |
140 | 141 |
141 if (kArchVariant != kLoongson) { | 142 if (!IsMipsArchVariant(kLoongson)) { |
| 143 COMPARE(mul(a0, a1, a2), |
| 144 "70a62002 mul a0, a1, a2"); |
| 145 COMPARE(mul(t2, t3, t4), |
| 146 "716c5002 mul t2, t3, t4"); |
| 147 COMPARE(mul(v0, v1, s0), |
| 148 "70701002 mul v0, v1, s0"); |
| 149 } |
| 150 } else { // MIPS32r6. |
142 COMPARE(mul(a0, a1, a2), | 151 COMPARE(mul(a0, a1, a2), |
143 "70a62002 mul a0, a1, a2"); | 152 "00a62098 mul a0, a1, a2"); |
144 COMPARE(mul(t2, t3, t4), | 153 COMPARE(muh(a0, a1, a2), |
145 "716c5002 mul t2, t3, t4"); | 154 "00a620d8 muh a0, a1, a2"); |
146 COMPARE(mul(v0, v1, s0), | 155 COMPARE(mul(t1, t2, t3), |
147 "70701002 mul v0, v1, s0"); | 156 "014b4898 mul t1, t2, t3"); |
| 157 COMPARE(muh(t1, t2, t3), |
| 158 "014b48d8 muh t1, t2, t3"); |
| 159 COMPARE(mul(v0, v1, a0), |
| 160 "00641098 mul v0, v1, a0"); |
| 161 COMPARE(muh(v0, v1, a0), |
| 162 "006410d8 muh v0, v1, a0"); |
| 163 |
| 164 COMPARE(mulu(a0, a1, a2), |
| 165 "00a62099 mulu a0, a1, a2"); |
| 166 COMPARE(muhu(a0, a1, a2), |
| 167 "00a620d9 muhu a0, a1, a2"); |
| 168 COMPARE(mulu(t1, t2, t3), |
| 169 "014b4899 mulu t1, t2, t3"); |
| 170 COMPARE(muhu(t1, t2, t3), |
| 171 "014b48d9 muhu t1, t2, t3"); |
| 172 COMPARE(mulu(v0, v1, a0), |
| 173 "00641099 mulu v0, v1, a0"); |
| 174 COMPARE(muhu(v0, v1, a0), |
| 175 "006410d9 muhu v0, v1, a0"); |
| 176 |
| 177 COMPARE(div(a0, a1, a2), |
| 178 "00a6209a div a0, a1, a2"); |
| 179 COMPARE(mod(a0, a1, a2), |
| 180 "00a620da mod a0, a1, a2"); |
| 181 COMPARE(div(t1, t2, t3), |
| 182 "014b489a div t1, t2, t3"); |
| 183 COMPARE(mod(t1, t2, t3), |
| 184 "014b48da mod t1, t2, t3"); |
| 185 COMPARE(div(v0, v1, a0), |
| 186 "0064109a div v0, v1, a0"); |
| 187 COMPARE(mod(v0, v1, a0), |
| 188 "006410da mod v0, v1, a0"); |
| 189 |
| 190 COMPARE(divu(a0, a1, a2), |
| 191 "00a6209b divu a0, a1, a2"); |
| 192 COMPARE(modu(a0, a1, a2), |
| 193 "00a620db modu a0, a1, a2"); |
| 194 COMPARE(divu(t1, t2, t3), |
| 195 "014b489b divu t1, t2, t3"); |
| 196 COMPARE(modu(t1, t2, t3), |
| 197 "014b48db modu t1, t2, t3"); |
| 198 COMPARE(divu(v0, v1, a0), |
| 199 "0064109b divu v0, v1, a0"); |
| 200 COMPARE(modu(v0, v1, a0), |
| 201 "006410db modu v0, v1, a0"); |
| 202 |
| 203 COMPARE(bovc(a0, a0, static_cast<int16_t>(0)), |
| 204 "20840000 bovc a0, a0, 0"); |
| 205 COMPARE(bovc(a1, a0, static_cast<int16_t>(0)), |
| 206 "20a40000 bovc a1, a0, 0"); |
| 207 COMPARE(bovc(a1, a0, 32767), |
| 208 "20a47fff bovc a1, a0, 32767"); |
| 209 COMPARE(bovc(a1, a0, -32768), |
| 210 "20a48000 bovc a1, a0, -32768"); |
| 211 |
| 212 COMPARE(bnvc(a0, a0, static_cast<int16_t>(0)), |
| 213 "60840000 bnvc a0, a0, 0"); |
| 214 COMPARE(bnvc(a1, a0, static_cast<int16_t>(0)), |
| 215 "60a40000 bnvc a1, a0, 0"); |
| 216 COMPARE(bnvc(a1, a0, 32767), |
| 217 "60a47fff bnvc a1, a0, 32767"); |
| 218 COMPARE(bnvc(a1, a0, -32768), |
| 219 "60a48000 bnvc a1, a0, -32768"); |
| 220 |
| 221 COMPARE(beqzc(a0, 0), |
| 222 "d8800000 beqzc a0, 0x0"); |
| 223 COMPARE(beqzc(a0, 0xfffff), // 0x0fffff == 1048575. |
| 224 "d88fffff beqzc a0, 0xfffff"); |
| 225 COMPARE(beqzc(a0, 0x100000), // 0x100000 == -1048576. |
| 226 "d8900000 beqzc a0, 0x100000"); |
| 227 |
| 228 COMPARE(bnezc(a0, 0), |
| 229 "f8800000 bnezc a0, 0x0"); |
| 230 COMPARE(bnezc(a0, 0xfffff), // 0x0fffff == 1048575. |
| 231 "f88fffff bnezc a0, 0xfffff"); |
| 232 COMPARE(bnezc(a0, 0x100000), // 0x100000 == -1048576. |
| 233 "f8900000 bnezc a0, 0x100000"); |
148 } | 234 } |
149 | 235 |
150 COMPARE(addiu(a0, a1, 0x0), | 236 COMPARE(addiu(a0, a1, 0x0), |
151 "24a40000 addiu a0, a1, 0"); | 237 "24a40000 addiu a0, a1, 0"); |
152 COMPARE(addiu(s0, s1, 32767), | 238 COMPARE(addiu(s0, s1, 32767), |
153 "26307fff addiu s0, s1, 32767"); | 239 "26307fff addiu s0, s1, 32767"); |
154 COMPARE(addiu(t2, t3, -32768), | 240 COMPARE(addiu(t2, t3, -32768), |
155 "256a8000 addiu t2, t3, -32768"); | 241 "256a8000 addiu t2, t3, -32768"); |
156 COMPARE(addiu(v0, v1, -1), | 242 COMPARE(addiu(v0, v1, -1), |
157 "2462ffff addiu v0, v1, -1"); | 243 "2462ffff addiu v0, v1, -1"); |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
259 | 345 |
260 COMPARE(srav(a0, a1, a2), | 346 COMPARE(srav(a0, a1, a2), |
261 "00c52007 srav a0, a1, a2"); | 347 "00c52007 srav a0, a1, a2"); |
262 COMPARE(srav(s0, s1, s2), | 348 COMPARE(srav(s0, s1, s2), |
263 "02518007 srav s0, s1, s2"); | 349 "02518007 srav s0, s1, s2"); |
264 COMPARE(srav(t2, t3, t4), | 350 COMPARE(srav(t2, t3, t4), |
265 "018b5007 srav t2, t3, t4"); | 351 "018b5007 srav t2, t3, t4"); |
266 COMPARE(srav(v0, v1, fp), | 352 COMPARE(srav(v0, v1, fp), |
267 "03c31007 srav v0, v1, fp"); | 353 "03c31007 srav v0, v1, fp"); |
268 | 354 |
269 if (kArchVariant == kMips32r2) { | 355 if (IsMipsArchVariant(kMips32r2)) { |
270 COMPARE(rotr(a0, a1, 0), | 356 COMPARE(rotr(a0, a1, 0), |
271 "00252002 rotr a0, a1, 0"); | 357 "00252002 rotr a0, a1, 0"); |
272 COMPARE(rotr(s0, s1, 8), | 358 COMPARE(rotr(s0, s1, 8), |
273 "00318202 rotr s0, s1, 8"); | 359 "00318202 rotr s0, s1, 8"); |
274 COMPARE(rotr(t2, t3, 24), | 360 COMPARE(rotr(t2, t3, 24), |
275 "002b5602 rotr t2, t3, 24"); | 361 "002b5602 rotr t2, t3, 24"); |
276 COMPARE(rotr(v0, v1, 31), | 362 COMPARE(rotr(v0, v1, 31), |
277 "002317c2 rotr v0, v1, 31"); | 363 "002317c2 rotr v0, v1, 31"); |
278 | 364 |
279 COMPARE(rotrv(a0, a1, a2), | 365 COMPARE(rotrv(a0, a1, a2), |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
362 "2862ffff slti v0, v1, -1"); | 448 "2862ffff slti v0, v1, -1"); |
363 COMPARE(sltiu(a0, a1, 0), | 449 COMPARE(sltiu(a0, a1, 0), |
364 "2ca40000 sltiu a0, a1, 0"); | 450 "2ca40000 sltiu a0, a1, 0"); |
365 COMPARE(sltiu(s0, s1, 32767), | 451 COMPARE(sltiu(s0, s1, 32767), |
366 "2e307fff sltiu s0, s1, 32767"); | 452 "2e307fff sltiu s0, s1, 32767"); |
367 COMPARE(sltiu(t2, t3, -32768), | 453 COMPARE(sltiu(t2, t3, -32768), |
368 "2d6a8000 sltiu t2, t3, -32768"); | 454 "2d6a8000 sltiu t2, t3, -32768"); |
369 COMPARE(sltiu(v0, v1, -1), | 455 COMPARE(sltiu(v0, v1, -1), |
370 "2c62ffff sltiu v0, v1, -1"); | 456 "2c62ffff sltiu v0, v1, -1"); |
371 | 457 |
372 if (kArchVariant != kLoongson) { | 458 if (!IsMipsArchVariant(kLoongson)) { |
373 COMPARE(movz(a0, a1, a2), | 459 COMPARE(movz(a0, a1, a2), |
374 "00a6200a movz a0, a1, a2"); | 460 "00a6200a movz a0, a1, a2"); |
375 COMPARE(movz(s0, s1, s2), | 461 COMPARE(movz(s0, s1, s2), |
376 "0232800a movz s0, s1, s2"); | 462 "0232800a movz s0, s1, s2"); |
377 COMPARE(movz(t2, t3, t4), | 463 COMPARE(movz(t2, t3, t4), |
378 "016c500a movz t2, t3, t4"); | 464 "016c500a movz t2, t3, t4"); |
379 COMPARE(movz(v0, v1, a2), | 465 COMPARE(movz(v0, v1, a2), |
380 "0066100a movz v0, v1, a2"); | 466 "0066100a movz v0, v1, a2"); |
381 COMPARE(movn(a0, a1, a2), | 467 COMPARE(movn(a0, a1, a2), |
382 "00a6200b movn a0, a1, a2"); | 468 "00a6200b movn a0, a1, a2"); |
(...skipping 14 matching lines...) Expand all Loading... |
397 "007d1001 movt v0, v1, 7"); | 483 "007d1001 movt v0, v1, 7"); |
398 COMPARE(movf(a0, a1, 0), | 484 COMPARE(movf(a0, a1, 0), |
399 "00a02001 movf a0, a1, 0"); | 485 "00a02001 movf a0, a1, 0"); |
400 COMPARE(movf(s0, s1, 4), | 486 COMPARE(movf(s0, s1, 4), |
401 "02308001 movf s0, s1, 4"); | 487 "02308001 movf s0, s1, 4"); |
402 COMPARE(movf(t2, t3, 5), | 488 COMPARE(movf(t2, t3, 5), |
403 "01745001 movf t2, t3, 5"); | 489 "01745001 movf t2, t3, 5"); |
404 COMPARE(movf(v0, v1, 6), | 490 COMPARE(movf(v0, v1, 6), |
405 "00781001 movf v0, v1, 6"); | 491 "00781001 movf v0, v1, 6"); |
406 | 492 |
407 COMPARE(clz(a0, a1), | 493 if (IsMipsArchVariant(kMips32r6)) { |
408 "70a42020 clz a0, a1"); | 494 COMPARE(clz(a0, a1), |
409 COMPARE(clz(s6, s7), | 495 "00a02050 clz a0, a1"); |
410 "72f6b020 clz s6, s7"); | 496 COMPARE(clz(s6, s7), |
411 COMPARE(clz(v0, v1), | 497 "02e0b050 clz s6, s7"); |
412 "70621020 clz v0, v1"); | 498 COMPARE(clz(v0, v1), |
| 499 "00601050 clz v0, v1"); |
| 500 } else { |
| 501 COMPARE(clz(a0, a1), |
| 502 "70a42020 clz a0, a1"); |
| 503 COMPARE(clz(s6, s7), |
| 504 "72f6b020 clz s6, s7"); |
| 505 COMPARE(clz(v0, v1), |
| 506 "70621020 clz v0, v1"); |
| 507 } |
413 } | 508 } |
414 | 509 |
415 if (kArchVariant == kMips32r2) { | 510 if (IsMipsArchVariant(kMips32r2)) { |
416 COMPARE(ins_(a0, a1, 31, 1), | 511 COMPARE(ins_(a0, a1, 31, 1), |
417 "7ca4ffc4 ins a0, a1, 31, 1"); | 512 "7ca4ffc4 ins a0, a1, 31, 1"); |
418 COMPARE(ins_(s6, s7, 30, 2), | 513 COMPARE(ins_(s6, s7, 30, 2), |
419 "7ef6ff84 ins s6, s7, 30, 2"); | 514 "7ef6ff84 ins s6, s7, 30, 2"); |
420 COMPARE(ins_(v0, v1, 0, 32), | 515 COMPARE(ins_(v0, v1, 0, 32), |
421 "7c62f804 ins v0, v1, 0, 32"); | 516 "7c62f804 ins v0, v1, 0, 32"); |
422 COMPARE(ext_(a0, a1, 31, 1), | 517 COMPARE(ext_(a0, a1, 31, 1), |
423 "7ca407c0 ext a0, a1, 31, 1"); | 518 "7ca407c0 ext a0, a1, 31, 1"); |
424 COMPARE(ext_(s6, s7, 30, 2), | 519 COMPARE(ext_(s6, s7, 30, 2), |
425 "7ef60f80 ext s6, s7, 30, 2"); | 520 "7ef60f80 ext s6, s7, 30, 2"); |
426 COMPARE(ext_(v0, v1, 0, 32), | 521 COMPARE(ext_(v0, v1, 0, 32), |
427 "7c62f800 ext v0, v1, 0, 32"); | 522 "7c62f800 ext v0, v1, 0, 32"); |
428 } | 523 } |
429 | 524 |
430 VERIFY_RUN(); | 525 VERIFY_RUN(); |
431 } | 526 } |
OLD | NEW |