OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [newlib-1.17.0/] [newlib/] [libc/] [sys/] [sparc64/] [sigsetjmp.S] - Diff between revs 148 and 158

Only display areas with differences | Details | Blame | View Log

Rev 148 Rev 158
! This file is called sigsetjmp.s because that is what V8 uses.
! This file is called sigsetjmp.s because that is what V8 uses.
! We do not define sigsetjmp() or setlongjmp() yet.
! We do not define sigsetjmp() or setlongjmp() yet.
! Solaris has setjmp/longjmp in setjmp.o.  Move this stuff there.
! Solaris has setjmp/longjmp in setjmp.o.  Move this stuff there.
#include 
#include 
        TEXT_SECTION
        TEXT_SECTION
        ALIGN (4)
        ALIGN (4)
#ifdef __svr4__
#ifdef __svr4__
        GLOBAL (ASM_SYMBOL (setjmp))
        GLOBAL (ASM_SYMBOL (setjmp))
        .proc   04
        .proc   04
ASM_SYMBOL (setjmp):
ASM_SYMBOL (setjmp):
        clr     [%o0]
        clr     [%o0]
        stx     %sp,[%o0+8]
        stx     %sp,[%o0+8]
        add     %o7,8,%g1
        add     %o7,8,%g1
        stx     %g1,[%o0+16]
        stx     %g1,[%o0+16]
        retl
        retl
        mov     %g0,%o0
        mov     %g0,%o0
        GLOBAL (ASM_SYMBOL (longjmp))
        GLOBAL (ASM_SYMBOL (longjmp))
        .proc   04
        .proc   04
ASM_SYMBOL (longjmp):
ASM_SYMBOL (longjmp):
        flushw                          ! flush register windows
        flushw                          ! flush register windows
        sub     %sp,136,%sp
        sub     %sp,136,%sp
        ldx     [%o0+8],%fp
        ldx     [%o0+8],%fp
        ldx     [%o0+16],%g1
        ldx     [%o0+16],%g1
        tst     %o1
        tst     %o1
        bne     L0
        bne     L0
        sub     %g1,8,%o7
        sub     %g1,8,%o7
        mov     1,%o1
        mov     1,%o1
L0:
L0:
        retl
        retl
        restore %o1,0,%o0
        restore %o1,0,%o0
#else
#else
        GLOBAL (ASM_SYMBOL (setjmp))
        GLOBAL (ASM_SYMBOL (setjmp))
        .proc   04
        .proc   04
ASM_SYMBOL (setjmp):
ASM_SYMBOL (setjmp):
        save    %sp,-136,%sp
        save    %sp,-136,%sp
        or      %g0,%g0,%o0             ! %o0 = 0
        or      %g0,%g0,%o0             ! %o0 = 0
        or      %g0,0x6d,%g1            ! %g1 = 0x6d (syscall number)
        or      %g0,0x6d,%g1            ! %g1 = 0x6d (syscall number)
        ta      SYSCALL_TRAP
        ta      SYSCALL_TRAP
        stw     %o0,[%i0+4]             ! save result at [%i0+4] (sigmask?)
        stw     %o0,[%i0+4]             ! save result at [%i0+4] (sigmask?)
        add     %fp,-8,%o1              ! %o1 -> tmp 8 byte buffer
        add     %fp,-8,%o1              ! %o1 -> tmp 8 byte buffer
        or      %g0,%g0,%o0             ! %o0 = 0
        or      %g0,%g0,%o0             ! %o0 = 0
        or      %g0,0x70,%g1            ! %g1 = 0x70 (syscall number)
        or      %g0,0x70,%g1            ! %g1 = 0x70 (syscall number)
        ta      SYSCALL_TRAP
        ta      SYSCALL_TRAP
        lduw    [%fp-4],%g1             ! %g1 = onsstack?
        lduw    [%fp-4],%g1             ! %g1 = onsstack?
        stw     %fp,[%i0+8]             ! save %fp at [%i0+8]
        stw     %fp,[%i0+8]             ! save %fp at [%i0+8]
        stw     %g1,[%i0+0]             ! save ? at [%i0+8]
        stw     %g1,[%i0+0]             ! save ? at [%i0+8]
        add     %i7,8,%g1               ! %g1 = return address
        add     %i7,8,%g1               ! %g1 = return address
        stw     %g1,[%i0+12]            ! save return address at [%i0+12]
        stw     %g1,[%i0+12]            ! save return address at [%i0+12]
        add     %g1,4,%g1               ! %g1 = nPC
        add     %g1,4,%g1               ! %g1 = nPC
        stw     %g1,[%i0+16]            ! save nPC at [%i0+16]
        stw     %g1,[%i0+16]            ! save nPC at [%i0+16]
        stw     %g0,[%i0+20]
        stw     %g0,[%i0+20]
        stw     %g0,[%i0+24]
        stw     %g0,[%i0+24]
        stw     %g0,[%i0+32]
        stw     %g0,[%i0+32]
        jmpl    %i7+8,%g0
        jmpl    %i7+8,%g0
        restore %g0,0,%o0
        restore %g0,0,%o0
        GLOBAL (ASM_SYMBOL (longjmp))
        GLOBAL (ASM_SYMBOL (longjmp))
        .proc   04
        .proc   04
ASM_SYMBOL (longjmp):
ASM_SYMBOL (longjmp):
        orcc    %g0,%o1,%g0             ! return val == 0 ?
        orcc    %g0,%o1,%g0             ! return val == 0 ?
        be,a    L1                      ! branch if 0
        be,a    L1                      ! branch if 0
        or      %g0,1,%o1               ! make it 1 (executed if branch taken)
        or      %g0,1,%o1               ! make it 1 (executed if branch taken)
L1:
L1:
        or      %g0,0x8b,%g1            ! set syscall 0x8b
        or      %g0,0x8b,%g1            ! set syscall 0x8b
        stw     %o1,[%o0+28]            ! save return val for restoration
        stw     %o1,[%o0+28]            ! save return val for restoration
        ta      SYSCALL_TRAP
        ta      SYSCALL_TRAP
#endif /* ! __svr4__ */
#endif /* ! __svr4__ */
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.