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 defined(ACORN_FLAG_OPT)
10 struct flag_struct {
11   unsigned int x:1;
12   int :27;
13   unsigned int v:1;
14   unsigned int c:1;
15   unsigned int z:1;
16   unsigned int n:1;
17 };
18 #else
19 struct flag_struct {
20     unsigned int c;
21     unsigned int z;
22     unsigned int n;
23     unsigned int v;
24     unsigned int x;
25 };
26 #endif
27 
28 extern struct flag_struct regflags;
29 
30 #define ZFLG (regflags.z)
31 #define NFLG (regflags.n)
32 #define CFLG (regflags.c)
33 #define VFLG (regflags.v)
34 #define XFLG (regflags.x)
35 
cctrue(const int cc)36 static __inline__ int cctrue(const int cc)
37 {
38     switch(cc){
39      case 0: return 1;                       /* T */
40      case 1: return 0;                       /* F */
41      case 2: return !CFLG && !ZFLG;          /* HI */
42      case 3: return CFLG || ZFLG;            /* LS */
43      case 4: return !CFLG;                   /* CC */
44      case 5: return CFLG;                    /* CS */
45      case 6: return !ZFLG;                   /* NE */
46      case 7: return ZFLG;                    /* EQ */
47      case 8: return !VFLG;                   /* VC */
48      case 9: return VFLG;                    /* VS */
49      case 10:return !NFLG;                   /* PL */
50      case 11:return NFLG;                    /* MI */
51      case 12:return NFLG == VFLG;            /* GE */
52      case 13:return NFLG != VFLG;            /* LT */
53      case 14:return !ZFLG && (NFLG == VFLG); /* GT */
54      case 15:return ZFLG || (NFLG != VFLG);  /* LE */
55     }
56     abort();
57     return 0;
58 }
59 
60