summaryrefslogtreecommitdiffstats
path: root/gcc/config
diff options
context:
space:
mode:
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>2000-03-15 19:35:26 +0000
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>2000-03-15 19:35:26 +0000
commitc06fbba2a83094835f6dab25b8dfdce8a6828de2 (patch)
tree724ea7938f70c67f312a420cb085d65d50ee1e36 /gcc/config
parent5b1c68af0421c7b15e2ce4fe6b68283063da229a (diff)
downloadppe42-gcc-c06fbba2a83094835f6dab25b8dfdce8a6828de2.tar.gz
ppe42-gcc-c06fbba2a83094835f6dab25b8dfdce8a6828de2.zip
Patches to make libobjc build.
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32564 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/ia64/ia64.md18
-rw-r--r--gcc/config/ia64/lib1funcs.asm45
-rw-r--r--gcc/config/ia64/t-ia642
3 files changed, 59 insertions, 6 deletions
diff --git a/gcc/config/ia64/ia64.md b/gcc/config/ia64/ia64.md
index fcbe4715750..877948911df 100644
--- a/gcc/config/ia64/ia64.md
+++ b/gcc/config/ia64/ia64.md
@@ -3173,6 +3173,24 @@
""
"fc %0\;;;\;adds %0=31,%0\;;;\;fc %0\;;;\;sync.i\;srlz.i"
[(set_attr "type" "unknown")])
+
+;; 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;
+}")
+
+
+;;; Intrinsics support.
(define_insn "ccv_restore_si"
[(unspec [(const_int 0)] 11)
diff --git a/gcc/config/ia64/lib1funcs.asm b/gcc/config/ia64/lib1funcs.asm
index d8af8dbd83c..c69eda286c8 100644
--- a/gcc/config/ia64/lib1funcs.asm
+++ b/gcc/config/ia64/lib1funcs.asm
@@ -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
diff --git a/gcc/config/ia64/t-ia64 b/gcc/config/ia64/t-ia64
index bf14c0a94a4..cb23c5237a7 100644
--- a/gcc/config/ia64/t-ia64
+++ b/gcc/config/ia64/t-ia64
@@ -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.
OpenPOWER on IntegriCloud