Commit d2075f37 authored by GnoStiC's avatar GnoStiC

puae 2.3.1

parent 7f715a45
......@@ -31,17 +31,22 @@
*
* Evaluate operand and set Z and N flags. Always clear C and V.
*/
#define optflag_testl (v) \
do { \
asm ( \
"cmpi cr0, %2, 0 \n\t" \
"mfcr %1 \n\t" \
"rlwinm %0, %1, 0, 0, 3 \n\t" \
\
:: "r" (v) \
: "cr0" \
); \
/*
#define optflag_testl (v) \
do { \
asm ( \
"cmpi cr0, %2, 0\n\t" \
"mfcr %1\n\t" \
"rlwinm %0, %1, 0, 0, 3\n\t"\
:: "r" (v) : "cr0" \
); \
} while (0)
*/
#define optflag_testl (v) \
__asm__ __volatile__ ("cmpi cr0, %2, 0\n\t" \
"mfcr %1\n\t" \
"rlwinm %0, %1, 0, 0, 3\n\t"\
:: "r" (v) : "cr0")
#define optflag_testw(v) optflag_testl((uae_s32)(v))
#define optflag_testb(v) optflag_testl((uae_s32)(v))
......@@ -51,19 +56,23 @@
*
* Perform v = s + d and set ZNCV accordingly
*/
#define optflag_addl(v, s, d) \
do { \
asm ( \
"addco. %1, %2, %3 \n\t" \
"mcrxr cr2 \n\t" \
"mfcr %0 \n\t" \
\
: "=r" (v) \
: "r" (s), "r" (d) \
: "cr0", "cr2" DEP_XER \
); \
regflags.x = regflags.cznv; \
/*
#define optflag_addl(v, s, d) \
do { \
asm ( \
"addco. %1, %2, %3\n\t" \
"mcrxr cr2\n\t" \
"mfcr %0\n\t" \
: "=r" (v) : "r" (s), "r" (d) : "cr0", "cr2" DEP_XER \
); \
regflags.x = regflags.cznv; \
} while (0)
*/
#define optflag_addl(v, s, d) \
__asm__ __volatile__ ("addco. %1, %2, %3\n\t" \
"mcrxr cr2\n\t" \
"mfcr %0\n\t" \
: "=r" (v) : "r" (s), "r" (d) : "cr0", "cr2")
#define optflag_addw(v, s, d) do { optflag_addl((v), (s) << 16, (d) << 16); v = v >> 16; } while (0)
#define optflag_addb(v, s, d) do { optflag_addl((v), (s) << 24, (d) << 24); v = v >> 24; } while (0)
......@@ -73,38 +82,52 @@
*
* Perform v = d - s and set ZNCV accordingly
*/
#define optflag_subl(v, s, d) \
do { \
asm ( \
"subfco. %1, %2, %3 \n\t" \
"mcrxr cr2 \n\t" \
"mfcr %0 \n\t" \
"xoris %0,%0,32 \n\t" \
\
: "=r" (v) \
: "r" (s), \
"r" (d) \
: "cr0", "cr2" DEP_XER \
); \
regflags.x = regflags.cznv; \
/*
#define optflag_subl(v, s, d) \
do { \
asm ( \
"subfco. %1, %2, %3\n\t" \
"mcrxr cr2\n\t" \
"mfcr %0\n\t" \
"xoris %0,%0,32\n\t" \
: "=r" (v) : "r" (s), "r" (d) : "cr0", "cr2" DEP_XER \
); \
regflags.x = regflags.cznv; \
} while (0)
*/
#define optflag_subl(v, s, d) do { \
__asm__ __volatile__ ("subfco. %1, %2, %3\n\t" \
"mcrxr cr2\n\t" \
"mfcr %0\n\t" \
"xoris %0,%0,32\n\t" \
: "=r" (v) : "r" (s), "r" (d) : "cr0", "cr2"); \
regflags.x = regflags.cznv; \
} while (0)
#define optflag_subw(v, s, d) do { optflag_subl(v, (s) << 16, (d) << 16); v = v >> 16; } while (0)
#define optflag_subb(v, s, d) do { optflag_subl(v, (s) << 24, (d) << 24); v = v >> 24; } while (0)
#define optflag_cmpl(s, d) \
do { \
asm ( \
"subfco. %1, %2, %3 \n\t" \
"mcrxr cr2 \n\t" \
"mfcr %0 \n\t" \
"xoris %0,%0,32 \n\t" \
\
:: "r" (s), \
"r" (d) \
: "cr0", "cr2" DEP_XER \
); \
/*
* Compare operations
*/
/*
#define optflag_cmpl(s, d) \
do { \
asm ( \
"subfco. %1, %2, %3\n\t" \
"mcrxr cr2\n\t" \
"mfcr %0\n\t" \
"xoris %0,%0,32\n\t" \
:: "r" (s), "r" (d) : "cr0", "cr2" DEP_XER \
); \
} while (0)
*/
#define optflag_cmpl(s, d) \
__asm__ __volatile__ ("subfco. %1, %2, %3\n\t" \
"mcrxr cr2\n\t" \
"mfcr %0\n\t" \
"xoris %0,%0,32\n\t" \
:: "r" (s), "r" (d) : "cr0", "cr2")
#define optflag_cmpw(s, d) optflag_cmpl((s) << 16, (d) << 16)
#define optflag_cmpb(s, d) optflag_cmpl((s) << 24, (d) << 24)
......
......@@ -38,3 +38,5 @@ STATIC_INLINE void do_put_mem_byte (uae_u8 *a, uae_u8 v)
#define call_mem_get_func(func, addr) ((*func)(addr))
#define call_mem_put_func(func, addr, v) ((*func)(addr, v))
#define ALIGN_POINTER_TO32(p) ((~(unsigned long)(p)) & 3)
......@@ -20,7 +20,7 @@
#import "uae.h"
#ifdef USE_SDL
# import "SDL.h"
#import "SDL.h"
#endif
#import "main.h"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment