/* This C language subroutine provides for an unexpected return from nested functions. The Run Time Library for the C Language. Gordon A. Sterling (617) 461 - 3076 DSP Development Tools Engineering Created on 5/21/91 Updated on 5/94 by AS #include
int setjmp(jmp_buf env); */ #include "lib_glob.h" #include "jmp_glob.h" .SEGMENT/CODE Code_Space_Name; .FILE RTL_FILENAME; .GLOBAL _setjmp; _setjmp: dm_ptr=R4; /*Point to jmp_buf*/ dm_lnt=0; DM(dm_ptr,dm_1)=R1; /*Begin saving all registers*/ DM(dm_ptr,dm_1)=R2; /*Must save R2 also*/ DM(dm_ptr,dm_1)=R3; DM(dm_ptr,dm_1)=R5; DM(dm_ptr,dm_1)=R6; DM(dm_ptr,dm_1)=R7; DM(dm_ptr,dm_1)=R9; DM(dm_ptr,dm_1)=R10; DM(dm_ptr,dm_1)=R11; DM(dm_ptr,dm_1)=R13; DM(dm_ptr,dm_1)=R14; DM(dm_ptr,dm_1)=R15; R12=B0; /*Now save the DAGs*/ DM(dm_ptr,dm_1)=R12; R12=I0; DM(dm_ptr,dm_1)=R12; R12=M0; DM(dm_ptr,dm_1)=R12; R12=L0; DM(dm_ptr,dm_1)=R12; R12=B1; DM(dm_ptr,dm_1)=R12; R12=I1; DM(dm_ptr,dm_1)=R12; R12=M1; DM(dm_ptr,dm_1)=R12; R12=L1; DM(dm_ptr,dm_1)=R12; R12=B2; DM(dm_ptr,dm_1)=R12; R12=I2; DM(dm_ptr,dm_1)=R12; R12=M2; DM(dm_ptr,dm_1)=R12; R12=L2; DM(dm_ptr,dm_1)=R12; R12=B3; DM(dm_ptr,dm_1)=R12; R12=I3; DM(dm_ptr,dm_1)=R12; R12=M3; DM(dm_ptr,dm_1)=R12; R12=L3; DM(dm_ptr,dm_1)=R12; R12=B5; DM(dm_ptr,dm_1)=R12; R12=I5; DM(dm_ptr,dm_1)=R12; R12=L5; DM(dm_ptr,dm_1)=R12; R12=I6; DM(dm_ptr,dm_1)=R12; R12=I7; DM(dm_ptr,dm_1)=R12; R12=B8; /*Now save the DAGs*/ DM(dm_ptr,dm_1)=R12; R12=I8; DM(dm_ptr,dm_1)=R12; R12=M8; DM(dm_ptr,dm_1)=R12; R12=L8; DM(dm_ptr,dm_1)=R12; R12=B9; DM(dm_ptr,dm_1)=R12; R12=I9; DM(dm_ptr,dm_1)=R12; R12=M9; DM(dm_ptr,dm_1)=R12; R12=L9; DM(dm_ptr,dm_1)=R12; R12=B10; DM(dm_ptr,dm_1)=R12; R12=I10; DM(dm_ptr,dm_1)=R12; R12=M10; DM(dm_ptr,dm_1)=R12; R12=L10; DM(dm_ptr,dm_1)=R12; R12=B11; DM(dm_ptr,dm_1)=R12; R12=I11; DM(dm_ptr,dm_1)=R12; R12=M11; DM(dm_ptr,dm_1)=R12; R12=L11; DM(dm_ptr,dm_1)=R12; R12=B13; DM(dm_ptr,dm_1)=R12; R12=I13; DM(dm_ptr,dm_1)=R12; R12=L13; DM(dm_ptr,dm_1)=R12; R12=I14; DM(dm_ptr,dm_1)=R12; R12=I15; DM(dm_ptr,dm_1)=R12; R12=MODE1; BIT CLR MODE1 0x1000; put(R12); /*Save init state in mode1 latency cycle*/ R12=PCSTKP; DM(dm_ptr,dm_1)=R12; /* Save current stack pointer */ R4=1; PCSTKP=R4; NOP; R4=R4+1, DM(dm_ptr,dm_1)=PCSTK; PCSTKP=R4; NOP; R4=R4+1, DM(dm_ptr,dm_1)=PCSTK; PCSTKP=R4; NOP; R4=R4+1, DM(dm_ptr,dm_1)=PCSTK; PCSTKP=R4; NOP; R4=R4+1, DM(dm_ptr,dm_1)=PCSTK; PCSTKP=R4; NOP; R4=R4+1, DM(dm_ptr,dm_1)=PCSTK; PCSTKP=R4; NOP; R4=R4+1, DM(dm_ptr,dm_1)=PCSTK; PCSTKP=R4; NOP; R4=R4+1, DM(dm_ptr,dm_1)=PCSTK; PCSTKP=R4; NOP; R4=R4+1, DM(dm_ptr,dm_1)=PCSTK; PCSTKP=R4; NOP; R4=R4+1, DM(dm_ptr,dm_1)=PCSTK; PCSTKP=R4; NOP; R4=R4+1, DM(dm_ptr,dm_1)=PCSTK; PCSTKP=R4; NOP; R4=R4+1, DM(dm_ptr,dm_1)=PCSTK; PCSTKP=R4; NOP; R4=R4+1, DM(dm_ptr,dm_1)=PCSTK; PCSTKP=R4; NOP; R4=R4+1, DM(dm_ptr,dm_1)=PCSTK; PCSTKP=R4; NOP; R4=R4+1, DM(dm_ptr,dm_1)=PCSTK; PCSTKP=R4; NOP; R4=R4+1, DM(dm_ptr,dm_1)=PCSTK; PCSTKP=R4; NOP; R4=R4+1, DM(dm_ptr,dm_1)=PCSTK; PCSTKP=R4; NOP; R4=R4+1, DM(dm_ptr,dm_1)=PCSTK; PCSTKP=R4; NOP; R4=R4+1, DM(dm_ptr,dm_1)=PCSTK; PCSTKP=R4; NOP; R4=R4+1, DM(dm_ptr,dm_1)=PCSTK; PCSTKP=R4; NOP; R4=R4+1, DM(dm_ptr,dm_1)=PCSTK; PCSTKP=R4; NOP; R4=R4+1, DM(dm_ptr,dm_1)=PCSTK; PCSTKP=R12; NOP; BIT CLR IRPTL 8; R0=R0-R0, FETCH_RETURN /*Return 0 for setjmp*/ DM(dm_ptr,dm_1)=I12; get(R1,1); MODE1=R1; /*Restore state */ restore_state: RETURN (DB); RESTORE_STACK RESTORE_FRAME .ENDSEG;