decoder.isa (3992:d08b4ae09876) decoder.isa (3995:ef17a5754312)
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

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

648 Fsr &= ~(0x1F);
649 }});
650 0x02: fmovd({{
651 Frd.udw = Frs2.udw;
652 //fsr.ftt = fsr.cexc = 0
653 Fsr &= ~(7 << 14);
654 Fsr &= ~(0x1F);
655 }});
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

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

648 Fsr &= ~(0x1F);
649 }});
650 0x02: fmovd({{
651 Frd.udw = Frs2.udw;
652 //fsr.ftt = fsr.cexc = 0
653 Fsr &= ~(7 << 14);
654 Fsr &= ~(0x1F);
655 }});
656 0x03: Trap::fmovq({{fault = new FpExceptionOther;}}); //unimp fpop
656 0x03: FpUnimpl::fmovq();
657 0x05: fnegs({{
658 Frds.uw = Frs2s.uw ^ (1UL << 31);
659 //fsr.ftt = fsr.cexc = 0
660 Fsr &= ~(7 << 14);
661 Fsr &= ~(0x1F);
662 }});
663 0x06: fnegd({{
664 Frd.udw = Frs2.udw ^ (1ULL << 63);
665 //fsr.ftt = fsr.cexc = 0
666 Fsr &= ~(7 << 14);
667 Fsr &= ~(0x1F);
668 }});
657 0x05: fnegs({{
658 Frds.uw = Frs2s.uw ^ (1UL << 31);
659 //fsr.ftt = fsr.cexc = 0
660 Fsr &= ~(7 << 14);
661 Fsr &= ~(0x1F);
662 }});
663 0x06: fnegd({{
664 Frd.udw = Frs2.udw ^ (1ULL << 63);
665 //fsr.ftt = fsr.cexc = 0
666 Fsr &= ~(7 << 14);
667 Fsr &= ~(0x1F);
668 }});
669 0x07: Trap::fnegq({{fault = new FpExceptionOther;}}); //fpop unimp
669 0x07: FpUnimpl::fnegq();
670 0x09: fabss({{
671 Frds.uw = ((1UL << 31) - 1) & Frs2s.uw;
672 //fsr.ftt = fsr.cexc = 0
673 Fsr &= ~(7 << 14);
674 Fsr &= ~(0x1F);
675 }});
676 0x0A: fabsd({{
677 Frd.udw = ((1ULL << 63) - 1) & Frs2.udw;
678 //fsr.ftt = fsr.cexc = 0
679 Fsr &= ~(7 << 14);
680 Fsr &= ~(0x1F);
681 }});
670 0x09: fabss({{
671 Frds.uw = ((1UL << 31) - 1) & Frs2s.uw;
672 //fsr.ftt = fsr.cexc = 0
673 Fsr &= ~(7 << 14);
674 Fsr &= ~(0x1F);
675 }});
676 0x0A: fabsd({{
677 Frd.udw = ((1ULL << 63) - 1) & Frs2.udw;
678 //fsr.ftt = fsr.cexc = 0
679 Fsr &= ~(7 << 14);
680 Fsr &= ~(0x1F);
681 }});
682 0x0B: Trap::fabsq({{fault = new FpExceptionOther;}}); //fpop unimp
682 0x0B: FpUnimpl::fabsq();
683 0x29: fsqrts({{Frds.sf = std::sqrt(Frs2s.sf);}});
684 0x2A: fsqrtd({{Frd.df = std::sqrt(Frs2.df);}});
683 0x29: fsqrts({{Frds.sf = std::sqrt(Frs2s.sf);}});
684 0x2A: fsqrtd({{Frd.df = std::sqrt(Frs2.df);}});
685 0x2B: Trap::fsqrtq({{fault = new FpExceptionOther;}}); //unimp fpop
685 0x2B: FpUnimpl::fsqrtq();
686 0x41: fadds({{Frds.sf = Frs1s.sf + Frs2s.sf;}});
687 0x42: faddd({{Frd.df = Frs1.df + Frs2.df;}});
686 0x41: fadds({{Frds.sf = Frs1s.sf + Frs2s.sf;}});
687 0x42: faddd({{Frd.df = Frs1.df + Frs2.df;}});
688 0x43: Trap::faddq({{fault = new FpExceptionOther;}}); //unimp fpop
688 0x43: FpUnimpl::faddq();
689 0x45: fsubs({{Frds.sf = Frs1s.sf - Frs2s.sf;}});
690 0x46: fsubd({{Frd.df = Frs1.df - Frs2.df;}});
689 0x45: fsubs({{Frds.sf = Frs1s.sf - Frs2s.sf;}});
690 0x46: fsubd({{Frd.df = Frs1.df - Frs2.df;}});
691 0x47: Trap::fsubq({{fault = new FpExceptionOther;}}); //unimp fpop
691 0x47: FpUnimpl::fsubq();
692 0x49: fmuls({{Frds.sf = Frs1s.sf * Frs2s.sf;}});
693 0x4A: fmuld({{Frd.df = Frs1.df * Frs2.df;}});
692 0x49: fmuls({{Frds.sf = Frs1s.sf * Frs2s.sf;}});
693 0x4A: fmuld({{Frd.df = Frs1.df * Frs2.df;}});
694 0x4B: Trap::fmulq({{fault = new FpExceptionOther;}}); //unimp fpop
694 0x4B: FpUnimpl::fmulq();
695 0x4D: fdivs({{Frds.sf = Frs1s.sf / Frs2s.sf;}});
696 0x4E: fdivd({{Frd.df = Frs1.df / Frs2.df;}});
695 0x4D: fdivs({{Frds.sf = Frs1s.sf / Frs2s.sf;}});
696 0x4E: fdivd({{Frd.df = Frs1.df / Frs2.df;}});
697 0x4F: Trap::fdivq({{fault = new FpExceptionOther;}}); //unimp fpop
697 0x4F: FpUnimpl::fdivq();
698 0x69: fsmuld({{Frd.df = Frs1s.sf * Frs2s.sf;}});
698 0x69: fsmuld({{Frd.df = Frs1s.sf * Frs2s.sf;}});
699 0x6E: Trap::fdmulq({{fault = new FpExceptionOther;}}); //unimp fpop
699 0x6E: FpUnimpl::fdmulq();
700 0x81: fstox({{
701 Frd.df = (double)static_cast<int64_t>(Frs2s.sf);
702 }});
703 0x82: fdtox({{
704 Frd.df = (double)static_cast<int64_t>(Frs2.df);
705 }});
700 0x81: fstox({{
701 Frd.df = (double)static_cast<int64_t>(Frs2s.sf);
702 }});
703 0x82: fdtox({{
704 Frd.df = (double)static_cast<int64_t>(Frs2.df);
705 }});
706 0x83: Trap::fqtox({{fault = new FpExceptionOther;}}); //unimp fpop
706 0x83: FpUnimpl::fqtox();
707 0x84: fxtos({{
708 Frds.sf = static_cast<float>((int64_t)Frs2.df);
709 }});
710 0x88: fxtod({{
711 Frd.df = static_cast<double>((int64_t)Frs2.df);
712 }});
707 0x84: fxtos({{
708 Frds.sf = static_cast<float>((int64_t)Frs2.df);
709 }});
710 0x88: fxtod({{
711 Frd.df = static_cast<double>((int64_t)Frs2.df);
712 }});
713 0x8C: Trap::fxtoq({{fault = new FpExceptionOther;}}); //unimp fpop
713 0x8C: FpUnimpl::fxtoq();
714 0xC4: fitos({{
715 Frds.sf = static_cast<float>((int32_t)Frs2s.sf);
716 }});
717 0xC6: fdtos({{Frds.sf = Frs2.df;}});
714 0xC4: fitos({{
715 Frds.sf = static_cast<float>((int32_t)Frs2s.sf);
716 }});
717 0xC6: fdtos({{Frds.sf = Frs2.df;}});
718 0xC7: Trap::fqtos({{fault = new FpExceptionOther;}}); //unimp fpop
718 0xC7: FpUnimpl::fqtos();
719 0xC8: fitod({{
720 Frd.df = static_cast<double>((int32_t)Frs2s.sf);
721 }});
722 0xC9: fstod({{Frd.df = Frs2s.sf;}});
719 0xC8: fitod({{
720 Frd.df = static_cast<double>((int32_t)Frs2s.sf);
721 }});
722 0xC9: fstod({{Frd.df = Frs2s.sf;}});
723 0xCB: Trap::fqtod({{fault = new FpExceptionOther;}}); // unimp fpop
724 0xCC: Trap::fitoq({{fault = new FpExceptionOther;}}); // unimp fpop
725 0xCD: Trap::fstoq({{fault = new FpExceptionOther;}}); // unimp fpop
726 0xCE: Trap::fdtoq({{fault = new FpExceptionOther;}}); // unimp fpop
723 0xCB: FpUnimpl::fqtod();
724 0xCC: FpUnimpl::fitoq();
725 0xCD: FpUnimpl::fstoq();
726 0xCE: FpUnimpl::fdtoq();
727 0xD1: fstoi({{
728 Frds.sf = (float)static_cast<int32_t>(Frs2s.sf);
729 }});
730 0xD2: fdtoi({{
731 Frds.sf = (float)static_cast<int32_t>(Frs2.df);
732 }});
727 0xD1: fstoi({{
728 Frds.sf = (float)static_cast<int32_t>(Frs2s.sf);
729 }});
730 0xD2: fdtoi({{
731 Frds.sf = (float)static_cast<int32_t>(Frs2.df);
732 }});
733 0xD3: Trap::fqtoi({{fault = new FpExceptionOther;}}); // unimp fpop
733 0xD3: FpUnimpl::fqtoi();
734 default: FailUnimpl::fpop1();
735 }
736 }
737 0x35: decode OPF{
738 format BasicOperate{
739 0x51: fcmps({{
740 uint8_t fcc;
741 if(isnan(Frs1s) || isnan(Frs2s))

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

761 fcc = 2;
762 else
763 fcc = 0;
764 uint8_t firstbit = 10;
765 if(FCMPCC)
766 firstbit = FCMPCC * 2 + 30;
767 Fsr = insertBits(Fsr, firstbit +1, firstbit, fcc);
768 }});
734 default: FailUnimpl::fpop1();
735 }
736 }
737 0x35: decode OPF{
738 format BasicOperate{
739 0x51: fcmps({{
740 uint8_t fcc;
741 if(isnan(Frs1s) || isnan(Frs2s))

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

761 fcc = 2;
762 else
763 fcc = 0;
764 uint8_t firstbit = 10;
765 if(FCMPCC)
766 firstbit = FCMPCC * 2 + 30;
767 Fsr = insertBits(Fsr, firstbit +1, firstbit, fcc);
768 }});
769 0x53: Trap::fcmpq({{fault = new FpExceptionOther;}});
769 0x53: FpUnimpl::fcmpq();
770 0x54: fcmpes({{
771 uint8_t fcc = 0;
772 if(isnan(Frs1s) || isnan(Frs2s))
773 fault = new FpExceptionIEEE754;
774 if(Frs1s < Frs2s)
775 fcc = 1;
776 else if(Frs1s > Frs2s)
777 fcc = 2;

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

788 fcc = 1;
789 else if(Frs1s > Frs2s)
790 fcc = 2;
791 uint8_t firstbit = 10;
792 if(FCMPCC)
793 firstbit = FCMPCC * 2 + 30;
794 Fsr = insertBits(Fsr, firstbit +1, firstbit, fcc);
795 }});
770 0x54: fcmpes({{
771 uint8_t fcc = 0;
772 if(isnan(Frs1s) || isnan(Frs2s))
773 fault = new FpExceptionIEEE754;
774 if(Frs1s < Frs2s)
775 fcc = 1;
776 else if(Frs1s > Frs2s)
777 fcc = 2;

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

788 fcc = 1;
789 else if(Frs1s > Frs2s)
790 fcc = 2;
791 uint8_t firstbit = 10;
792 if(FCMPCC)
793 firstbit = FCMPCC * 2 + 30;
794 Fsr = insertBits(Fsr, firstbit +1, firstbit, fcc);
795 }});
796 0x56: Trap::fcmpeq({{fault = new FpExceptionOther;}});
796 0x56: FpUnimpl::fcmpeq();
797 default: FailUnimpl::fpop2();
798 }
799 }
800 //This used to be just impdep1, but now it's a whole bunch
801 //of instructions
802 0x36: decode OPF{
803 0x00: FailUnimpl::edge8();
804 0x01: FailUnimpl::edge8n();

--- 554 unchanged lines hidden ---
797 default: FailUnimpl::fpop2();
798 }
799 }
800 //This used to be just impdep1, but now it's a whole bunch
801 //of instructions
802 0x36: decode OPF{
803 0x00: FailUnimpl::edge8();
804 0x01: FailUnimpl::edge8n();

--- 554 unchanged lines hidden ---