]> gcc.gnu.org Git - gcc.git/blobdiff - gcc/config/sh/lib1funcs.asm
Make sure movstr_i4 libfuncs are compiled for -m4-nofpu
[gcc.git] / gcc / config / sh / lib1funcs.asm
index 6d8d3e8ffb41f7aae836aa5d934a9e28a1932cc0..6c2b7e9cad57871af1ebf1081843c6fab399ff63 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1994, 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1994, 95, 97, 98, 1999, 2000 Free Software Foundation, Inc.
 
 This file is free software; you can redistribute it and/or modify it
 under the terms of the GNU General Public License as published by the
@@ -7,11 +7,12 @@ later version.
 
 In addition to the permissions in the GNU General Public License, the
 Free Software Foundation gives you unlimited permission to link the
-compiled version of this file with other programs, and to distribute
-those programs without any restriction coming from the use of this
-file.  (The General Public License restrictions do apply in other
-respects; for example, they cover modification of the file, and
-distribution when not linked into another program.)
+compiled version of this file into combinations with other programs,
+and to distribute those combinations without any restriction coming
+from the use of this file.  (The General Public License restrictions
+do apply in other respects; for example, they cover modification of
+the file, and distribution when not linked into a combine
+executable.)
 
 This file is distributed in the hope that it will be useful, but
 WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -23,14 +24,6 @@ along with this program; see the file COPYING.  If not, write to
 the Free Software Foundation, 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.  */
 
-/* As a special exception, if you link this library with other files,
-   some of which are compiled with GCC, to produce an executable,
-   this library does not by itself cause the resulting executable
-   to be covered by the GNU General Public License.
-   This exception does not however invalidate any other reasons why
-   the executable file might be covered by the GNU General Public License.  */
-
-
 !! libgcc1 routines for the Hitachi SH cpu.
 !! Contributed by Steve Chamberlain.
 !! sac@cygnus.com
@@ -39,118 +32,136 @@ Boston, MA 02111-1307, USA.  */
 !! 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
+
+#ifdef __linux__
+#define GLOBAL(X) __##X
+#endif
+
+#ifndef GLOBAL
+#define GLOBAL(X) ___##X
+#endif
+
 #ifdef L_ashiftrt
-       .global ___ashiftrt_r4_0
-       .global ___ashiftrt_r4_1
-       .global ___ashiftrt_r4_2
-       .global ___ashiftrt_r4_3
-       .global ___ashiftrt_r4_4
-       .global ___ashiftrt_r4_5
-       .global ___ashiftrt_r4_6
-       .global ___ashiftrt_r4_7
-       .global ___ashiftrt_r4_8
-       .global ___ashiftrt_r4_9
-       .global ___ashiftrt_r4_10
-       .global ___ashiftrt_r4_11
-       .global ___ashiftrt_r4_12
-       .global ___ashiftrt_r4_13
-       .global ___ashiftrt_r4_14
-       .global ___ashiftrt_r4_15
-       .global ___ashiftrt_r4_16
-       .global ___ashiftrt_r4_17
-       .global ___ashiftrt_r4_18
-       .global ___ashiftrt_r4_19
-       .global ___ashiftrt_r4_20
-       .global ___ashiftrt_r4_21
-       .global ___ashiftrt_r4_22
-       .global ___ashiftrt_r4_23
-       .global ___ashiftrt_r4_24
-       .global ___ashiftrt_r4_25
-       .global ___ashiftrt_r4_26
-       .global ___ashiftrt_r4_27
-       .global ___ashiftrt_r4_28
-       .global ___ashiftrt_r4_29
-       .global ___ashiftrt_r4_30
-       .global ___ashiftrt_r4_31
-       .global ___ashiftrt_r4_32
+       .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  1
-___ashiftrt_r4_32:
-___ashiftrt_r4_31:
+GLOBAL(ashiftrt_r4_32):
+GLOBAL(ashiftrt_r4_31):
        rotcl   r4
        rts
        subc    r4,r4
 
-___ashiftrt_r4_30:
+GLOBAL(ashiftrt_r4_30):
        shar    r4
-___ashiftrt_r4_29:
+GLOBAL(ashiftrt_r4_29):
        shar    r4
-___ashiftrt_r4_28:
+GLOBAL(ashiftrt_r4_28):
        shar    r4
-___ashiftrt_r4_27:
+GLOBAL(ashiftrt_r4_27):
        shar    r4
-___ashiftrt_r4_26:
+GLOBAL(ashiftrt_r4_26):
        shar    r4
-___ashiftrt_r4_25:
+GLOBAL(ashiftrt_r4_25):
        shar    r4
-___ashiftrt_r4_24:
+GLOBAL(ashiftrt_r4_24):
        shlr16  r4
        shlr8   r4
        rts
        exts.b  r4,r4
 
-___ashiftrt_r4_23:
+GLOBAL(ashiftrt_r4_23):
        shar    r4
-___ashiftrt_r4_22:
+GLOBAL(ashiftrt_r4_22):
        shar    r4
-___ashiftrt_r4_21:
+GLOBAL(ashiftrt_r4_21):
        shar    r4
-___ashiftrt_r4_20:
+GLOBAL(ashiftrt_r4_20):
        shar    r4
-___ashiftrt_r4_19:
+GLOBAL(ashiftrt_r4_19):
        shar    r4
-___ashiftrt_r4_18:
+GLOBAL(ashiftrt_r4_18):
        shar    r4
-___ashiftrt_r4_17:
+GLOBAL(ashiftrt_r4_17):
        shar    r4
-___ashiftrt_r4_16:
+GLOBAL(ashiftrt_r4_16):
        shlr16  r4
        rts
        exts.w  r4,r4
 
-___ashiftrt_r4_15:
+GLOBAL(ashiftrt_r4_15):
        shar    r4
-___ashiftrt_r4_14:
+GLOBAL(ashiftrt_r4_14):
        shar    r4
-___ashiftrt_r4_13:
+GLOBAL(ashiftrt_r4_13):
        shar    r4
-___ashiftrt_r4_12:
+GLOBAL(ashiftrt_r4_12):
        shar    r4
-___ashiftrt_r4_11:
+GLOBAL(ashiftrt_r4_11):
        shar    r4
-___ashiftrt_r4_10:
+GLOBAL(ashiftrt_r4_10):
        shar    r4
-___ashiftrt_r4_9:
+GLOBAL(ashiftrt_r4_9):
        shar    r4
-___ashiftrt_r4_8:
+GLOBAL(ashiftrt_r4_8):
        shar    r4
-___ashiftrt_r4_7:
+GLOBAL(ashiftrt_r4_7):
        shar    r4
-___ashiftrt_r4_6:
+GLOBAL(ashiftrt_r4_6):
        shar    r4
-___ashiftrt_r4_5:
+GLOBAL(ashiftrt_r4_5):
        shar    r4
-___ashiftrt_r4_4:
+GLOBAL(ashiftrt_r4_4):
        shar    r4
-___ashiftrt_r4_3:
+GLOBAL(ashiftrt_r4_3):
        shar    r4
-___ashiftrt_r4_2:
+GLOBAL(ashiftrt_r4_2):
        shar    r4
-___ashiftrt_r4_1:
+GLOBAL(ashiftrt_r4_1):
        rts
        shar    r4
 
-___ashiftrt_r4_0:
+GLOBAL(ashiftrt_r4_0):
        rts
        nop
 #endif
@@ -158,7 +169,7 @@ ___ashiftrt_r4_0:
 #ifdef L_ashiftrt_n
 
 !
-! ___ashrsi3
+! GLOBAL(ashrsi3)
 !
 ! Entry:
 !
@@ -174,127 +185,131 @@ ___ashiftrt_r4_0:
 ! (none)
 !
 
-       .global ___ashrsi3
+       .global GLOBAL(ashrsi3)
        .align  2
-___ashrsi3:
+GLOBAL(ashrsi3):
        mov     #31,r0
-       cmp/hi  r0,r5
-       bt      L_ashrsi3_31
-       mova    L_ashrsi3_table,r0
+       and     r0,r5
+       mova    LOCAL(ashrsi3_table),r0
        mov.b   @(r0,r5),r5
-       add     r5,r0           ! Change to braf when gas is fixed
+#ifdef __sh1__
+       add     r5,r0
        jmp     @r0
+#else
+       braf    r5
+#endif
        mov     r4,r0
 
