summaryrefslogtreecommitdiff
path: root/boehm-gc/mach_dep.c
diff options
context:
space:
mode:
authorbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>2001-10-16 09:01:40 +0000
committerbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>2001-10-16 09:01:40 +0000
commitfa4ee1f113cb5cb7452551cdd2a608656c06a45c (patch)
tree483dc5098530e605b23e445c94fcdfdfec0d9b23 /boehm-gc/mach_dep.c
parent380cddab526fcf3c2f33dc8ebeb61c2d42703f41 (diff)
downloadgcc-fa4ee1f113cb5cb7452551cdd2a608656c06a45c.tar.gz
* Makefile.am, acinclude.m4, configure.in: Imported GC 6.1 Alpha 1
and merged local changes. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@46283 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'boehm-gc/mach_dep.c')
-rw-r--r--boehm-gc/mach_dep.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/boehm-gc/mach_dep.c b/boehm-gc/mach_dep.c
index 776bf6909bc..35e9264bd85 100644
--- a/boehm-gc/mach_dep.c
+++ b/boehm-gc/mach_dep.c
@@ -492,8 +492,9 @@ ptr_t cold_gc_frame;
/* On IA64, we also need to flush register windows. But they end */
/* up on the other side of the stack segment. */
/* Returns the backing store pointer for the register stack. */
+/* We implement this as a separate file in HP/UX. */
# ifdef IA64
-# ifdef __GNUC__
+# ifdef LINUX
asm(" .text");
asm(" .psr abi64");
asm(" .psr lsb");
@@ -510,12 +511,25 @@ ptr_t cold_gc_frame;
asm(" mov r8=ar.bsp");
asm(" br.ret.sptk.few rp");
asm(" .endp GC_save_regs_in_stack");
-# else
- void GC_save_regs_in_stack() {
- asm(" flushrs");
- asm(" ;;");
- asm(" mov r8=ar.bsp");
- asm(" br.ret.sptk.few rp");
+# endif /* LINUX */
+# if 0 /* Other alternatives that don't work on HP/UX */
+ word GC_save_regs_in_stack() {
+# if USE_BUILTINS
+ __builtin_ia64_flushrs();
+ return __builtin_ia64_bsp();
+# else
+# ifdef HPUX
+ _asm(" flushrs");
+ _asm(" ;;");
+ _asm(" mov r8=ar.bsp");
+ _asm(" br.ret.sptk.few rp");
+# else
+ asm(" flushrs");
+ asm(" ;;");
+ asm(" mov r8=ar.bsp");
+ asm(" br.ret.sptk.few rp");
+# endif
+# endif
}
# endif
# endif