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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [newlib-1.17.0/] [libgloss/] [pa/] [setjmp.S] - Rev 857

Go to most recent revision | Compare with Previous | Blame | View Log

/* 
 * Copyright (c) 1990,1994 The University of Utah and
 * the Computer Systems Laboratory (CSL).  All rights reserved.
 *
 * Permission to use, copy, modify and distribute this software is hereby
 * granted provided that (1) source code retains these copyright, permission,
 * and disclaimer notices, and (2) redistributions including binaries
 * reproduce the notices in supporting documentation, and (3) all advertising
 * materials mentioning features or use of this software display the following
 * acknowledgement: ``This product includes software developed by the
 * Computer Systems Laboratory at the University of Utah.''
 *
 * THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS
 * IS" CONDITION.  THE UNIVERSITY OF UTAH AND CSL DISCLAIM ANY LIABILITY OF
 * ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
 *
 * CSL requests users of this software to return to csl-dist@cs.utah.edu any
 * improvements that they make and grant CSL redistribution rights.
 *
 *      Utah $Hdr: _setjmp.s 1.9 94/12/16$
 */

        .space  $TEXT$
        .subspa $CODE$

/*
 * The PA jmp_buf is 48 words arranged as follows:
 *
 *       0- 9:  sigcontext
 *      10-26:  callee save GRs (r3-r18) and DP (r27)
 *         27:  callee save SRs (sr3)
 *      28-47:  callee save FRs (fr12-fr21)
 */

/*
 * int
 * setjmp(env)
 *      jmp_buf env;
 * 
 * This routine does not restore signal state.
 */

        .export setjmp,entry
        .export _setjmp,entry
        .proc
        .callinfo
setjmp
_setjmp
        .entry

        /*
         * save sp and rp in sigcontext, skip the rest
         */
        stw     %r30,8(%r26)
        stw     %r2,24(%r26)
        ldo     40(%r26),%r26

        /*
         * save dp and the callee saves registers
         */
        stwm    %r3,4(%r26)
        stwm    %r4,4(%r26)
        stwm    %r5,4(%r26)
        stwm    %r6,4(%r26)
        stwm    %r7,4(%r26)
        stwm    %r8,4(%r26)
        stwm    %r9,4(%r26)
        stwm    %r10,4(%r26)
        stwm    %r11,4(%r26)
        stwm    %r12,4(%r26)
        stwm    %r13,4(%r26)
        stwm    %r14,4(%r26)
        stwm    %r15,4(%r26)
        stwm    %r16,4(%r26)
        stwm    %r17,4(%r26)
        stwm    %r18,4(%r26)
        stwm    %r27,4(%r26)

        mfsp    %sr3,%r9
        stwm    %r9,4(%r26)

        bv      0(%r2)
        copy    %r0,%r28
        .exit
        .procend

/*
 * void 
 * longjmp(env, val)
 *      jmp_buf env;
 *      int val;
 * 
 * This routine does not retore signal state.
 * This routine does not override a zero val.
 */

        .export longjmp,entry
        .export _longjmp,entry
        .proc
        .callinfo
longjmp
_longjmp

        .entry

        /*
         * restore sp and rp
         */
        ldw     8(%r26),%r30
        ldw     24(%r26),%r2
        ldo     40(%r26),%r26

        /*
         * restore callee saves registers
         */
        ldwm    4(%r26),%r3
        ldwm    4(%r26),%r4
        ldwm    4(%r26),%r5
        ldwm    4(%r26),%r6
        ldwm    4(%r26),%r7
        ldwm    4(%r26),%r8
        ldwm    4(%r26),%r9
        ldwm    4(%r26),%r10
        ldwm    4(%r26),%r11
        ldwm    4(%r26),%r12
        ldwm    4(%r26),%r13
        ldwm    4(%r26),%r14
        ldwm    4(%r26),%r15
        ldwm    4(%r26),%r16
        ldwm    4(%r26),%r17
        ldwm    4(%r26),%r18
        ldwm    4(%r26),%r27

        ldwm    4(%r26),%r9
        mtsp    %r9,%sr3

        bv      0(%r2)
        copy    %r25,%r28
        .exit
        .procend

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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