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 |
| 523 COMPARE(vmov(d0, 0, r0), |
| 524 "ee000b10 vmov.32 d0[0], r0"); |
| 525 COMPARE(vmov(d0, 1, r0), |
| 526 "ee200b10 vmov.32 d0[1], r0"); |
| 527 COMPARE(vmov(d31, 0, r7), |
| 528 "ee0f7b90 vmov.32 d31[0], r7"); |
| 529 COMPARE(vmov(d31, 1, r7), |
| 530 "ee2f7b90 vmov.32 d31[1], r7"); |
| 531 |
486 COMPARE(vldr(s0, r0, 0), | 532 COMPARE(vldr(s0, r0, 0), |
487 "ed900a00 vldr s0, [r0 + 4*0]"); | 533 "ed900a00 vldr s0, [r0 + 4*0]"); |
488 COMPARE(vldr(s1, r1, 4), | 534 COMPARE(vldr(s1, r1, 4), |
489 "edd10a01 vldr s1, [r1 + 4*1]"); | 535 "edd10a01 vldr s1, [r1 + 4*1]"); |
490 COMPARE(vldr(s15, r4, 16), | 536 COMPARE(vldr(s15, r4, 16), |
491 "edd47a04 vldr s15, [r4 + 4*4]"); | 537 "edd47a04 vldr s15, [r4 + 4*4]"); |
492 COMPARE(vldr(s16, r5, 20), | 538 COMPARE(vldr(s16, r5, 20), |
493 "ed958a05 vldr s16, [r5 + 4*5]"); | 539 "ed958a05 vldr s16, [r5 + 4*5]"); |
494 COMPARE(vldr(s31, r10, 1020), | 540 COMPARE(vldr(s31, r10, 1020), |
495 "eddafaff vldr s31, [r10 + 4*255]"); | 541 "eddafaff vldr s31, [r10 + 4*255]"); |
496 | 542 |
497 COMPARE(vstr(s0, r0, 0), | 543 COMPARE(vstr(s0, r0, 0), |
498 "ed800a00 vstr s0, [r0 + 4*0]"); | 544 "ed800a00 vstr s0, [r0 + 4*0]"); |
499 COMPARE(vstr(s1, r1, 4), | 545 COMPARE(vstr(s1, r1, 4), |
500 "edc10a01 vstr s1, [r1 + 4*1]"); | 546 "edc10a01 vstr s1, [r1 + 4*1]"); |
501 COMPARE(vstr(s15, r8, 8), | 547 COMPARE(vstr(s15, r8, 8), |
502 "edc87a02 vstr s15, [r8 + 4*2]"); | 548 "edc87a02 vstr s15, [r8 + 4*2]"); |
503 COMPARE(vstr(s16, r9, 12), | 549 COMPARE(vstr(s16, r9, 12), |
504 "ed898a03 vstr s16, [r9 + 4*3]"); | 550 "ed898a03 vstr s16, [r9 + 4*3]"); |
505 COMPARE(vstr(s31, r10, 1020), | 551 COMPARE(vstr(s31, r10, 1020), |
506 "edcafaff vstr s31, [r10 + 4*255]"); | 552 "edcafaff vstr s31, [r10 + 4*255]"); |
507 | 553 |
508 COMPARE(vldr(d0, r0, 0), | 554 COMPARE(vldr(d0, r0, 0), |
509 "ed900b00 vldr d0, [r0 + 4*0]"); | 555 "ed900b00 vldr d0, [r0 + 4*0]"); |
510 COMPARE(vldr(d1, r1, 4), | 556 COMPARE(vldr(d1, r1, 4), |
511 "ed911b01 vldr d1, [r1 + 4*1]"); | 557 "ed911b01 vldr d1, [r1 + 4*1]"); |
512 COMPARE(vldr(d15, r10, 1020), | 558 COMPARE(vldr(d15, r10, 1020), |
513 "ed9afbff vldr d15, [r10 + 4*255]"); | 559 "ed9afbff vldr d15, [r10 + 4*255]"); |
| 560 COMPARE(vldr(d25, r0, 0), |
| 561 "edd09b00 vldr d25, [r0 + 4*0]"); |
| 562 COMPARE(vldr(d26, r1, 4), |
| 563 "edd1ab01 vldr d26, [r1 + 4*1]"); |
| 564 COMPARE(vldr(d31, r10, 1020), |
| 565 "eddafbff vldr d31, [r10 + 4*255]"); |
514 COMPARE(vstr(d0, r0, 0), | 566 COMPARE(vstr(d0, r0, 0), |
515 "ed800b00 vstr d0, [r0 + 4*0]"); | 567 "ed800b00 vstr d0, [r0 + 4*0]"); |
516 COMPARE(vstr(d1, r1, 4), | 568 COMPARE(vstr(d1, r1, 4), |
517 "ed811b01 vstr d1, [r1 + 4*1]"); | 569 "ed811b01 vstr d1, [r1 + 4*1]"); |
518 COMPARE(vstr(d15, r10, 1020), | 570 COMPARE(vstr(d15, r10, 1020), |
519 "ed8afbff vstr d15, [r10 + 4*255]"); | 571 "ed8afbff vstr d15, [r10 + 4*255]"); |
| 572 COMPARE(vstr(d16, r0, 0), |
| 573 "edc00b00 vstr d16, [r0 + 4*0]"); |
| 574 COMPARE(vstr(d17, r1, 4), |
| 575 "edc11b01 vstr d17, [r1 + 4*1]"); |
| 576 COMPARE(vstr(d31, r10, 1020), |
| 577 "edcafbff vstr d31, [r10 + 4*255]"); |
520 | 578 |
521 COMPARE(vmsr(r5), | 579 COMPARE(vmsr(r5), |
522 "eee15a10 vmsr FPSCR, r5"); | 580 "eee15a10 vmsr FPSCR, r5"); |
523 COMPARE(vmsr(r10, pl), | 581 COMPARE(vmsr(r10, pl), |
524 "5ee1aa10 vmsrpl FPSCR, r10"); | 582 "5ee1aa10 vmsrpl FPSCR, r10"); |
525 COMPARE(vmsr(pc), | 583 COMPARE(vmsr(pc), |
526 "eee1fa10 vmsr FPSCR, APSR"); | 584 "eee1fa10 vmsr FPSCR, APSR"); |
527 COMPARE(vmrs(r5), | 585 COMPARE(vmrs(r5), |
528 "eef15a10 vmrs r5, FPSCR"); | 586 "eef15a10 vmrs r5, FPSCR"); |
529 COMPARE(vmrs(r10, ge), | 587 COMPARE(vmrs(r10, ge), |
530 "aef1aa10 vmrsge r10, FPSCR"); | 588 "aef1aa10 vmrsge r10, FPSCR"); |
531 COMPARE(vmrs(pc), | 589 COMPARE(vmrs(pc), |
532 "eef1fa10 vmrs APSR, FPSCR"); | 590 "eef1fa10 vmrs APSR, FPSCR"); |
533 | 591 |
534 COMPARE(vstm(ia, r0, d1, d3), | 592 COMPARE(vstm(ia, r0, d1, d3), |
535 "ec801b06 vstmia r0, {d1-d3}"); | 593 "ec801b06 vstmia r0, {d1-d3}"); |
536 COMPARE(vldm(ia, r1, d2, d5), | 594 COMPARE(vldm(ia, r1, d2, d5), |
537 "ec912b08 vldmia r1, {d2-d5}"); | 595 "ec912b08 vldmia r1, {d2-d5}"); |
538 COMPARE(vstm(ia, r2, d0, d15), | 596 COMPARE(vstm(ia, r2, d0, d15), |
539 "ec820b20 vstmia r2, {d0-d15}"); | 597 "ec820b20 vstmia r2, {d0-d15}"); |
540 COMPARE(vldm(ia, r3, d0, d15), | 598 COMPARE(vldm(ia, r3, d0, d15), |
541 "ec930b20 vldmia r3, {d0-d15}"); | 599 "ec930b20 vldmia r3, {d0-d15}"); |
| 600 COMPARE(vstm(ia, r0, d16, d31), |
| 601 "ecc00b20 vstmia r0, {d16-d31}"); |
| 602 COMPARE(vldm(ia, r3, d16, d31), |
| 603 "ecd30b20 vldmia r3, {d16-d31}"); |
| 604 COMPARE(vstm(ia, r0, d23, d27), |
| 605 "ecc07b0a vstmia r0, {d23-d27}"); |
| 606 COMPARE(vldm(ia, r3, d23, d27), |
| 607 "ecd37b0a vldmia r3, {d23-d27}"); |
542 COMPARE(vstm(ia, r4, s1, s3), | 608 COMPARE(vstm(ia, r4, s1, s3), |
543 "ecc40a03 vstmia r4, {s1-s3}"); | 609 "ecc40a03 vstmia r4, {s1-s3}"); |
544 COMPARE(vldm(ia, r5, s2, s5), | 610 COMPARE(vldm(ia, r5, s2, s5), |
545 "ec951a04 vldmia r5, {s2-s5}"); | 611 "ec951a04 vldmia r5, {s2-s5}"); |
546 COMPARE(vstm(ia, r6, s0, s31), | 612 COMPARE(vstm(ia, r6, s0, s31), |
547 "ec860a20 vstmia r6, {s0-s31}"); | 613 "ec860a20 vstmia r6, {s0-s31}"); |
548 COMPARE(vldm(ia, r7, s0, s31), | 614 COMPARE(vldm(ia, r7, s0, s31), |
549 "ec970a20 vldmia r7, {s0-s31}"); | 615 "ec970a20 vldmia r7, {s0-s31}"); |
550 | 616 |
551 COMPARE(vmla(d2, d1, d0), | 617 COMPARE(vmla(d2, d1, d0), |
552 "ee012b00 vmla.f64 d2, d1, d0"); | 618 "ee012b00 vmla.f64 d2, d1, d0"); |
| 619 COMPARE(vmla(d16, d17, d18), |
| 620 "ee410ba2 vmla.f64 d16, d17, d18"); |
553 COMPARE(vmla(d6, d4, d5, cc), | 621 COMPARE(vmla(d6, d4, d5, cc), |
554 "3e046b05 vmla.f64cc d6, d4, d5"); | 622 "3e046b05 vmla.f64cc d6, d4, d5"); |
| 623 |
| 624 COMPARE(vcvt_u32_f64(s0, d0), |
| 625 "eebc0bc0 vcvt.u32.f64 s0, d0"); |
| 626 COMPARE(vcvt_u32_f64(s0, d16), |
| 627 "eebc0be0 vcvt.u32.f64 s0, d16"); |
| 628 COMPARE(vcvt_s32_f64(s0, d0), |
| 629 "eebd0bc0 vcvt.s32.f64 s0, d0"); |
| 630 COMPARE(vcvt_s32_f64(s0, d16), |
| 631 "eebd0be0 vcvt.s32.f64 s0, d16"); |
| 632 COMPARE(vcvt_f64_u32(d0, s1), |
| 633 "eeb80b60 vcvt.f64.u32 d0, s1"); |
| 634 COMPARE(vcvt_f64_u32(d16, s1), |
| 635 "eef80b60 vcvt.f64.u32 d16, s1"); |
| 636 COMPARE(vcvt_f64_s32(d0, s1), |
| 637 "eeb80be0 vcvt.f64.s32 d0, s1"); |
| 638 COMPARE(vcvt_f32_s32(s0, s2), |
| 639 "eeb80ac1 vcvt.f32.s32 s0, s2"); |
555 } | 640 } |
556 | 641 |
557 VERIFY_RUN(); | 642 VERIFY_RUN(); |
558 } | 643 } |
559 | 644 |
560 | 645 |
561 TEST(LoadStore) { | 646 TEST(LoadStore) { |
562 SET_UP(); | 647 SET_UP(); |
563 | 648 |
564 COMPARE(ldrb(r0, MemOperand(r1)), | 649 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)), | 836 COMPARE(strd(r8, r9, MemOperand(r9, -127, PostIndex)), |
752 "e04987ff strd r8, [r9], #-127"); | 837 "e04987ff strd r8, [r9], #-127"); |
753 COMPARE(strd(r10, fp, MemOperand(fp, 127, PreIndex)), | 838 COMPARE(strd(r10, fp, MemOperand(fp, 127, PreIndex)), |
754 "e1eba7ff strd r10, [fp, #+127]!"); | 839 "e1eba7ff strd r10, [fp, #+127]!"); |
755 COMPARE(strd(ip, sp, MemOperand(sp, -127, PreIndex)), | 840 COMPARE(strd(ip, sp, MemOperand(sp, -127, PreIndex)), |
756 "e16dc7ff strd ip, [sp, #-127]!"); | 841 "e16dc7ff strd ip, [sp, #-127]!"); |
757 } | 842 } |
758 | 843 |
759 VERIFY_RUN(); | 844 VERIFY_RUN(); |
760 } | 845 } |
OLD | NEW |