Annotation of hatari/src/uae-cpu/m68k.h_i86, revision 1.1

1.1     ! root        1:  /* 
        !             2:   * UAE - The Un*x Amiga Emulator
        !             3:   * 
        !             4:   * MC68000 emulation - machine dependent bits
        !             5:   *
        !             6:   * Copyright 1996 Bernd Schmidt
        !             7:   */
        !             8: 
        !             9: #if 0 
        !            10: struct flag_struct {
        !            11:     unsigned int c:1; /* first byte */
        !            12:     int :5;
        !            13:     unsigned int z:1;
        !            14:     unsigned int n:1;
        !            15:     int :3;           /* second, third & fourth byte */
        !            16:     unsigned int v:1; 
        !            17:     int :20;
        !            18:     unsigned int x:1; /* fifth */
        !            19:     int :31;
        !            20: };
        !            21: 
        !            22: #define ZFLG (regflags.z)
        !            23: #define NFLG (regflags.n)
        !            24: #define CFLG (regflags.c)
        !            25: #define VFLG (regflags.v)
        !            26: #define XFLG (regflags.x)
        !            27: 
        !            28: #else
        !            29: 
        !            30: struct flag_struct {
        !            31:     unsigned int cznv;
        !            32:     unsigned int x;
        !            33: };
        !            34: 
        !            35: #define FLAGVAL_Z 0x40
        !            36: #define FLAGVAL_N 0x80
        !            37: 
        !            38: #define SET_ZFLG(y) (regflags.cznv = (regflags.cznv & ~0x40) | (((y) & 1) << 6))
        !            39: #define SET_CFLG(y) (regflags.cznv = (regflags.cznv & ~1) | ((y) & 1))
        !            40: #define SET_VFLG(y) (regflags.cznv = (regflags.cznv & ~0x800) | (((y) & 1) << 11))
        !            41: #define SET_NFLG(y) (regflags.cznv = (regflags.cznv & ~0x80) | (((y) & 1) << 7))
        !            42: #define SET_XFLG(y) (regflags.x = (y))
        !            43: 
        !            44: #define GET_ZFLG ((regflags.cznv >> 6) & 1)
        !            45: #define GET_CFLG (regflags.cznv & 1)
        !            46: #define GET_VFLG ((regflags.cznv >> 11) & 1)
        !            47: #define GET_NFLG ((regflags.cznv >> 7) & 1)
        !            48: #define GET_XFLG (regflags.x & 1)
        !            49: 
        !            50: #define CLEAR_CZNV (regflags.cznv = 0)
        !            51: #define GET_CZNV (regflags.cznv)
        !            52: #define IOR_CZNV(X) (regflags.cznv |= (X))
        !            53: #define SET_CZNV(X) (regflags.cznv = (X))
        !            54: 
        !            55: #define COPY_CARRY (regflags.x = regflags.cznv)
        !            56: 
        !            57: 
        !            58: #endif
        !            59: 
        !            60: extern struct flag_struct regflags __asm__ ("regflags");
        !            61: 
        !            62: static __inline__ int cctrue(int cc)
        !            63: {
        !            64:     uae_u32 cznv = regflags.cznv;
        !            65:     switch(cc){
        !            66:      case 0: return 1;                       /* T */
        !            67:      case 1: return 0;                       /* F */
        !            68:      case 2: return (cznv & 0x41) == 0; /* !GET_CFLG && !GET_ZFLG;  HI */
        !            69:      case 3: return (cznv & 0x41) != 0; /* GET_CFLG || GET_ZFLG;    LS */
        !            70:      case 4: return (cznv & 1) == 0;        /* !GET_CFLG;               CC */
        !            71:      case 5: return (cznv & 1) != 0;           /* GET_CFLG;                CS */
        !            72:      case 6: return (cznv & 0x40) == 0; /* !GET_ZFLG;               NE */
        !            73:      case 7: return (cznv & 0x40) != 0; /* GET_ZFLG;                EQ */
        !            74:      case 8: return (cznv & 0x800) == 0;/* !GET_VFLG;               VC */
        !            75:      case 9: return (cznv & 0x800) != 0;/* GET_VFLG;                VS */
        !            76:      case 10:return (cznv & 0x80) == 0; /* !GET_NFLG;               PL */
        !            77:      case 11:return (cznv & 0x80) != 0; /* GET_NFLG;                MI */
        !            78:      case 12:return (((cznv << 4) ^ cznv) & 0x800) == 0; /* GET_NFLG == GET_VFLG;             GE */
        !            79:      case 13:return (((cznv << 4) ^ cznv) & 0x800) != 0;/* GET_NFLG != GET_VFLG;             LT */
        !            80:      case 14:
        !            81:        cznv &= 0x8c0;
        !            82:        return (((cznv << 4) ^ cznv) & 0x840) == 0; /* !GET_ZFLG && (GET_NFLG == GET_VFLG);  GT */
        !            83:      case 15:
        !            84:        cznv &= 0x8c0;
        !            85:        return (((cznv << 4) ^ cznv) & 0x840) != 0; /* GET_ZFLG || (GET_NFLG != GET_VFLG);   LE */
        !            86:     }
        !            87:     abort();
        !            88:     return 0;
        !            89: }
        !            90: 
        !            91: #define optflag_testl(v) \
        !            92:   __asm__ __volatile__ ("testl %1,%1\n\t" \
        !            93:                        "pushfl\n\t" \
        !            94:                        "popl %0\n\t" \
        !            95:                        : "=r" (regflags.cznv) : "r" (v) : "cc")
        !            96: 
        !            97: #define optflag_testw(v) \
        !            98:   __asm__ __volatile__ ("testw %w1,%w1\n\t" \
        !            99:                        "pushfl\n\t" \
        !           100:                        "popl %0\n\t" \
        !           101:                        : "=r" (regflags.cznv) : "r" (v) : "cc")
        !           102: 
        !           103: #define optflag_testb(v) \
        !           104:   __asm__ __volatile__ ("testb %b1,%b1\n\t" \
        !           105:                        "pushfl\n\t" \
        !           106:                        "popl %0\n\t" \
        !           107:                        : "=r" (regflags.cznv) : "q" (v) : "cc")
        !           108: 
        !           109: #define optflag_addl(v, s, d) do { \
        !           110:   __asm__ __volatile__ ("addl %k2,%k1\n\t" \
        !           111:                        "pushfl\n\t" \
        !           112:                        "popl %0\n\t" \
        !           113:                        : "=r" (regflags.cznv), "=r" (v) : "rmi" (s), "1" (d) : "cc"); \
        !           114:     COPY_CARRY; \
        !           115:     } while (0)
        !           116: #define optflag_addw(v, s, d) do { \
        !           117:   __asm__ __volatile__ ("addw %w2,%w1\n\t" \
        !           118:                        "pushfl\n\t" \
        !           119:                        "popl %0\n\t" \
        !           120:                        : "=r" (regflags.cznv), "=r" (v) : "rmi" (s), "1" (d) : "cc"); \
        !           121:     COPY_CARRY; \
        !           122:     } while (0)
        !           123: 
        !           124: #define optflag_addb(v, s, d) do { \
        !           125:   __asm__ __volatile__ ("addb %b2,%b1\n\t" \
        !           126:                        "pushfl\n\t" \
        !           127:                        "popl %0\n\t" \
        !           128:                        : "=r" (regflags.cznv), "=q" (v) : "qmi" (s), "1" (d) : "cc"); \
        !           129:     COPY_CARRY; \
        !           130:     } while (0)
        !           131: 
        !           132: #define optflag_subl(v, s, d) do { \
        !           133:   __asm__ __volatile__ ("subl %k2,%k1\n\t" \
        !           134:                        "pushfl\n\t" \
        !           135:                        "popl %0\n\t" \
        !           136:                        : "=r" (regflags.cznv), "=r" (v) : "rmi" (s), "1" (d) : "cc"); \
        !           137:     COPY_CARRY; \
        !           138:     } while (0)
        !           139: 
        !           140: #define optflag_subw(v, s, d) do { \
        !           141:   __asm__ __volatile__ ("subw %w2,%w1\n\t" \
        !           142:                        "pushfl\n\t" \
        !           143:                        "popl %0\n\t" \
        !           144:                        : "=r" (regflags.cznv), "=r" (v) : "rmi" (s), "1" (d) : "cc"); \
        !           145:     COPY_CARRY; \
        !           146:     } while (0)
        !           147: 
        !           148: #define optflag_subb(v, s, d) do { \
        !           149:   __asm__ __volatile__ ("subb %b2,%b1\n\t" \
        !           150:                        "pushfl\n\t" \
        !           151:                        "popl %0\n\t" \
        !           152:                        : "=r" (regflags.cznv), "=q" (v) : "qmi" (s), "1" (d) : "cc"); \
        !           153:     COPY_CARRY; \
        !           154:     } while (0)
        !           155: 
        !           156: #define optflag_cmpl(s, d) \
        !           157:   __asm__ __volatile__ ("cmpl %k1,%k2\n\t" \
        !           158:                        "pushfl\n\t" \
        !           159:                        "popl %0\n\t" \
        !           160:                        : "=r" (regflags.cznv) : "rmi" (s), "r" (d) : "cc")
        !           161: 
        !           162: #define optflag_cmpw(s, d) \
        !           163:   __asm__ __volatile__ ("cmpw %w1,%w2\n\t" \
        !           164:                        "pushfl\n\t" \
        !           165:                        "popl %0\n\t" \
        !           166:                        : "=r" (regflags.cznv) : "rmi" (s), "r" (d) : "cc")
        !           167: 
        !           168: #define optflag_cmpb(s, d) \
        !           169:   __asm__ __volatile__ ("cmpb %b1,%b2\n\t" \
        !           170:                        "pushfl\n\t" \
        !           171:                        "popl %0\n\t" \
        !           172:                        : "=r" (regflags.cznv) : "qmi" (s), "q" (d) : "cc")
        !           173: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.