decoder.isa (3937:a210ce8d4546) decoder.isa (3941:127f839a18c1)
1// Copyright (c) 2006-2007 The Regents of The University of Michigan
2// All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions are
6// met: 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 copyright

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

154 NNPC = xc->readPC() + disp;
155 else
156 handle_annul
157 }});
158 }
159 }
160 //SETHI (or NOP if rd == 0 and imm == 0)
161 0x4: SetHi::sethi({{Rd.udw = imm;}});
1// Copyright (c) 2006-2007 The Regents of The University of Michigan
2// All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions are
6// met: 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 copyright

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

154 NNPC = xc->readPC() + disp;
155 else
156 handle_annul
157 }});
158 }
159 }
160 //SETHI (or NOP if rd == 0 and imm == 0)
161 0x4: SetHi::sethi({{Rd.udw = imm;}});
162 0x5: Trap::fbpfcc({{fault = new FpDisabled;}});
163 0x6: Trap::fbfcc({{fault = new FpDisabled;}});
162 0x5: FailUnimpl::fbpfcc();
163 0x6: FailUnimpl::fbfcc();
164 }
165 0x1: BranchN::call(30, {{
166 if (Pstate<3:>)
167 R15 = (xc->readPC())<31:0>;
168 else
169 R15 = xc->readPC();
170 NNPC = R15 + disp;
171 }});

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

496 Rd = Rd;
497 }});
498 }
499 }
500 0x2D: sdivx({{
501 if(Rs2_or_imm13.sdw == 0) fault = new DivisionByZero;
502 else Rd.sdw = Rs1.sdw / Rs2_or_imm13.sdw;
503 }});
164 }
165 0x1: BranchN::call(30, {{
166 if (Pstate<3:>)
167 R15 = (xc->readPC())<31:0>;
168 else
169 R15 = xc->readPC();
170 NNPC = R15 + disp;
171 }});

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

496 Rd = Rd;
497 }});
498 }
499 }
500 0x2D: sdivx({{
501 if(Rs2_or_imm13.sdw == 0) fault = new DivisionByZero;
502 else Rd.sdw = Rs1.sdw / Rs2_or_imm13.sdw;
503 }});
504 0x2E: decode RS1 {
505 0x0: IntOp::popc({{
506 int64_t count = 0;
507 uint64_t temp = Rs2_or_imm13;
508 //Count the 1s in the front 4bits until none are left
509 uint8_t oneBits[] = {0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4};
510 while(temp)
511 {
512 count += oneBits[temp & 0xF];
513 temp = temp >> 4;
514 }
515 Rd = count;
516 }});
517 }
504 0x2E: Trap::popc({{fault = new IllegalInstruction;}});
518 0x2F: decode RCOND3
519 {
520 0x1: movreq({{Rd = (Rs1.sdw == 0) ? Rs2_or_imm10 : Rd;}});
521 0x2: movrle({{Rd = (Rs1.sdw <= 0) ? Rs2_or_imm10 : Rd;}});
522 0x3: movrl({{Rd = (Rs1.sdw < 0) ? Rs2_or_imm10 : Rd;}});
523 0x5: movrne({{Rd = (Rs1.sdw != 0) ? Rs2_or_imm10 : Rd;}});
524 0x6: movrg({{Rd = (Rs1.sdw > 0) ? Rs2_or_imm10 : Rd;}});
525 0x7: movrge({{Rd = (Rs1.sdw >= 0) ? Rs2_or_imm10 : Rd;}});

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

658 Fsr &= ~(0x1F);
659 }});
660 0x02: fmovd({{
661 Frd.udw = Frs2.udw;
662 //fsr.ftt = fsr.cexc = 0
663 Fsr &= ~(7 << 14);
664 Fsr &= ~(0x1F);
665 }});
505 0x2F: decode RCOND3
506 {
507 0x1: movreq({{Rd = (Rs1.sdw == 0) ? Rs2_or_imm10 : Rd;}});
508 0x2: movrle({{Rd = (Rs1.sdw <= 0) ? Rs2_or_imm10 : Rd;}});
509 0x3: movrl({{Rd = (Rs1.sdw < 0) ? Rs2_or_imm10 : Rd;}});
510 0x5: movrne({{Rd = (Rs1.sdw != 0) ? Rs2_or_imm10 : Rd;}});
511 0x6: movrg({{Rd = (Rs1.sdw > 0) ? Rs2_or_imm10 : Rd;}});
512 0x7: movrge({{Rd = (Rs1.sdw >= 0) ? Rs2_or_imm10 : Rd;}});

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

645 Fsr &= ~(0x1F);
646 }});
647 0x02: fmovd({{
648 Frd.udw = Frs2.udw;
649 //fsr.ftt = fsr.cexc = 0
650 Fsr &= ~(7 << 14);
651 Fsr &= ~(0x1F);
652 }});
666 0x03: Trap::fmovq({{fault = new FpExceptionOther;}});
653 0x03: Trap::fmovq({{fault = new FpExceptionOther;}}); //unimp fpop
667 0x05: fnegs({{
668 Frds.uw = Frs2s.uw ^ (1UL << 31);
669 //fsr.ftt = fsr.cexc = 0
670 Fsr &= ~(7 << 14);
671 Fsr &= ~(0x1F);
672 }});
673 0x06: fnegd({{
674 Frd.udw = Frs2.udw ^ (1ULL << 63);
675 //fsr.ftt = fsr.cexc = 0
676 Fsr &= ~(7 << 14);
677 Fsr &= ~(0x1F);
678 }});
654 0x05: fnegs({{
655 Frds.uw = Frs2s.uw ^ (1UL << 31);
656 //fsr.ftt = fsr.cexc = 0
657 Fsr &= ~(7 << 14);
658 Fsr &= ~(0x1F);
659 }});
660 0x06: fnegd({{
661 Frd.udw = Frs2.udw ^ (1ULL << 63);
662 //fsr.ftt = fsr.cexc = 0
663 Fsr &= ~(7 << 14);
664 Fsr &= ~(0x1F);
665 }});
679 0x07: Trap::fnegq({{fault = new FpDisabled;}});
666 0x07: Trap::fnegq({{fault = new FpExceptionOther;}}); //fpop unimp
680 0x09: fabss({{
681 Frds.uw = ((1UL << 31) - 1) & Frs2s.uw;
682 //fsr.ftt = fsr.cexc = 0
683 Fsr &= ~(7 << 14);
684 Fsr &= ~(0x1F);
685 }});
686 0x0A: fabsd({{
687 Frd.udw = ((1ULL << 63) - 1) & Frs2.udw;
688 //fsr.ftt = fsr.cexc = 0
689 Fsr &= ~(7 << 14);
690 Fsr &= ~(0x1F);
691 }});
667 0x09: fabss({{
668 Frds.uw = ((1UL << 31) - 1) & Frs2s.uw;
669 //fsr.ftt = fsr.cexc = 0
670 Fsr &= ~(7 << 14);
671 Fsr &= ~(0x1F);
672 }});
673 0x0A: fabsd({{
674 Frd.udw = ((1ULL << 63) - 1) & Frs2.udw;
675 //fsr.ftt = fsr.cexc = 0
676 Fsr &= ~(7 << 14);
677 Fsr &= ~(0x1F);
678 }});
692 0x0B: Trap::fabsq({{fault = new FpDisabled;}});
679 0x0B: Trap::fabsq({{fault = new FpExceptionOther;}}); //fpop unimp
693 0x29: fsqrts({{Frds.sf = std::sqrt(Frs2s.sf);}});
694 0x2A: fsqrtd({{Frd.df = std::sqrt(Frs2.df);}});
680 0x29: fsqrts({{Frds.sf = std::sqrt(Frs2s.sf);}});
681 0x2A: fsqrtd({{Frd.df = std::sqrt(Frs2.df);}});
695 0x2B: Trap::fsqrtq({{fault = new FpDisabled;}});
682 0x2B: Trap::fsqrtq({{fault = new FpExceptionOther;}}); //unimp fpop
696 0x41: fadds({{Frds.sf = Frs1s.sf + Frs2s.sf;}});
697 0x42: faddd({{Frd.df = Frs1.df + Frs2.df;}});
683 0x41: fadds({{Frds.sf = Frs1s.sf + Frs2s.sf;}});
684 0x42: faddd({{Frd.df = Frs1.df + Frs2.df;}});
698 0x43: Trap::faddq({{fault = new FpDisabled;}});
685 0x43: Trap::faddq({{fault = new FpExceptionOther;}}); //unimp fpop
699 0x45: fsubs({{Frds.sf = Frs1s.sf - Frs2s.sf;}});
700 0x46: fsubd({{Frd.df = Frs1.df - Frs2.df;}});
686 0x45: fsubs({{Frds.sf = Frs1s.sf - Frs2s.sf;}});
687 0x46: fsubd({{Frd.df = Frs1.df - Frs2.df;}});
701 0x47: Trap::fsubq({{fault = new FpDisabled;}});
688 0x47: Trap::fsubq({{fault = new FpExceptionOther;}}); //unimp fpop
702 0x49: fmuls({{Frds.sf = Frs1s.sf * Frs2s.sf;}});
703 0x4A: fmuld({{Frd.df = Frs1.df * Frs2.df;}});
689 0x49: fmuls({{Frds.sf = Frs1s.sf * Frs2s.sf;}});
690 0x4A: fmuld({{Frd.df = Frs1.df * Frs2.df;}});
704 0x4B: Trap::fmulq({{fault = new FpDisabled;}});
691 0x4B: Trap::fmulq({{fault = new FpExceptionOther;}}); //unimp fpop
705 0x4D: fdivs({{Frds.sf = Frs1s.sf / Frs2s.sf;}});
706 0x4E: fdivd({{Frd.df = Frs1.df / Frs2.df;}});
692 0x4D: fdivs({{Frds.sf = Frs1s.sf / Frs2s.sf;}});
693 0x4E: fdivd({{Frd.df = Frs1.df / Frs2.df;}});
707 0x4F: Trap::fdivq({{fault = new FpDisabled;}});
694 0x4F: Trap::fdivq({{fault = new FpExceptionOther;}}); //unimp fpop
708 0x69: fsmuld({{Frd.df = Frs1s.sf * Frs2s.sf;}});
695 0x69: fsmuld({{Frd.df = Frs1s.sf * Frs2s.sf;}});
709 0x6E: Trap::fdmulq({{fault = new FpDisabled;}});
696 0x6E: Trap::fdmulq({{fault = new FpExceptionOther;}}); //unimp fpop
710 0x81: fstox({{
711 Frd.df = (double)static_cast<int64_t>(Frs2s.sf);
712 }});
713 0x82: fdtox({{
714 Frd.df = (double)static_cast<int64_t>(Frs2.df);
715 }});
697 0x81: fstox({{
698 Frd.df = (double)static_cast<int64_t>(Frs2s.sf);
699 }});
700 0x82: fdtox({{
701 Frd.df = (double)static_cast<int64_t>(Frs2.df);
702 }});
716 0x83: Trap::fqtox({{fault = new FpDisabled;}});
703 0x83: Trap::fqtox({{fault = new FpExceptionOther;}}); //unimp fpop
717 0x84: fxtos({{
718 Frds.sf = static_cast<float>((int64_t)Frs2.df);
719 }});
720 0x88: fxtod({{
721 Frd.df = static_cast<double>((int64_t)Frs2.df);
722 }});
704 0x84: fxtos({{
705 Frds.sf = static_cast<float>((int64_t)Frs2.df);
706 }});
707 0x88: fxtod({{
708 Frd.df = static_cast<double>((int64_t)Frs2.df);
709 }});
723 0x8C: Trap::fxtoq({{fault = new FpDisabled;}});
710 0x8C: Trap::fxtoq({{fault = new FpExceptionOther;}}); //unimp fpop
724 0xC4: fitos({{
725 Frds.sf = static_cast<float>((int32_t)Frs2s.sf);
726 }});
727 0xC6: fdtos({{Frds.sf = Frs2.df;}});
711 0xC4: fitos({{
712 Frds.sf = static_cast<float>((int32_t)Frs2s.sf);
713 }});
714 0xC6: fdtos({{Frds.sf = Frs2.df;}});
728 0xC7: Trap::fqtos({{fault = new FpDisabled;}});
715 0xC7: Trap::fqtos({{fault = new FpExceptionOther;}}); //unimp fpop
729 0xC8: fitod({{
730 Frd.df = static_cast<double>((int32_t)Frs2s.sf);
731 }});
732 0xC9: fstod({{Frd.df = Frs2s.sf;}});
716 0xC8: fitod({{
717 Frd.df = static_cast<double>((int32_t)Frs2s.sf);
718 }});
719 0xC9: fstod({{Frd.df = Frs2s.sf;}});
733 0xCB: Trap::fqtod({{fault = new FpDisabled;}});
734 0xCC: Trap::fitoq({{fault = new FpDisabled;}});
735 0xCD: Trap::fstoq({{fault = new FpDisabled;}});
736 0xCE: Trap::fdtoq({{fault = new FpDisabled;}});
720 0xCB: Trap::fqtod({{fault = new FpExceptionOther;}}); // unimp fpop
721 0xCC: Trap::fitoq({{fault = new FpExceptionOther;}}); // unimp fpop
722 0xCD: Trap::fstoq({{fault = new FpExceptionOther;}}); // unimp fpop
723 0xCE: Trap::fdtoq({{fault = new FpExceptionOther;}}); // unimp fpop
737 0xD1: fstoi({{
738 Frds.sf = (float)static_cast<int32_t>(Frs2s.sf);
739 }});
740 0xD2: fdtoi({{
741 Frds.sf = (float)static_cast<int32_t>(Frs2.df);
742 }});
724 0xD1: fstoi({{
725 Frds.sf = (float)static_cast<int32_t>(Frs2s.sf);
726 }});
727 0xD2: fdtoi({{
728 Frds.sf = (float)static_cast<int32_t>(Frs2.df);
729 }});
743 0xD3: Trap::fqtoi({{fault = new FpDisabled;}});
744 default: Trap::fpop1({{fault = new FpDisabled;}});
730 0xD3: Trap::fqtoi({{fault = new FpExceptionOther;}}); // unimp fpop
731 default: FailUnimpl::fpop1();
745 }
746 }
747 0x35: Trap::fpop2({{fault = new FpDisabled;}});
748 //This used to be just impdep1, but now it's a whole bunch
749 //of instructions
750 0x36: decode OPF{
732 }
733 }
734 0x35: Trap::fpop2({{fault = new FpDisabled;}});
735 //This used to be just impdep1, but now it's a whole bunch
736 //of instructions
737 0x36: decode OPF{
751 0x00: Trap::edge8({{fault = new IllegalInstruction;}});
752 0x01: Trap::edge8n({{fault = new IllegalInstruction;}});
753 0x02: Trap::edge8l({{fault = new IllegalInstruction;}});
754 0x03: Trap::edge8ln({{fault = new IllegalInstruction;}});
755 0x04: Trap::edge16({{fault = new IllegalInstruction;}});
756 0x05: Trap::edge16n({{fault = new IllegalInstruction;}});
757 0x06: Trap::edge16l({{fault = new IllegalInstruction;}});
758 0x07: Trap::edge16ln({{fault = new IllegalInstruction;}});
759 0x08: Trap::edge32({{fault = new IllegalInstruction;}});
760 0x09: Trap::edge32n({{fault = new IllegalInstruction;}});
761 0x0A: Trap::edge32l({{fault = new IllegalInstruction;}});
762 0x0B: Trap::edge32ln({{fault = new IllegalInstruction;}});
763 0x10: Trap::array8({{fault = new IllegalInstruction;}});
764 0x12: Trap::array16({{fault = new IllegalInstruction;}});
765 0x14: Trap::array32({{fault = new IllegalInstruction;}});
738 0x00: FailUnimpl::edge8();
739 0x01: FailUnimpl::edge8n();
740 0x02: FailUnimpl::edge8l();
741 0x03: FailUnimpl::edge8ln();
742 0x04: FailUnimpl::edge16();
743 0x05: FailUnimpl::edge16n();
744 0x06: FailUnimpl::edge16l();
745 0x07: FailUnimpl::edge16ln();
746 0x08: FailUnimpl::edge32();
747 0x09: FailUnimpl::edge32n();
748 0x0A: FailUnimpl::edge32l();
749 0x0B: FailUnimpl::edge32ln();
750 0x10: FailUnimpl::array8();
751 0x12: FailUnimpl::array16();
752 0x14: FailUnimpl::array32();
766 0x18: BasicOperate::alignaddr({{
767 uint64_t sum = Rs1 + Rs2;
768 Rd = sum & ~7;
769 Gsr = (Gsr & ~7) | (sum & 7);
770 }});
753 0x18: BasicOperate::alignaddr({{
754 uint64_t sum = Rs1 + Rs2;
755 Rd = sum & ~7;
756 Gsr = (Gsr & ~7) | (sum & 7);
757 }});
771 0x19: Trap::bmask({{fault = new IllegalInstruction;}});
758 0x19: FailUnimpl::bmask();
772 0x1A: BasicOperate::alignaddresslittle({{
773 uint64_t sum = Rs1 + Rs2;
774 Rd = sum & ~7;
775 Gsr = (Gsr & ~7) | ((~sum + 1) & 7);
776 }});
759 0x1A: BasicOperate::alignaddresslittle({{
760 uint64_t sum = Rs1 + Rs2;
761 Rd = sum & ~7;
762 Gsr = (Gsr & ~7) | ((~sum + 1) & 7);
763 }});
777 0x20: Trap::fcmple16({{fault = new IllegalInstruction;}});
778 0x22: Trap::fcmpne16({{fault = new IllegalInstruction;}});
779 0x24: Trap::fcmple32({{fault = new IllegalInstruction;}});
780 0x26: Trap::fcmpne32({{fault = new IllegalInstruction;}});
781 0x28: Trap::fcmpgt16({{fault = new IllegalInstruction;}});
782 0x2A: Trap::fcmpeq16({{fault = new IllegalInstruction;}});
783 0x2C: Trap::fcmpgt32({{fault = new IllegalInstruction;}});
784 0x2E: Trap::fcmpeq32({{fault = new IllegalInstruction;}});
785 0x31: Trap::fmul8x16({{fault = new IllegalInstruction;}});
786 0x33: Trap::fmul8x16au({{fault = new IllegalInstruction;}});
787 0x35: Trap::fmul8x16al({{fault = new IllegalInstruction;}});
788 0x36: Trap::fmul8sux16({{fault = new IllegalInstruction;}});
789 0x37: Trap::fmul8ulx16({{fault = new IllegalInstruction;}});
790 0x38: Trap::fmuld8sux16({{fault = new IllegalInstruction;}});
791 0x39: Trap::fmuld8ulx16({{fault = new IllegalInstruction;}});
764 0x20: FailUnimpl::fcmple16();
765 0x22: FailUnimpl::fcmpne16();
766 0x24: FailUnimpl::fcmple32();
767 0x26: FailUnimpl::fcmpne32();
768 0x28: FailUnimpl::fcmpgt16();
769 0x2A: FailUnimpl::fcmpeq16();
770 0x2C: FailUnimpl::fcmpgt32();
771 0x2E: FailUnimpl::fcmpeq32();
772 0x31: FailUnimpl::fmul8x16();
773 0x33: FailUnimpl::fmul8x16au();
774 0x35: FailUnimpl::fmul8x16al();
775 0x36: FailUnimpl::fmul8sux16();
776 0x37: FailUnimpl::fmul8ulx16();
777 0x38: FailUnimpl::fmuld8sux16();
778 0x39: FailUnimpl::fmuld8ulx16();
792 0x3A: Trap::fpack32({{fault = new IllegalInstruction;}});
793 0x3B: Trap::fpack16({{fault = new IllegalInstruction;}});
794 0x3D: Trap::fpackfix({{fault = new IllegalInstruction;}});
795 0x3E: Trap::pdist({{fault = new IllegalInstruction;}});
796 0x48: BasicOperate::faligndata({{
797 uint64_t msbX = Frs1.udw;
798 uint64_t lsbX = Frs2.udw;
799 //Some special cases need to be split out, first

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

815 uint64_t lsbShift = (8 - Gsr<2:0>) * 8;
816 uint64_t msbMask = ((uint64_t)(-1)) >> msbShift;
817 uint64_t lsbMask = ((uint64_t)(-1)) << lsbShift;
818 Frd.udw = ((msbX & msbMask) << msbShift) |
819 ((lsbX & lsbMask) >> lsbShift);
820 }
821 }});
822 0x4B: Trap::fpmerge({{fault = new IllegalInstruction;}});
779 0x3A: Trap::fpack32({{fault = new IllegalInstruction;}});
780 0x3B: Trap::fpack16({{fault = new IllegalInstruction;}});
781 0x3D: Trap::fpackfix({{fault = new IllegalInstruction;}});
782 0x3E: Trap::pdist({{fault = new IllegalInstruction;}});
783 0x48: BasicOperate::faligndata({{
784 uint64_t msbX = Frs1.udw;
785 uint64_t lsbX = Frs2.udw;
786 //Some special cases need to be split out, first

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

802 uint64_t lsbShift = (8 - Gsr<2:0>) * 8;
803 uint64_t msbMask = ((uint64_t)(-1)) >> msbShift;
804 uint64_t lsbMask = ((uint64_t)(-1)) << lsbShift;
805 Frd.udw = ((msbX & msbMask) << msbShift) |
806 ((lsbX & lsbMask) >> lsbShift);
807 }
808 }});
809 0x4B: Trap::fpmerge({{fault = new IllegalInstruction;}});
823 0x4C: Trap::bshuffle({{fault = new IllegalInstruction;}});
824 0x4D: Trap::fexpand({{fault = new IllegalInstruction;}});
825 0x50: Trap::fpadd16({{fault = new IllegalInstruction;}});
826 0x51: Trap::fpadd16s({{fault = new IllegalInstruction;}});
827 0x52: Trap::fpadd32({{fault = new IllegalInstruction;}});
828 0x53: Trap::fpadd32s({{fault = new IllegalInstruction;}});
829 0x54: Trap::fpsub16({{fault = new IllegalInstruction;}});
830 0x55: Trap::fpsub16s({{fault = new IllegalInstruction;}});
831 0x56: Trap::fpsub32({{fault = new IllegalInstruction;}});
832 0x57: Trap::fpsub32s({{fault = new IllegalInstruction;}});
810 0x4C: FailUnimpl::bshuffle();
811 0x4D: FailUnimpl::fexpand();
812 0x50: FailUnimpl::fpadd16();
813 0x51: FailUnimpl::fpadd16s();
814 0x52: FailUnimpl::fpadd32();
815 0x53: FailUnimpl::fpadd32s();
816 0x54: FailUnimpl::fpsub16();
817 0x55: FailUnimpl::fpsub16s();
818 0x56: FailUnimpl::fpsub32();
819 0x57: FailUnimpl::fpsub32s();
833 0x60: BasicOperate::fzero({{Frd.df = 0;}});
834 0x61: BasicOperate::fzeros({{Frds.sf = 0;}});
820 0x60: BasicOperate::fzero({{Frd.df = 0;}});
821 0x61: BasicOperate::fzeros({{Frds.sf = 0;}});
835 0x62: Trap::fnor({{fault = new IllegalInstruction;}});
836 0x63: Trap::fnors({{fault = new IllegalInstruction;}});
837 0x64: Trap::fandnot2({{fault = new IllegalInstruction;}});
838 0x65: Trap::fandnot2s({{fault = new IllegalInstruction;}});
822 0x62: FailUnimpl::fnor();
823 0x63: FailUnimpl::fnors();
824 0x64: FailUnimpl::fandnot2();
825 0x65: FailUnimpl::fandnot2s();
839 0x66: BasicOperate::fnot2({{
840 Frd.df = (double)(~((uint64_t)Frs2.df));
841 }});
842 0x67: BasicOperate::fnot2s({{
843 Frds.sf = (float)(~((uint32_t)Frs2s.sf));
844 }});
826 0x66: BasicOperate::fnot2({{
827 Frd.df = (double)(~((uint64_t)Frs2.df));
828 }});
829 0x67: BasicOperate::fnot2s({{
830 Frds.sf = (float)(~((uint32_t)Frs2s.sf));
831 }});
845 0x68: Trap::fandnot1({{fault = new IllegalInstruction;}});
846 0x69: Trap::fandnot1s({{fault = new IllegalInstruction;}});
832 0x68: FailUnimpl::fandnot1();
833 0x69: FailUnimpl::fandnot1s();
847 0x6A: BasicOperate::fnot1({{
848 Frd.df = (double)(~((uint64_t)Frs1.df));
849 }});
850 0x6B: BasicOperate::fnot1s({{
851 Frds.sf = (float)(~((uint32_t)Frs1s.sf));
852 }});
834 0x6A: BasicOperate::fnot1({{
835 Frd.df = (double)(~((uint64_t)Frs1.df));
836 }});
837 0x6B: BasicOperate::fnot1s({{
838 Frds.sf = (float)(~((uint32_t)Frs1s.sf));
839 }});
853 0x6C: Trap::fxor({{fault = new IllegalInstruction;}});
854 0x6D: Trap::fxors({{fault = new IllegalInstruction;}});
855 0x6E: Trap::fnand({{fault = new IllegalInstruction;}});
856 0x6F: Trap::fnands({{fault = new IllegalInstruction;}});
857 0x70: Trap::fand({{fault = new IllegalInstruction;}});
858 0x71: Trap::fands({{fault = new IllegalInstruction;}});
859 0x72: Trap::fxnor({{fault = new IllegalInstruction;}});
860 0x73: Trap::fxnors({{fault = new IllegalInstruction;}});
840 0x6C: FailUnimpl::fxor();
841 0x6D: FailUnimpl::fxors();
842 0x6E: FailUnimpl::fnand();
843 0x6F: FailUnimpl::fnands();
844 0x70: FailUnimpl::fand();
845 0x71: FailUnimpl::fands();
846 0x72: FailUnimpl::fxnor();
847 0x73: FailUnimpl::fxnors();
861 0x74: BasicOperate::fsrc1({{Frd.udw = Frs1.udw;}});
862 0x75: BasicOperate::fsrc1s({{Frds.uw = Frs1s.uw;}});
848 0x74: BasicOperate::fsrc1({{Frd.udw = Frs1.udw;}});
849 0x75: BasicOperate::fsrc1s({{Frds.uw = Frs1s.uw;}});
863 0x76: Trap::fornot2({{fault = new IllegalInstruction;}});
864 0x77: Trap::fornot2s({{fault = new IllegalInstruction;}});
850 0x76: FailUnimpl::fornot2();
851 0x77: FailUnimpl::fornot2s();
865 0x78: BasicOperate::fsrc2({{Frd.udw = Frs2.udw;}});
866 0x79: BasicOperate::fsrc2s({{Frds.uw = Frs2s.uw;}});
852 0x78: BasicOperate::fsrc2({{Frd.udw = Frs2.udw;}});
853 0x79: BasicOperate::fsrc2s({{Frds.uw = Frs2s.uw;}});
867 0x7A: Trap::fornot1({{fault = new IllegalInstruction;}});
868 0x7B: Trap::fornot1s({{fault = new IllegalInstruction;}});
869 0x7C: Trap::for({{fault = new IllegalInstruction;}});
870 0x7D: Trap::fors({{fault = new IllegalInstruction;}});
871 0x7E: Trap::fone({{fault = new IllegalInstruction;}});
872 0x7F: Trap::fones({{fault = new IllegalInstruction;}});
854 0x7A: FailUnimpl::fornot1();
855 0x7B: FailUnimpl::fornot1s();
856 0x7C: FailUnimpl::for();
857 0x7D: FailUnimpl::fors();
858 0x7E: BasicOperate::fone({{Frd.udw = std::numeric_limits<uint64_t>::max();}});
859 0x7F: BasicOperate::fones({{Frds.uw = std::numeric_limits<uint32_t>::max();}});
873 0x80: Trap::shutdown({{fault = new IllegalInstruction;}});
860 0x80: Trap::shutdown({{fault = new IllegalInstruction;}});
874 0x81: Trap::siam({{fault = new IllegalInstruction;}});
861 0x81: FailUnimpl::siam();
875 }
876 0x37: Trap::impdep2({{fault = new IllegalInstruction;}});
877 0x38: Branch::jmpl({{
878 Addr target = Rs1 + Rs2_or_imm13;
879 if(target & 0x3)
880 fault = new MemAddressNotAligned;
881 else
882 {

--- 448 unchanged lines hidden ---
862 }
863 0x37: Trap::impdep2({{fault = new IllegalInstruction;}});
864 0x38: Branch::jmpl({{
865 Addr target = Rs1 + Rs2_or_imm13;
866 if(target & 0x3)
867 fault = new MemAddressNotAligned;
868 else
869 {

--- 448 unchanged lines hidden ---