Annotation of uae/src/md-68k/m68k.h, 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, Samuel Devulder
        !             7:   */
        !             8: 
        !             9:  
        !            10: struct flag_struct {
        !            11:     /* tricky: be sure that bit-offset(x)=bit-offset(c) in word representation. */
        !            12:     /* This depends heavily on the bit-order and the compiler used. I am not    */
        !            13:     /* sure the generated code is better than uae-0.6.1 */
        !            14:     int :12;           /* First word */
        !            15:     unsigned int n:1;
        !            16:     unsigned int z:1;
        !            17:     unsigned int v:1;
        !            18:     unsigned int c:1;
        !            19:     
        !            20:     int :15;           /* Second word */
        !            21:     unsigned int x:1;
        !            22: };
        !            23: 
        !            24: extern struct flag_struct regflags;
        !            25: 
        !            26: #define ZFLG (regflags.z)
        !            27: #define NFLG (regflags.n)
        !            28: #define CFLG (regflags.c)
        !            29: #define VFLG (regflags.v)
        !            30: #define XFLG (regflags.x)
        !            31: 
        !            32: static __inline__ int cctrue(const int cc)
        !            33: {
        !            34:     switch(cc){
        !            35:      case 0: return 1;                       /* T */
        !            36:      case 1: return 0;                       /* F */
        !            37:      case 2: return !CFLG && !ZFLG;          /* HI */
        !            38:      case 3: return CFLG || ZFLG;            /* LS */
        !            39:      case 4: return !CFLG;                   /* CC */
        !            40:      case 5: return CFLG;                    /* CS */
        !            41:      case 6: return !ZFLG;                   /* NE */
        !            42:      case 7: return ZFLG;                    /* EQ */
        !            43:      case 8: return !VFLG;                   /* VC */
        !            44:      case 9: return VFLG;                    /* VS */
        !            45:      case 10:return !NFLG;                   /* PL */
        !            46:      case 11:return NFLG;                    /* MI */
        !            47:      case 12:return NFLG == VFLG;            /* GE */
        !            48:      case 13:return NFLG != VFLG;            /* LT */
        !            49:      case 14:return !ZFLG && (NFLG == VFLG); /* GT */
        !            50:      case 15:return ZFLG || (NFLG != VFLG);  /* LE */
        !            51:     }
        !            52:     abort();
        !            53:     return 0;
        !            54: }
        !            55: 
        !            56: /* sam: MIT or MOTOROLA syntax ? */
        !            57: #ifdef __linux__
        !            58: #define MITMOT(mit,mot) mot
        !            59: #else /* Amiga os */
        !            60: #define MITMOT(mit,mot) mit
        !            61: #endif
        !            62: 
        !            63: #define m68k_flag_tst(l, v)                                           \
        !            64:   __asm__ __volatile__(MITMOT("tst"#l" %0\n\tmovew ccr,_regflags",    \
        !            65:                               "tst."#l" %0\n\tmove.w %%ccr,regflags") \
        !            66:                               : : "dmi" (v) : "cc")
        !            67: 
        !            68: #define m68k_flag_add(l, v, s, d)                                  \
        !            69:   __asm__ __volatile__(MITMOT("add"#l" %3,%1\n\tmovew ccr,%0",     \
        !            70:                               "add."#l" %3,%1\n\tmove.w %%ccr,%0") \
        !            71:                        : "=d" (ccr), "=&d" (v)                     \
        !            72:                        : "1" (s), "dmi" (d)                        \
        !            73:                        : "cc")
        !            74: 
        !            75: #define m68k_flag_sub(l, v, s, d)                                  \
        !            76:   __asm__ __volatile__(MITMOT("sub"#l" %2,%1\n\tmovew ccr,%0",     \
        !            77:                               "sub."#l" %2,%1\n\tmove.w %%ccr,%0") \
        !            78:                        : "=d" (ccr), "=&d" (v)                     \
        !            79:                        : "dmi" (s), "1" (d)                        \
        !            80:                        : "cc")
        !            81: 
        !            82: #define m68k_flag_cmp(l, s, d)                                           \
        !            83:   __asm__ __volatile__(MITMOT("cmp"#l" %0,%1\n\tmovew ccr,_regflags",    \
        !            84:                               "cmp."#l" %0,%1\n\tmove.w %%ccr,regflags") \
        !            85:                        : : "dmi" (s), "d" (d) : "cc")
        !            86: 

unix.superglobalmegacorp.com

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