OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
418 VERIFY_RUN(); | 418 VERIFY_RUN(); |
419 } | 419 } |
420 | 420 |
421 | 421 |
422 | 422 |
423 TEST(Vfp) { | 423 TEST(Vfp) { |
424 SET_UP(); | 424 SET_UP(); |
425 | 425 |
426 if (CpuFeatures::IsSupported(VFP3)) { | 426 if (CpuFeatures::IsSupported(VFP3)) { |
427 CpuFeatures::Scope scope(VFP3); | 427 CpuFeatures::Scope scope(VFP3); |
| 428 COMPARE(vmov(d0, r2, r3), |
| 429 "ec432b10 vmov d0, r2, r3"); |
| 430 COMPARE(vmov(r2, r3, d0), |
| 431 "ec532b10 vmov r2, r3, d0"); |
428 COMPARE(vmov(d0, d1), | 432 COMPARE(vmov(d0, d1), |
429 "eeb00b41 vmov.f64 d0, d1"); | 433 "eeb00b41 vmov.f64 d0, d1"); |
| 434 COMPARE(vmov(d3, d27), |
| 435 "eeb03b6b vmov.f64 d3, d27"); |
| 436 COMPARE(vmov(d18, d7), |
| 437 "eef02b47 vmov.f64 d18, d7"); |
| 438 COMPARE(vmov(d18, r2, r3), |
| 439 "ec432b32 vmov d18, r2, r3"); |
| 440 COMPARE(vmov(r2, r3, d18), |
| 441 "ec532b32 vmov r2, r3, d18"); |
| 442 COMPARE(vmov(d20, d31), |
| 443 "eef04b6f vmov.f64 d20, d31"); |
430 COMPARE(vmov(d3, d3, eq), | 444 COMPARE(vmov(d3, d3, eq), |
431 "0eb03b43 vmov.f64eq d3, d3"); | 445 "0eb03b43 vmov.f64eq d3, d3"); |
432 | 446 |
433 COMPARE(vmov(s0, s31), | 447 COMPARE(vmov(s0, s31), |
434 "eeb00a6f vmov.f32 s0, s31"); | 448 "eeb00a6f vmov.f32 s0, s31"); |
435 COMPARE(vmov(s31, s0), | 449 COMPARE(vmov(s31, s0), |
436 "eef0fa40 vmov.f32 s31, s0"); | 450 "eef0fa40 vmov.f32 s31, s0"); |
437 COMPARE(vmov(r0, s0), | 451 COMPARE(vmov(r0, s0), |
438 "ee100a10 vmov r0, s0"); | 452 "ee100a10 vmov r0, s0"); |
439 COMPARE(vmov(r10, s31), | 453 COMPARE(vmov(r10, s31), |
440 "ee1faa90 vmov r10, s31"); | 454 "ee1faa90 vmov r10, s31"); |
441 COMPARE(vmov(s0, r0), | 455 COMPARE(vmov(s0, r0), |
442 "ee000a10 vmov s0, r0"); | 456 "ee000a10 vmov s0, r0"); |
443 COMPARE(vmov(s31, r10), | 457 COMPARE(vmov(s31, r10), |
444 "ee0faa90 vmov s31, r10"); | 458 "ee0faa90 vmov s31, r10"); |
445 | 459 |
446 COMPARE(vabs(d0, d1), | 460 COMPARE(vabs(d0, d1), |
447 "eeb00bc1 vabs.f64 d0, d1"); | 461 "eeb00bc1 vabs.f64 d0, d1"); |
| 462 COMPARE(vabs(d16, d31), |
| 463 "eef00bef vabs.f64 d16, d31"); |
448 COMPARE(vabs(d3, d4, mi), | 464 COMPARE(vabs(d3, d4, mi), |
449 "4eb03bc4 vabs.f64mi d3, d4"); | 465 "4eb03bc4 vabs.f64mi d3, d4"); |
450 | 466 |
451 COMPARE(vneg(d0, d1), | 467 COMPARE(vneg(d0, d1), |
452 "eeb10b41 vneg.f64 d0, d1"); | 468 "eeb10b41 vneg.f64 d0, d1"); |
| 469 COMPARE(vneg(d16, d31), |
| 470 "eef10b6f vneg.f64 d16, d31"); |
453 COMPARE(vneg(d3, d4, mi), | 471 COMPARE(vneg(d3, d4, mi), |
454 "4eb13b44 vneg.f64mi d3, d4"); | 472 "4eb13b44 vneg.f64mi d3, d4"); |
455 | 473 |
456 COMPARE(vadd(d0, d1, d2), | 474 COMPARE(vadd(d0, d1, d2), |
457 "ee310b02 vadd.f64 d0, d1, d2"); | 475 "ee310b02 vadd.f64 d0, d1, d2"); |
| 476 COMPARE(vadd(d16, d17, d18), |
| 477 "ee710ba2 vadd.f64 d16, d17, d18"); |
458 COMPARE(vadd(d3, d4, d5, mi), | 478 COMPARE(vadd(d3, d4, d5, mi), |
459 "4e343b05 vadd.f64mi d3, d4, d5"); | 479 "4e343b05 vadd.f64mi d3, d4, d5"); |
460 | 480 |
461 COMPARE(vsub(d0, d1, d2), | 481 COMPARE(vsub(d0, d1, d2), |
462 "ee310b42 vsub.f64 d0, d1, d2"); | 482 "ee310b42 vsub.f64 d0, d1, d2"); |
| 483 COMPARE(vsub(d16, d17, d18), |
| 484 "ee710be2 vsub.f64 d16, d17, d18"); |
463 COMPARE(vsub(d3, d4, d5, ne), | 485 COMPARE(vsub(d3, d4, d5, ne), |
464 "1e343b45 vsub.f64ne d3, d4, d5"); | 486 "1e343b45 vsub.f64ne d3, d4, d5"); |
465 | 487 |
466 COMPARE(vmul(d2, d1, d0), | 488 COMPARE(vmul(d2, d1, d0), |
467 "ee212b00 vmul.f64 d2, d1, d0"); | 489 "ee212b00 vmul.f64 d2, d1, d0"); |
| 490 COMPARE(vmul(d16, d17, d18), |
| 491 "ee610ba2 vmul.f64 d16, d17, d18"); |
468 COMPARE(vmul(d6, d4, d5, cc), | 492 COMPARE(vmul(d6, d4, d5, cc), |
469 "3e246b05 vmul.f64cc d6, d4, d5"); | 493 "3e246b05 vmul.f64cc d6, d4, d5"); |
470 | 494 |
471 COMPARE(vdiv(d2, d2, d2), | 495 COMPARE(vdiv(d2, d2, d2), |
472 "ee822b02 vdiv.f64 d2, d2, d2"); | 496 "ee822b02 vdiv.f64 d2, d2, d2"); |
| 497 COMPARE(vdiv(d16, d17, d18), |
| 498 "eec10ba2 vdiv.f64 d16, d17, d18"); |
473 COMPARE(vdiv(d6, d7, d7, hi), | 499 COMPARE(vdiv(d6, d7, d7, hi), |
474 "8e876b07 vdiv.f64hi d6, d7, d7"); | 500 "8e876b07 vdiv.f64hi d6, d7, d7"); |
475 | 501 |
| 502 COMPARE(vcmp(d0, d1), |
| 503 "eeb40b41 vcmp.f64 d0, d1"); |
| 504 COMPARE(vcmp(d16, d17), |
| 505 "eef40b61 vcmp.f64 d16, d17"); |
| 506 COMPARE(vcmp(d0, 0.0), |
| 507 "eeb50b40 vcmp.f64 d0, #0.0"); |
| 508 COMPARE(vcmp(d16, 0.0), |
| 509 "eef50b40 vcmp.f64 d16, #0.0"); |
| 510 |
476 COMPARE(vsqrt(d0, d0), | 511 COMPARE(vsqrt(d0, d0), |
477 "eeb10bc0 vsqrt.f64 d0, d0"); | 512 "eeb10bc0 vsqrt.f64 d0, d0"); |
| 513 COMPARE(vsqrt(d16, d17), |
| 514 "eef10be1 vsqrt.f64 d16, d17"); |
478 COMPARE(vsqrt(d2, d3, ne), | 515 COMPARE(vsqrt(d2, d3, ne), |
479 "1eb12bc3 vsqrt.f64ne d2, d3"); | 516 "1eb12bc3 vsqrt.f64ne d2, d3"); |
480 | 517 |
481 COMPARE(vmov(d0, 1.0), | 518 COMPARE(vmov(d0, 1.0), |
482 "eeb70b00 vmov.f64 d0, #1"); | 519 "eeb70b00 vmov.f64 d0, #1"); |
483 COMPARE(vmov(d2, -13.0), | 520 COMPARE(vmov(d2, -13.0), |
484 "eeba2b0a vmov.f64 d2, #-13"); | 521 "eeba2b0a vmov.f64 d2, #-13"); |
485 | 522 |
486 COMPARE(vldr(s0, r0, 0), | 523 COMPARE(vldr(s0, r0, 0), |
487 "ed900a00 vldr s0, [r0 + 4*0]"); | 524 "ed900a00 vldr s0, [r0 + 4*0]"); |
(...skipping 16 matching lines...) Expand all Loading... |
504 "ed898a03 vstr s16, [r9 + 4*3]"); | 541 "ed898a03 vstr s16, [r9 + 4*3]"); |
505 COMPARE(vstr(s31, r10, 1020), | 542 COMPARE(vstr(s31, r10, 1020), |
506 "edcafaff vstr s31, [r10 + 4*255]"); | 543 "edcafaff vstr s31, [r10 + 4*255]"); |
507 | 544 |
508 COMPARE(vldr(d0, r0, 0), | 545 COMPARE(vldr(d0, r0, 0), |
509 "ed900b00 vldr d0, [r0 + 4*0]"); | 546 "ed900b00 vldr d0, [r0 + 4*0]"); |
510 COMPARE(vldr(d1, r1, 4), | 547 COMPARE(vldr(d1, r1, 4), |
511 "ed911b01 vldr d1, [r1 + 4*1]"); | 548 "ed911b01 vldr d1, [r1 + 4*1]"); |
512 COMPARE(vldr(d15, r10, 1020), | 549 COMPARE(vldr(d15, r10, 1020), |
513 "ed9afbff vldr d15, [r10 + 4*255]"); | 550 "ed9afbff vldr d15, [r10 + 4*255]"); |
| 551 COMPARE(vldr(d25, r0, 0), |
| 552 "edd09b00 vldr d25, [r0 + 4*0]"); |
| 553 COMPARE(vldr(d26, r1, 4), |
| 554 "edd1ab01 vldr d26, [r1 + 4*1]"); |
| 555 COMPARE(vldr(d31, r10, 1020), |
| 556 "eddafbff vldr d31, [r10 + 4*255]"); |
514 COMPARE(vstr(d0, r0, 0), | 557 COMPARE(vstr(d0, r0, 0), |
515 "ed800b00 vstr d0, [r0 + 4*0]"); | 558 "ed800b00 vstr d0, [r0 + 4*0]"); |
516 COMPARE(vstr(d1, r1, 4), | 559 COMPARE(vstr(d1, r1, 4), |
517 "ed811b01 vstr d1, [r1 + 4*1]"); | 560 "ed811b01 vstr d1, [r1 + 4*1]"); |
518 COMPARE(vstr(d15, r10, 1020), | 561 COMPARE(vstr(d15, r10, 1020), |
519 "ed8afbff vstr d15, [r10 + 4*255]"); | 562 "ed8afbff vstr d15, [r10 + 4*255]"); |
| 563 COMPARE(vstr(d16, r0, 0), |
| 564 "edc00b00 vstr d16, [r0 + 4*0]"); |
| 565 COMPARE(vstr(d17, r1, 4), |
| 566 "edc11b01 vstr d17, [r1 + 4*1]"); |
| 567 COMPARE(vstr(d31, r10, 1020), |
| 568 "edcafbff vstr d31, [r10 + 4*255]"); |
520 | 569 |
521 COMPARE(vmsr(r5), | 570 COMPARE(vmsr(r5), |
522 "eee15a10 vmsr FPSCR, r5"); | 571 "eee15a10 vmsr FPSCR, r5"); |
523 COMPARE(vmsr(r10, pl), | 572 COMPARE(vmsr(r10, pl), |
524 "5ee1aa10 vmsrpl FPSCR, r10"); | 573 "5ee1aa10 vmsrpl FPSCR, r10"); |
525 COMPARE(vmsr(pc), | 574 COMPARE(vmsr(pc), |
526 "eee1fa10 vmsr FPSCR, APSR"); | 575 "eee1fa10 vmsr FPSCR, APSR"); |
527 COMPARE(vmrs(r5), | 576 COMPARE(vmrs(r5), |
528 "eef15a10 vmrs r5, FPSCR"); | 577 "eef15a10 vmrs r5, FPSCR"); |
529 COMPARE(vmrs(r10, ge), | 578 COMPARE(vmrs(r10, ge), |
530 "aef1aa10 vmrsge r10, FPSCR"); | 579 "aef1aa10 vmrsge r10, FPSCR"); |
531 COMPARE(vmrs(pc), | 580 COMPARE(vmrs(pc), |
532 "eef1fa10 vmrs APSR, FPSCR"); | 581 "eef1fa10 vmrs APSR, FPSCR"); |
533 | 582 |
534 COMPARE(vstm(ia, r0, d1, d3), | 583 COMPARE(vstm(ia, r0, d1, d3), |
535 "ec801b06 vstmia r0, {d1-d3}"); | 584 "ec801b06 vstmia r0, {d1-d3}"); |
536 COMPARE(vldm(ia, r1, d2, d5), | 585 COMPARE(vldm(ia, r1, d2, d5), |
537 "ec912b08 vldmia r1, {d2-d5}"); | 586 "ec912b08 vldmia r1, {d2-d5}"); |
538 COMPARE(vstm(ia, r2, d0, d15), | 587 COMPARE(vstm(ia, r2, d0, d15), |
539 "ec820b20 vstmia r2, {d0-d15}"); | 588 "ec820b20 vstmia r2, {d0-d15}"); |
540 COMPARE(vldm(ia, r3, d0, d15), | 589 COMPARE(vldm(ia, r3, d0, d15), |
541 "ec930b20 vldmia r3, {d0-d15}"); | 590 "ec930b20 vldmia r3, {d0-d15}"); |
| 591 COMPARE(vstm(ia, r0, d16, d31), |
| 592 "ecc00b20 vstmia r0, {d16-d31}"); |
| 593 COMPARE(vldm(ia, r3, d16, d31), |
| 594 "ecd30b20 vldmia r3, {d16-d31}"); |
| 595 COMPARE(vstm(ia, r0, d23, d27), |
| 596 "ecc07b0a vstmia r0, {d23-d27}"); |
| 597 COMPARE(vldm(ia, r3, d23, d27), |
| 598 "ecd37b0a vldmia r3, {d23-d27}"); |
542 COMPARE(vstm(ia, r4, s1, s3), | 599 COMPARE(vstm(ia, r4, s1, s3), |
543 "ecc40a03 vstmia r4, {s1-s3}"); | 600 "ecc40a03 vstmia r4, {s1-s3}"); |
544 COMPARE(vldm(ia, r5, s2, s5), | 601 COMPARE(vldm(ia, r5, s2, s5), |
545 "ec951a04 vldmia r5, {s2-s5}"); | 602 "ec951a04 vldmia r5, {s2-s5}"); |
546 COMPARE(vstm(ia, r6, s0, s31), | 603 COMPARE(vstm(ia, r6, s0, s31), |
547 "ec860a20 vstmia r6, {s0-s31}"); | 604 "ec860a20 vstmia r6, {s0-s31}"); |
548 COMPARE(vldm(ia, r7, s0, s31), | 605 COMPARE(vldm(ia, r7, s0, s31), |
549 "ec970a20 vldmia r7, {s0-s31}"); | 606 "ec970a20 vldmia r7, {s0-s31}"); |
550 | 607 |
551 COMPARE(vmla(d2, d1, d0), | 608 COMPARE(vmla(d2, d1, d0), |
552 "ee012b00 vmla.f64 d2, d1, d0"); | 609 "ee012b00 vmla.f64 d2, d1, d0"); |
| 610 COMPARE(vmla(d16, d17, d18), |
| 611 "ee410ba2 vmla.f64 d16, d17, d18"); |
553 COMPARE(vmla(d6, d4, d5, cc), | 612 COMPARE(vmla(d6, d4, d5, cc), |
554 "3e046b05 vmla.f64cc d6, d4, d5"); | 613 "3e046b05 vmla.f64cc d6, d4, d5"); |
| 614 |
| 615 COMPARE(vcvt_u32_f64(s0, d0), |
| 616 "eebc0bc0 vcvt.u32.f64 s0, d0"); |
| 617 COMPARE(vcvt_u32_f64(s0, d16), |
| 618 "eebc0be0 vcvt.u32.f64 s0, d16"); |
| 619 COMPARE(vcvt_s32_f64(s0, d0), |
| 620 "eebd0bc0 vcvt.s32.f64 s0, d0"); |
| 621 COMPARE(vcvt_s32_f64(s0, d16), |
| 622 "eebd0be0 vcvt.s32.f64 s0, d16"); |
| 623 COMPARE(vcvt_f64_u32(d0, s1), |
| 624 "eeb80b60 vcvt.f64.u32 d0, s1"); |
| 625 COMPARE(vcvt_f64_u32(d16, s1), |
| 626 "eef80b60 vcvt.f64.u32 d16, s1"); |
| 627 COMPARE(vcvt_f64_s32(d0, s1), |
| 628 "eeb80be0 vcvt.f64.s32 d0, s1"); |
| 629 COMPARE(vcvt_f32_s32(s0, s2), |
| 630 "eeb80ac1 vcvt.f32.s32 s0, s2"); |
555 } | 631 } |
556 | 632 |
557 VERIFY_RUN(); | 633 VERIFY_RUN(); |
558 } | 634 } |
559 | 635 |
560 | 636 |
561 TEST(LoadStore) { | 637 TEST(LoadStore) { |
562 SET_UP(); | 638 SET_UP(); |
563 | 639 |
564 COMPARE(ldrb(r0, MemOperand(r1)), | 640 COMPARE(ldrb(r0, MemOperand(r1)), |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
751 COMPARE(strd(r8, r9, MemOperand(r9, -127, PostIndex)), | 827 COMPARE(strd(r8, r9, MemOperand(r9, -127, PostIndex)), |
752 "e04987ff strd r8, [r9], #-127"); | 828 "e04987ff strd r8, [r9], #-127"); |
753 COMPARE(strd(r10, fp, MemOperand(fp, 127, PreIndex)), | 829 COMPARE(strd(r10, fp, MemOperand(fp, 127, PreIndex)), |
754 "e1eba7ff strd r10, [fp, #+127]!"); | 830 "e1eba7ff strd r10, [fp, #+127]!"); |
755 COMPARE(strd(ip, sp, MemOperand(sp, -127, PreIndex)), | 831 COMPARE(strd(ip, sp, MemOperand(sp, -127, PreIndex)), |
756 "e16dc7ff strd ip, [sp, #-127]!"); | 832 "e16dc7ff strd ip, [sp, #-127]!"); |
757 } | 833 } |
758 | 834 |
759 VERIFY_RUN(); | 835 VERIFY_RUN(); |
760 } | 836 } |
OLD | NEW |