aboutsummaryrefslogtreecommitdiffstats
path: root/runtime
diff options
context:
space:
mode:
authorCyril SIX <cyril.six@kalray.eu>2018-06-05 14:56:21 +0200
committerCyril SIX <cyril.six@kalray.eu>2018-06-05 14:56:21 +0200
commitbcbe036e9b43adcaf2faf10cf32456608b0602c5 (patch)
tree280f25b592a7cc2467b71a151ad764a4828deabd /runtime
parent48762e6309dc92ac7788a30c0ca1007715fce4db (diff)
downloadcompcert-kvx-bcbe036e9b43adcaf2faf10cf32456608b0602c5.tar.gz
compcert-kvx-bcbe036e9b43adcaf2faf10cf32456608b0602c5.zip
MPPA - Changed division to include the builtin
Diffstat (limited to 'runtime')
-rw-r--r--runtime/mppa_k1c/i64_udivmod.c25
1 files changed, 2 insertions, 23 deletions
diff --git a/runtime/mppa_k1c/i64_udivmod.c b/runtime/mppa_k1c/i64_udivmod.c
index d94d3f23..20d8c976 100644
--- a/runtime/mppa_k1c/i64_udivmod.c
+++ b/runtime/mppa_k1c/i64_udivmod.c
@@ -26,25 +26,6 @@ udivmoddi4(unsigned long long num, unsigned long long den, int modwanted)
#else
-/* Number of leading zeroes */
-static int i64_nlzd(unsigned x)
-{
- if (x == 0) return 64;
- int n = 0;
- if (x <= 0x00000000FFFFFFFFl) { n += 32; x <<= 32; }
- if (x <= 0x0000FFFFFFFFFFFFl) { n += 16; x <<= 16; }
- if (x <= 0x00FFFFFFFFFFFFFFl) { n += 8; x <<= 8; }
- if (x <= 0x0FFFFFFFFFFFFFFFl) { n += 4; x <<= 4; }
- if (x <= 0x3FFFFFFFFFFFFFFFl) { n += 2; x <<= 2; }
- if (x <= 0x7FFFFFFFFFFFFFFFl) { n += 1; x <<= 1; }
- return n;
-}
-
-static unsigned long long i64_stsud(unsigned rz, unsigned ry)
-{
- return ry >= rz ? ry - rz << 1 | 1 : ry << 1;
-}
-
/* THIS IS THE PREVIOUS VERSION, USED ON BOSTAN AND ANDEY */
unsigned long long
udivmoddi4(unsigned long long num, unsigned long long den, int modwanted)
@@ -52,8 +33,7 @@ udivmoddi4(unsigned long long num, unsigned long long den, int modwanted)
unsigned long long r = num, q = 0;
if(den <= r) {
- //unsigned k = __builtin_clzll (den) - __builtin_clzll (r);
- unsigned k = i64_nlzd(den) - i64_nlzd(r);
+ unsigned k = __builtin_clzll (den) - __builtin_clzll (r);
den = den << k;
if(r >= den) {
r = r - den;
@@ -63,8 +43,7 @@ udivmoddi4(unsigned long long num, unsigned long long den, int modwanted)
unsigned i = k;
den = den >> 1;
do {
- r = i64_stsud(den, r);
- //r = __builtin_k1_stsud (den, r);
+ r = __builtin_k1_stsud (den, r);
i--;
} while (i!= 0);
q = q + r;