aboutsummaryrefslogtreecommitdiffstats
path: root/runtime
diff options
context:
space:
mode:
authorDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2019-05-29 11:14:46 +0200
committerDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2019-05-29 11:14:46 +0200
commit11cd0ace897752ef7ca33609aa1250ca1597185b (patch)
treef01066819b0ed9f42d6276e9c8880f3f6747cd31 /runtime
parentaa3ff942fb4944242c7a2398592b7e3d33f6c9dc (diff)
downloadcompcert-kvx-11cd0ace897752ef7ca33609aa1250ca1597185b.tar.gz
compcert-kvx-11cd0ace897752ef7ca33609aa1250ca1597185b.zip
arranging for selection of divisor as option
Diffstat (limited to 'runtime')
-rw-r--r--runtime/Makefile5
-rw-r--r--runtime/mppa_k1c/i32_divmod.S26
-rw-r--r--runtime/mppa_k1c/i64_sdiv.c12
-rw-r--r--runtime/mppa_k1c/i64_smod.c5
-rw-r--r--runtime/mppa_k1c/i64_udiv.c6
-rw-r--r--runtime/mppa_k1c/i64_udivmod.c2
-rw-r--r--runtime/mppa_k1c/i64_umod.c6
-rw-r--r--runtime/mppa_k1c/vararg.S125
8 files changed, 45 insertions, 142 deletions
diff --git a/runtime/Makefile b/runtime/Makefile
index 2448279e..6bc3e7ea 100644
--- a/runtime/Makefile
+++ b/runtime/Makefile
@@ -23,8 +23,9 @@ OBJS=i64_dtou.o i64_utod.o i64_utof.o vararg.o
else ifeq ($(ARCH),powerpc64)
OBJS=i64_dtou.o i64_stof.o i64_utod.o i64_utof.o vararg.o
else ifeq ($(ARCH),mppa_k1c)
-OBJS=i64_umod.o i64_udiv.o i64_udivmod.o i64_sdiv.o i64_smod.o i32_divmod.o \
- vararg.o
+OBJS=i64_umod.o i64_udiv.o i64_udivmod.o i64_sdiv.o i64_smod.o \
+ i64_udivmod_stsud.o i32_divmod.o \
+ vararg.o
# Missing: i64_utod.o i64_utof.o i64_stod.o i64_stof.o
DOMAKE:=$(shell (cd mppa_k1c && make))
else
diff --git a/runtime/mppa_k1c/i32_divmod.S b/runtime/mppa_k1c/i32_divmod.S
index d5a4c2ca..8dd9481c 100644
--- a/runtime/mppa_k1c/i32_divmod.S
+++ b/runtime/mppa_k1c/i32_divmod.S
@@ -4,8 +4,8 @@
D. Monniaux, CNRS, VERIMAG */
- .globl __compcert_i32_sdiv
-__compcert_i32_sdiv:
+ .globl __compcert_i32_sdiv_fp
+__compcert_i32_sdiv_fp:
compw.lt $r2 = $r0, 0
compw.lt $r3 = $r1, 0
absw $r0 = $r0
@@ -13,27 +13,27 @@ __compcert_i32_sdiv:
;;
xord $r2 = $r2, $r3
make $r3 = 0
- goto __compcert_i32_divmod
+ goto __compcert_i32_divmod_fp
;;
- .globl __compcert_i32_smod
-__compcert_i32_smod:
+ .globl __compcert_i32_smod_fp
+__compcert_i32_smod_fp:
compw.lt $r2 = $r0, 0
absw $r0 = $r0
absw $r1 = $r1
make $r3 = 1
- goto __compcert_i32_divmod
+ goto __compcert_i32_divmod_fp
;;
- .globl __compcert_i32_umod
-__compcert_i32_umod:
+ .globl __compcert_i32_umod_fp
+__compcert_i32_umod_fp:
make $r2 = 0
make $r3 = 1
- goto __compcert_i32_divmod
+ goto __compcert_i32_divmod_fp
;;
- .globl __compcert_i32_udiv
-__compcert_i32_udiv:
+ .globl __compcert_i32_udiv_fp
+__compcert_i32_udiv_fp:
make $r2 = 0
make $r3 = 0
;;
@@ -45,8 +45,8 @@ r2 : negate result?
r3 : return mod?
*/
- .globl __compcert_i32_divmod
-__compcert_i32_divmod:
+ .globl __compcert_i32_divmod_fp
+__compcert_i32_divmod_fp:
zxwd $r7 = $r1
zxwd $r1 = $r0
#ifndef NO_SHORTCUT
diff --git a/runtime/mppa_k1c/i64_sdiv.c b/runtime/mppa_k1c/i64_sdiv.c
index 9fac8ff9..df308736 100644
--- a/runtime/mppa_k1c/i64_sdiv.c
+++ b/runtime/mppa_k1c/i64_sdiv.c
@@ -1,4 +1,14 @@
+extern long __divdi3 (long a, long b);
+
+int i32_sdiv (int a, int b)
+{
+ return __divdi3 (a, b);
+}
+
+/* #define COMPCERT_FE_EXCEPT */
+#ifdef COMPCERT_FE_EXCEPT
#ifdef __K1C_COS__
+
#include <hal/cos_registers.h>
#define K1_SFR_CS_IO_MASK COS_SFR_CS_IO_MASK
#define K1_SFR_CS_DZ_MASK COS_SFR_CS_DZ_MASK
@@ -10,8 +20,6 @@
#include <mppa_bare_runtime/k1c/registers.h>
#endif
-/* #define COMPCERT_FE_EXCEPT */
-#ifdef COMPCERT_FE_EXCEPT
/* DM FIXME this is for floating point */
int fetestexcept(int excepts) {
int mask = (K1_SFR_CS_IO_MASK | K1_SFR_CS_DZ_MASK | K1_SFR_CS_OV_MASK | K1_SFR_CS_UN_MASK | K1_SFR_CS_IN_MASK) & excepts;
diff --git a/runtime/mppa_k1c/i64_smod.c b/runtime/mppa_k1c/i64_smod.c
index e69de29b..3371eecf 100644
--- a/runtime/mppa_k1c/i64_smod.c
+++ b/runtime/mppa_k1c/i64_smod.c
@@ -0,0 +1,5 @@
+extern long __moddi3 (long a, long b);
+int i32_smod (int a, int b)
+{
+ return __moddi3 (a, b);
+}
diff --git a/runtime/mppa_k1c/i64_udiv.c b/runtime/mppa_k1c/i64_udiv.c
index e69de29b..75f4bbf5 100644
--- a/runtime/mppa_k1c/i64_udiv.c
+++ b/runtime/mppa_k1c/i64_udiv.c
@@ -0,0 +1,6 @@
+extern unsigned long __udivdi3 (unsigned long a, unsigned long b);
+
+unsigned i32_udiv (unsigned a, unsigned b)
+{
+ return __udivdi3 (a, b);
+}
diff --git a/runtime/mppa_k1c/i64_udivmod.c b/runtime/mppa_k1c/i64_udivmod.c
index 74b39874..ca48cd87 100644
--- a/runtime/mppa_k1c/i64_udivmod.c
+++ b/runtime/mppa_k1c/i64_udivmod.c
@@ -1,3 +1,4 @@
+#if 0
/* THIS IS THE PREVIOUS VERSION, USED ON BOSTAN AND ANDEY */
unsigned long long
udivmoddi4(unsigned long long num, unsigned long long den, int modwanted)
@@ -26,3 +27,4 @@ udivmoddi4(unsigned long long num, unsigned long long den, int modwanted)
return modwanted ? r : q;
}
+#endif
diff --git a/runtime/mppa_k1c/i64_umod.c b/runtime/mppa_k1c/i64_umod.c
index e69de29b..59e35960 100644
--- a/runtime/mppa_k1c/i64_umod.c
+++ b/runtime/mppa_k1c/i64_umod.c
@@ -0,0 +1,6 @@
+extern unsigned long __umoddi3 (unsigned long a, unsigned long b);
+
+unsigned i32_umod (unsigned a, unsigned b)
+{
+ return __umoddi3 (a, b);
+}
diff --git a/runtime/mppa_k1c/vararg.S b/runtime/mppa_k1c/vararg.S
index 5804c707..9e23e0b3 100644
--- a/runtime/mppa_k1c/vararg.S
+++ b/runtime/mppa_k1c/vararg.S
@@ -52,128 +52,3 @@ __compcert_acswapw:
sq 0[$r0] = $r2r3
ret
;;
-
- .globl __compcert_i32_sdiv
- .globl __compcert_i32_smod
- .globl __compcert_i32_udiv
- .globl __compcert_i32_umod
-__compcert_i32_sdiv:
- sxwd $r0 = $r0
- sxwd $r1 = $r1
- make $r2 = 0x3ff0000000000000
- ;;
- floatd.rn.s $r0 = $r0, 0
- ;;
- floatd.rn.s $r3 = $r1, 0
- ;;
- floatw.rn.s $r1 = $r1, 0
- ;;
- finvw $r1=$r1
- ;;
- fwidenlwd $r1 = $r1
- ;;
- fmuld $r0 = $r0, $r1
- ;;
- ffmsd $r2 = $r1, $r3
- copyd $r1 = $r0
- ;;
- ffmad $r1 = $r2, $r0
- ;;
- ffmad $r0 = $r2, $r1
- ;;
- fixedd.rz $r0 = $r0, 0
- ret
- ;;
-
-__compcert_i32_smod:
- sxwd $r4 = $r0
- sxwd $r5 = $r1
- make $r2 = 0x3ff0000000000000
- ;;
- copyd $r0 = $r4
- copyd $r1 = $r5
- floatd.rn.s $r4 = $r4, 0
- ;;
- floatd.rn.s $r3 = $r5, 0
- ;;
- floatw.rn.s $r5 = $r5, 0
- ;;
- finvw $r5=$r5
- ;;
- fwidenlwd $r5 = $r5
- ;;
- fmuld $r4 = $r4, $r5
- ;;
- ffmsd $r2 = $r5, $r3
- copyd $r5 = $r4
- ;;
- ffmad $r5 = $r2, $r4
- ;;
- ffmad $r4 = $r2, $r5
- ;;
- fixedd.rz $r4 = $r4, 0
- ;;
- msbfd $r0 = $r1, $r4
- ret
- ;;
-
-__compcert_i32_udiv:
- zxwd $r0 = $r0
- zxwd $r1 = $r1
- make $r2 = 0x3ff0000000000000
- ;;
- floatud.rn.s $r0 = $r0, 0
- ;;
- floatud.rn.s $r3 = $r1, 0
- ;;
- floatuw.rn.s $r1 = $r1, 0
- ;;
- finvw $r1=$r1
- ;;
- fwidenlwd $r1 = $r1
- ;;
- fmuld $r0 = $r0, $r1
- ;;
- ffmsd $r2 = $r1, $r3
- copyd $r1 = $r0
- ;;
- ffmad $r1 = $r2, $r0
- ;;
- ffmad $r0 = $r2, $r1
- ;;
- fixedud.rz $r0 = $r0, 0
- ;;
- ret
- ;;
-
-__compcert_i32_umod:
- zxwd $r4 = $r0
- zxwd $r5 = $r1
- make $r2 = 0x3ff0000000000000
- ;;
- copyd $r0 = $r4
- copyd $r1 = $r5
- floatud.rn.s $r4 = $r4, 0
- ;;
- floatud.rn.s $r3 = $r5, 0
- ;;
- floatuw.rn.s $r5 = $r5, 0
- ;;
- finvw $r5=$r5
- ;;
- fwidenlwd $r5 = $r5
- ;;
- fmuld $r4 = $r4, $r5
- ;;
- ffmsd $r2 = $r5, $r3
- copyd $r5 = $r4
- ;;
- ffmad $r5 = $r2, $r4
- ;;
- ffmad $r4 = $r2, $r5
- ;;
- fixedud.rz $r4 = $r4, 0
- ;;
- msbfd $r0 = $r1, $r4
- ret
- ;;