Use register prefixes and load/store pseudo-instructions.

This commit is contained in:
matt 2003-07-31 13:59:54 +00:00
parent 403ce9dc0c
commit 52bfbfda86
1 changed files with 60 additions and 57 deletions

View File

@ -1,8 +1,11 @@
/* $NetBSD: setjmp.S,v 1.1 1998/01/27 15:13:12 sakamoto Exp $ */
/* $NetBSD: setjmp.S,v 1.2 2003/07/31 13:59:54 matt Exp $ */
/* from: OpenBSD: setjmp.S,v 1.2 1996/12/28 06:22:18 rahnds Exp */
/* kernel version of this file, does not have signal goop */
/* int setjmp(jmp_buf env) */
#define _NOREGNAMES
#include <machine/asm.h>
#define JMP_r1 0x04
#define JMP_r14 0x08
#define JMP_r15 0x0c
@ -31,72 +34,72 @@
.globl setjmp
setjmp:
stw 31, JMP_r31(3)
streg %r31, JMP_r31(%r3)
/* r1, r14-r30 */
stw 1, JMP_r1 (3)
stw 14, JMP_r14(3)
stw 15, JMP_r15(3)
stw 16, JMP_r16(3)
stw 17, JMP_r17(3)
stw 18, JMP_r18(3)
stw 19, JMP_r19(3)
stw 20, JMP_r20(3)
stw 21, JMP_r21(3)
stw 22, JMP_r22(3)
stw 23, JMP_r23(3)
stw 24, JMP_r24(3)
stw 25, JMP_r25(3)
stw 26, JMP_r26(3)
stw 27, JMP_r27(3)
stw 28, JMP_r28(3)
stw 29, JMP_r29(3)
stw 30, JMP_r30(3)
streg %r1, JMP_r1 (%r3)
streg %r14, JMP_r14(%r3)
streg %r15, JMP_r15(%r3)
streg %r16, JMP_r16(%r3)
streg %r17, JMP_r17(%r3)
streg %r18, JMP_r18(%r3)
streg %r19, JMP_r19(%r3)
streg %r20, JMP_r20(%r3)
streg %r21, JMP_r21(%r3)
streg %r22, JMP_r22(%r3)
streg %r23, JMP_r23(%r3)
streg %r24, JMP_r24(%r3)
streg %r25, JMP_r25(%r3)
streg %r26, JMP_r26(%r3)
streg %r27, JMP_r27(%r3)
streg %r28, JMP_r28(%r3)
streg %r29, JMP_r29(%r3)
streg %r30, JMP_r30(%r3)
/* cr, lr, ctr, xer */
mfcr 0
stw 0, JMP_cr(3)
mflr 0
stw 0, JMP_lr(3)
mfctr 0
stw 0, JMP_ctr(3)
mfxer 0
stw 0, JMP_xer(3)
mfcr %r0
streg %r0, JMP_cr(%r3)
mflr %r0
streg %r0, JMP_lr(%r3)
mfctr %r0
streg %r0, JMP_ctr(%r3)
mfxer %r0
streg %r0, JMP_xer(%r3)
/* f14-f31, fpscr */
li 3, 0
li %r3, 0
blr
.extern sigsetmask
.globl longjmp
longjmp:
lwz 31, JMP_r31(3)
ldreg %r31, JMP_r31(%r3)
/* r1, r14-r30 */
lwz 1, JMP_r1 (3)
lwz 14, JMP_r14(3)
lwz 15, JMP_r15(3)
lwz 16, JMP_r16(3)
lwz 17, JMP_r17(3)
lwz 18, JMP_r18(3)
lwz 19, JMP_r19(3)
lwz 20, JMP_r20(3)
lwz 21, JMP_r21(3)
lwz 22, JMP_r22(3)
lwz 23, JMP_r23(3)
lwz 24, JMP_r24(3)
lwz 25, JMP_r25(3)
lwz 26, JMP_r26(3)
lwz 27, JMP_r27(3)
lwz 28, JMP_r28(3)
lwz 29, JMP_r29(3)
lwz 30, JMP_r30(3)
ldreg %r1, JMP_r1 (%r3)
ldreg %r14, JMP_r14(%r3)
ldreg %r15, JMP_r15(%r3)
ldreg %r16, JMP_r16(%r3)
ldreg %r17, JMP_r17(%r3)
ldreg %r18, JMP_r18(%r3)
ldreg %r19, JMP_r19(%r3)
ldreg %r20, JMP_r20(%r3)
ldreg %r21, JMP_r21(%r3)
ldreg %r22, JMP_r22(%r3)
ldreg %r23, JMP_r23(%r3)
ldreg %r24, JMP_r24(%r3)
ldreg %r25, JMP_r25(%r3)
ldreg %r26, JMP_r26(%r3)
ldreg %r27, JMP_r27(%r3)
ldreg %r28, JMP_r28(%r3)
ldreg %r29, JMP_r29(%r3)
ldreg %r30, JMP_r30(%r3)
/* cr, lr, ctr, xer */
lwz 0, JMP_cr(3)
mtcr 0
lwz 0, JMP_lr(3)
mtlr 0
lwz 0, JMP_ctr(3)
mtctr 0
lwz 0, JMP_xer(3)
mtxer 0
ldreg %r0, JMP_cr(%r3)
mtcr %r0
ldreg %r0, JMP_lr(%r3)
mtlr %r0
ldreg %r0, JMP_ctr(%r3)
mtctr %r0
ldreg %r0, JMP_xer(%r3)
mtxer %r0
/* f14-f31, fpscr */
mr 3, 4
mr %r3, %r4
blr