|
|
1.1.1.3 ! root 1: /* 1.1 root 2: * UAE - The Un*x Amiga Emulator 1.1.1.3 ! root 3: * 1.1 root 4: * MC68000 emulation - machine dependent bits 5: * 6: * Copyright 1996 Bernd Schmidt, Samuel Devulder 7: */ 8: 1.1.1.3 ! root 9: 1.1 root 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; 1.1.1.3 ! root 19: 1.1 root 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: 1.1.1.2 root 32: STATIC_INLINE int cctrue(const int cc) 1.1 root 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", \ 1.1.1.3 ! root 65: "tst."#l" %0\n\tmove.w %%ccr,regflags") \ ! 66: : : "dmi" (v) : "cc") 1.1 root 67: 68: #define m68k_flag_add(l, v, s, d) \ 69: __asm__ __volatile__(MITMOT("add"#l" %3,%1\n\tmovew ccr,%0", \ 1.1.1.3 ! root 70: "add."#l" %3,%1\n\tmove.w %%ccr,%0") \ ! 71: : "=d" (ccr), "=&d" (v) \ ! 72: : "1" (s), "dmi" (d) \ ! 73: : "cc") 1.1 root 74: 75: #define m68k_flag_sub(l, v, s, d) \ 76: __asm__ __volatile__(MITMOT("sub"#l" %2,%1\n\tmovew ccr,%0", \ 1.1.1.3 ! root 77: "sub."#l" %2,%1\n\tmove.w %%ccr,%0") \ ! 78: : "=d" (ccr), "=&d" (v) \ ! 79: : "dmi" (s), "1" (d) \ ! 80: : "cc") 1.1 root 81: 82: #define m68k_flag_cmp(l, s, d) \ 83: __asm__ __volatile__(MITMOT("cmp"#l" %0,%1\n\tmovew ccr,_regflags", \ 1.1.1.3 ! root 84: "cmp."#l" %0,%1\n\tmove.w %%ccr,regflags") \ ! 85: : : "dmi" (s), "d" (d) : "cc") 1.1 root 86:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.