diff options
author | wilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-03-15 19:35:26 +0000 |
---|---|---|
committer | wilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-03-15 19:35:26 +0000 |
commit | c06fbba2a83094835f6dab25b8dfdce8a6828de2 (patch) | |
tree | 724ea7938f70c67f312a420cb085d65d50ee1e36 /gcc/config | |
parent | 5b1c68af0421c7b15e2ce4fe6b68283063da229a (diff) | |
download | ppe42-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.md | 18 | ||||
-rw-r--r-- | gcc/config/ia64/lib1funcs.asm | 45 | ||||
-rw-r--r-- | gcc/config/ia64/t-ia64 | 2 |
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. |