ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/uae_cpu/readcpu.cpp
(Generate patch)

Comparing BasiliskII/src/uae_cpu/readcpu.cpp (file contents):
Revision 1.8 by gbeauche, 2002-11-02T17:23:20Z vs.
Revision 1.9 by gbeauche, 2005-06-06T19:22:56Z

# Line 754 | Line 754 | static void build_insn (int insn)
754          }
755   #endif
756          
757 +        // Fix flags used information for Scc, Bcc, TRAPcc, DBcc instructions
758 +        if      (       table68k[opc].mnemo == i_Scc
759 +                ||      table68k[opc].mnemo == i_Bcc
760 +                ||      table68k[opc].mnemo == i_DBcc
761 +                ||      table68k[opc].mnemo == i_TRAPcc
762 +                )       {
763 +                switch (table68k[opc].cc) {
764 +                // CC mask:     XNZVC
765 +                //                       8421
766 +                case 0: flags_used = 0x00; break;       /*  T */
767 +                case 1: flags_used = 0x00; break;       /*  F */
768 +                case 2: flags_used = 0x05; break;       /* HI */
769 +                case 3: flags_used = 0x05; break;       /* LS */
770 +                case 4: flags_used = 0x01; break;       /* CC */
771 +                case 5: flags_used = 0x01; break;       /* CS */
772 +                case 6: flags_used = 0x04; break;       /* NE */
773 +                case 7: flags_used = 0x04; break;       /* EQ */
774 +                case 8: flags_used = 0x02; break;       /* VC */
775 +                case 9: flags_used = 0x02; break;       /* VS */
776 +                case 10:flags_used = 0x08; break;       /* PL */
777 +                case 11:flags_used = 0x08; break;       /* MI */
778 +                case 12:flags_used = 0x0A; break;       /* GE */
779 +                case 13:flags_used = 0x0A; break;       /* LT */
780 +                case 14:flags_used = 0x0E; break;       /* GT */
781 +                case 15:flags_used = 0x0E; break;       /* LE */
782 +                }
783 +        }
784 +                
785   #if 1
786          /* gb-- flagdead and flaglive would not have correct information */
787          table68k[opc].flagdead = flags_set;
# Line 781 | Line 809 | void read_table68k (void)
809      for (i = 0; i < n_defs68k; i++) {
810          build_insn (i);
811      }
784        
785        /* Extra fixes in table68k for control flow information and flag usage */
786        for (i = 0; i < 65536; i++) {
787                instrmnem mnemo = (instrmnem)(table68k[i].mnemo);
788                
789 #define IS_CONST_JUMP(opc) \
790                (       ((table68k[opc].mnemo == i_Bcc) && (table68k[opc].cc < 2)) \
791                ||      (table68k[opc].mnemo == i_BSR) \
792                )
793
794                // Precise const jumps as such. The JIT compiler will take
795                // care to actually enable that optimization or not
796                if (IS_CONST_JUMP(i))
797                        table68k[i].cflow |= fl_const_jump;
798
799                // Fix flags used information for Scc, Bcc, TRAPcc, DBcc instructions
800                int flags_used = table68k[i].flaglive;
801                if      (       (mnemo == i_Scc)
802                        ||      (mnemo == i_Bcc)
803                        ||      (mnemo == i_DBcc)
804                        ||      (mnemo == i_TRAPcc)
805                        )       {
806                        switch (table68k[i].cc) {
807                        // CC mask:     XNZVC
808                        //                       8421
809                        case 0: flags_used = 0x00; break;       /*  T */
810                        case 1: flags_used = 0x00; break;       /*  F */
811                        case 2: flags_used = 0x05; break;       /* HI */
812                        case 3: flags_used = 0x05; break;       /* LS */
813                        case 4: flags_used = 0x01; break;       /* CC */
814                        case 5: flags_used = 0x01; break;       /* CS */
815                        case 6: flags_used = 0x04; break;       /* NE */
816                        case 7: flags_used = 0x04; break;       /* EQ */
817                        case 8: flags_used = 0x02; break;       /* VC */
818                        case 9: flags_used = 0x02; break;       /* VS */
819                        case 10:flags_used = 0x08; break;       /* PL */
820                        case 11:flags_used = 0x08; break;       /* MI */
821                        case 12:flags_used = 0x0A; break;       /* GE */
822                        case 13:flags_used = 0x0A; break;       /* LT */
823                        case 14:flags_used = 0x0E; break;       /* GT */
824                        case 15:flags_used = 0x0E; break;       /* LE */
825                        }
826                }
827                
828                /* Unconditional jumps don't evaluate condition codes, so they
829                   don't actually use any flags themselves */
830                if (IS_CONST_JUMP(i))
831                        flags_used = 0;
832                
833                table68k[i].flaglive = flags_used;
834        }
812   }
813  
814   static int mismatch;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines