shithub: scc

ref: 643e8a40e46be15008645eecbeac019d7796552b
dir: /src/libc/arch/ppc/longjmp.s/

View raw version
	.file	"longjmp.s"
	.text
	.global longjmp

longjmp:
	/* 0) move old return address into r0 */
	lwz	0,0(3)
	/* 1) put it into link reg */
	mtlr	0
	/* 2 ) restore stack ptr */
	lwz	1,4(3)
	/* 3) restore control reg */
	lwz	0,8(3)
	mtcr	0
	/* 4) restore r14-r31 */
	lwz	14,12(3)
	lwz	15,16(3)
	lwz	16,20(3)
	lwz	17,24(3)
	lwz	18,28(3)
	lwz	19,32(3)
	lwz	20,36(3)
	lwz	21,40(3)
	lwz	22,44(3)
	lwz	23,48(3)
	lwz	24,52(3)
	lwz	25,56(3)
	lwz	26,60(3)
	lwz	27,64(3)
	lwz	28,68(3)
	lwz	29,72(3)
	lwz	30,76(3)
	lwz	31,80(3)
	lfd	14,88(3)
	lfd	15,96(3)
	lfd	16,104(3)
	lfd	17,112(3)
	lfd	18,120(3)
	lfd	19,128(3)
	lfd	20,136(3)
	lfd	21,144(3)
	lfd	22,152(3)
	lfd	23,160(3)
	lfd	24,168(3)
	lfd	25,176(3)
	lfd	26,184(3)
	lfd	27,192(3)
	lfd	28,200(3)
	lfd	29,208(3)
	lfd	30,216(3)
	lfd	31,224(3)

	/* 5) put val into return reg r3 */
	mr	3,4

	/* 6) check if return value is 0, make it 1 in that case */
	cmpwi	cr7,4,0
	bne	cr7,1f
	li	3,1
1:
	blr