Commit d2075f37 authored by GnoStiC's avatar GnoStiC

puae 2.3.1

parent 7f715a45
...@@ -31,17 +31,22 @@ ...@@ -31,17 +31,22 @@
* *
* Evaluate operand and set Z and N flags. Always clear C and V. * Evaluate operand and set Z and N flags. Always clear C and V.
*/ */
#define optflag_testl (v) \ /*
do { \ #define optflag_testl (v) \
asm ( \ do { \
"cmpi cr0, %2, 0 \n\t" \ asm ( \
"mfcr %1 \n\t" \ "cmpi cr0, %2, 0\n\t" \
"rlwinm %0, %1, 0, 0, 3 \n\t" \ "mfcr %1\n\t" \
\ "rlwinm %0, %1, 0, 0, 3\n\t"\
:: "r" (v) \ :: "r" (v) : "cr0" \
: "cr0" \ ); \
); \
} while (0) } 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_testw(v) optflag_testl((uae_s32)(v))
#define optflag_testb(v) optflag_testl((uae_s32)(v)) #define optflag_testb(v) optflag_testl((uae_s32)(v))
...@@ -51,19 +56,23 @@ ...@@ -51,19 +56,23 @@
* *
* Perform v = s + d and set ZNCV accordingly * Perform v = s + d and set ZNCV accordingly
*/ */
#define optflag_addl(v, s, d) \ /*
do { \ #define optflag_addl(v, s, d) \
asm ( \ do { \
"addco. %1, %2, %3 \n\t" \ asm ( \
"mcrxr cr2 \n\t" \ "addco. %1, %2, %3\n\t" \
"mfcr %0 \n\t" \ "mcrxr cr2\n\t" \
\ "mfcr %0\n\t" \
: "=r" (v) \ : "=r" (v) : "r" (s), "r" (d) : "cr0", "cr2" DEP_XER \
: "r" (s), "r" (d) \ ); \
: "cr0", "cr2" DEP_XER \ regflags.x = regflags.cznv; \
); \
regflags.x = regflags.cznv; \
} while (0) } 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_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) #define optflag_addb(v, s, d) do { optflag_addl((v), (s) << 24, (d) << 24); v = v >> 24; } while (0)
...@@ -73,38 +82,52 @@ ...@@ -73,38 +82,52 @@
* *
* Perform v = d - s and set ZNCV accordingly * Perform v = d - s and set ZNCV accordingly
*/ */
#define optflag_subl(v, s, d) \ /*
do { \ #define optflag_subl(v, s, d) \
asm ( \ do { \
"subfco. %1, %2, %3 \n\t" \ asm ( \
"mcrxr cr2 \n\t" \ "subfco. %1, %2, %3\n\t" \
"mfcr %0 \n\t" \ "mcrxr cr2\n\t" \
"xoris %0,%0,32 \n\t" \ "mfcr %0\n\t" \
\ "xoris %0,%0,32\n\t" \
: "=r" (v) \ : "=r" (v) : "r" (s), "r" (d) : "cr0", "cr2" DEP_XER \
: "r" (s), \ ); \
"r" (d) \ regflags.x = regflags.cznv; \
: "cr0", "cr2" DEP_XER \
); \
regflags.x = regflags.cznv; \
} while (0) } 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_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_subb(v, s, d) do { optflag_subl(v, (s) << 24, (d) << 24); v = v >> 24; } while (0)
#define optflag_cmpl(s, d) \ /*
do { \ * Compare operations
asm ( \ */
"subfco. %1, %2, %3 \n\t" \ /*
"mcrxr cr2 \n\t" \ #define optflag_cmpl(s, d) \
"mfcr %0 \n\t" \ do { \
"xoris %0,%0,32 \n\t" \ asm ( \
\ "subfco. %1, %2, %3\n\t" \
:: "r" (s), \ "mcrxr cr2\n\t" \
"r" (d) \ "mfcr %0\n\t" \
: "cr0", "cr2" DEP_XER \ "xoris %0,%0,32\n\t" \
); \ :: "r" (s), "r" (d) : "cr0", "cr2" DEP_XER \
); \
} while (0) } 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_cmpw(s, d) optflag_cmpl((s) << 16, (d) << 16)
#define optflag_cmpb(s, d) optflag_cmpl((s) << 24, (d) << 24) #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) ...@@ -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_get_func(func, addr) ((*func)(addr))
#define call_mem_put_func(func, addr, v) ((*func)(addr, v)) #define call_mem_put_func(func, addr, v) ((*func)(addr, v))
#define ALIGN_POINTER_TO32(p) ((~(unsigned long)(p)) & 3)
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#import "uae.h" #import "uae.h"
#ifdef USE_SDL #ifdef USE_SDL
# import "SDL.h" #import "SDL.h"
#endif #endif
#import "main.h" #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