URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
[/] [or1k/] [trunk/] [newlib/] [newlib/] [libc/] [sys/] [sparc64/] [sigsetjmp.S] - Rev 1765
Compare with Previous | Blame | View Log
! This file is called sigsetjmp.s because that is what V8 uses.! We do not define sigsetjmp() or setlongjmp() yet.! Solaris has setjmp/longjmp in setjmp.o. Move this stuff there.#include <sys/syscallasm.h>TEXT_SECTIONALIGN (4)#ifdef __svr4__GLOBAL (ASM_SYMBOL (setjmp)).proc 04ASM_SYMBOL (setjmp):clr [%o0]stx %sp,[%o0+8]add %o7,8,%g1stx %g1,[%o0+16]retlmov %g0,%o0GLOBAL (ASM_SYMBOL (longjmp)).proc 04ASM_SYMBOL (longjmp):flushw ! flush register windowssub %sp,136,%spldx [%o0+8],%fpldx [%o0+16],%g1tst %o1bne L0sub %g1,8,%o7mov 1,%o1L0:retlrestore %o1,0,%o0#elseGLOBAL (ASM_SYMBOL (setjmp)).proc 04ASM_SYMBOL (setjmp):save %sp,-136,%spor %g0,%g0,%o0 ! %o0 = 0or %g0,0x6d,%g1 ! %g1 = 0x6d (syscall number)ta SYSCALL_TRAPstw %o0,[%i0+4] ! save result at [%i0+4] (sigmask?)add %fp,-8,%o1 ! %o1 -> tmp 8 byte bufferor %g0,%g0,%o0 ! %o0 = 0or %g0,0x70,%g1 ! %g1 = 0x70 (syscall number)ta SYSCALL_TRAPlduw [%fp-4],%g1 ! %g1 = onsstack?stw %fp,[%i0+8] ! save %fp at [%i0+8]stw %g1,[%i0+0] ! save ? at [%i0+8]add %i7,8,%g1 ! %g1 = return addressstw %g1,[%i0+12] ! save return address at [%i0+12]add %g1,4,%g1 ! %g1 = nPCstw %g1,[%i0+16] ! save nPC at [%i0+16]stw %g0,[%i0+20]stw %g0,[%i0+24]stw %g0,[%i0+32]jmpl %i7+8,%g0restore %g0,0,%o0GLOBAL (ASM_SYMBOL (longjmp)).proc 04ASM_SYMBOL (longjmp):orcc %g0,%o1,%g0 ! return val == 0 ?be,a L1 ! branch if 0or %g0,1,%o1 ! make it 1 (executed if branch taken)L1:or %g0,0x8b,%g1 ! set syscall 0x8bstw %o1,[%o0+28] ! save return val for restorationta SYSCALL_TRAP#endif /* ! __svr4__ */
