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

📄 lib1funcs.asm

📁 linux下编程用 编译软件
💻 ASM
📖 第 1 页 / 共 5 页
字号:
! Entry:!! r4: Value to shift! r5: Shifts!! Exit:!! r0: Result!! Destroys:!! (none)!	.global	GLOBAL(lshrsi3)	HIDDEN_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	.balign	4	.global	GLOBAL(movmem)	HIDDEN_FUNC(GLOBAL(movmem))	HIDDEN_ALIAS(movstr,movmem)	/* This would be a lot simpler if r6 contained the byte count	   minus 64, and we wouldn't be called here for a byte count of 64.  */GLOBAL(movmem):	sts.l	pr,@-r15	shll2	r6	bsr	GLOBAL(movmemSI52+2)	mov.l	@(48,r5),r0	.balign	4LOCAL(movmem_loop): /* Reached with rts */	mov.l	@(60,r5),r0	add	#-64,r6	mov.l	r0,@(60,r4)	tst	r6,r6	mov.l	@(56,r5),r0	bt	LOCAL(movmem_done)	mov.l	r0,@(56,r4)	cmp/pl	r6	mov.l	@(52,r5),r0	add	#64,r5	mov.l	r0,@(52,r4)	add	#64,r4	bt	GLOBAL(movmemSI52)! done all the large groups, do the remainder! jump to movmem+	mova	GLOBAL(movmemSI4)+4,r0	add	r6,r0	jmp	@r0LOCAL(movmem_done): ! share slot insn, works out aligned.	lds.l	@r15+,pr	mov.l	r0,@(56,r4)	mov.l	@(52,r5),r0	rts	mov.l	r0,@(52,r4)	.balign	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)	HIDDEN_FUNC(GLOBAL(movmemSI64))	HIDDEN_ALIAS(movstrSI64,movmemSI64)GLOBAL(movmemSI64):	mov.l	@(60,r5),r0	mov.l	r0,@(60,r4)	.global	GLOBAL(movmemSI60)	HIDDEN_FUNC(GLOBAL(movmemSI60))	HIDDEN_ALIAS(movstrSI60,movmemSI60)GLOBAL(movmemSI60):	mov.l	@(56,r5),r0	mov.l	r0,@(56,r4)	.global	GLOBAL(movmemSI56)	HIDDEN_FUNC(GLOBAL(movmemSI56))	HIDDEN_ALIAS(movstrSI56,movmemSI56)GLOBAL(movmemSI56):	mov.l	@(52,r5),r0	mov.l	r0,@(52,r4)	.global	GLOBAL(movmemSI52)	HIDDEN_FUNC(GLOBAL(movmemSI52))	HIDDEN_ALIAS(movstrSI52,movmemSI52)GLOBAL(movmemSI52):	mov.l	@(48,r5),r0	mov.l	r0,@(48,r4)	.global	GLOBAL(movmemSI48)	HIDDEN_FUNC(GLOBAL(movmemSI48))	HIDDEN_ALIAS(movstrSI48,movmemSI48)GLOBAL(movmemSI48):	mov.l	@(44,r5),r0	mov.l	r0,@(44,r4)	.global	GLOBAL(movmemSI44)	HIDDEN_FUNC(GLOBAL(movmemSI44))	HIDDEN_ALIAS(movstrSI44,movmemSI44)GLOBAL(movmemSI44):	mov.l	@(40,r5),r0	mov.l	r0,@(40,r4)	.global	GLOBAL(movmemSI40)	HIDDEN_FUNC(GLOBAL(movmemSI40))	HIDDEN_ALIAS(movstrSI40,movmemSI40)GLOBAL(movmemSI40):	mov.l	@(36,r5),r0	mov.l	r0,@(36,r4)	.global	GLOBAL(movmemSI36)	HIDDEN_FUNC(GLOBAL(movmemSI36))	HIDDEN_ALIAS(movstrSI36,movmemSI36)GLOBAL(movmemSI36):	mov.l	@(32,r5),r0	mov.l	r0,@(32,r4)	.global	GLOBAL(movmemSI32)	HIDDEN_FUNC(GLOBAL(movmemSI32))	HIDDEN_ALIAS(movstrSI32,movmemSI32)GLOBAL(movmemSI32):	mov.l	@(28,r5),r0	mov.l	r0,@(28,r4)	.global	GLOBAL(movmemSI28)	HIDDEN_FUNC(GLOBAL(movmemSI28))	HIDDEN_ALIAS(movstrSI28,movmemSI28)GLOBAL(movmemSI28):	mov.l	@(24,r5),r0	mov.l	r0,@(24,r4)	.global	GLOBAL(movmemSI24)	HIDDEN_FUNC(GLOBAL(movmemSI24))	HIDDEN_ALIAS(movstrSI24,movmemSI24)GLOBAL(movmemSI24):	mov.l	@(20,r5),r0	mov.l	r0,@(20,r4)	.global	GLOBAL(movmemSI20)	HIDDEN_FUNC(GLOBAL(movmemSI20))	HIDDEN_ALIAS(movstrSI20,movmemSI20)GLOBAL(movmemSI20):	mov.l	@(16,r5),r0	mov.l	r0,@(16,r4)	.global	GLOBAL(movmemSI16)	HIDDEN_FUNC(GLOBAL(movmemSI16))	HIDDEN_ALIAS(movstrSI16,movmemSI16)GLOBAL(movmemSI16):	mov.l	@(12,r5),r0	mov.l	r0,@(12,r4)	.global	GLOBAL(movmemSI12)	HIDDEN_FUNC(GLOBAL(movmemSI12))	HIDDEN_ALIAS(movstrSI12,movmemSI12)GLOBAL(movmemSI12):	mov.l	@(8,r5),r0	mov.l	r0,@(8,r4)	.global	GLOBAL(movmemSI8)	HIDDEN_FUNC(GLOBAL(movmemSI8))	HIDDEN_ALIAS(movstrSI8,movmemSI8)GLOBAL(movmemSI8):	mov.l	@(4,r5),r0	mov.l	r0,@(4,r4)	.global	GLOBAL(movmemSI4)	HIDDEN_FUNC(GLOBAL(movmemSI4))	HIDDEN_ALIAS(movstrSI4,movmemSI4)GLOBAL(movmemSI4):	mov.l	@(0,r5),r0	rts	mov.l	r0,@(0,r4)	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(movmem))#endif#ifdef L_movmem_i4	.text	.global	GLOBAL(movmem_i4_even)	.global	GLOBAL(movmem_i4_odd)	.global	GLOBAL(movmemSI12_i4)	HIDDEN_FUNC(GLOBAL(movmem_i4_even))	HIDDEN_FUNC(GLOBAL(movmem_i4_odd))	HIDDEN_FUNC(GLOBAL(movmemSI12_i4))	HIDDEN_ALIAS(movstr_i4_even,movmem_i4_even)	HIDDEN_ALIAS(movstr_i4_odd,movmem_i4_odd)	HIDDEN_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)	HIDDEN_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	ENDFUNC(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)	HIDDEN_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)	HIDDEN_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)#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	shlri	r19, 1, r19	bnei	r1, 0, tr1	muls.l	r0, r2, r0	add.l	r0, r63, r0	blink	tr0, r63#elif 0 /* ! 0 */ // inputs: r4,r5 // clobbered: r1,r2,r3,r18,r19,r20,r21,r25,tr0 // result in r0GLOBAL(sdivsi3): // can create absolute value without extra latency, // but dependent on proper sign extension of inputs: // shari.l r5,31,r2 // xor r5,r2,r20 // sub r20,r2,r20 // r20 is now absolute value of r5, zero-extended. shari.l r5,31,r2 ori r2,1,r2 muls.l r5,r2,r20 // r20 is now absolute value of r5, zero-extended. movi 0xffffffffffffbb0c,r19 // shift count eqiv 76 shari.l r4,31,r3 nsb r20,r0 shlld r20,r0,r25 shlri r25,48,r25 sub r19,r25,r1 mmulfx.w r1,r1,r2

⌨️ 快捷键说明

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