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/ia64/lib1funcs.asm | |
parent | 5b1c68af0421c7b15e2ce4fe6b68283063da229a (diff) | |
download | gcc-c06fbba2a83094835f6dab25b8dfdce8a6828de2.tar.gz |
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/ia64/lib1funcs.asm')
-rw-r--r-- | gcc/config/ia64/lib1funcs.asm | 45 |
1 files changed, 40 insertions, 5 deletions
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 |