data.isa (7223:a2e1b4f22550) data.isa (7230:86187fa97285)
1// -*- mode:c++ -*-
2
3// Copyright (c) 2010 ARM Limited
4// All rights reserved
5//
6// The license below extends only to copyright in the software and shall
7// not be construed as granting a license to any other intellectual
8// property including but not limited to intellectual property relating

--- 455 unchanged lines hidden (view full) ---

464 if (midRes >= 0) {
465 geBits = geBits | 0xc;
466 }
467 replaceBits(resTemp, 31, 16, midRes);
468 Dest = resTemp;
469 resTemp = geBits;
470 ''', flagType="ge", buildNonCc=True)
471
1// -*- mode:c++ -*-
2
3// Copyright (c) 2010 ARM Limited
4// All rights reserved
5//
6// The license below extends only to copyright in the software and shall
7// not be construed as granting a license to any other intellectual
8// property including but not limited to intellectual property relating

--- 455 unchanged lines hidden (view full) ---

464 if (midRes >= 0) {
465 geBits = geBits | 0xc;
466 }
467 replaceBits(resTemp, 31, 16, midRes);
468 Dest = resTemp;
469 resTemp = geBits;
470 ''', flagType="ge", buildNonCc=True)
471
472 buildRegDataInst("shadd8", '''
473 resTemp = 0;
474 for (unsigned i = 0; i < 4; i++) {
475 int high = (i + 1) * 8 - 1;
476 int low = i * 8;
477 int32_t midRes =
478 (uint64_t)(sext<8>(bits(Op1.sw, high, low)) +
479 sext<8>(bits(Op2.sw, high, low))) >> 1;
480 replaceBits(resTemp, high, low, midRes);
481 }
482 Dest = resTemp;
483 ''', flagType="none", buildCc=False)
484 buildRegDataInst("shadd16", '''
485 resTemp = 0;
486 for (unsigned i = 0; i < 2; i++) {
487 int high = (i + 1) * 16 - 1;
488 int low = i * 16;
489 int32_t midRes =
490 (uint64_t)(sext<16>(bits(Op1.sw, high, low)) +
491 sext<16>(bits(Op2.sw, high, low))) >> 1;
492 replaceBits(resTemp, high, low, midRes);
493 }
494 Dest = resTemp;
495 ''', flagType="none", buildCc=False)
496 buildRegDataInst("shsub8", '''
497 resTemp = 0;
498 for (unsigned i = 0; i < 4; i++) {
499 int high = (i + 1) * 8 - 1;
500 int low = i * 8;
501 int32_t midRes =
502 (uint64_t)(sext<8>(bits(Op1.sw, high, low)) -
503 sext<8>(bits(Op2.sw, high, low))) >> 1;
504 replaceBits(resTemp, high, low, midRes);
505 }
506 Dest = resTemp;
507 ''', flagType="none", buildCc=False)
508 buildRegDataInst("shsub16", '''
509 resTemp = 0;
510 for (unsigned i = 0; i < 2; i++) {
511 int high = (i + 1) * 16 - 1;
512 int low = i * 16;
513 int32_t midRes =
514 (uint64_t)(sext<16>(bits(Op1.sw, high, low)) -
515 sext<16>(bits(Op2.sw, high, low))) >> 1;
516 replaceBits(resTemp, high, low, midRes);
517 }
518 Dest = resTemp;
519 ''', flagType="none", buildCc=False)
520 buildRegDataInst("shasx", '''
521 int32_t midRes;
522 resTemp = 0;
523 int64_t arg1Low = sext<16>(bits(Op1.sw, 15, 0));
524 int64_t arg1High = sext<16>(bits(Op1.sw, 31, 16));
525 int64_t arg2Low = sext<16>(bits(Op2.sw, 15, 0));
526 int64_t arg2High = sext<16>(bits(Op2.sw, 31, 16));
527 midRes = (uint64_t)(arg1Low - arg2High) >> 1;
528 replaceBits(resTemp, 15, 0, midRes);
529 midRes = (arg1High + arg2Low) >> 1;
530 replaceBits(resTemp, 31, 16, midRes);
531 Dest = resTemp;
532 ''', flagType="none", buildCc=True)
533 buildRegDataInst("shsax", '''
534 int32_t midRes;
535 resTemp = 0;
536 int64_t arg1Low = sext<16>(bits(Op1.sw, 15, 0));
537 int64_t arg1High = sext<16>(bits(Op1.sw, 31, 16));
538 int64_t arg2Low = sext<16>(bits(Op2.sw, 15, 0));
539 int64_t arg2High = sext<16>(bits(Op2.sw, 31, 16));
540 midRes = (uint64_t)(arg1Low + arg2High) >> 1;
541 replaceBits(resTemp, 15, 0, midRes);
542 midRes = (uint64_t)(arg1High - arg2Low) >> 1;
543 replaceBits(resTemp, 31, 16, midRes);
544 Dest = resTemp;
545 ''', flagType="none", buildCc=True)
546
472 buildRegDataInst("uqadd16", '''
473 uint32_t midRes;
474 for (unsigned i = 0; i < 2; i++) {
475 int high = (i + 1) * 16 - 1;
476 int low = i * 16;
477 uint64_t arg1 = bits(Op1, high, low);
478 uint64_t arg2 = bits(Op2, high, low);
479 uSaturateOp<16>(midRes, arg1, arg2);

--- 161 unchanged lines hidden (view full) ---

641 midRes = arg1High - arg2Low;
642 if (midRes >= 0) {
643 geBits = geBits | 0xc;
644 }
645 replaceBits(resTemp, 31, 16, midRes);
646 Dest = resTemp;
647 resTemp = geBits;
648 ''', flagType="ge", buildNonCc=False)
547 buildRegDataInst("uqadd16", '''
548 uint32_t midRes;
549 for (unsigned i = 0; i < 2; i++) {
550 int high = (i + 1) * 16 - 1;
551 int low = i * 16;
552 uint64_t arg1 = bits(Op1, high, low);
553 uint64_t arg2 = bits(Op2, high, low);
554 uSaturateOp<16>(midRes, arg1, arg2);

--- 161 unchanged lines hidden (view full) ---

716 midRes = arg1High - arg2Low;
717 if (midRes >= 0) {
718 geBits = geBits | 0xc;
719 }
720 replaceBits(resTemp, 31, 16, midRes);
721 Dest = resTemp;
722 resTemp = geBits;
723 ''', flagType="ge", buildNonCc=False)
724
725 buildRegDataInst("uhadd16", '''
726 resTemp = 0;
727 for (unsigned i = 0; i < 2; i++) {
728 int high = (i + 1) * 16 - 1;
729 int low = i * 16;
730 int32_t midRes = (bits(Op1, high, low) +
731 bits(Op2, high, low)) >> 1;
732 replaceBits(resTemp, high, low, midRes);
733 }
734 Dest = resTemp;
735 ''', flagType="none", buildCc=False)
736 buildRegDataInst("uhadd8", '''
737 resTemp = 0;
738 for (unsigned i = 0; i < 4; i++) {
739 int high = (i + 1) * 8 - 1;
740 int low = i * 8;
741 int32_t midRes = (bits(Op1, high, low) +
742 bits(Op2, high, low)) >> 1;
743 replaceBits(resTemp, high, low, midRes);
744 }
745 Dest = resTemp;
746 ''', flagType="none", buildCc=False)
747 buildRegDataInst("uhsub16", '''
748 resTemp = 0;
749 for (unsigned i = 0; i < 2; i++) {
750 int high = (i + 1) * 16 - 1;
751 int low = i * 16;
752 int32_t midRes = (bits(Op1, high, low) -
753 bits(Op2, high, low)) >> 1;
754 replaceBits(resTemp, high, low, midRes);
755 }
756 Dest = resTemp;
757 ''', flagType="none", buildCc=False)
758 buildRegDataInst("uhsub8", '''
759 resTemp = 0;
760 for (unsigned i = 0; i < 4; i++) {
761 int high = (i + 1) * 8 - 1;
762 int low = i * 8;
763 int32_t midRes = (bits(Op1, high, low) -
764 bits(Op2, high, low)) >> 1;
765 replaceBits(resTemp, high, low, midRes);
766 }
767 Dest = resTemp;
768 ''', flagType="none", buildCc=False)
769 buildRegDataInst("uhasx", '''
770 int32_t midRes;
771 resTemp = 0;
772 int64_t arg1Low = bits(Op1.sw, 15, 0);
773 int64_t arg1High = bits(Op1.sw, 31, 16);
774 int64_t arg2Low = bits(Op2.sw, 15, 0);
775 int64_t arg2High = bits(Op2.sw, 31, 16);
776 midRes = (arg1Low - arg2High) >> 1;
777 replaceBits(resTemp, 15, 0, midRes);
778 midRes = (arg1High + arg2Low) >> 1;
779 replaceBits(resTemp, 31, 16, midRes);
780 Dest = resTemp;
781 ''', flagType="none", buildCc=False)
782 buildRegDataInst("uhsax", '''
783 int32_t midRes;
784 resTemp = 0;
785 int64_t arg1Low = bits(Op1.sw, 15, 0);
786 int64_t arg1High = bits(Op1.sw, 31, 16);
787 int64_t arg2Low = bits(Op2.sw, 15, 0);
788 int64_t arg2High = bits(Op2.sw, 31, 16);
789 midRes = (arg1Low + arg2High) >> 1;
790 replaceBits(resTemp, 15, 0, midRes);
791 midRes = (arg1High - arg2Low) >> 1;
792 replaceBits(resTemp, 31, 16, midRes);
793 Dest = resTemp;
794 ''', flagType="none", buildCc=False)
649}};
795}};