Charles.Forsyth20061220965a0ca19 years agoHistory
72 lines · 1.3 KB · Assembly
RawDownload
#include <asm-ppc/reg.h> 	.file	"asm-power.S"	.section	".text"	.align 2	.globl	FPsave	.type	FPsave, @functionFPsave:	.set	_framesize,0	mffs	f0	stfd	f0,0(r3)	blr	.size	FPsave,.-FPsave 	.align 2	.globl	FPrestoreFPrestore:	lfd		f0,0(r3)	mtfsf 	0xff,f0	blr	.size	FPrestore, .-FPrestore 	.align 2	.globl	_tas_tas:	sync	mr	r4,r3	addi    r5,0,0x11:	lwarx	r3,0,r4	cmpwi   r3,0x0	bne-    2f	stwcx.	r5,0,r4	bne-    1b		/* Lost reservation, try again */2:	sync	blr	.size	_tas,.-_tas /* * void executeonnewstack(void *tos, void (*tramp)(void *arg), void *arg) */	.align	2	.globl	executeonnewstack:executeonnewstack:	mr	r1,r3	/* change stacks */	stwu 1,-16(r1)	/* save lr to aid the traceback */	li	r0,0	stw r0,20(r1)	mr	r3,r5	mtctr r4	bctrl		/* tramp(arg) */	br	.	/* failed */	.size executeonnewstack,.-executeonnewstack /* * void unlockandexit(int *key) * * NB: the return status may be garbaged if the stack is reused *	between the unlock and the system call, but this should *	not matter since no task is waiting for the result */	.align	2	.globl	unlockandexitunlockandexit:	li	r0,0x0	stw	r0,0(r3)	/* unlock */	li	r0,1	/* sys exit; 234 is exit group */	li	r3,0	/* exit status */	sc	br	.	/* not reached */	.size	unlockandexit,.-unlockandexit