Patches to make libobjc build.
authorJim Wilson <wilson@cygnus.com>
Wed, 15 Mar 2000 19:35:26 +0000 (19:35 +0000)
committerJim Wilson <wilson@gcc.gnu.org>
Wed, 15 Mar 2000 19:35:26 +0000 (11:35 -0800)
* config/ia64/ia64.md (restore_stack_nonlocal): New.
* config/ia64/lib1funcs.asm (__ia64_nonlocal_goto): Delete padding nop.
(__ia64_restore_stack_nonlocal): New.
* config/ia64/t-ia64 (LIB1ASMFUNCS): Add __restore_stack_nonlocal.

From-SVN: r32564

gcc/ChangeLog
gcc/config/ia64/ia64.md
gcc/config/ia64/lib1funcs.asm
gcc/config/ia64/t-ia64

index 8c0b1af..47287d7 100644 (file)
@@ -1,3 +1,10 @@
+Wed Mar 15 11:34:27 2000  Jim Wilson  <wilson@cygnus.com>
+
+       * config/ia64/ia64.md (restore_stack_nonlocal): New.
+       * config/ia64/lib1funcs.asm (__ia64_nonlocal_goto): Delete padding nop.
+       (__ia64_restore_stack_nonlocal): New.
+       * config/ia64/t-ia64 (LIB1ASMFUNCS): Add __restore_stack_nonlocal.
+
 2000-03-15  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>
 
        * cpphash.c (collect_formal_parameters): Do not complain about
index fcbe471..8779489 100644 (file)
   ""
   "fc %0\;;;\;adds %0=31,%0\;;;\;fc %0\;;;\;sync.i\;srlz.i"
   [(set_attr "type" "unknown")])
+\f
+;; Builtin apply support.
+
+(define_expand "restore_stack_nonlocal"
+  [(use (match_operand:DI 0 "register_operand" ""))
+   (use (match_operand:OI 1 "memory_operand" ""))]
+  ""
+  "
+{
+  emit_library_call (gen_rtx_SYMBOL_REF (Pmode,
+                                        \"__ia64_restore_stack_nonlocal\"),
+                    0, VOIDmode, 1,
+                    copy_to_reg (XEXP (operands[1], 0)), Pmode);
+  DONE;
+}")
+
+\f
+;;; Intrinsics support.
 
 (define_insn "ccv_restore_si"
   [(unspec [(const_int 0)] 11)
index d8af8db..c69eda2 100644 (file)
@@ -602,11 +602,6 @@ __ia64_nonlocal_goto:
        adds r2=8,in2
        ld8 r12=[in2],16
        mov.ret.sptk.few.dc.dc rp = r33, .L0
-// ??? flushrs must be first instruction of a group.  Gas is unfortunately
-// putting the stop bit before the padding nop instead of after it, making
-// flushrs the first instruction of its bundle, but the second instruction
-// of its group.  We explicitly add the nop to avoid this problem.
-       nop.i 0
        ;;
        flushrs
        ld8 r16=[r2],16
@@ -633,3 +628,43 @@ __ia64_nonlocal_goto:
        ;;
        .endp __ia64_nonlocal_goto
 #endif
+
+#ifdef L__restore_stack_nonlocal
+// This is mostly the same as nonlocal_goto above.
+// ??? This has not been tested yet.
+
+// void __ia64_restore_stack_nonlocal(void *save_area)
+
+       .text
+       .align 16
+       .global __ia64_restore_stack_nonlocal
+       .proc __ia64_restore_stack_nonlocal
+__ia64_restore_stack_nonlocal:
+       alloc r20=ar.pfs,4,0,0,0
+       mov r19=ar.rsc
+       adds r2=8,in0
+       ld8 r12=[in0],16
+       ;;
+       flushrs
+       ld8 r16=[r2],16
+       and r19=0x1c,r19
+       ld8 r17=[in0]
+       ;;
+       ld8 r18=[r2]
+       mov ar.rsc=r19
+       ;;
+       mov ar.bspstore=r16
+       ;;
+       mov ar.rnat=r17
+       mov ar.pfs=r18
+       or r19=0x3,r19
+       ;;
+       loadrs
+       invala
+.L0:   {
+       mov ar.rsc=r19
+       br.ret.sptk.few rp
+       }
+       ;;
+       .endp __ia64_restore_stack_nonlocal
+#endif
index bf14c0a..cb23c52 100644 (file)
@@ -11,7 +11,7 @@ LIB1ASMSRC    = ia64/lib1funcs.asm
 LIB1ASMFUNCS  = __divdf3 __divsf3 \
        __divdi3 __moddi3 __udivdi3 __umoddi3 \
        __divsi3 __modsi3 __udivsi3 __umodsi3 __save_stack_nonlocal \
-       __nonlocal_goto
+       __nonlocal_goto __restore_stack_nonlocal
 
 # ??? Hack to get -P option used when compiling lib1funcs.asm, because Intel
 # assembler does not accept # line number as a comment.