| From 940d4113f3306e07a1f86541489b686d1a979d54 Mon Sep 17 00:00:00 2001 |
| From: Yoshinori Sato <ysato@users.sourceforge.jp> |
| Date: Sat, 20 Jun 2015 14:02:19 +0900 |
| Subject: sh: New gcc support |
| |
| From: Yoshinori Sato <ysato@users.sourceforge.jp> |
| |
| commit 940d4113f3306e07a1f86541489b686d1a979d54 upstream. |
| |
| New gcc (4.8 or later) used new shift helper functions. |
| So we need added new helper to private libgcc. |
| |
| Signed-off-by: Yoshinori Sato <ysato@users.sourceforge.jp> |
| Signed-off-by: Rich Felker <dalias@libc.org> |
| Cc: Guenter Roeck <linux@roeck-us.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/sh/kernel/sh_ksyms_32.c | 3 +++ |
| arch/sh/lib/ashlsi3.S | 35 ++++++++++++++++++++++++++--------- |
| arch/sh/lib/ashrsi3.S | 33 ++++++++++++++++++++++++--------- |
| arch/sh/lib/lshrsi3.S | 34 +++++++++++++++++++++++++--------- |
| 4 files changed, 78 insertions(+), 27 deletions(-) |
| |
| --- a/arch/sh/kernel/sh_ksyms_32.c |
| +++ b/arch/sh/kernel/sh_ksyms_32.c |
| @@ -34,6 +34,9 @@ DECLARE_EXPORT(__sdivsi3); |
| DECLARE_EXPORT(__lshrsi3); |
| DECLARE_EXPORT(__ashrsi3); |
| DECLARE_EXPORT(__ashlsi3); |
| +DECLARE_EXPORT(__lshrsi3_r0); |
| +DECLARE_EXPORT(__ashrsi3_r0); |
| +DECLARE_EXPORT(__ashlsi3_r0); |
| DECLARE_EXPORT(__ashiftrt_r4_6); |
| DECLARE_EXPORT(__ashiftrt_r4_7); |
| DECLARE_EXPORT(__ashiftrt_r4_8); |
| --- a/arch/sh/lib/ashlsi3.S |
| +++ b/arch/sh/lib/ashlsi3.S |
| @@ -54,21 +54,38 @@ Boston, MA 02110-1301, USA. */ |
| ! |
| ! (none) |
| ! |
| +! __ashlsi3_r0 |
| +! |
| +! Entry: |
| +! |
| +! r4: Value to shift |
| +! r0: Shifts |
| +! |
| +! Exit: |
| +! |
| +! r0: Result |
| +! |
| +! Destroys: |
| +! |
| +! (none) |
| + |
| + |
| .global __ashlsi3 |
| + .global __ashlsi3_r0 |
| |
| .align 2 |
| __ashlsi3: |
| - mov #31,r0 |
| - and r0,r5 |
| + mov r5,r0 |
| + .align 2 |
| +__ashlsi3_r0: |
| + and #31,r0 |
| + mov.l r4,@-r15 |
| + mov r0,r4 |
| mova ashlsi3_table,r0 |
| - mov.b @(r0,r5),r5 |
| -#ifdef __sh1__ |
| - add r5,r0 |
| + mov.b @(r0,r4),r4 |
| + add r4,r0 |
| jmp @r0 |
| -#else |
| - braf r5 |
| -#endif |
| - mov r4,r0 |
| + mov.l @r15+,r0 |
| |
| .align 2 |
| ashlsi3_table: |
| --- a/arch/sh/lib/ashrsi3.S |
| +++ b/arch/sh/lib/ashrsi3.S |
| @@ -54,22 +54,37 @@ Boston, MA 02110-1301, USA. */ |
| ! |
| ! (none) |
| ! |
| +! __ashrsi3_r0 |
| +! |
| +! Entry: |
| +! |
| +! r4: Value to shift |
| +! r0: Shifts |
| +! |
| +! Exit: |
| +! |
| +! r0: Result |
| +! |
| +! Destroys: |
| +! |
| +! (none) |
| |
| .global __ashrsi3 |
| + .global __ashrsi3_r0 |
| |
| .align 2 |
| __ashrsi3: |
| - mov #31,r0 |
| - and r0,r5 |
| + mov r5,r0 |
| + .align 2 |
| +__ashrsi3_r0: |
| + and #31,r0 |
| + mov.l r4,@-r15 |
| + mov r0,r4 |
| mova ashrsi3_table,r0 |
| - mov.b @(r0,r5),r5 |
| -#ifdef __sh1__ |
| - add r5,r0 |
| + mov.b @(r0,r4),r4 |
| + add r4,r0 |
| jmp @r0 |
| -#else |
| - braf r5 |
| -#endif |
| - mov r4,r0 |
| + mov.l @r15+,r0 |
| |
| .align 2 |
| ashrsi3_table: |
| --- a/arch/sh/lib/lshrsi3.S |
| +++ b/arch/sh/lib/lshrsi3.S |
| @@ -54,21 +54,37 @@ Boston, MA 02110-1301, USA. */ |
| ! |
| ! (none) |
| ! |
| +! __lshrsi3_r0 |
| +! |
| +! Entry: |
| +! |
| +! r0: Value to shift |
| +! r5: Shifts |
| +! |
| +! Exit: |
| +! |
| +! r0: Result |
| +! |
| +! Destroys: |
| +! |
| +! (none) |
| +! |
| .global __lshrsi3 |
| + .global __lshrsi3_r0 |
| |
| .align 2 |
| __lshrsi3: |
| - mov #31,r0 |
| - and r0,r5 |
| + mov r5,r0 |
| + .align 2 |
| +__lshrsi3_r0: |
| + and #31,r0 |
| + mov.l r4,@-r15 |
| + mov r0,r4 |
| mova lshrsi3_table,r0 |
| - mov.b @(r0,r5),r5 |
| -#ifdef __sh1__ |
| - add r5,r0 |
| + mov.b @(r0,r4),r4 |
| + add r4,r0 |
| jmp @r0 |
| -#else |
| - braf r5 |
| -#endif |
| - mov r4,r0 |
| + mov.l @r15+,r0 |
| |
| .align 2 |
| lshrsi3_table: |