diff options
author | Patrick C. Beard <beard@netscape.com> | 2012-01-23 21:21:48 +0400 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2012-01-23 21:21:48 +0400 |
commit | 0df7e6cc1114cb378f51a7324bedbb08b9c8dd42 (patch) | |
tree | 4edffa67fbe7f9fac4ba7111bdf22bbe16b8a1d3 /mach_dep.c | |
parent | 32a6173645929c07786e9b732a91ef1d7e55b6fa (diff) | |
download | bdwgc-0df7e6cc1114cb378f51a7324bedbb08b9c8dd42.tar.gz |
Integrate ancient 'pcbeard' GC port for MacOS 9 Classic
* include/private/gc_priv.h (bcopy, bzero, BCOPY_EXISTS): Add
definition for ancient MacOS/ppc.
* mach_dep.c (PushMacRegisters): Add implementation for MacOS/ppc.
* mach_dep.c (GC_push_regs): Fix to work on MacOS/ppc.
Diffstat (limited to 'mach_dep.c')
-rw-r--r-- | mach_dep.c | 41 |
1 files changed, 34 insertions, 7 deletions
@@ -30,10 +30,35 @@ # endif #endif -#if defined(__MWERKS__) && !defined(POWERPC) +#if defined(MACOS) && defined(__MWERKS__) -asm static void PushMacRegisters() -{ +#if defined(POWERPC) + +# define NONVOLATILE_GPR_COUNT 19 + struct ppc_registers { + unsigned long gprs[NONVOLATILE_GPR_COUNT]; /* R13-R31 */ + }; + typedef struct ppc_registers ppc_registers; + + asm static void getRegisters(register ppc_registers* regs) + { + stmw r13,regs->gprs /* save R13-R31 */ + blr + } + + static void PushMacRegisters(void) + { + ppc_registers regs; + int i; + getRegisters(®s); + for (i = 0; i < NONVOLATILE_GPR_COUNT; i++) + GC_push_one(regs.gprs[i]); + } + +#else /* M68K */ + + asm static void PushMacRegisters(void) + { sub.w #4,sp /* reserve space for one parameter */ move.l a2,(sp) jsr GC_push_one @@ -61,9 +86,11 @@ asm static void PushMacRegisters() jsr GC_push_one add.w #4,sp /* fix stack */ rts -} + } + +#endif /* M68K */ -#endif /* __MWERKS__ */ +#endif /* MACOS && __MWERKS__ */ # if defined(SPARC) || defined(IA64) /* Value returned from register flushing routine; either sp (SPARC) */ @@ -128,9 +155,9 @@ asm static void PushMacRegisters() } # define HAVE_PUSH_REGS -# elif defined(M68K) && defined(MACOS) +# elif defined(MACOS) -# if defined(THINK_C) +# if defined(M68K) && defined(THINK_C) # define PushMacReg(reg) \ move.l reg,(sp) \ jsr GC_push_one |