diff options
author | Phil Edworthy <PHIL.EDWORTHY@renesas.com> | 2011-06-02 22:15:27 +0000 |
---|---|---|
committer | Nobuhiro Iwamatsu <iwamatsu@nigauri.org> | 2011-08-22 13:16:08 +0900 |
commit | eeb84df6e43212a31e96402788ec9b3e39a399a6 (patch) | |
tree | dddfac8b8a475474d02f60e450653d3a1fa53577 /arch/sh/lib/lshrdi3.c | |
parent | 7fbeb6422d9fb32063c8357fcdee99f0088a1a7f (diff) | |
download | u-boot-imx-eeb84df6e43212a31e96402788ec9b3e39a399a6.zip u-boot-imx-eeb84df6e43212a31e96402788ec9b3e39a399a6.tar.gz u-boot-imx-eeb84df6e43212a31e96402788ec9b3e39a399a6.tar.bz2 |
sh: Add support for SH2A freestanding build
SH2A toolchains often only provide an fdpic version of libgcc. This
can't be used with bare-metal software like U-Boot, so this patch
provides the necessary functions extracted from libgcc.
Signed-off-by: Phil Edworthy <phil.edworthy@renesas.com>
Cc: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
Diffstat (limited to 'arch/sh/lib/lshrdi3.c')
-rw-r--r-- | arch/sh/lib/lshrdi3.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/arch/sh/lib/lshrdi3.c b/arch/sh/lib/lshrdi3.c new file mode 100644 index 0000000..bb340ac --- /dev/null +++ b/arch/sh/lib/lshrdi3.c @@ -0,0 +1,25 @@ +#include "libgcc.h" + +long long __lshrdi3(long long u, word_type b) +{ + DWunion uu, w; + word_type bm; + + if (b == 0) + return u; + + uu.ll = u; + bm = 32 - b; + + if (bm <= 0) { + w.s.high = 0; + w.s.low = (unsigned int) uu.s.high >> -bm; + } else { + const unsigned int carries = (unsigned int) uu.s.high << bm; + + w.s.high = (unsigned int) uu.s.high >> b; + w.s.low = ((unsigned int) uu.s.low >> b) | carries; + } + + return w.ll; +} |