欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

setjmp.s

用于嵌入式Linux系统的标准C的库函数
S
字号:
/* This is a simple version of setjmp and longjmp for the PowerPC.   Ian Lance Taylor, Cygnus Support, 9 Feb 1994.     Modified by Jeff Johnston, Red Hat Inc. 2 Oct 2001. */#include "ppc-asm.h"FUNC_START(setjmp)#ifdef __ALTIVEC__	addi	3,3,15		# align Altivec to 16 byte boundary	rlwinm	3,3,0,0,27#else	addi	3,3,7		# align to 8 byte boundary	rlwinm	3,3,0,0,28#endif	stw	1,0(3)		# offset 0	stwu	2,4(3)		# offset 4	stwu	13,4(3)		# offset 8	stwu	14,4(3)		# offset 12	stwu	15,4(3)		# offset 16	stwu	16,4(3)		# offset 20	stwu	17,4(3)		# offset 24	stwu	18,4(3)		# offset 28	stwu	19,4(3)		# offset 32	stwu	20,4(3)		# offset 36	stwu	21,4(3)		# offset 40	stwu	22,4(3)		# offset 44	stwu	23,4(3)		# offset 48	stwu	24,4(3)		# offset 52	stwu	25,4(3)		# offset 56	stwu	26,4(3)		# offset 60	stwu	27,4(3)		# offset 64	stwu	28,4(3)		# offset 68	stwu	29,4(3)		# offset 72	stwu	30,4(3)		# offset 76	stwu	31,4(3)		# offset 80	mflr	4	stwu	4,4(3)		# offset 84	mfcr	4	stwu	4,4(3)		# offset 88				# one word pad to get floating point aligned on 8 byte boundary#ifndef _SOFT_FLOAT	stfdu	14,8(3)		# offset 96	stfdu	15,8(3)		# offset 104	stfdu	16,8(3)		# offset 112	stfdu	17,8(3)		# offset 120	stfdu	18,8(3)		# offset 128	stfdu	19,8(3)		# offset 136	stfdu	20,8(3)		# offset 144	stfdu	21,8(3)		# offset 152	stfdu	22,8(3)		# offset 160	stfdu	23,8(3)		# offset 168	stfdu	24,8(3)		# offset 176	stfdu	25,8(3)		# offset 184	stfdu	26,8(3)		# offset 192	stfdu	27,8(3)		# offset 200	stfdu	28,8(3)		# offset 208	stfdu	29,8(3)		# offset 216	stfdu	30,8(3)		# offset 224	stfdu	31,8(3)		# offset 232#endif	/* This requires a total of 21 * 4 + 18 * 8 + 4 + 4 + 4	   bytes == 60 * 4 bytes == 240 bytes.  */#ifdef __ALTIVEC__	/* save Altivec vrsave and vr20-vr31 registers */	mfspr	4,256		# vrsave register	stwu	4,16(3)		# offset 248	addi	3,3,8	stvx	20,0,3		# offset 256	addi	3,3,16	stvx	21,0,3		# offset 272	addi	3,3,16	stvx	22,0,3		# offset 288	addi	3,3,16	stvx	23,0,3		# offset 304	addi	3,3,16	stvx	24,0,3		# offset 320	addi	3,3,16	stvx	25,0,3		# offset 336	addi	3,3,16	stvx	26,0,3		# offset 352	addi	3,3,16	stvx	27,0,3		# offset 368	addi	3,3,16	stvx	28,0,3		# offset 384	addi	3,3,16	stvx	29,0,3		# offset 400	addi	3,3,16	stvx	30,0,3		# offset 416	addi	3,3,16	stvx	31,0,3		# offset 432	/* This requires a total of 240 + 8 + 8 + 12 * 16 == 448 bytes. */#endif	li	3,0	blrFUNC_END(setjmp)FUNC_START(longjmp)#ifdef __ALTIVEC__	addi	3,3,15		# align Altivec to 16 byte boundary	rlwinm	3,3,0,0,27#else	addi	3,3,7		# align to 8 byte boundary	rlwinm	3,3,0,0,28#endif	lwz	1,0(3)		# offset 0 	lwzu	2,4(3)		# offset 4 	lwzu	13,4(3)		# offset 8 	lwzu	14,4(3)		# offset 12	lwzu	15,4(3)		# offset 16	lwzu	16,4(3)		# offset 20	lwzu	17,4(3)		# offset 24	lwzu	18,4(3)		# offset 28	lwzu	19,4(3)		# offset 32	lwzu	20,4(3)		# offset 36	lwzu	21,4(3)		# offset 40	lwzu	22,4(3)		# offset 44	lwzu	23,4(3)		# offset 48	lwzu	24,4(3)		# offset 52	lwzu	25,4(3)		# offset 56	lwzu	26,4(3)		# offset 60	lwzu	27,4(3)		# offset 64	lwzu	28,4(3)		# offset 68	lwzu	29,4(3)		# offset 72	lwzu	30,4(3)		# offset 76	lwzu	31,4(3)		# offset 80	lwzu	5,4(3)		# offset 84	mtlr	5	lwzu	5,4(3)		# offset 88	mtcrf	255,5				# one word pad to get floating point aligned on 8 byte boundary#ifndef _SOFT_FLOAT	lfdu	14,8(3)         # offset 96 	lfdu	15,8(3)         # offset 104	lfdu	16,8(3)         # offset 112	lfdu	17,8(3)         # offset 120	lfdu	18,8(3)         # offset 128	lfdu	19,8(3)         # offset 136	lfdu	20,8(3)         # offset 144	lfdu	21,8(3)         # offset 152	lfdu	22,8(3)         # offset 160	lfdu	23,8(3)         # offset 168	lfdu	24,8(3)         # offset 176	lfdu	25,8(3)         # offset 184	lfdu	26,8(3)         # offset 192	lfdu	27,8(3)         # offset 200	lfdu	28,8(3)         # offset 208	lfdu	29,8(3)         # offset 216	lfdu	30,8(3)         # offset 224	lfdu	31,8(3)         # offset 232#endif#ifdef __ALTIVEC__	/* restore Altivec vrsave and v20-v31 registers */	lwzu	5,16(3)		# offset 248	mtspr	256,5		# vrsave	addi	3,3,8	lvx	20,0,3		# offset 256	addi	3,3,16	lvx	21,0,3		# offset 272	addi	3,3,16	lvx	22,0,3		# offset 288	addi	3,3,16	lvx	23,0,3		# offset 304	addi	3,3,16	lvx	24,0,3		# offset 320	addi	3,3,16	lvx	25,0,3		# offset 336	addi	3,3,16	lvx	26,0,3		# offset 352	addi	3,3,16	lvx	27,0,3		# offset 368	addi	3,3,16	lvx	28,0,3		# offset 384	addi	3,3,16	lvx	29,0,3		# offset 400	addi	3,3,16	lvx	30,0,3		# offset 416	addi	3,3,16	lvx	31,0,3		# offset 432#endif	mr.	3,4	bclr+	4,2	li	3,1	blrFUNC_END(longjmp)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -