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

📄 libgcc.s

📁 linux下的gcc编译器
💻 S
📖 第 1 页 / 共 2 页
字号:
	addi	re,r0	lsh	16,rc	addi	rc,r1	addc	0,r0	mpyi	r2,ar1,rc	lsh	rs,rc,re	addi	re,r0	pop	ar0	bd	ar0	lsh	16,rc	addi	rc,r1	addc	0,r0#endif;; Integer 32 by 32 multiply highpart signed; src1 in ar2; src2 in r2; result in r0;#ifdef L_smuldi3_high	.text	.global	___smulhi3_high___smulhi3_high:	.if .REGPARM == 0#ifdef _TMS320C4x	lda	sp,ar0#else	ldiu	sp,ar0#endif	ldi	*-ar0(1), ar2	ldi	*-ar0(2), r2	.endif	ldi	-16,rs	ldi	0,rc	subi3	ar2,rc,r0	ldi	r2,r3	ldilt	r0,rc	subi3	r2,rc,r0	ldi	ar2,ar1	tstb	ar1,ar1	ldilt	r0,rc	and	0ffffh,r2	and	0ffffh,ar2	lsh	rs,r3	lsh	rs,ar1	mpyi	ar2,r2,r1	mpyi	ar1,r3,r0	addi	rc,r0	mpyi	ar2,r3,rc	lsh	rs,rc,re	addi	re,r0	lsh	16,rc	addi	rc,r1	addc	0,r0	mpyi	r2,ar1,rc	lsh	rs,rc,re	addi	re,r0	pop	ar0	bd	ar0	lsh	16,rc	addi	rc,r1	addc	0,r0#endif;; Integer 64 by 64 unsigned divide; long1 and long2 on stack; divide in r0,r1; modulo in r2,r3; routine takes a maximum of 64*8+23=535 cycles = 21.4 us @ 50Mhz;#ifdef L_udivdi3	.text	.global	___udivhi3	.global	___udivide	.global	___umodulo	.ref udivqi3n	.ref umodqi3n___udivhi3:	ldi	sp,ar2	ldi     *-ar2(4),ar0	ldi     *-ar2(3),ar1	ldi     *-ar2(2),r0	ldi     *-ar2(1),r1___udivide:	or	r1,ar1,r2	bne	udiv0	ldi	ar0,r2	ldi	r0,ar2	call	udivqi3n	ldiu	0,r1	rets___umodulo:	or	r1,ar1,r2	bne	udiv0	ldi	ar0,r2	ldi	r0,ar2	call	umodqi3n	ldi	r0,r2	ldiu	0,r3	retsudiv0:	tstb	ar1,ar1	bne	udiv1	tstb	ar0,ar0	bn	udiv1	ldiu	63,rc#ifdef _TMS320C4x	rptbd	udivend0	ldiu	0,r2	addi	r0,r0	rolc	r1#else	ldiu	0,r2	addi	r0,r0	rolc	r1	rptb	udivend0#endif	rolc	r2	subi3	ar0,r2,r3	ldinc	r3,r2	rolc	r0udivend0:	rolc	r1	not	r0	not	r1	ldiu	0,r3	retsudiv1:	push	r4	push	r5	ldiu	63,rc	ldiu	0,r2#ifdef _TMS320C4x	rptbd	udivend1	ldiu	0,r3	addi	r0,r0	rolc	r1#else	ldiu	0,r3	addi	r0,r0	rolc	r1	rptb	udivend1#endif	rolc	r2	rolc	r3	subi3	ar0,r2,r4	subb3	ar1,r3,r5	ldinc	r4,r2	ldinc	r5,r3	rolc	r0udivend1:	rolc	r1	not	r0	not	r1	pop	r5	pop	r4	rets#endif;; Integer 64 by 64 unsigned modulo; long1 and long2 on stack; result in r0,r1;#ifdef L_umoddi3	.text	.global	___umodhi3	.ref ___modulo___umodhi3:	ldi	sp,ar2	ldi     *-ar2(4),ar0	ldi     *-ar2(3),ar1	ldi     *-ar2(2),r0	ldi     *-ar2(1),r1	call	___umodulo	pop	ar0	bd	ar0	ldi	r2,r0	ldi	r3,r1	nop#endif;; Integer 64 by 64 signed divide; long1 and long2 on stack; result in r0,r1;#ifdef L_divdi3	.text	.global	___divhi3	.ref ___udivide___divhi3:	ldi	0,ir0	ldi	sp,ar2	ldi     *-ar2(4),r0	ldi     *-ar2(3),r1	bge	div1	not	ir0	negi	r0	negb	r1div1:	ldi	r0,ar0	ldi	r1,ar1	ldi     *-ar2(2),r0	ldi     *-ar2(1),r1	bge	div2	not	ir0	negi	r0	negb	r1div2:	call	___udivide	tstb	ir0,ir0	bge	div3	negi	r0	negb	r1div3:		rets#endif;; Integer 64 by 64 signed modulo; long1 and long2 on stack; result in r0,r1;#ifdef L_moddi3	.text	.global	___modhi3	.ref ___umodulo___modhi3:	ldi	0,ir0	ldi	sp,ar2	ldi     *-ar2(4),r0	ldi     *-ar2(3),r1	bge	mod1	not	ir0	negi	r0	negb	r1mod1:	ldi	r0,ar0	ldi	r1,ar1	ldi     *-ar2(2),r0	ldi     *-ar2(1),r1	bge	mod2	not	ir0	negi	r0	negb	r1mod2:	call	___umodulo	ldi	r2,r0	ldi	r3,r1	tstb	ir0,ir0	bge	mod3	negi	r0	negb	r1mod3:		rets#endif;; double to signed long long conversion; input in r2; result in r0,r1;#ifdef L_fix_truncsfdi2	.text	.global	___fix_truncqfhi2	.ref ufix_truncqfhi2n___fix_truncqfhi2:	.if .REGPARM == 0#ifdef _TMS320C4x	lda	sp,ar0#else	ldiu	sp,ar0#endif	ldf	*-ar0(1), r2	.endif	cmpf	0.0,r2	bge	ufix_truncqfhi2n	negf	r2	call	ufix_truncqfhi2n	negi	r0	negb	r1	rets#endif;; double to unsigned long long conversion; input in r2; result in r0,r1;#ifdef L_ufix_truncsfdi2	.text	.global	___ufix_truncqfhi2	.global	ufix_truncqfhi2n___ufix_truncqfhi2:	.if .REGPARM == 0#ifdef _TMS320C4x	lda	sp,ar0#else	ldiu	sp,ar0#endif	ldf	*-ar0(1), r2	.endifufix_truncqfhi2n:	cmpf	0.0,r2	ble	ufix1	pushf	r2	pop	r3	ash	-24,r3	subi	31,r3	cmpi	32,r3	bgt	ufix1	cmpi	-32,r3	ble	ufix1	ldi	1,r0	ash	31,r0	or3	r0,r2,r0	ldi	r0,r1	lsh3	r3,r0,r0	subi	32,r3	cmpi	-32,r3	ldile	0,r1	lsh3	r3,r1,r1	retsufix1:	ldi	0,r0	ldi	0,r1	rets#endif;; signed long long to double conversion; input on stack; result in r0;#ifdef L_floatdisf2	.text	.global	___floathiqf2	.ref ufloathiqf2n___floathiqf2:	ldi	sp,ar2	ldi	*-ar2(2),r0	ldi	*-ar2(1),r1	bge	ufloathiqf2n	negi	r0	negb	r1	call	ufloathiqf2n	negf	r0	rets#endif;; unsigned long long to double conversion; input on stack; result in r0;#ifdef L_ufloatdisf2	.text	.global	___ufloathiqf2	.global	ufloathiqf2n	.ref ___unsfltconst___ufloathiqf2:	ldi	sp,ar2	ldi	*-ar2(2),r0	ldi	*-ar2(1),r1ufloathiqf2n:	.if .BIGMODEL#ifdef _TMS320C4x	ldpk	@___unsfltconst#else	ldp	@___unsfltconst#endif	.endif	ldf	@___unsfltconst,r2	float	r0	bge	uflt1	addf	r2,r0uflt1:	float	r1	bge	uflt2	addf	r2,r1uflt2:#ifdef _TMS320C4x	pop	r3	bd	r3	mpyf	r2,r1	addf	r1,r0	nop#else	ldf	r1,r3	and	0ffh,r3	norm	r3,r3	mpyf	r2,r3	pop	ar2	bd	ar2	addf	r3,r0	mpyf	r2,r1	addf	r1,r0#endif#endif;; long double to signed long long conversion; input in r2; result in r0,r1;#ifdef L_fix_truncdfdi2	.text	.global	___fix_trunchfhi2	.ref ufix_trunchfhi2n___fix_trunchfhi2:	.if .REGPARM == 0#ifdef _TMS320C4x	lda	sp,ar0#else	ldiu	sp,ar0#endif	ldf	*-ar0(2), r2	ldi	*-ar0(1), r2	.endif	cmpf	0.0,r2	bge	ufix_trunchfhi2n	negf	r2	call	ufix_trunchfhi2n	negi	r0	negb	r1	rets#endif;; long double to unsigned long long conversion; input in r2; result in r0,r1;#ifdef L_ufix_truncdfdi2	.text	.global	___ufix_trunchfhi2	.global	ufix_trunchfhi2n___ufix_trunchfhi2:	.if .REGPARM == 0#ifdef _TMS320C4x	lda	sp,ar0#else	ldiu	sp,ar0#endif	ldf	*-ar0(2), r2	ldi	*-ar0(1), r2	.endifufix_trunchfhi2n:	cmpf	0.0,r2	ble	ufixh1	pushf	r2	pop	r3	ash	-24,r3	subi	31,r3	cmpi	32,r3	bgt	ufixh1	cmpi	-32,r3	ble	ufixh1	ldi	1,r0	ash	31,r0	or3	r0,r2,r0	ldi	r0,r1	lsh3	r3,r0,r0	subi	32,r3	cmpi	-32,r3	ldile	0,r1	lsh3	r3,r1,r1	retsufixh1:	ldi	0,r0	ldi	0,r1	rets#endif;; signed long long to long double conversion; input on stack; result in r0;#ifdef L_floatdidf2	.text	.global	___floathihf2	.ref ufloathihf2n___floathihf2:	ldi	sp,ar2	ldi	*-ar2(2),r0	ldi	*-ar2(1),r1	bge	ufloathihf2n	negi	r0	negb	r1	call	ufloathihf2n	negf	r0	rets#endif;; unsigned long long to double conversion; input on stack; result in r0;#ifdef L_ufloatdidf2	.text	.global	___ufloathihf2	.global	ufloathihf2n	.ref ___unsfltconst___ufloathihf2:	ldi	sp,ar2	ldi	*-ar2(2),r0	ldi	*-ar2(1),r1ufloathihf2n	.if .BIGMODEL#ifdef _TMS320C4x	ldpk	@___unsfltconst#else	ldp	@___unsfltconst#endif	.endif	ldf	@___unsfltconst,r2	float	r0	bge	uflth1	addf	r2,r0uflth1:	float	r1	bge	uflth2	addf	r2,r1uflth2:#ifdef _TMS320C4x	pop	r3	bd	r3	mpyf	r2,r1	addf	r1,r0	nop#else	ldf	r1,r3	and	0ffh,r3	norm	r3,r3	mpyf	r2,r3	pop	ar2	bd	ar2	addf	r3,r0	mpyf	r2,r1	addf	r1,r0#endif#endif;; calculate ffs; input in ar2; result in r0;#ifdef L_ffs	.global	___ffs	.ref ___unsfltconst	.text___ffs:	.if .REGPARM == 0#ifdef _TMS320C4x	lda	sp,ar0#else	ldiu	sp,ar0#endif	ldi	*-ar0(1), ar2	.endif	negi	ar2,r0	and	ar2,r0	float	r0,r0	ldfu	0.0,r1	.if .BIGMODEL#ifdef _TMS320C4x	ldpk	@___unsfltconst#else	ldp	@___unsfltconst#endif	.endif	ldflt	@___unsfltconst,r1	addf	r1,r0	pushf	r0	pop	r0	pop	ar0	bd	ar0	ash	-24,r0	ldilt	-1,r0	addi	1,r0#endif;; calculate long double * long double; input in r2, r3; output in r0;#ifdef L_muldf3	.global ___mulhf3	.text___mulhf3:	.if .REGPARM == 0#ifdef _TMS320C4x	lda	sp,ar0#else	ldiu	sp,ar0#endif	ldf	*-ar0(2), r2	ldi	*-ar0(1), r2	ldf	*-ar0(4), r3	ldi	*-ar0(3), r3	.endif	pop	ar2		; return ad	ldf	r2,r0		; copy lsb0	ldf	r3,r1		; copy lsb1	and	0ffh,r0		; mask lsb0	and	0ffh,r1		; mask lsb1	norm	r0,r0		; correct lsb0	norm	r1,r1		; correct lsb1	mpyf	r2,r1		; arg0*lsb1	mpyf	r3,r0		; arg1*lsb0	bd	ar2		; return (delayed)	addf	r0,r1		; arg0*lsb1 + arg1*lsb0	mpyf	r2,r3,r0	; msb0*msb1	addf	r1,r0		; msb0*msb1 + arg0*lsb1 + arg1*lsb0#endif;; calculate long double / long double; r2 dividend, r3 divisor, r0 quotient;#ifdef L_divdf3	.global ___divhf3	.text___divhf3:	.if .REGPARM == 0#ifdef _TMS320C4x	lda	sp,ar0#else	ldiu	sp,ar0#endif	ldf	*-ar0(2), r2	ldi	*-ar0(1), r2	ldf	*-ar0(4), r3	ldi	*-ar0(3), r3	.endif#ifdef _TMS320C4x	pop	ar1        rcpf    r3, r0	mpyf3	r0, r3, r1	subrf	2.0, r1			mpyf	r1, r0		mpyf3	r0, r3, r1	bud	ar1	subrf	2.0, r1		mpyf	r1, r0	mpyf	r2, r0#else	pop	ar1	pushf	r3	pop	r0	not	r0		push	r0	popf	r0	ldf	-1.0, r1	xor	r1, r0	mpyf3	r0, r3, r1	; r1 = r[0] * v	subrf	2.0, r1		; r1 = 2.0 - r[0] * v	mpyf	r1, r0		; r0 = r[0] * (2.0 - r[0] * v) = r[1]; End of 1st iteration	mpyf3	r0, r3, r1	; r1 = r[1] * v	subrf	2.0, r1		; r1 = 2.0 - r[1] * v	mpyf	r1, r0		; r0 = r[1] * (2.0 - r[1] * v) = r[2]; End of 2nd iteration	mpyf3	r0, r3, r1	; r1 = r[2] * v	subrf	2.0, r1		; r1 = 2.0 - r[2] * v	mpyf	r1, r0		; r0 = r[2] * (2.0 - r[2] * v) = r[3]; End of 3rd iteration	or	080h, r0	rnd	r0;	mpyf3	r0, r3, r1	; r1 = r[3] * v	push	r4	pushf	r4	mpyf	r0, r3, r1	ldf	r0, r4	and	0ffh, r4	norm	r4, r4	mpyf	r3, r4	addf	r4, r1	ldf	r3, r4	and	0ffh, r4	norm 	r4, r4	mpyf	r0, r4	addf	r4, r1		subrf	2.0, r1		; r1 = 2.0 - r[3] * v	mpyf	r1, r0, r3	; r3 = r[3] * (2.0 - r[3] * v) = r[5]	ldf	r1, r4	and	0ffh, r4	norm	r4, r4	mpyf	r0, r4	addf	r4, r3	ldf	r0, r4	and	0ffh, r4	norm 	r4, r4	mpyf	r1, r4	addf	r4, r3	mpyf	r2, r3, r0	; Multiply by the dividend	ldf	r2, r4	and	0ffh, r4	norm	r4, r4	mpyf	r3, r4	addf	r4, r0	ldf	r3, r4	and	0ffh, r4	norm 	r4, r4	mpyf	r2, r4	bd	ar1	addf	r4, r0	popf	r4	pop	r4#endif#endif

⌨️ 快捷键说明

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