OSDN Git Service

Fix date on last entry.
[pf3gnuchains/gcc-fork.git] / boehm-gc / mach_dep.c
index 776bf69..35e9264 100644 (file)
@@ -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