diff options
author | J"orn Rennecke <amylaar@cygnus.co.uk> | 1998-10-02 08:22:31 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 1998-10-02 09:22:31 +0100 |
commit | e430f7389f1f2b06537d4d619c337810676296cb (patch) | |
tree | 6ea0e75fb26b0aa87754eb1e618d49d49970029c | |
parent | ca672a5534a13f73b4b69974954e9ad12d6f2a37 (diff) | |
download | gcc-e430f7389f1f2b06537d4d619c337810676296cb.tar.gz |
t-sh (LIB1ASMFUNCS): Add _set_fpscr .
* t-sh (LIB1ASMFUNCS): Add _set_fpscr .
* config/sh/lib1funcs.asm (___set_fpscr): Add.
From-SVN: r22746
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/sh/lib1funcs.asm | 477 | ||||
-rw-r--r-- | gcc/config/sh/t-sh | 2 |
3 files changed, 264 insertions, 220 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ae5e0db2d23..2429346f42f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Fri Oct 2 16:13:12 1998 J"orn Rennecke <amylaar@cygnus.co.uk> + + * t-sh (LIB1ASMFUNCS): Add _set_fpscr . + * config/sh/lib1funcs.asm (___set_fpscr): Add. + Fri Oct 2 02:01:59 1998 Jeffrey A Law (law@cygnus.com) * regclass.c (reg_scan_mark_refs): Return immediately if passed a diff --git a/gcc/config/sh/lib1funcs.asm b/gcc/config/sh/lib1funcs.asm index 6d8d3e8ffb4..5084e9830ef 100644 --- a/gcc/config/sh/lib1funcs.asm +++ b/gcc/config/sh/lib1funcs.asm @@ -1,4 +1,4 @@ -/* Copyright (C) 1994, 1995 Free Software Foundation, Inc. +/* Copyright (C) 1994, 1995, 1997 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 @@ -39,6 +39,16 @@ 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 L_ashiftrt .global ___ashiftrt_r4_0 .global ___ashiftrt_r4_1 @@ -178,123 +188,127 @@ ___ashiftrt_r4_0: .align 2 ___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 @@ -322,136 +336,136 @@ L_ashrsi3_0: .align 2 ___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 @@ -479,136 +493,136 @@ L_ashlsi3_0: .align 2 ___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 @@ -953,3 +967,28 @@ ret: rts mov r4,r0 #endif +#ifdef L_set_fpscr +#if defined (__SH3E__) + .global ___set_fpscr +___set_fpscr: + lds r4,fpscr + mov.l ___set_fpscr_L1,r1 + swap.w r4,r0 + or #24,r0 + xor #16,r0 + swap.w r0,r2 + mov.l r2,@r1 + xor #8,r0 + swap.w r0,r3 + rts + mov.l r3,@(4,r1) + .align 2 +___set_fpscr_L1: + .long ___fpscr_values +#ifdef __ELF__ + .comm ___fpscr_values,8,4 +#else + .comm ___fpscr_values,8 +#endif /* ELF */ +#endif /* SH3E */ +#endif /* L_set_fpscr */ diff --git a/gcc/config/sh/t-sh b/gcc/config/sh/t-sh index 7f925529c4f..c6af7c1839b 100644 --- a/gcc/config/sh/t-sh +++ b/gcc/config/sh/t-sh @@ -1,7 +1,7 @@ CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = sh/lib1funcs.asm LIB1ASMFUNCS = _ashiftrt _ashiftrt_n _ashiftlt _lshiftrt _movstr \ - _mulsi3 _sdivsi3 _udivsi3 + _mulsi3 _sdivsi3 _udivsi3 _set_fpscr # These are really part of libgcc1, but this will cause them to be # built correctly, so... |