diff options
Diffstat (limited to 'newlib/libc/sys/mmixware/setjmp.S')
-rw-r--r-- | newlib/libc/sys/mmixware/setjmp.S | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/newlib/libc/sys/mmixware/setjmp.S b/newlib/libc/sys/mmixware/setjmp.S deleted file mode 100644 index 862273dd5..000000000 --- a/newlib/libc/sys/mmixware/setjmp.S +++ /dev/null @@ -1,87 +0,0 @@ -/* Setjmp and longjmp for mmix. - - Copyright (C) 2001 Hans-Peter Nilsson - - Permission to use, copy, modify, and distribute this software is - freely granted, provided that the above copyright notice, this notice - and the following disclaimer are preserved with no changes. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE. - - jmp_buf[5]: - 0: fp - 1: rJ (return-address) - 2: sp - 3: rO *before* the setjmp call. - 4: temporary storage. Reserved between setjmp and longjmp. */ - -#ifdef __MMIX_ABI_GNU__ -#define arg1 $231 -#define arg2 $232 -#define outret $231 -#define popval 0 -#else -#define arg1 $0 -#define arg2 $1 -#define outret $0 -#define popval 1 -#endif - - .section .text.setjmp,"ax",@progbits - .global setjmp -setjmp: -% Store fp, sp and return address. Recycle the static-chain and -% structure-return registers as temporary register, since we need to keep -% the jmp_buf (parameter 1) and the return address across a "POP". - SET $251,arg1 - STOU $253,$251,0 - GET $252,rJ - STOU $252,$251,8 - STOU $254,$251,16 - SETL outret,0 - -% Jump through hoops to get the value of rO *before* the setjmp call. - GETA $255,0f - PUT rJ,$255 - POP popval,0 -0: - GET $255,rO - STOU $255,$251,24 - GO $255,$252,0 - .size setjmp,.-setjmp - - .section .text.longjmp,"ax",@progbits - .global longjmp -longjmp: -% Reset arg2 to 1 if it is 0 (see longjmp(2)) and store it in jmp_buf. -% Save arg1 in a global register, since it will be destroyed by the POPs -% (in the mmixware ABI). - CSZ arg2,arg2,1 - STOU arg2,arg1,32 - SET $251,arg1 - -% Loop and "POP 0,0" until rO is the expected value, like -% the expansion of nonlocal_goto_receiver, except that we put the return -% value in the right register and make sure that the POP causes it to -% enter the right return-value register as seen by the caller. For the -% GNU ABI, it is unnecessary to do this in the loop and perhaps the memory -% access can be hoisted outside the loop, but this is safe and simple and -% I see no need to optimize longjmps. - GETA $255,0f - PUT rJ,$255 - LDOU $255,$251,24 -0: - GET $252,rO - CMPU $252,$252,$255 - BNP $252,1f - LDOU outret,$251,32 - POP popval,0 -1: - LDOU $253,$251,0 - LDOU $255,$251,8 - LDOU $254,$251,16 - GO $255,$255,0 - .size longjmp,.-longjmp |