diff options
author | Masahiro Yamada <yamada.m@jp.panasonic.com> | 2015-02-10 21:37:01 +0900 |
---|---|---|
committer | Nobuhiro Iwamatsu <iwamatsu@nigauri.org> | 2015-02-25 13:57:29 +0900 |
commit | 5f91a3adb86475aada63da0975637ab203184e0a (patch) | |
tree | 33e1c097b43b0d016b28855a6763b12b0809b154 /arch/sh/lib/udiv_qrnnd.S | |
parent | 72cedad2b89aac188e56ac8bc6a4146786791693 (diff) | |
download | u-boot-imx-5f91a3adb86475aada63da0975637ab203184e0a.zip u-boot-imx-5f91a3adb86475aada63da0975637ab203184e0a.tar.gz u-boot-imx-5f91a3adb86475aada63da0975637ab203184e0a.tar.bz2 |
sh: import missing private libraries from Linux 3.19
SuperH is supposed to support the Private Library feature, but it is
actually not working.
If CONFIG_USE_PRIVATE_LIBGCC is enabled, the build fails for the
undefined references to '__sdivsi3_i4i' and '__udivsi3_i4i'.
To fix this error, import missing libraries from Linux 3.19
and adjust them for U-Boot:
- Remove "#include <linux/module.h>" and "EXPORT_SYMBOL(...)"
- Use SPDX-License-Identifier
- Remove white space
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
Diffstat (limited to 'arch/sh/lib/udiv_qrnnd.S')
-rw-r--r-- | arch/sh/lib/udiv_qrnnd.S | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/arch/sh/lib/udiv_qrnnd.S b/arch/sh/lib/udiv_qrnnd.S new file mode 100644 index 0000000..4557a15 --- /dev/null +++ b/arch/sh/lib/udiv_qrnnd.S @@ -0,0 +1,60 @@ +/* Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, + 2004, 2005, 2006 + Free Software Foundation, Inc. + + * SPDX-License-Identifier: GPL-2.0+ + */ + +!! libgcc routines for the Renesas / 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 */ + + /* r0: rn r1: qn */ /* r0: n1 r4: n0 r5: d r6: d1 */ /* r2: __m */ + /* n1 < d, but n1 might be larger than d1. */ + .global __udiv_qrnnd_16 + .balign 8 +__udiv_qrnnd_16: + div0u + cmp/hi r6,r0 + bt .Lots + .rept 16 + div1 r6,r0 + .endr + extu.w r0,r1 + bt 0f + add r6,r0 +0: rotcl r1 + mulu.w r1,r5 + xtrct r4,r0 + swap.w r0,r0 + sts macl,r2 + cmp/hs r2,r0 + sub r2,r0 + bt 0f + addc r5,r0 + add #-1,r1 + bt 0f +1: add #-1,r1 + rts + add r5,r0 + .balign 8 +.Lots: + sub r5,r0 + swap.w r4,r1 + xtrct r0,r1 + clrt + mov r1,r0 + addc r5,r0 + mov #-1,r1 + bf/s 1b + shlr16 r1 +0: rts + nop |