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

📄 lib1funcs.asm

📁 Mac OS X 10.4.9 for x86 Source Code gcc 实现源代码
💻 ASM
📖 第 1 页 / 共 5 页
字号:
! Exit:!! r0: Result!! Destroys:!! (none)!	.global	GLOBAL(lshrsi3)	FUNC(GLOBAL(lshrsi3))	.align	2GLOBAL(lshrsi3):	mov	#31,r0	and	r0,r5	mova	LOCAL(lshrsi3_table),r0	mov.b	@(r0,r5),r5#ifdef __sh1__	add	r5,r0	jmp	@r0#else	braf	r5#endif	mov	r4,r0	.align	2LOCAL(lshrsi3_table):	.byte		LOCAL(lshrsi3_0)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_1)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_2)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_3)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_4)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_5)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_6)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_7)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_8)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_9)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_10)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_11)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_12)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_13)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_14)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_15)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_16)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_17)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_18)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_19)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_20)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_21)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_22)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_23)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_24)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_25)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_26)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_27)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_28)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_29)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_30)-LOCAL(lshrsi3_table)	.byte		LOCAL(lshrsi3_31)-LOCAL(lshrsi3_table)LOCAL(lshrsi3_6):	shlr2	r0LOCAL(lshrsi3_4):	shlr2	r0LOCAL(lshrsi3_2):	rts	shlr2	r0LOCAL(lshrsi3_7):	shlr2	r0LOCAL(lshrsi3_5):	shlr2	r0LOCAL(lshrsi3_3):	shlr2	r0LOCAL(lshrsi3_1):	rts	shlr	r0LOCAL(lshrsi3_14):	shlr2	r0LOCAL(lshrsi3_12):	shlr2	r0LOCAL(lshrsi3_10):	shlr2	r0LOCAL(lshrsi3_8):	rts	shlr8	r0LOCAL(lshrsi3_15):	shlr2	r0LOCAL(lshrsi3_13):	shlr2	r0LOCAL(lshrsi3_11):	shlr2	r0LOCAL(lshrsi3_9):	shlr8	r0	rts	shlr	r0LOCAL(lshrsi3_22):	shlr2	r0LOCAL(lshrsi3_20):	shlr2	r0LOCAL(lshrsi3_18):	shlr2	r0LOCAL(lshrsi3_16):	rts	shlr16	r0LOCAL(lshrsi3_23):	shlr2	r0LOCAL(lshrsi3_21):	shlr2	r0LOCAL(lshrsi3_19):	shlr2	r0LOCAL(lshrsi3_17):	shlr16	r0	rts	shlr	r0LOCAL(lshrsi3_30):	shlr2	r0LOCAL(lshrsi3_28):	shlr2	r0LOCAL(lshrsi3_26):	shlr2	r0LOCAL(lshrsi3_24):	shlr16	r0	rts	shlr8	r0LOCAL(lshrsi3_31):	shlr2	r0LOCAL(lshrsi3_29):	shlr2	r0LOCAL(lshrsi3_27):	shlr2	r0LOCAL(lshrsi3_25):	shlr16	r0	shlr8	r0	rts	shlr	r0LOCAL(lshrsi3_0):	rts	nop	ENDFUNC(GLOBAL(lshrsi3))#endif#ifdef L_movmem	.text! done all the large groups, do the remainder! jump to movmem+done:	add	#64,r5	mova	GLOBAL(movmemSI0),r0	shll2	r6	add	r6,r0	jmp	@r0	add	#64,r4	.align	4! ??? We need aliases movstr* for movmem* for the older libraries.  These! aliases will be removed at the some point in the future.	.global	GLOBAL(movmemSI64)	FUNC(GLOBAL(movmemSI64))	ALIAS(movstrSI64,movmemSI64)GLOBAL(movmemSI64):	mov.l	@(60,r5),r0	mov.l	r0,@(60,r4)	.global	GLOBAL(movmemSI60)	FUNC(GLOBAL(movmemSI60))	ALIAS(movstrSI60,movmemSI60)GLOBAL(movmemSI60):	mov.l	@(56,r5),r0	mov.l	r0,@(56,r4)	.global	GLOBAL(movmemSI56)	FUNC(GLOBAL(movmemSI56))	ALIAS(movstrSI56,movmemSI56)GLOBAL(movmemSI56):	mov.l	@(52,r5),r0	mov.l	r0,@(52,r4)	.global	GLOBAL(movmemSI52)	FUNC(GLOBAL(movmemSI52))	ALIAS(movstrSI52,movmemSI52)GLOBAL(movmemSI52):	mov.l	@(48,r5),r0	mov.l	r0,@(48,r4)	.global	GLOBAL(movmemSI48)	FUNC(GLOBAL(movmemSI48))	ALIAS(movstrSI48,movmemSI48)GLOBAL(movmemSI48):	mov.l	@(44,r5),r0	mov.l	r0,@(44,r4)	.global	GLOBAL(movmemSI44)	FUNC(GLOBAL(movmemSI44))	ALIAS(movstrSI44,movmemSI44)GLOBAL(movmemSI44):	mov.l	@(40,r5),r0	mov.l	r0,@(40,r4)	.global	GLOBAL(movmemSI40)	FUNC(GLOBAL(movmemSI40))	ALIAS(movstrSI40,movmemSI40)GLOBAL(movmemSI40):	mov.l	@(36,r5),r0	mov.l	r0,@(36,r4)	.global	GLOBAL(movmemSI36)	FUNC(GLOBAL(movmemSI36))	ALIAS(movstrSI36,movmemSI36)GLOBAL(movmemSI36):	mov.l	@(32,r5),r0	mov.l	r0,@(32,r4)	.global	GLOBAL(movmemSI32)	FUNC(GLOBAL(movmemSI32))	ALIAS(movstrSI32,movmemSI32)GLOBAL(movmemSI32):	mov.l	@(28,r5),r0	mov.l	r0,@(28,r4)	.global	GLOBAL(movmemSI28)	FUNC(GLOBAL(movmemSI28))	ALIAS(movstrSI28,movmemSI28)GLOBAL(movmemSI28):	mov.l	@(24,r5),r0	mov.l	r0,@(24,r4)	.global	GLOBAL(movmemSI24)	FUNC(GLOBAL(movmemSI24))	ALIAS(movstrSI24,movmemSI24)GLOBAL(movmemSI24):	mov.l	@(20,r5),r0	mov.l	r0,@(20,r4)	.global	GLOBAL(movmemSI20)	FUNC(GLOBAL(movmemSI20))	ALIAS(movstrSI20,movmemSI20)GLOBAL(movmemSI20):	mov.l	@(16,r5),r0	mov.l	r0,@(16,r4)	.global	GLOBAL(movmemSI16)	FUNC(GLOBAL(movmemSI16))	ALIAS(movstrSI16,movmemSI16)GLOBAL(movmemSI16):	mov.l	@(12,r5),r0	mov.l	r0,@(12,r4)	.global	GLOBAL(movmemSI12)	FUNC(GLOBAL(movmemSI12))	ALIAS(movstrSI12,movmemSI12)GLOBAL(movmemSI12):	mov.l	@(8,r5),r0	mov.l	r0,@(8,r4)	.global	GLOBAL(movmemSI8)	FUNC(GLOBAL(movmemSI8))	ALIAS(movstrSI8,movmemSI8)GLOBAL(movmemSI8):	mov.l	@(4,r5),r0	mov.l	r0,@(4,r4)	.global	GLOBAL(movmemSI4)	FUNC(GLOBAL(movmemSI4))	ALIAS(movstrSI4,movmemSI4)GLOBAL(movmemSI4):	mov.l	@(0,r5),r0	mov.l	r0,@(0,r4)	.global	GLOBAL(movmemSI0)	FUNC(GLOBAL(movmemSI0))	ALIAS(movstrSI0,movmemSI0)GLOBAL(movmemSI0):	rts	nop	ENDFUNC(GLOBAL(movmemSI64))	ENDFUNC(GLOBAL(movmemSI60))	ENDFUNC(GLOBAL(movmemSI56))	ENDFUNC(GLOBAL(movmemSI52))	ENDFUNC(GLOBAL(movmemSI48))	ENDFUNC(GLOBAL(movmemSI44))	ENDFUNC(GLOBAL(movmemSI40))	ENDFUNC(GLOBAL(movmemSI36))	ENDFUNC(GLOBAL(movmemSI32))	ENDFUNC(GLOBAL(movmemSI28))	ENDFUNC(GLOBAL(movmemSI24))	ENDFUNC(GLOBAL(movmemSI20))	ENDFUNC(GLOBAL(movmemSI16))	ENDFUNC(GLOBAL(movmemSI12))	ENDFUNC(GLOBAL(movmemSI8))	ENDFUNC(GLOBAL(movmemSI4))	ENDFUNC(GLOBAL(movmemSI0))	.align	4	.global	GLOBAL(movmem)	FUNC(GLOBAL(movmem))	ALIAS(movstr,movmem)GLOBAL(movmem):	mov.l	@(60,r5),r0	mov.l	r0,@(60,r4)	mov.l	@(56,r5),r0	mov.l	r0,@(56,r4)	mov.l	@(52,r5),r0	mov.l	r0,@(52,r4)	mov.l	@(48,r5),r0	mov.l	r0,@(48,r4)	mov.l	@(44,r5),r0	mov.l	r0,@(44,r4)	mov.l	@(40,r5),r0	mov.l	r0,@(40,r4)	mov.l	@(36,r5),r0	mov.l	r0,@(36,r4)	mov.l	@(32,r5),r0	mov.l	r0,@(32,r4)	mov.l	@(28,r5),r0	mov.l	r0,@(28,r4)	mov.l	@(24,r5),r0	mov.l	r0,@(24,r4)	mov.l	@(20,r5),r0	mov.l	r0,@(20,r4)	mov.l	@(16,r5),r0	mov.l	r0,@(16,r4)	mov.l	@(12,r5),r0	mov.l	r0,@(12,r4)	mov.l	@(8,r5),r0	mov.l	r0,@(8,r4)	mov.l	@(4,r5),r0	mov.l	r0,@(4,r4)	mov.l	@(0,r5),r0	mov.l	r0,@(0,r4)	add	#-16,r6	cmp/pl	r6	bf	done	add	#64,r5	bra	GLOBAL(movmem)	add	#64,r4	FUNC(GLOBAL(movmem))#endif#ifdef L_movmem_i4	.text	.global	GLOBAL(movmem_i4_even)	.global	GLOBAL(movmem_i4_odd)	.global	GLOBAL(movmemSI12_i4)	FUNC(GLOBAL(movmem_i4_even))	FUNC(GLOBAL(movmem_i4_odd))	FUNC(GLOBAL(movmemSI12_i4))	ALIAS(movstr_i4_even,movmem_i4_even)	ALIAS(movstr_i4_odd,movmem_i4_odd)	ALIAS(movstrSI12_i4,movmemSI12_i4)	.p2align	5L_movmem_2mod4_end:	mov.l	r0,@(16,r4)	rts	mov.l	r1,@(20,r4)	.p2align	2GLOBAL(movmem_i4_even):	mov.l	@r5+,r0	bra	L_movmem_start_even	mov.l	@r5+,r1GLOBAL(movmem_i4_odd):	mov.l	@r5+,r1	add	#-4,r4	mov.l	@r5+,r2	mov.l	@r5+,r3	mov.l	r1,@(4,r4)	mov.l	r2,@(8,r4)L_movmem_loop:	mov.l	r3,@(12,r4)	dt	r6	mov.l	@r5+,r0	bt/s	L_movmem_2mod4_end	mov.l	@r5+,r1	add	#16,r4L_movmem_start_even:	mov.l	@r5+,r2	mov.l	@r5+,r3	mov.l	r0,@r4	dt	r6	mov.l	r1,@(4,r4)	bf/s	L_movmem_loop	mov.l	r2,@(8,r4)	rts	mov.l	r3,@(12,r4)	ENDFUNC(GLOBAL(movmem_i4_even))	ENDFUNC(GLOBAL(movmem_i4_odd))	.p2align	4GLOBAL(movmemSI12_i4):	mov.l	@r5,r0	mov.l	@(4,r5),r1	mov.l	@(8,r5),r2	mov.l	r0,@r4	mov.l	r1,@(4,r4)	rts	mov.l	r2,@(8,r4)	ENDFUNC(GLOBAL(movmemSI12_i4))#endif#ifdef L_mulsi3	.global	GLOBAL(mulsi3)	FUNC(GLOBAL(mulsi3))! r4 =       aabb! r5 =       ccdd! r0 = aabb*ccdd  via partial products!! if aa == 0 and cc = 0! r0 = bb*dd!! else! aa = bb*dd + (aa*dd*65536) + (cc*bb*65536)!GLOBAL(mulsi3):	mulu.w  r4,r5		! multiply the lsws  macl=bb*dd	mov     r5,r3		! r3 = ccdd	swap.w  r4,r2		! r2 = bbaa	xtrct   r2,r3		! r3 = aacc	tst  	r3,r3		! msws zero ?	bf      hiset	rts			! yes - then we have the answer	sts     macl,r0hiset:	sts	macl,r0		! r0 = bb*dd	mulu.w	r2,r5		! brewing macl = aa*dd	sts	macl,r1	mulu.w	r3,r4		! brewing macl = cc*bb	sts	macl,r2	add	r1,r2	shll16	r2	rts	add	r2,r0	FUNC(GLOBAL(mulsi3))#endif#endif /* ! __SH5__ */#ifdef L_sdivsi3_i4	.title "SH DIVIDE"!! 4 byte integer Divide code for the Renesas SH#ifdef __SH4__!! args in r4 and r5, result in fpul, clobber dr0, dr2	.global	GLOBAL(sdivsi3_i4)	FUNC(GLOBAL(sdivsi3_i4))GLOBAL(sdivsi3_i4):	lds r4,fpul	float fpul,dr0	lds r5,fpul	float fpul,dr2	fdiv dr2,dr0	rts	ftrc dr0,fpul	ENDFUNC(GLOBAL(sdivsi3_i4))#elif defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__) || (defined (__SH5__) && ! defined __SH4_NOFPU__)!! args in r4 and r5, result in fpul, clobber r2, dr0, dr2#if ! __SH5__ || __SH5__ == 32#if __SH5__	.mode	SHcompact#endif	.global	GLOBAL(sdivsi3_i4)	FUNC(GLOBAL(sdivsi3_i4))GLOBAL(sdivsi3_i4):	sts.l fpscr,@-r15	mov #8,r2	swap.w r2,r2	lds r2,fpscr	lds r4,fpul	float fpul,dr0	lds r5,fpul	float fpul,dr2	fdiv dr2,dr0	ftrc dr0,fpul	rts	lds.l @r15+,fpscr	ENDFUNC(GLOBAL(sdivsi3_i4))#endif /* ! __SH5__ || __SH5__ == 32 */#endif /* ! __SH4__ */#endif#ifdef L_sdivsi3/* __SH4_SINGLE_ONLY__ keeps this part for link compatibility with   sh2e/sh3e code.  */#if (! defined(__SH4__) && ! defined (__SH4_SINGLE__)) || defined (__linux__)!!!! Steve Chamberlain!! sac@cygnus.com!!!!!! args in r4 and r5, result in r0 clobber r1, r2, r3, and t bit	.global	GLOBAL(sdivsi3)	FUNC(GLOBAL(sdivsi3))#if __SHMEDIA__#if __SH5__ == 32	.section	.text..SHmedia32,"ax"#else	.text#endif	.align	2#if 0/* The assembly code that follows is a hand-optimized version of the C   code that follows.  Note that the registers that are modified are   exactly those listed as clobbered in the patterns divsi3_i1 and   divsi3_i1_media.	int __sdivsi3 (i, j)     int i, j;{  register unsigned long long r18 asm ("r18");  register unsigned long long r19 asm ("r19");  register unsigned long long r0 asm ("r0") = 0;  register unsigned long long r1 asm ("r1") = 1;  register int r2 asm ("r2") = i >> 31;  register int r3 asm ("r3") = j >> 31;  r2 = r2 ? r2 : r1;  r3 = r3 ? r3 : r1;  r18 = i * r2;  r19 = j * r3;  r2 *= r3;    r19 <<= 31;  r1 <<= 31;  do    if (r18 >= r19)      r0 |= r1, r18 -= r19;  while (r19 >>= 1, r1 >>= 1);  return r2 * (int)r0;}*/GLOBAL(sdivsi3):	pt/l	LOCAL(sdivsi3_dontadd), tr2	pt/l	LOCAL(sdivsi3_loop), tr1	ptabs/l	r18, tr0	movi	0, r0	movi	1, r1	shari.l	r4, 31, r2	shari.l	r5, 31, r3	cmveq	r2, r1, r2	cmveq	r3, r1, r3	muls.l	r4, r2, r18	muls.l	r5, r3, r19	muls.l	r2, r3, r2	shlli	r19, 31, r19	shlli	r1, 31, r1LOCAL(sdivsi3_loop):	bgtu	r19, r18, tr2	or	r0, r1, r0	sub	r18, r19, r18LOCAL(sdivsi3_dontadd):	shlri	r1, 1, r1

⌨️ 快捷键说明

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