summaryrefslogtreecommitdiff
path: root/zruntime.S
diff options
context:
space:
mode:
authorMike Pavone <pavone@retrodev.com>2014-06-23 13:12:04 -0400
committerMike Pavone <pavone@retrodev.com>2014-06-23 13:12:04 -0400
commit8a7f8bc09c88e9446d475127a82df23a1dcb0c75 (patch)
tree72f8e44eb911c9a33517ebe28689d93854ea3cd8 /zruntime.S
parentf1a97be9f7d1a939b3b1920c1764bf872edef10f (diff)
Ensure proper stack alignment when the Z80 calls into C code. This fixes a crash in optimized builds on OSX
Diffstat (limited to 'zruntime.S')
-rw-r--r--zruntime.S24
1 files changed, 24 insertions, 0 deletions
diff --git a/zruntime.S b/zruntime.S
index 1883239..a7bac3f 100644
--- a/zruntime.S
+++ b/zruntime.S
@@ -150,7 +150,15 @@ z80_read_ym2612:
call z80_save_context
mov %r13w, %di
push %rsi
+ test $8, %rsp
+ jnz 0f
call z80_read_ym
+ jmp 1f
+0:
+ sub $8, %rsp
+ call z80_read_ym
+ add $8, %rsp
+1:
pop %rsi
mov %al, %r13b
call z80_load_context
@@ -196,7 +204,15 @@ z80_write_ym2612:
call z80_save_context
mov %r14w, %di
mov %r13b, %dl
+ test $8, %rsp
+ jnz 0f
+ call z80_write_ym
+ jmp 1f
+0:
+ sub $8, %rsp
call z80_write_ym
+ add $8, %rsp
+1:
mov %rax, %rsi
jmp z80_load_context
z80_write_bank_reg:
@@ -219,7 +235,15 @@ z80_write_vdp:
call z80_save_context
mov %r14w, %di
mov %r13b, %dl
+ test $8, %rsp
+ jnz 0f
+ call z80_vdp_port_write
+ jmp 1f
+0:
+ sub $8, %rsp
call z80_vdp_port_write
+ add $8, %rsp
+1:
mov %rax, %rsi
jmp z80_load_context