-L_ashrsi3_table:
-       .byte           L_ashrsi3_0-L_ashrsi3_table
-       .byte           L_ashrsi3_1-L_ashrsi3_table
-       .byte           L_ashrsi3_2-L_ashrsi3_table
-       .byte           L_ashrsi3_3-L_ashrsi3_table
-       .byte           L_ashrsi3_4-L_ashrsi3_table
-       .byte           L_ashrsi3_5-L_ashrsi3_table
-       .byte           L_ashrsi3_6-L_ashrsi3_table
-       .byte           L_ashrsi3_7-L_ashrsi3_table
-       .byte           L_ashrsi3_8-L_ashrsi3_table
-       .byte           L_ashrsi3_9-L_ashrsi3_table
-       .byte           L_ashrsi3_10-L_ashrsi3_table
-       .byte           L_ashrsi3_11-L_ashrsi3_table
-       .byte           L_ashrsi3_12-L_ashrsi3_table
-       .byte           L_ashrsi3_13-L_ashrsi3_table
-       .byte           L_ashrsi3_14-L_ashrsi3_table
-       .byte           L_ashrsi3_15-L_ashrsi3_table
-       .byte           L_ashrsi3_16-L_ashrsi3_table
-       .byte           L_ashrsi3_17-L_ashrsi3_table
-       .byte           L_ashrsi3_18-L_ashrsi3_table
-       .byte           L_ashrsi3_19-L_ashrsi3_table
-       .byte           L_ashrsi3_20-L_ashrsi3_table
-       .byte           L_ashrsi3_21-L_ashrsi3_table
-       .byte           L_ashrsi3_22-L_ashrsi3_table
-       .byte           L_ashrsi3_23-L_ashrsi3_table
-       .byte           L_ashrsi3_24-L_ashrsi3_table
-       .byte           L_ashrsi3_25-L_ashrsi3_table
-       .byte           L_ashrsi3_26-L_ashrsi3_table
-       .byte           L_ashrsi3_27-L_ashrsi3_table
-       .byte           L_ashrsi3_28-L_ashrsi3_table
-       .byte           L_ashrsi3_29-L_ashrsi3_table
-       .byte           L_ashrsi3_30-L_ashrsi3_table
-       .byte           L_ashrsi3_31-L_ashrsi3_table
-
-L_ashrsi3_31:
+       .align  2
+LOCAL(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,r0
 
-L_ashrsi3_30:
+LOCAL(ashrsi3_30):
        shar    r0
-L_ashrsi3_29:
+LOCAL(ashrsi3_29):
        shar    r0
-L_ashrsi3_28:
+LOCAL(ashrsi3_28):
        shar    r0
-L_ashrsi3_27:
+LOCAL(ashrsi3_27):
        shar    r0
-L_ashrsi3_26:
+LOCAL(ashrsi3_26):
        shar    r0
-L_ashrsi3_25:
+LOCAL(ashrsi3_25):
        shar    r0
-L_ashrsi3_24:
+LOCAL(ashrsi3_24):
        shlr16  r0
        shlr8   r0
        rts
        exts.b  r0,r0
 
-L_ashrsi3_23:
+LOCAL(ashrsi3_23):
        shar    r0
-L_ashrsi3_22:
+LOCAL(ashrsi3_22):
        shar    r0
-L_ashrsi3_21:
+LOCAL(ashrsi3_21):
        shar    r0
-L_ashrsi3_20:
+LOCAL(ashrsi3_20):
        shar    r0
-L_ashrsi3_19:
+LOCAL(ashrsi3_19):
        shar    r0
-L_ashrsi3_18:
+LOCAL(ashrsi3_18):
        shar    r0
-L_ashrsi3_17:
+LOCAL(ashrsi3_17):
        shar    r0
-L_ashrsi3_16:
+LOCAL(ashrsi3_16):
        shlr16  r0
        rts
        exts.w  r0,r0
 
-L_ashrsi3_15:
+LOCAL(ashrsi3_15):
        shar    r0
-L_ashrsi3_14:
+LOCAL(ashrsi3_14):
        shar    r0
-L_ashrsi3_13:
+LOCAL(ashrsi3_13):
        shar    r0
-L_ashrsi3_12:
+LOCAL(ashrsi3_12):
        shar    r0
-L_ashrsi3_11:
+LOCAL(ashrsi3_11):
        shar    r0
-L_ashrsi3_10:
+LOCAL(ashrsi3_10):
        shar    r0
-L_ashrsi3_9:
+LOCAL(ashrsi3_9):
        shar    r0
-L_ashrsi3_8:
+LOCAL(ashrsi3_8):
        shar    r0
-L_ashrsi3_7:
+LOCAL(ashrsi3_7):
        shar    r0
-L_ashrsi3_6:
+LOCAL(ashrsi3_6):
        shar    r0
-L_ashrsi3_5:
+LOCAL(ashrsi3_5):
        shar    r0
-L_ashrsi3_4:
+LOCAL(ashrsi3_4):
        shar    r0
-L_ashrsi3_3:
+LOCAL(ashrsi3_3):
        shar    r0
-L_ashrsi3_2:
+LOCAL(ashrsi3_2):
        shar    r0
-L_ashrsi3_1:
+LOCAL(ashrsi3_1):
        rts
        shar    r0
 
-L_ashrsi3_0:
+LOCAL(ashrsi3_0):
        rts
        nop
 
@@ -303,7 +318,7 @@ L_ashrsi3_0:
 #ifdef L_ashiftlt
 
 !
-! ___ashlsi3
+! GLOBAL(ashlsi3)
 !
 ! Entry:
 !
@@ -318,140 +333,140 @@ L_ashrsi3_0:
 !
 ! (none)
 !
-       .global ___ashlsi3
+       .global GLOBAL(ashlsi3)
        .align  2
-___ashlsi3:
+GLOBAL(ashlsi3):
        mov     #31,r0
-       cmp/hi  r0,r5
-       bt      L_ashlsi3_32
-       mova    L_ashlsi3_table,r0
+       and     r0,r5
+       mova    LOCAL(ashlsi3_table),r0
        mov.b   @(r0,r5),r5
-       add     r5,r0           ! Change to braf when gas is fixed
+#ifdef __sh1__
+       add     r5,r0
        jmp     @r0
+#else
+       braf    r5
+#endif
        mov     r4,r0
 
-L_ashlsi3_table:
-       .byte           L_ashlsi3_0-L_ashlsi3_table
-       .byte           L_ashlsi3_1-L_ashlsi3_table
-       .byte           L_ashlsi3_2-L_ashlsi3_table
-       .byte           L_ashlsi3_3-L_ashlsi3_table
-       .byte           L_ashlsi3_4-L_ashlsi3_table
-       .byte           L_ashlsi3_5-L_ashlsi3_table
-       .byte           L_ashlsi3_6-L_ashlsi3_table
-       .byte           L_ashlsi3_7-L_ashlsi3_table
-       .byte           L_ashlsi3_8-L_ashlsi3_table
-       .byte           L_ashlsi3_9-L_ashlsi3_table
-       .byte           L_ashlsi3_10-L_ashlsi3_table
-       .byte           L_ashlsi3_11-L_ashlsi3_table
-       .byte           L_ashlsi3_12-L_ashlsi3_table
-       .byte           L_ashlsi3_13-L_ashlsi3_table
-       .byte           L_ashlsi3_14-L_ashlsi3_table
-       .byte           L_ashlsi3_15-L_ashlsi3_table
-       .byte           L_ashlsi3_16-L_ashlsi3_table
-       .byte           L_ashlsi3_17-L_ashlsi3_table
-       .byte           L_ashlsi3_18-L_ashlsi3_table
-       .byte           L_ashlsi3_19-L_ashlsi3_table
-       .byte           L_ashlsi3_20-L_ashlsi3_table
-       .byte           L_ashlsi3_21-L_ashlsi3_table
-       .byte           L_ashlsi3_22-L_ashlsi3_table
-       .byte           L_ashlsi3_23-L_ashlsi3_table
-       .byte           L_ashlsi3_24-L_ashlsi3_table
-       .byte           L_ashlsi3_25-L_ashlsi3_table
-       .byte           L_ashlsi3_26-L_ashlsi3_table
-       .byte           L_ashlsi3_27-L_ashlsi3_table
-       .byte           L_ashlsi3_28-L_ashlsi3_table
-       .byte           L_ashlsi3_29-L_ashlsi3_table
-       .byte           L_ashlsi3_30-L_ashlsi3_table
-       .byte           L_ashlsi3_31-L_ashlsi3_table
-
-L_ashlsi3_6:
+       .align  2
+LOCAL(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   r0
-L_ashlsi3_4:
+LOCAL(ashlsi3_4):
        shll2   r0
-L_ashlsi3_2:
+LOCAL(ashlsi3_2):
        rts
        shll2   r0
 
-L_ashlsi3_7:
+LOCAL(ashlsi3_7):
        shll2   r0
-L_ashlsi3_5:
+LOCAL(ashlsi3_5):
        shll2   r0
-L_ashlsi3_3:
+LOCAL(ashlsi3_3):
        shll2   r0
-L_ashlsi3_1:
+LOCAL(ashlsi3_1):
        rts
        shll    r0
 
-L_ashlsi3_14:
+LOCAL(ashlsi3_14):
        shll2   r0
-L_ashlsi3_12:
+LOCAL(ashlsi3_12):
        shll2   r0
-L_ashlsi3_10:
+LOCAL(ashlsi3_10):
        shll2   r0
-L_ashlsi3_8:
+LOCAL(ashlsi3_8):
        rts
        shll8   r0
 
-L_ashlsi3_15:
+LOCAL(ashlsi3_15):
        shll2   r0
-L_ashlsi3_13:
+LOCAL(ashlsi3_13):
        shll2   r0
-L_ashlsi3_11:
+LOCAL(ashlsi3_11):
        shll2   r0
-L_ashlsi3_9:
+LOCAL(ashlsi3_9):
        shll8   r0
        rts
        shll    r0
 
-L_ashlsi3_22:
+LOCAL(ashlsi3_22):
        shll2   r0
-L_ashlsi3_20:
+LOCAL(ashlsi3_20):
        shll2   r0
-L_ashlsi3_18:
+LOCAL(ashlsi3_18):
        shll2   r0
-L_ashlsi3_16:
+LOCAL(ashlsi3_16):
        rts
        shll16  r0
 
-L_ashlsi3_23:
+LOCAL(ashlsi3_23):
        shll2   r0
-L_ashlsi3_21:
+LOCAL(ashlsi3_21):
        shll2   r0
-L_ashlsi3_19:
+LOCAL(ashlsi3_19):
        shll2   r0
-L_ashlsi3_17:
+LOCAL(ashlsi3_17):
        shll16  r0
        rts
        shll    r0
 
-L_ashlsi3_30:
+LOCAL(ashlsi3_30):
        shll2   r0
-L_ashlsi3_28:
+LOCAL(ashlsi3_28):
        shll2   r0
-L_ashlsi3_26:
+LOCAL(ashlsi3_26):
        shll2   r0
-L_ashlsi3_24:
+LOCAL(ashlsi3_24):
        shll16  r0
        rts
        shll8   r0
 
-L_ashlsi3_31:
+LOCAL(ashlsi3_31):
        shll2   r0
-L_ashlsi3_29:
+LOCAL(ashlsi3_29):
        shll2   r0
-L_ashlsi3_27:
+LOCAL(ashlsi3_27):
        shll2   r0
-L_ashlsi3_25:
+LOCAL(ashlsi3_25):
        shll16  r0
        shll8   r0
        rts
        shll    r0
 
-L_ashlsi3_32:
-       rts
-       mov     #0,r0
-
-L_ashlsi3_0:
+LOCAL(ashlsi3_0):
        rts
        nop
 
@@ -460,7 +475,7 @@ L_ashlsi3_0:
 #ifdef L_lshiftrt
 
 !
-! ___lshrsi3
+! GLOBAL(lshrsi3)
 !
 ! Entry:
 !
@@ -475,140 +490,140 @@ L_ashlsi3_0:
 !
 ! (none)
 !
-       .global ___lshrsi3
+       .global GLOBAL(lshrsi3)
        .align  2
-___lshrsi3:
+GLOBAL(lshrsi3):
        mov     #31,r0
-       cmp/hi  r0,r5
-       bt      L_lshrsi3_32
-       mova    L_lshrsi3_table,r0
+       and     r0,r5
+       mova    LOCAL(lshrsi3_table),r0
        mov.b   @(r0,r5),r5
-       add     r5,r0           ! Change to braf when gas is fixed
+#ifdef __sh1__
+       add     r5,r0
        jmp     @r0
+#else
+       braf    r5
+#endif
        mov     r4,r0
 
-L_lshrsi3_table:
-       .byte           L_lshrsi3_0-L_lshrsi3_table
-       .byte           L_lshrsi3_1-L_lshrsi3_table
-       .byte           L_lshrsi3_2-L_lshrsi3_table
-       .byte           L_lshrsi3_3-L_lshrsi3_table
-       .byte           L_lshrsi3_4-L_lshrsi3_table
-       .byte           L_lshrsi3_5-L_lshrsi3_table
-       .byte           L_lshrsi3_6-L_lshrsi3_table
-       .byte           L_lshrsi3_7-L_lshrsi3_table
-       .byte           L_lshrsi3_8-L_lshrsi3_table
-       .byte           L_lshrsi3_9-L_lshrsi3_table
-       .byte           L_lshrsi3_10-L_lshrsi3_table
-       .byte           L_lshrsi3_11-L_lshrsi3_table
-       .byte           L_lshrsi3_12-L_lshrsi3_table
-       .byte           L_lshrsi3_13-L_lshrsi3_table
-       .byte           L_lshrsi3_14-L_lshrsi3_table
-       .byte           L_lshrsi3_15-L_lshrsi3_table
-       .byte           L_lshrsi3_16-L_lshrsi3_table
-       .byte           L_lshrsi3_17-L_lshrsi3_table
-       .byte           L_lshrsi3_18-L_lshrsi3_table
-       .byte           L_lshrsi3_19-L_lshrsi3_table
-       .byte           L_lshrsi3_20-L_lshrsi3_table
-       .byte           L_lshrsi3_21-L_lshrsi3_table
-       .byte           L_lshrsi3_22-L_lshrsi3_table
-       .byte           L_lshrsi3_23-L_lshrsi3_table
-       .byte           L_lshrsi3_24-L_lshrsi3_table
-       .byte           L_lshrsi3_25-L_lshrsi3_table
-       .byte           L_lshrsi3_26-L_lshrsi3_table
-       .byte           L_lshrsi3_27-L_lshrsi3_table
-       .byte           L_lshrsi3_28-L_lshrsi3_table
-       .byte           L_lshrsi3_29-L_lshrsi3_table
-       .byte           L_lshrsi3_30-L_lshrsi3_table
-       .byte           L_lshrsi3_31-L_lshrsi3_table
-
-L_lshrsi3_6:
+       .align  2
+LOCAL(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   r0
-L_lshrsi3_4:
+LOCAL(lshrsi3_4):
        shlr2   r0
-L_lshrsi3_2:
+LOCAL(lshrsi3_2):
        rts
        shlr2   r0
 
-L_lshrsi3_7:
+LOCAL(lshrsi3_7):
        shlr2   r0
-L_lshrsi3_5:
+LOCAL(lshrsi3_5):
        shlr2   r0
-L_lshrsi3_3:
+LOCAL(lshrsi3_3):
        shlr2   r0
-L_lshrsi3_1:
+LOCAL(lshrsi3_1):
        rts
        shlr    r0
 
-L_lshrsi3_14:
+LOCAL(lshrsi3_14):
        shlr2   r0
-L_lshrsi3_12:
+LOCAL(lshrsi3_12):
        shlr2   r0
-L_lshrsi3_10:
+LOCAL(lshrsi3_10):
        shlr2   r0
-L_lshrsi3_8:
+LOCAL(lshrsi3_8):
        rts
        shlr8   r0
 
-L_lshrsi3_15:
+LOCAL(lshrsi3_15):
        shlr2   r0
-L_lshrsi3_13:
+LOCAL(lshrsi3_13):
        shlr2   r0
-L_lshrsi3_11:
+LOCAL(lshrsi3_11):
        shlr2   r0
-L_lshrsi3_9:
+LOCAL(lshrsi3_9):
        shlr8   r0
        rts
        shlr    r0
 
-L_lshrsi3_22:
+LOCAL(lshrsi3_22):
        shlr2   r0
-L_lshrsi3_20:
+LOCAL(lshrsi3_20):
        shlr2   r0
-L_lshrsi3_18:
+LOCAL(lshrsi3_18):
        shlr2   r0
-L_lshrsi3_16:
+LOCAL(lshrsi3_16):
        rts
        shlr16  r0
 
-L_lshrsi3_23:
+LOCAL(lshrsi3_23):
        shlr2   r0
-L_lshrsi3_21:
+LOCAL(lshrsi3_21):
        shlr2   r0
-L_lshrsi3_19:
+LOCAL(lshrsi3_19):
        shlr2   r0
-L_lshrsi3_17:
+LOCAL(lshrsi3_17):
        shlr16  r0
        rts
        shlr    r0
 
-L_lshrsi3_30:
+LOCAL(lshrsi3_30):
        shlr2   r0
-L_lshrsi3_28:
+LOCAL(lshrsi3_28):
        shlr2   r0
-L_lshrsi3_26:
+LOCAL(lshrsi3_26):
        shlr2   r0
-L_lshrsi3_24:
+LOCAL(lshrsi3_24):
        shlr16  r0
        rts
        shlr8   r0
 
-L_lshrsi3_31:
+LOCAL(lshrsi3_31):
        shlr2   r0
-L_lshrsi3_29:
+LOCAL(lshrsi3_29):
        shlr2   r0
-L_lshrsi3_27:
+LOCAL(lshrsi3_27):
        shlr2   r0
-L_lshrsi3_25:
+LOCAL(lshrsi3_25):
        shlr16  r0
        shlr8   r0
        rts
        shlr    r0
 
-L_lshrsi3_32:
-       rts
-       mov     #0,r0
-
-L_lshrsi3_0:
+LOCAL(lshrsi3_0):
        rts
        nop
 
@@ -621,84 +636,84 @@ L_lshrsi3_0:
 ! jump to movstr+
 done:
        add     #64,r5
-       mova    ___movstrSI0,r0
+       mova    GLOBAL(movstrSI0),r0
        shll2   r6
        add     r6,r0
        jmp     @r0
        add     #64,r4
        .align  4
-       .global ___movstrSI64
-___movstrSI64:
+       .global GLOBAL(movstrSI64)
+GLOBAL(movstrSI64):
        mov.l   @(60,r5),r0
        mov.l   r0,@(60,r4)
-       .global ___movstrSI60
-___movstrSI60:
+       .global GLOBAL(movstrSI60)
+GLOBAL(movstrSI60):
        mov.l   @(56,r5),r0
        mov.l   r0,@(56,r4)
-       .global ___movstrSI56
-___movstrSI56:
+       .global GLOBAL(movstrSI56)
+GLOBAL(movstrSI56):
        mov.l   @(52,r5),r0
        mov.l   r0,@(52,r4)
-       .global ___movstrSI52
-___movstrSI52:
+       .global GLOBAL(movstrSI52)
+GLOBAL(movstrSI52):
        mov.l   @(48,r5),r0
        mov.l   r0,@(48,r4)
-       .global ___movstrSI48
-___movstrSI48:
+       .global GLOBAL(movstrSI48)
+GLOBAL(movstrSI48):
        mov.l   @(44,r5),r0
        mov.l   r0,@(44,r4)
-       .global ___movstrSI44
-___movstrSI44:
+       .global GLOBAL(movstrSI44)
+GLOBAL(movstrSI44):
        mov.l   @(40,r5),r0
        mov.l   r0,@(40,r4)
-       .global ___movstrSI40
-___movstrSI40:
+       .global GLOBAL(movstrSI40)
+GLOBAL(movstrSI40):
        mov.l   @(36,r5),r0
        mov.l   r0,@(36,r4)
-       .global ___movstrSI36
-___movstrSI36:
+       .global GLOBAL(movstrSI36)
+GLOBAL(movstrSI36):
        mov.l   @(32,r5),r0
        mov.l   r0,@(32,r4)
-       .global ___movstrSI32
-___movstrSI32:
+       .global GLOBAL(movstrSI32)
+GLOBAL(movstrSI32):
        mov.l   @(28,r5),r0
        mov.l   r0,@(28,r4)
-       .global ___movstrSI28
-___movstrSI28:
+       .global GLOBAL(movstrSI28)
+GLOBAL(movstrSI28):
        mov.l   @(24,r5),r0
        mov.l   r0,@(24,r4)
-       .global ___movstrSI24
-___movstrSI24:
+       .global GLOBAL(movstrSI24)
+GLOBAL(movstrSI24):
        mov.l   @(20,r5),r0
        mov.l   r0,@(20,r4)
-       .global ___movstrSI20
-___movstrSI20:
+       .global GLOBAL(movstrSI20)
+GLOBAL(movstrSI20):
        mov.l   @(16,r5),r0
        mov.l   r0,@(16,r4)
-       .global ___movstrSI16
-___movstrSI16:
+       .global GLOBAL(movstrSI16)
+GLOBAL(movstrSI16):
        mov.l   @(12,r5),r0
        mov.l   r0,@(12,r4)
-       .global ___movstrSI12
-___movstrSI12:
+       .global GLOBAL(movstrSI12)
+GLOBAL(movstrSI12):
        mov.l   @(8,r5),r0
        mov.l   r0,@(8,r4)
-       .global ___movstrSI8
-___movstrSI8:
+       .global GLOBAL(movstrSI8)
+GLOBAL(movstrSI8):
        mov.l   @(4,r5),r0
        mov.l   r0,@(4,r4)
-       .global ___movstrSI4
-___movstrSI4:
+       .global GLOBAL(movstrSI4)
+GLOBAL(movstrSI4):
        mov.l   @(0,r5),r0
        mov.l   r0,@(0,r4)
-___movstrSI0:
+GLOBAL(movstrSI0):
        rts
-       or      r0,r0,r0
+       nop
 
        .align  4
 
-       .global ___movstr
-___movstr:
+       .global GLOBAL(movstr)
+GLOBAL(movstr):
        mov.l   @(60,r5),r0
        mov.l   r0,@(60,r4)
 
@@ -752,14 +767,72 @@ ___movstr:
        bf      done
 
        add     #64,r5
-       bra     ___movstr
+       bra     GLOBAL(movstr)
        add     #64,r4
 #endif
 
+#ifdef L_movstr_i4
+#if defined(__SH4__) || defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__) || defined(__SH4_NOFPU__)
+       .text
+       .global GLOBAL(movstr_i4_even)
+       .global GLOBAL(movstr_i4_odd)
+       .global GLOBAL(movstrSI12_i4)
+
+       .p2align        5
+L_movstr_2mod4_end:
+       mov.l   r0,@(16,r4)
+       rts
+       mov.l   r1,@(20,r4)
+
+       .p2align        2
+
+GLOBAL(movstr_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_movstr_loop:
+       mov.l   r3,@(12,r4)
+       dt      r6
+       mov.l   @r5+,r0
+       bt/s    L_movstr_2mod4_end
+       mov.l   @r5+,r1
+       add     #16,r4
+L_movstr_start_even:
+       mov.l   @r5+,r2
+       mov.l   @r5+,r3
+       mov.l   r0,@r4
+       dt      r6
+       mov.l   r1,@(4,r4)
+       bf/s    L_movstr_loop
+       mov.l   r2,@(8,r4)
+       rts
+       mov.l   r3,@(12,r4)
+
+GLOBAL(movstr_i4_even):
+       mov.l   @r5+,r0
+       bra     L_movstr_start_even
+       mov.l   @r5+,r1
+
+       .p2align        4
+GLOBAL(movstrSI12_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)
+#endif /* ! __SH4__ */
+#endif
+
 #ifdef L_mulsi3
 
 
-       .global ___mulsi3
+       .global GLOBAL(mulsi3)
 
 ! r4 =       aabb
 ! r5 =       ccdd
@@ -772,7 +845,7 @@ ___movstr:
 ! aa = bb*dd + (aa*dd*65536) + (cc*bb*65536)
 !
 
-___mulsi3:
+GLOBAL(mulsi3):
        mulu    r4,r5           ! multiply the lsws  macl=bb*dd
        mov     r5,r3           ! r3 = ccdd
        swap.w  r4,r2           ! r2 = bbaa
@@ -783,9 +856,9 @@ ___mulsi3:
        sts     macl,r0
 
 hiset: sts     macl,r0         ! r0 = bb*dd
-       mulu    r2,r5           | brewing macl = aa*dd
+       mulu    r2,r5           ! brewing macl = aa*dd
        sts     macl,r1
-       mulu    r3,r4           | brewing macl = cc*bb
+       mulu    r3,r4           ! brewing macl = cc*bb
        sts     macl,r2
        add     r1,r2
        shll16  r2
@@ -794,9 +867,47 @@ hiset:     sts     macl,r0         ! r0 = bb*dd
 
 
 #endif
-#ifdef L_sdivsi3
+#ifdef L_sdivsi3_i4
        .title "SH DIVIDE"
 !! 4 byte integer Divide code for the Hitachi SH
+#ifdef __SH4__
+!! args in r4 and r5, result in fpul, clobber dr0, dr2
+
+       .global 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
+
+#elif defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__)
+!! args in r4 and r5, result in fpul, clobber r2, dr0, dr2
+
+       .global 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
+
+#endif /* ! __SH4__ */
+#endif
+
+#ifdef L_sdivsi3
+/* __SH4_SINGLE_ONLY__ keeps this part for link compatibility with
+   sh3e code.  */
+#if (! defined(__SH4__) && ! defined (__SH4_SINGLE__)) || defined (__linux__)
 !!
 !! Steve Chamberlain
 !! sac@cygnus.com
@@ -805,8 +916,8 @@ hiset:      sts     macl,r0         ! r0 = bb*dd
 
 !! args in r4 and r5, result in r0 clobber r1,r2,r3
 
-       .global ___sdivsi3
-___sdivsi3:
+       .global GLOBAL(sdivsi3)
+GLOBAL(sdivsi3):
        mov     r4,r1
        mov     r5,r0
 
@@ -890,11 +1001,115 @@ ___sdivsi3:
 div0:  rts
        mov     #0,r0
 
+#endif /* ! __SH4__ */
 #endif
-#ifdef L_udivsi3
+#ifdef L_udivsi3_i4
 
        .title "SH DIVIDE"
 !! 4 byte integer Divide code for the Hitachi SH
+#ifdef __SH4__
+!! args in r4 and r5, result in fpul, clobber r0, r1, r4, r5, dr0, dr2, dr4
+
+       .global GLOBAL(udivsi3_i4)
+GLOBAL(udivsi3_i4):
+       mov #1,r1
+       cmp/hi r1,r5
+       bf trivial
+       rotr r1
+       xor r1,r4
+       lds r4,fpul
+       mova L1,r0
+#ifdef FMOVD_WORKS
+       fmov.d @r0+,dr4
+#else
+#ifdef __LITTLE_ENDIAN__
+       fmov.s @r0+,fr5
+       fmov.s @r0,fr4
+#else
+       fmov.s @r0+,fr4
+       fmov.s @r0,fr5
+#endif
+#endif
+       float fpul,dr0
+       xor r1,r5
+       lds r5,fpul
+       float fpul,dr2
+       fadd dr4,dr0
+       fadd dr4,dr2
+       fdiv dr2,dr0
+       rts
+       ftrc dr0,fpul
+
+trivial:
+       rts
+       lds r4,fpul
+
+       .align 2
+#ifdef FMOVD_WORKS
+       .align 3        ! make double below 8 byte aligned.
+#endif
+L1:
+       .double 2147483648
+
+#elif defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__)
+!! args in r4 and r5, result in fpul, clobber r0, r1, r4, r5, dr0, dr2, dr4
+
+       .global GLOBAL(udivsi3_i4)
+GLOBAL(udivsi3_i4):
+       mov #1,r1
+       cmp/hi r1,r5
+       bf trivial
+       sts.l fpscr,@-r15
+       mova L1,r0
+       lds.l @r0+,fpscr
+       rotr r1
+       xor r1,r4
+       lds r4,fpul
+#ifdef FMOVD_WORKS
+       fmov.d @r0+,dr4
+#else
+#ifdef __LITTLE_ENDIAN__
+       fmov.s @r0+,fr5
+       fmov.s @r0,fr4
+#else
+       fmov.s @r0+,fr4
+       fmov.s @r0,fr5
+#endif
+#endif
+       float fpul,dr0
+       xor r1,r5
+       lds r5,fpul
+       float fpul,dr2
+       fadd dr4,dr0
+       fadd dr4,dr2
+       fdiv dr2,dr0
+       ftrc dr0,fpul
+       rts
+       lds.l @r15+,fpscr
+
+#ifdef FMOVD_WORKS
+       .align 3        ! make double below 8 byte aligned.
+#endif
+trivial:
+       rts
+       lds r4,fpul
+
+       .align 2
+L1:
+#ifndef FMOVD_WORKS
+       .long 0x80000
+#else
+       .long 0x180000
+#endif
+       .double 2147483648
+
+#endif /* ! __SH4__ */
+#endif
+
+#ifdef L_udivsi3
+/* __SH4_SINGLE_ONLY__ keeps this part for link compatibility with
+   sh3e code.  */
+#if (! defined(__SH4__) && ! defined (__SH4_SINGLE__)) || defined (__linux__)
 !!
 !! Steve Chamberlain
 !! sac@cygnus.com
@@ -902,9 +1117,9 @@ div0:      rts
 !!
 
 !! args in r4 and r5, result in r0, clobbers r4, pr, and t bit
-       .global ___udivsi3
+       .global GLOBAL(udivsi3)
 
-___udivsi3:
+GLOBAL(udivsi3):
 longway:
        mov     #0,r0
        div0u
@@ -952,4 +1167,69 @@ vshortway:
 ret:   rts
        mov     r4,r0
 
+#endif /* __SH4__ */
+#endif
+#ifdef L_set_fpscr
+#if defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__)
+       .global GLOBAL(set_fpscr)
+GLOBAL(set_fpscr):
+       lds r4,fpscr
+       mov.l LOCAL(set_fpscr_L1),r1
+       swap.w r4,r0
+       or #24,r0
+#ifndef FMOVD_WORKS
+       xor #16,r0
+#endif
+#if defined(__SH4__)
+       swap.w r0,r3
+       mov.l r3,@(4,r1)
+#else /* defined(__SH3E__) || defined(__SH4_SINGLE*__) */
+       swap.w r0,r2
+       mov.l r2,@r1
 #endif
+#ifndef FMOVD_WORKS
+       xor #8,r0
+#else
+       xor #24,r0
+#endif
+#if defined(__SH4__)
+       swap.w r0,r2
+       rts
+       mov.l r2,@r1
+#else /* defined(__SH3E__) || defined(__SH4_SINGLE*__) */
+       swap.w r0,r3
+       rts
+       mov.l r3,@(4,r1)
+#endif
+       .align 2
+LOCAL(set_fpscr_L1):
+       .long GLOBAL(fpscr_values)
+#ifdef __ELF__
+        .comm   GLOBAL(fpscr_values),8,4
+#else
+        .comm   GLOBAL(fpscr_values),8
+#endif /* ELF */
+#endif /* SH3E / SH4 */
+#endif /* L_set_fpscr */
+#ifdef L_ic_invalidate
+#if defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__)
+       .global GLOBAL(ic_invalidate)
+GLOBAL(ic_invalidate):
+       ocbwb   @r4
+       mova    0f,r0
+       mov.w   1f,r1
+       sub     r0,r4
+       and     r1,r4
+       add     #4,r4
+       braf    r4
+       nop
+1:
+       .short  0x1fe0
+       nop
+0:
+       .rept   2048
+       rts
+       nop
+       .endr
+#endif /* SH4 */
+#endif /* L_ic_invalidate */
This page took 0.067818 seconds and 5 git commands to generate.