From 34315c6ac899fc0d3abe90748b409e17a7002cef Mon Sep 17 00:00:00 2001 From: Armin Luntzer <armin.luntzer@univie.ac.at> Date: Wed, 13 Nov 2019 14:46:03 +0100 Subject: [PATCH] SPARC: add __floatdidf() --- arch/sparc/lib/Makefile | 1 + arch/sparc/lib/floatdidf.c | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 arch/sparc/lib/floatdidf.c diff --git a/arch/sparc/lib/Makefile b/arch/sparc/lib/Makefile index bc282f3..f8b76d1 100644 --- a/arch/sparc/lib/Makefile +++ b/arch/sparc/lib/Makefile @@ -10,3 +10,4 @@ lib-$(CONFIG_ARCH_CUSTOM_BOOT_CODE) += divdi3.o lib-$(CONFIG_ARCH_CUSTOM_BOOT_CODE) += moddi3.o lib-$(CONFIG_ARCH_CUSTOM_BOOT_CODE) += udivdi3.o lib-$(CONFIG_ARCH_CUSTOM_BOOT_CODE) += umoddi3.o +lib-$(CONFIG_ARCH_CUSTOM_BOOT_CODE) += floatdidf.o diff --git a/arch/sparc/lib/floatdidf.c b/arch/sparc/lib/floatdidf.c new file mode 100644 index 0000000..e0fd299 --- /dev/null +++ b/arch/sparc/lib/floatdidf.c @@ -0,0 +1,26 @@ + +#define WORD_SIZE (sizeof (unsigned int) * 8) +#define HIGH_HALFWORD_COEFF (((unsigned long long) 1) << (WORD_SIZE / 2)) +#define HIGH_WORD_COEFF (((unsigned long long) 1) << WORD_SIZE) + + +double __floatdidf(long long i) +{ + double d; + int neg = 0; + + if (i < 0) { + i = -i; + neg = 1; + } + + d = (unsigned int) (i >> WORD_SIZE); + d *= HIGH_HALFWORD_COEFF; + d *= HIGH_HALFWORD_COEFF; + d += (unsigned int) (i & (HIGH_WORD_COEFF - 1)); + + if (neg) + d = -d; + + return d; +} -- GitLab