summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu
diff options
context:
space:
mode:
author Ryan Holtz <rholtz@batcountryentertainment.com>2009-09-26 22:33:20 +0000
committer Ryan Holtz <rholtz@batcountryentertainment.com>2009-09-26 22:33:20 +0000
commitb012b88ca5f1cfa9ca046aa988d91666d36e9784 (patch)
tree7178ac59533f56d72a494aed0bd3f2f1db8755dc /src/emu
parent43898fb85fbe4e171bb6df667295f1d23ccda5a2 (diff)
Don't mention in whatsnew - puts the BSD optimization back in.
Diffstat (limited to 'src/emu')
-rw-r--r--src/emu/cpu/m68000/m68kcpu.h28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/emu/cpu/m68000/m68kcpu.h b/src/emu/cpu/m68000/m68kcpu.h
index ad73de70891..294d5ed3060 100644
--- a/src/emu/cpu/m68000/m68kcpu.h
+++ b/src/emu/cpu/m68000/m68kcpu.h
@@ -258,6 +258,29 @@ typedef struct _m68ki_cpu_core m68ki_cpu_core;
/* Address error */
+/* sigjmp() on Mac OS X and *BSD in general saves signal contexts and is super-slow, use sigsetjmp() to tell it not to */
+#ifdef _BSD_SETJMP_H
+#define m68ki_set_address_error_trap(m68k) \
+ if(sigsetjmp(m68k->aerr_trap, 0) != 0) \
+ { \
+ m68ki_exception_address_error(m68k); \
+ if(m68k->stopped) \
+ { \
+ if (m68k->remaining_cycles > 0) \
+ m68k->remaining_cycles = 0; \
+ return m68k->initial_cycles; \
+ } \
+ }
+
+#define m68ki_check_address_error(m68k, ADDR, WRITE_MODE, FC) \
+ if((ADDR)&1) \
+ { \
+ m68k->aerr_address = ADDR; \
+ m68k->aerr_write_mode = WRITE_MODE; \
+ m68k->aerr_fc = FC; \
+ siglongjmp(m68k->aerr_trap, 1); \
+ }
+#else
#define m68ki_set_address_error_trap(m68k) \
if(setjmp(m68k->aerr_trap) != 0) \
{ \
@@ -269,6 +292,7 @@ typedef struct _m68ki_cpu_core m68ki_cpu_core;
return m68k->initial_cycles; \
} \
}
+#endif
#define m68ki_check_address_error(m68k, ADDR, WRITE_MODE, FC) \
if((ADDR)&1) \
@@ -569,7 +593,11 @@ struct _m68ki_cpu_core
int reset_cycles;
UINT32 tracing;
+#ifdef _BSD_SETJMP_H
+ sigjmp_buf aerr_trap;
+#else
jmp_buf aerr_trap;
+#endif
UINT32 aerr_address;
UINT32 aerr_write_mode;
UINT32 aerr_fc;