📄 lib1funcs.asm
字号:
! 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 + -