⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gcc-3.3.2-arm-softfloat.patch

📁 armlinux的交叉编译链,适合redhat9.0 嵌入式
💻 PATCH
📖 第 1 页 / 共 5 页
字号:
 	THUMB_FUNC SYM (__\name): .endm-		++/* Special function that will always be coded in ARM assembly, even if+   in Thumb-only compilation.  */++#if defined(__thumb__) && !defined(__THUMB_INTERWORK__)+.macro	ARM_FUNC_START name+	FUNC_START \name+	bx	pc+	nop+	.arm+_L__\name:		/* A hook to tell gdb that we've switched to ARM */+.endm+#else+.macro	ARM_FUNC_START name+	FUNC_START \name+.endm+#endif+ /* Register aliases.  */  work		.req	r4	@ XXXX is this safe ?@@ -156,16 +216,17 @@ overdone	.req	r2 result		.req	r2 curbit		.req	r3+#if 0 ip		.req	r12 sp		.req	r13 lr		.req	r14 pc		.req	r15-+#endif /* ------------------------------------------------------------------------ */-/*		Bodies of the divsion and modulo routines.		    */+/*		Bodies of the division and modulo routines.		    */ /* ------------------------------------------------------------------------ */	 .macro ARM_DIV_MOD_BODY modulo-Loop1:+LSYM(Loop1): 	@ Unless the divisor is very big, shift it up in multiples of 	@ four bits, since this is the amount of unwinding in the main 	@ division loop.  Continue shifting until the divisor is @@ -174,18 +235,18 @@ 	cmplo	divisor, dividend 	movlo	divisor, divisor, lsl #4 	movlo	curbit,  curbit,  lsl #4-	blo	Loop1+	blo	LSYM(Loop1) -Lbignum:+LSYM(Lbignum): 	@ For very big divisors, we must shift it a bit at a time, or 	@ we will be in danger of overflowing. 	cmp	divisor, #0x80000000 	cmplo	divisor, dividend 	movlo	divisor, divisor, lsl #1 	movlo	curbit,  curbit,  lsl #1-	blo	Lbignum+	blo	LSYM(Lbignum) -Loop3:+LSYM(Loop3): 	@ Test for possible subtractions.  On the final pass, this may  	@ subtract too much from the dividend ... 	@@ -226,10 +287,10 @@ 	cmp	dividend, #0			@ Early termination? 	movnes	curbit,   curbit,  lsr #4	@ No, any more bits to do? 	movne	divisor,  divisor, lsr #4-	bne	Loop3+	bne	LSYM(Loop3)    .if \modulo-Lfixup_dividend:	+LSYM(Lfixup_dividend):	 	@ Any subtractions that we should not have done will be recorded in 	@ the top three bits of OVERDONE.  Exactly which were not needed 	@ are governed by the position of the bit, stored in IP.@@ -241,7 +302,7 @@ 	@ the bit in ip could be in the top two bits which might then match 	@ with one of the smaller RORs. 	tstne	ip, #0x7-	beq	Lgot_result+	beq	LSYM(Lgot_result) 	tst	overdone, ip, ror #3 	addne	dividend, dividend, divisor, lsr #3 	tst	overdone, ip, ror #2@@ -250,39 +311,39 @@ 	addne	dividend, dividend, divisor, lsr #1   .endif -Lgot_result:+LSYM(Lgot_result): .endm /* ------------------------------------------------------------------------ */ .macro THUMB_DIV_MOD_BODY modulo 	@ Load the constant 0x10000000 into our work register. 	mov	work, #1 	lsl	work, #28-Loop1:+LSYM(Loop1): 	@ Unless the divisor is very big, shift it up in multiples of 	@ four bits, since this is the amount of unwinding in the main 	@ division loop.  Continue shifting until the divisor is  	@ larger than the dividend. 	cmp	divisor, work-	bhs	Lbignum+	bhs	LSYM(Lbignum) 	cmp	divisor, dividend-	bhs	Lbignum+	bhs	LSYM(Lbignum) 	lsl	divisor, #4 	lsl	curbit,  #4-	b	Loop1-Lbignum:+	b	LSYM(Loop1)+LSYM(Lbignum): 	@ Set work to 0x80000000 	lsl	work, #3-Loop2:+LSYM(Loop2): 	@ For very big divisors, we must shift it a bit at a time, or 	@ we will be in danger of overflowing. 	cmp	divisor, work-	bhs	Loop3+	bhs	LSYM(Loop3) 	cmp	divisor, dividend-	bhs	Loop3+	bhs	LSYM(Loop3) 	lsl	divisor, #1 	lsl	curbit,  #1-	b	Loop2-Loop3:+	b	LSYM(Loop2)+LSYM(Loop3): 	@ Test for possible subtractions ...   .if \modulo 	@ ... On the final pass, this may subtract too much from the dividend, @@ -290,79 +351,79 @@ 	@ afterwards. 	mov	overdone, #0 	cmp	dividend, divisor-	blo	Lover1+	blo	LSYM(Lover1) 	sub	dividend, dividend, divisor-Lover1:+LSYM(Lover1): 	lsr	work, divisor, #1 	cmp	dividend, work-	blo	Lover2+	blo	LSYM(Lover2) 	sub	dividend, dividend, work 	mov	ip, curbit 	mov	work, #1 	ror	curbit, work 	orr	overdone, curbit 	mov	curbit, ip-Lover2:+LSYM(Lover2): 	lsr	work, divisor, #2 	cmp	dividend, work-	blo	Lover3+	blo	LSYM(Lover3) 	sub	dividend, dividend, work 	mov	ip, curbit 	mov	work, #2 	ror	curbit, work 	orr	overdone, curbit 	mov	curbit, ip-Lover3:+LSYM(Lover3): 	lsr	work, divisor, #3 	cmp	dividend, work-	blo	Lover4+	blo	LSYM(Lover4) 	sub	dividend, dividend, work 	mov	ip, curbit 	mov	work, #3 	ror	curbit, work 	orr	overdone, curbit 	mov	curbit, ip-Lover4:+LSYM(Lover4): 	mov	ip, curbit   .else 	@ ... and note which bits are done in the result.  On the final pass, 	@ this may subtract too much from the dividend, but the result will be ok, 	@ since the "bit" will have been shifted out at the bottom. 	cmp	dividend, divisor-	blo	Lover1+	blo	LSYM(Lover1) 	sub	dividend, dividend, divisor 	orr	result, result, curbit-Lover1:+LSYM(Lover1): 	lsr	work, divisor, #1 	cmp	dividend, work-	blo	Lover2+	blo	LSYM(Lover2) 	sub	dividend, dividend, work 	lsr	work, curbit, #1 	orr	result, work-Lover2:+LSYM(Lover2): 	lsr	work, divisor, #2 	cmp	dividend, work-	blo	Lover3+	blo	LSYM(Lover3) 	sub	dividend, dividend, work 	lsr	work, curbit, #2 	orr	result, work-Lover3:+LSYM(Lover3): 	lsr	work, divisor, #3 	cmp	dividend, work-	blo	Lover4+	blo	LSYM(Lover4) 	sub	dividend, dividend, work 	lsr	work, curbit, #3 	orr	result, work-Lover4:+LSYM(Lover4):   .endif 	 	cmp	dividend, #0			@ Early termination?-	beq	Lover5+	beq	LSYM(Lover5) 	lsr	curbit,  #4			@ No, any more bits to do?-	beq	Lover5+	beq	LSYM(Lover5) 	lsr	divisor, #4-	b	Loop3-Lover5:+	b	LSYM(Loop3)+LSYM(Lover5):   .if \modulo 	@ Any subtractions that we should not have done will be recorded in 	@ the top three bits of "overdone".  Exactly which were not needed@@ -370,7 +431,7 @@ 	mov	work, #0xe 	lsl	work, #28 	and	overdone, work-	beq	Lgot_result+	beq	LSYM(Lgot_result) 	 	@ If we terminated early, because dividend became zero, then the  	@ bit in ip will not be in the bottom nibble, and we should not@@ -381,33 +442,33 @@ 	mov	curbit, ip 	mov	work, #0x7 	tst	curbit, work-	beq	Lgot_result+	beq	LSYM(Lgot_result) 	 	mov	curbit, ip 	mov	work, #3 	ror	curbit, work 	tst	overdone, curbit-	beq	Lover6+	beq	LSYM(Lover6) 	lsr	work, divisor, #3 	add	dividend, work-Lover6:+LSYM(Lover6): 	mov	curbit, ip 	mov	work, #2 	ror	curbit, work 	tst	overdone, curbit-	beq	Lover7+	beq	LSYM(Lover7) 	lsr	work, divisor, #2 	add	dividend, work-Lover7:+LSYM(Lover7): 	mov	curbit, ip 	mov	work, #1 	ror	curbit, work 	tst	overdone, curbit-	beq	Lgot_result+	beq	LSYM(Lgot_result) 	lsr	work, divisor, #1 	add	dividend, work   .endif-Lgot_result:+LSYM(Lgot_result): .endm	 /* ------------------------------------------------------------------------ */ /*		Start of the Real Functions				    */@@ -419,13 +480,13 @@ #ifdef __thumb__  	cmp	divisor, #0-	beq	Ldiv0+	beq	LSYM(Ldiv0) 	mov	curbit, #1 	mov	result, #0 	 	push	{ work } 	cmp	dividend, divisor-	blo	Lgot_result+	blo	LSYM(Lgot_result)  	THUMB_DIV_MOD_BODY 0 	@@ -436,11 +497,11 @@ #else /* ARM version.  */ 	 	cmp	divisor, #0-	beq	Ldiv0+	beq	LSYM(Ldiv0) 	mov	curbit, #1 	mov	result, #0 	cmp	dividend, divisor-	blo	Lgot_result+	blo	LSYM(Lgot_result) 	 	ARM_DIV_MOD_BODY 0 	@@ -449,7 +510,7 @@  #endif /* ARM version */ -	FUNC_END udivsi3+	DIV_FUNC_END udivsi3  #endif /* L_udivsi3 */ /* ------------------------------------------------------------------------ */@@ -460,13 +521,13 @@ #ifdef __thumb__  	cmp	divisor, #0-	beq	Ldiv0+	beq	LSYM(Ldiv0) 	mov	curbit, #1 	cmp	dividend, divisor-	bhs	Lover10+	bhs	LSYM(Lover10) 	RET	 -Lover10:+LSYM(Lover10): 	push	{ work }  	THUMB_DIV_MOD_BODY 1@@ -477,7 +538,7 @@ #else  /* ARM version.  */ 	 	cmp	divisor, #0-	beq	Ldiv0+	beq	LSYM(Ldiv0) 	cmp     divisor, #1 	cmpne	dividend, divisor 	moveq   dividend, #0@@ -490,7 +551,7 @@  #endif /* ARM version.  */ 	-	FUNC_END umodsi3+	DIV_FUNC_END umodsi3  #endif /* L_umodsi3 */ /* ------------------------------------------------------------------------ */@@ -500,7 +561,7 @@  #ifdef __thumb__ 	cmp	divisor, #0-	beq	Ldiv0+	beq	LSYM(Ldiv0) 	 	push	{ work } 	mov	work, dividend@@ -509,24 +570,24 @@ 	mov	curbit, #1 	mov	result, #0 	cmp	divisor, #0-	bpl	Lover10+	bpl	LSYM(Lover10) 	neg	divisor, divisor	@ Loops below use unsigned.-Lover10:+LSYM(Lover10): 	cmp	dividend, #0-	bpl	Lover11+	bpl	LSYM(Lover11) 	neg	dividend, dividend-Lover11:+LSYM(Lover11): 	cmp	dividend, divisor-	blo	Lgot_result+	blo	LSYM(Lgot_result)  	THUMB_DIV_MOD_BODY 0 	 	mov	r0, result 	mov	work, ip 	cmp	work, #0-	bpl	Lover12+	bpl	LSYM(Lover12) 	neg	r0, r0-Lover12:+LSYM(Lover12): 	pop	{ work } 	RET @@ -537,11 +598,11 @@ 	mov	result, #0 	cmp	divisor, #0 	rsbmi	divisor, divisor, #0		@ Loops below use unsigned.-	beq	Ldiv0+	beq	LSYM(Ldiv0) 	cmp	dividend, #0 	rsbmi	dividend, dividend, #0 	cmp	dividend, divisor-	blo	Lgot_result+	blo	LSYM(Lgot_result)  	ARM_DIV_MOD_BODY 0 	@@ -552,7 +613,7 @@  #endif /* ARM version */ 	-	FUNC_END divsi3+	DIV_FUNC_END divsi3  #endif /* L_divsi3 */ /* ------------------------------------------------------------------------ */@@ -564,29 +625,29 @@  	mov	curbit, #1 	cmp	divisor, #0-	beq	Ldiv0-	bpl	Lover10+	beq	LSYM(Ldiv0)+	bpl	LSYM(Lover10) 	neg	divisor, divisor		@ Loops below use unsigned.-Lover10:+LSYM(Lover10): 	push	{ work } 	@ Need to save the sign of the dividend, unfortunately, we need 	@ work later on.  Must do this after saving the original value of 	@ the work register, because we will pop this value off first. 	push	{ dividend } 	cmp	dividend, #0-	bpl	Lover11+	bpl	LSYM(Lover11) 	neg	dividend, dividend-Lover11:+LSYM(Lover11): 	cmp	dividend, divisor-	blo	Lgot_result+	blo	LSYM(Lgot_result)  	THUMB_DIV_MOD_BODY 1 		 	pop	{ work } 	cmp	work, #0-	bpl	Lover12+	bpl	LSYM(Lover12) 	neg	dividend, dividend-Lover12:+LSYM(Lover12): 	pop	{ work } 	RET	 @@ -594,14 +655,14 @@ 	 	cmp	divisor, #0 	rsbmi	divisor, divisor, #0		@ Loops below use unsigned.-	beq	Ldiv0+	beq	LSYM(Ldiv0) 	@ Need to save the sign of the dividend, unfortunately, we need 	@ ip later on; this is faster than pushing lr and using that. 	str	dividend, [sp, #-4]! 	cmp	dividend, #0			@ Test dividend against zero 	rsbmi	dividend, dividend, #0		@ If negative make positive 	cmp	dividend, divisor		@ else if zero return zero-	blo	Lgot_result			@ if smaller return dividend+	blo	LSYM(Lgot_result)		@ if smaller return dividend 	mov	curbit, #1  	ARM_DIV_MOD_BODY 1@@ -613,7 +674,7 @@  #endif /* ARM version */ 	-	FUNC_END modsi3+	DIV_FUNC_END modsi3  #endif /* L_modsi3 */ /* ------------------------------------------------------------------------ */@@ -623,7 +684,7 @@  	RET -	SIZE	(__div0)+	FUNC_END div0 	 #endif /* L_divmodsi_tools */ /* ------------------------------------------------------------------------ */@@ -636,22 +697,18 @@ #define __NR_getpid			(__NR_SYSCALL_BASE+ 20) #define __NR_kill			(__NR_SYSCALL_BASE+ 37) +	.code	32 	FUNC_START div0  	stmfd	sp!, {r1, lr} 	swi	__NR_getpid 	cmn	r0, #1000-	ldmhsfd	sp!, {r1, pc}RETCOND	@ not much we can do+	RETLDM	r1 hs 	mov	r1, #SIGFPE 	swi	__NR_kill-#ifdef __THUMB_INTERWORK__-	ldmfd	sp!, {r1, lr}-	bx	lr-#else-	ldmfd	sp!, {r1, pc}RETCOND-#endif+	RETLDM	r1 -	SIZE 	(__div0)+	FUNC_END div0 	 #endif /* L_dvmd_lnx */ /* ------------------------------------------------------------------------ */@@ -720,24 +777,23 @@  	.code   32 	.globl _arm_return-_arm_return:		-	ldmia 	r13!, {r12}-	bx 	r12+_arm_return:+	RETLDM 	.code   16 -.macro interwork register					-	.code   16+.macro interwork register+	.code	16  	THUMB_FUNC_START _interwork_call_via_\register -	bx 	pc+	bx	pc 	nop-	-	.code   32-	.globl .Lchange_\register-.Lchange_\register:++	.code	32+	.globl LSYM(Lchange_\register)+LSYM(Lchange_\register): 	tst	\register, #1-	stmeqdb	r13!, {lr}+	streq	lr, [sp, #-4]! 	adreq	lr, _arm_return 	bx	\register @@ -779,3 +835,7 @@ 	SIZE	(_interwork_call_via_lr) 	 #endif /* L_interwork_call_via_rX */++#include "ieee754-df.S"+#include "ieee754-sf.S"+

⌨️ 快捷键说明

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