diff options
Diffstat (limited to 'runtime/mppa_k1c')
-rw-r--r-- | runtime/mppa_k1c/i32_divmod.s (renamed from runtime/mppa_k1c/i32_divmod.S) | 0 | ||||
-rw-r--r-- | runtime/mppa_k1c/i64_sdiv.c | 24 | ||||
-rw-r--r-- | runtime/mppa_k1c/i64_udivmod_stsud.s (renamed from runtime/mppa_k1c/i64_udivmod_stsud.S) | 33 | ||||
-rw-r--r-- | runtime/mppa_k1c/vararg.s (renamed from runtime/mppa_k1c/vararg.S) | 6 |
4 files changed, 41 insertions, 22 deletions
diff --git a/runtime/mppa_k1c/i32_divmod.S b/runtime/mppa_k1c/i32_divmod.s index d2b4e8d5..d2b4e8d5 100644 --- a/runtime/mppa_k1c/i32_divmod.S +++ b/runtime/mppa_k1c/i32_divmod.s diff --git a/runtime/mppa_k1c/i64_sdiv.c b/runtime/mppa_k1c/i64_sdiv.c index df308736..b98d9316 100644 --- a/runtime/mppa_k1c/i64_sdiv.c +++ b/runtime/mppa_k1c/i64_sdiv.c @@ -5,31 +5,19 @@ 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 -#define K1_SFR_CS_OV_MASK COS_SFR_CS_OV_MASK -#define K1_SFR_CS_UN_MASK COS_SFR_CS_UN_MASK -#define K1_SFR_CS_IN_MASK COS_SFR_CS_IN_MASK -#define K1_SFR_CS COS_SFR_CS -#else -#include <mppa_bare_runtime/k1c/registers.h> -#endif +#ifdef OUR_OWN_FE_EXCEPT +#include <../../k1-cos/include/hal/cos_registers.h> /* 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; - unsigned long long cs = __builtin_k1_get(K1_SFR_CS); + int mask = (COS_SFR_CS_IO_MASK | COS_SFR_CS_DZ_MASK | COS_SFR_CS_OV_MASK | COS_SFR_CS_UN_MASK | COS_SFR_CS_IN_MASK) & excepts; + unsigned long long cs = __builtin_k1_get(COS_SFR_CS); return cs & mask; } int feclearexcept(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; - __builtin_k1_wfxl(K1_SFR_CS, mask); + int mask = (COS_SFR_CS_IO_MASK | COS_SFR_CS_DZ_MASK | COS_SFR_CS_OV_MASK | COS_SFR_CS_UN_MASK | COS_SFR_CS_IN_MASK) & excepts; + __builtin_k1_wfxl(COS_SFR_CS, mask); return 0; } #endif diff --git a/runtime/mppa_k1c/i64_udivmod_stsud.S b/runtime/mppa_k1c/i64_udivmod_stsud.s index ac84ca47..b1d10326 100644 --- a/runtime/mppa_k1c/i64_udivmod_stsud.S +++ b/runtime/mppa_k1c/i64_udivmod_stsud.s @@ -116,9 +116,40 @@ __compcert_i32_udiv_stsud: zxwd $r1 = $r1 goto __compcert_i64_divmod_stsud ;; + + .globl __compcert_i64_umod_stsud +__compcert_i64_umod_stsud: + make $r2 = 0 + make $r3 = 1 + goto __compcert_i64_divmod_stsud + ;; + + .globl __compcert_i64_udiv_stsud +__compcert_i64_udiv_stsud: + make $r2 = 0 + make $r3 = 0 + goto __compcert_i64_divmod_stsud + ;; + + .globl __compcert_i64_sdiv_stsud +__compcert_i64_sdiv_stsud: + compd.lt $r2 = $r0, 0 + compd.lt $r3 = $r1, 0 + ;; + xord $r2 = $r2, $r3 + make $r3 = 0 + goto __compcert_i64_divmod_stsud + ;; + + .globl __compcert_i64_smod_stsud +__compcert_i64_smod_stsud: + compd.lt $r2 = $r0, 0 + make $r3 = 1 + goto __compcert_i64_divmod_stsud + ;; .globl __compcert_i64_divmod_stsud - __compcert_i64_divmod_stsud: +__compcert_i64_divmod_stsud: make $r5 = 0 compd.ltu $r7 = $r0, $r1 ;; diff --git a/runtime/mppa_k1c/vararg.S b/runtime/mppa_k1c/vararg.s index 9e23e0b3..65c1eab8 100644 --- a/runtime/mppa_k1c/vararg.S +++ b/runtime/mppa_k1c/vararg.s @@ -1,7 +1,7 @@ -// typedef void * va_list; -// unsigned int __compcert_va_int32(va_list * ap); -// unsigned long long __compcert_va_int64(va_list * ap); +# typedef void * va_list; +# unsigned int __compcert_va_int32(va_list * ap); +# unsigned long long __compcert_va_int64(va_list * ap); .text .balign 2 |