mirror of
https://github.com/mauiaaron/apple2.git
synced 2024-07-09 11:29:10 +00:00
Fix calling conventions on x86_64
This commit is contained in:
parent
45f29f363f
commit
f72976a566
@ -2021,7 +2021,12 @@ ex_irq: testb $I_Flag, F_Reg // Already interrupt
|
|||||||
/* -------------------------------------------------------------------------
|
/* -------------------------------------------------------------------------
|
||||||
CPU thread main entry and exit points
|
CPU thread main entry and exit points
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
E(cpu65_run)
|
E(cpu65_run)
|
||||||
|
#ifdef __LP64__
|
||||||
|
pushq %rbx
|
||||||
|
// NOTE: should we be also preserving r12-r15?
|
||||||
|
#endif
|
||||||
pushLQ _XBP
|
pushLQ _XBP
|
||||||
movLQ _XSP, _XBP
|
movLQ _XSP, _XBP
|
||||||
cmpb $0, SN(emul_reinitialize)
|
cmpb $0, SN(emul_reinitialize)
|
||||||
@ -2067,12 +2072,15 @@ exit_cpu65_run:
|
|||||||
movb X_Reg, SN(cpu65_current)+4
|
movb X_Reg, SN(cpu65_current)+4
|
||||||
movb Y_Reg, SN(cpu65_current)+5
|
movb Y_Reg, SN(cpu65_current)+5
|
||||||
movb SP_Reg_L, SN(cpu65_current)+6
|
movb SP_Reg_L, SN(cpu65_current)+6
|
||||||
popLQ _XBP
|
jmp exit_frame
|
||||||
ret
|
|
||||||
|
|
||||||
emul_reinit: movb $0, SN(cpu65__signal)
|
emul_reinit: movb $0, SN(cpu65__signal)
|
||||||
movb $1, SN(emul_reinitialize)
|
movb $1, SN(emul_reinitialize)
|
||||||
popLQ _XBP
|
|
||||||
|
exit_frame: popLQ _XBP
|
||||||
|
#ifdef __LP64__
|
||||||
|
popq %rbx
|
||||||
|
#endif
|
||||||
ret
|
ret
|
||||||
|
|
||||||
/* -------------------------------------------------------------------------
|
/* -------------------------------------------------------------------------
|
||||||
|
@ -57,7 +57,17 @@ E(func) addLQ SN(pointer),EffectiveAddr_X; \
|
|||||||
1: ret;
|
1: ret;
|
||||||
|
|
||||||
|
|
||||||
// TODO FIXME : implement CDECL prologue/epilogues...
|
#ifdef __LP64__
|
||||||
|
# define _PUSH_ARGS pushLQ EffectiveAddr_X; /* preserve */ \
|
||||||
|
movLQ _XAX, %rsi; /* %rdi = ea, %rsi = byte */
|
||||||
|
# define _POP_ARGS popLQ EffectiveAddr_X; /* restore */
|
||||||
|
#else
|
||||||
|
# define _PUSH_ARGS pushLQ _XAX; /* byte is arg2 */ \
|
||||||
|
pushLQ EffectiveAddr_X; /* ea is arg1 (and preserved) */
|
||||||
|
# define _POP_ARGS popLQ EffectiveAddr_X; /* restore ea */ \
|
||||||
|
popLQ _XAX;
|
||||||
|
#endif
|
||||||
|
|
||||||
#define GLUE_C_WRITE(func) \
|
#define GLUE_C_WRITE(func) \
|
||||||
E(func) pushLQ _XAX; \
|
E(func) pushLQ _XAX; \
|
||||||
pushLQ XY_Reg_X; \
|
pushLQ XY_Reg_X; \
|
||||||
@ -65,11 +75,9 @@ E(func) pushLQ _XAX; \
|
|||||||
pushLQ SP_Reg_X; \
|
pushLQ SP_Reg_X; \
|
||||||
pushLQ PC_Reg_X; \
|
pushLQ PC_Reg_X; \
|
||||||
andLQ $0xff,_XAX; \
|
andLQ $0xff,_XAX; \
|
||||||
pushLQ _XAX; \
|
_PUSH_ARGS \
|
||||||
pushLQ EffectiveAddr_X; \
|
|
||||||
call SN(c_##func); \
|
call SN(c_##func); \
|
||||||
popLQ EffectiveAddr_X; /* dummy */ \
|
_POP_ARGS \
|
||||||
popLQ _XAX; /* dummy */ \
|
|
||||||
popLQ PC_Reg_X; \
|
popLQ PC_Reg_X; \
|
||||||
popLQ SP_Reg_X; \
|
popLQ SP_Reg_X; \
|
||||||
popLQ AF_Reg_X; \
|
popLQ AF_Reg_X; \
|
||||||
@ -84,9 +92,9 @@ E(func) pushLQ XY_Reg_X; \
|
|||||||
pushLQ SP_Reg_X; \
|
pushLQ SP_Reg_X; \
|
||||||
pushLQ PC_Reg_X; \
|
pushLQ PC_Reg_X; \
|
||||||
pushLQ _XAX; /* HACK: works around mysterious issue with generated mov(_XAX), _XAX ... */ \
|
pushLQ _XAX; /* HACK: works around mysterious issue with generated mov(_XAX), _XAX ... */ \
|
||||||
pushLQ EffectiveAddr_X; \
|
pushLQ EffectiveAddr_X; /* ea is arg0 (and preserved) */ \
|
||||||
call SN(c_##func); \
|
call SN(c_##func); \
|
||||||
popLQ EffectiveAddr_X; /* dummy */ \
|
popLQ EffectiveAddr_X; /* restore ea */ \
|
||||||
movb %al, %dl; \
|
movb %al, %dl; \
|
||||||
popLQ _XAX; /* ... ugh */ \
|
popLQ _XAX; /* ... ugh */ \
|
||||||
movb %dl, %al; \
|
movb %dl, %al; \
|
||||||
|
Loading…
Reference in New Issue
Block a user