📄 lib1funcs.asm
字号:
/* Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.This file is free software; you can redistribute it and/or modify itunder the terms of the GNU General Public License as published by theFree Software Foundation; either version 2, or (at your option) anylater version.In addition to the permissions in the GNU General Public License, theFree Software Foundation gives you unlimited permission to link thecompiled version of this file into combinations with other programs,and to distribute those combinations without any restriction comingfrom the use of this file. (The General Public License restrictionsdo apply in other respects; for example, they cover modification ofthe file, and distribution when not linked into a combineexecutable.)This file is distributed in the hope that it will be useful, butWITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNUGeneral Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; see the file COPYING. If not, write tothe Free Software Foundation, 59 Temple Place - Suite 330,Boston, MA 02111-1307, USA. */!! libgcc routines for the Hitachi / SuperH SH CPUs.!! Contributed by Steve Chamberlain.!! sac@cygnus.com!! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines!! recoded in assembly by Toshiyasu Morita!! tm@netcom.com/* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and ELF local label prefixes by J"orn Rennecke amylaar@cygnus.com */#ifdef __ELF__#define LOCAL(X) .L_##X#else#define LOCAL(X) L_##X#endif#define CONCAT(A,B) A##B#define GLOBAL0(U,X) CONCAT(U,__##X)#define GLOBAL(X) GLOBAL0(__USER_LABEL_PREFIX__,X)#if defined __SH5__ && ! defined __SH4_NOFPU__ && ! defined (__LITTLE_ENDIAN__)#define FMOVD_WORKS#endif#if ! __SH5__#ifdef L_ashiftrt .global GLOBAL(ashiftrt_r4_0) .global GLOBAL(ashiftrt_r4_1) .global GLOBAL(ashiftrt_r4_2) .global GLOBAL(ashiftrt_r4_3) .global GLOBAL(ashiftrt_r4_4) .global GLOBAL(ashiftrt_r4_5) .global GLOBAL(ashiftrt_r4_6) .global GLOBAL(ashiftrt_r4_7) .global GLOBAL(ashiftrt_r4_8) .global GLOBAL(ashiftrt_r4_9) .global GLOBAL(ashiftrt_r4_10) .global GLOBAL(ashiftrt_r4_11) .global GLOBAL(ashiftrt_r4_12) .global GLOBAL(ashiftrt_r4_13) .global GLOBAL(ashiftrt_r4_14) .global GLOBAL(ashiftrt_r4_15) .global GLOBAL(ashiftrt_r4_16) .global GLOBAL(ashiftrt_r4_17) .global GLOBAL(ashiftrt_r4_18) .global GLOBAL(ashiftrt_r4_19) .global GLOBAL(ashiftrt_r4_20) .global GLOBAL(ashiftrt_r4_21) .global GLOBAL(ashiftrt_r4_22) .global GLOBAL(ashiftrt_r4_23) .global GLOBAL(ashiftrt_r4_24) .global GLOBAL(ashiftrt_r4_25) .global GLOBAL(ashiftrt_r4_26) .global GLOBAL(ashiftrt_r4_27) .global GLOBAL(ashiftrt_r4_28) .global GLOBAL(ashiftrt_r4_29) .global GLOBAL(ashiftrt_r4_30) .global GLOBAL(ashiftrt_r4_31) .global GLOBAL(ashiftrt_r4_32) .align 1GLOBAL(ashiftrt_r4_32):GLOBAL(ashiftrt_r4_31): rotcl r4 rts subc r4,r4GLOBAL(ashiftrt_r4_30): shar r4GLOBAL(ashiftrt_r4_29): shar r4GLOBAL(ashiftrt_r4_28): shar r4GLOBAL(ashiftrt_r4_27): shar r4GLOBAL(ashiftrt_r4_26): shar r4GLOBAL(ashiftrt_r4_25): shar r4GLOBAL(ashiftrt_r4_24): shlr16 r4 shlr8 r4 rts exts.b r4,r4GLOBAL(ashiftrt_r4_23): shar r4GLOBAL(ashiftrt_r4_22): shar r4GLOBAL(ashiftrt_r4_21): shar r4GLOBAL(ashiftrt_r4_20): shar r4GLOBAL(ashiftrt_r4_19): shar r4GLOBAL(ashiftrt_r4_18): shar r4GLOBAL(ashiftrt_r4_17): shar r4GLOBAL(ashiftrt_r4_16): shlr16 r4 rts exts.w r4,r4GLOBAL(ashiftrt_r4_15): shar r4GLOBAL(ashiftrt_r4_14): shar r4GLOBAL(ashiftrt_r4_13): shar r4GLOBAL(ashiftrt_r4_12): shar r4GLOBAL(ashiftrt_r4_11): shar r4GLOBAL(ashiftrt_r4_10): shar r4GLOBAL(ashiftrt_r4_9): shar r4GLOBAL(ashiftrt_r4_8): shar r4GLOBAL(ashiftrt_r4_7): shar r4GLOBAL(ashiftrt_r4_6): shar r4GLOBAL(ashiftrt_r4_5): shar r4GLOBAL(ashiftrt_r4_4): shar r4GLOBAL(ashiftrt_r4_3): shar r4GLOBAL(ashiftrt_r4_2): shar r4GLOBAL(ashiftrt_r4_1): rts shar r4GLOBAL(ashiftrt_r4_0): rts nop#endif#ifdef L_ashiftrt_n!! GLOBAL(ashrsi3)!! Entry:!! r4: Value to shift! r5: Shifts!! Exit:!! r0: Result!! Destroys:!! (none)! .global GLOBAL(ashrsi3) .align 2GLOBAL(ashrsi3): mov #31,r0 and r0,r5 mova LOCAL(ashrsi3_table),r0 mov.b @(r0,r5),r5#ifdef __sh1__ add r5,r0 jmp @r0#else braf r5#endif mov r4,r0 .align 2LOCAL(ashrsi3_table): .byte LOCAL(ashrsi3_0)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_1)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_2)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_3)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_4)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_5)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_6)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_7)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_8)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_9)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_10)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_11)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_12)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_13)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_14)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_15)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_16)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_17)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_18)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_19)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_20)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_21)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_22)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_23)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_24)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_25)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_26)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_27)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_28)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_29)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_30)-LOCAL(ashrsi3_table) .byte LOCAL(ashrsi3_31)-LOCAL(ashrsi3_table)LOCAL(ashrsi3_31): rotcl r0 rts subc r0,r0LOCAL(ashrsi3_30): shar r0LOCAL(ashrsi3_29): shar r0LOCAL(ashrsi3_28): shar r0LOCAL(ashrsi3_27): shar r0LOCAL(ashrsi3_26): shar r0LOCAL(ashrsi3_25): shar r0LOCAL(ashrsi3_24): shlr16 r0 shlr8 r0 rts exts.b r0,r0LOCAL(ashrsi3_23): shar r0LOCAL(ashrsi3_22): shar r0LOCAL(ashrsi3_21): shar r0LOCAL(ashrsi3_20): shar r0LOCAL(ashrsi3_19): shar r0LOCAL(ashrsi3_18): shar r0LOCAL(ashrsi3_17): shar r0LOCAL(ashrsi3_16): shlr16 r0 rts exts.w r0,r0LOCAL(ashrsi3_15): shar r0LOCAL(ashrsi3_14): shar r0LOCAL(ashrsi3_13): shar r0LOCAL(ashrsi3_12): shar r0LOCAL(ashrsi3_11): shar r0LOCAL(ashrsi3_10): shar r0LOCAL(ashrsi3_9): shar r0LOCAL(ashrsi3_8): shar r0LOCAL(ashrsi3_7): shar r0LOCAL(ashrsi3_6): shar r0LOCAL(ashrsi3_5): shar r0LOCAL(ashrsi3_4): shar r0LOCAL(ashrsi3_3): shar r0LOCAL(ashrsi3_2): shar r0LOCAL(ashrsi3_1): rts shar r0LOCAL(ashrsi3_0): rts nop#endif#ifdef L_ashiftlt!! GLOBAL(ashlsi3)!! Entry:!! r4: Value to shift! r5: Shifts!! Exit:!! r0: Result!! Destroys:!! (none)! .global GLOBAL(ashlsi3) .align 2GLOBAL(ashlsi3): mov #31,r0 and r0,r5 mova LOCAL(ashlsi3_table),r0 mov.b @(r0,r5),r5#ifdef __sh1__ add r5,r0 jmp @r0#else braf r5#endif mov r4,r0 .align 2LOCAL(ashlsi3_table): .byte LOCAL(ashlsi3_0)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_1)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_2)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_3)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_4)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_5)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_6)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_7)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_8)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_9)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_10)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_11)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_12)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_13)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_14)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_15)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_16)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_17)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_18)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_19)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_20)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_21)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_22)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_23)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_24)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_25)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_26)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_27)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_28)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_29)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_30)-LOCAL(ashlsi3_table) .byte LOCAL(ashlsi3_31)-LOCAL(ashlsi3_table)LOCAL(ashlsi3_6): shll2 r0LOCAL(ashlsi3_4): shll2 r0LOCAL(ashlsi3_2): rts shll2 r0LOCAL(ashlsi3_7): shll2 r0LOCAL(ashlsi3_5): shll2 r0LOCAL(ashlsi3_3): shll2 r0LOCAL(ashlsi3_1): rts shll r0LOCAL(ashlsi3_14): shll2 r0LOCAL(ashlsi3_12): shll2 r0LOCAL(ashlsi3_10): shll2 r0LOCAL(ashlsi3_8): rts shll8 r0LOCAL(ashlsi3_15): shll2 r0LOCAL(ashlsi3_13): shll2 r0LOCAL(ashlsi3_11): shll2 r0LOCAL(ashlsi3_9): shll8 r0 rts shll r0LOCAL(ashlsi3_22): shll2 r0LOCAL(ashlsi3_20): shll2 r0LOCAL(ashlsi3_18): shll2 r0LOCAL(ashlsi3_16): rts shll16 r0LOCAL(ashlsi3_23): shll2 r0LOCAL(ashlsi3_21): shll2 r0LOCAL(ashlsi3_19): shll2 r0LOCAL(ashlsi3_17): shll16 r0 rts shll r0LOCAL(ashlsi3_30): shll2 r0LOCAL(ashlsi3_28): shll2 r0LOCAL(ashlsi3_26): shll2 r0LOCAL(ashlsi3_24): shll16 r0 rts shll8 r0LOCAL(ashlsi3_31): shll2 r0LOCAL(ashlsi3_29): shll2 r0LOCAL(ashlsi3_27): shll2 r0LOCAL(ashlsi3_25): shll16 r0 shll8 r0 rts shll r0LOCAL(ashlsi3_0): rts nop#endif#ifdef L_lshiftrt!! GLOBAL(lshrsi3)!! Entry:!! r4: Value to shift! r5: Shifts!! Exit:!! r0: Result!! Destroys:!! (none)! .global 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#endif#ifdef L_movstr .text! done all the large groups, do the remainder! jump to movstr+done: add #64,r5 mova GLOBAL(movstrSI0),r0 shll2 r6 add r6,r0 jmp @r0 add #64,r4 .align 4 .global GLOBAL(movstrSI64)GLOBAL(movstrSI64): mov.l @(60,r5),r0 mov.l r0,@(60,r4) .global GLOBAL(movstrSI60)GLOBAL(movstrSI60): mov.l @(56,r5),r0 mov.l r0,@(56,r4) .global GLOBAL(movstrSI56)GLOBAL(movstrSI56): mov.l @(52,r5),r0 mov.l r0,@(52,r4) .global GLOBAL(movstrSI52)GLOBAL(movstrSI52): mov.l @(48,r5),r0 mov.l r0,@(48,r4) .global GLOBAL(movstrSI48)GLOBAL(movstrSI48): mov.l @(44,r5),r0 mov.l r0,@(44,r4) .global GLOBAL(movstrSI44)GLOBAL(movstrSI44):
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -