28 |
|
|
29 |
#define IN_GBC |
#define IN_GBC |
30 |
#define NEED_MP_H |
#define NEED_MP_H |
31 |
|
#include <string.h> |
32 |
#include <stdlib.h> |
#include <stdlib.h> |
33 |
#include "include.h" |
#include "include.h" |
34 |
|
|
765 |
|
|
766 |
} |
} |
767 |
|
|
768 |
|
#if defined(__ia64__) |
769 |
|
asm(" .text"); |
770 |
|
asm(" .psr abi64"); |
771 |
|
asm(" .psr lsb"); |
772 |
|
asm(" .lsb"); |
773 |
|
asm(""); |
774 |
|
asm(" .text"); |
775 |
|
asm(" .align 16"); |
776 |
|
asm(" .global GC_save_regs_in_stack"); |
777 |
|
asm(" .proc GC_save_regs_in_stack"); |
778 |
|
asm("GC_save_regs_in_stack:"); |
779 |
|
asm(" .body"); |
780 |
|
asm(" flushrs"); |
781 |
|
asm(" ;;"); |
782 |
|
asm(" mov r8=ar.bsp"); |
783 |
|
asm(" br.ret.sptk.few rp"); |
784 |
|
asm(" .endp GC_save_regs_in_stack"); |
785 |
|
|
786 |
|
void * GC_save_regs_in_stack(); |
787 |
|
#endif |
788 |
|
|
789 |
|
|
790 |
void |
void |
791 |
mark_c_stack(jmp_buf env1, int n, void (*fn)(void *,void *,int)) { |
mark_c_stack(jmp_buf env1, int n, void (*fn)(void *,void *,int)) { |
792 |
|
|
812 |
else |
else |
813 |
(*fn)(cs_org,0,C_GC_OFFSET);} |
(*fn)(cs_org,0,C_GC_OFFSET);} |
814 |
|
|
815 |
|
#if defined(__ia64__) |
816 |
|
{ |
817 |
|
extern void * __libc_ia64_register_backing_store_base; |
818 |
|
void * bst=GC_save_regs_in_stack(); |
819 |
|
void * bsb=__libc_ia64_register_backing_store_base; |
820 |
|
|
821 |
|
if (bsb>bst) |
822 |
|
(*fn)(bsb,bst,C_GC_OFFSET); |
823 |
|
else |
824 |
|
(*fn)(bst,bsb,C_GC_OFFSET); |
825 |
|
|
826 |
|
} |
827 |
|
#endif |
828 |
|
|
829 |
} |
} |
830 |
|
|
831 |
void |
void |