diff options
author | Petr Bred <bredpetr@gmail.com> | 2017-06-19 18:09:00 +0300 |
---|---|---|
committer | Jan Kotas <jkotas@microsoft.com> | 2017-06-19 18:09:00 +0300 |
commit | cccbccac222c70766962412a2d485a5edd2fbf79 (patch) | |
tree | b355861c2157bcd36e1a4aecb21d093492ae6cb9 /src/Native/Runtime/MathHelpers.cpp | |
parent | 2546e4b1072bbc435e84f5dd8a189f96016c708b (diff) |
Add some Jit helpers (#3898)
Signed-off-by: Petr Bred <bredpetr@gmail.com>
Diffstat (limited to 'src/Native/Runtime/MathHelpers.cpp')
-rw-r--r-- | src/Native/Runtime/MathHelpers.cpp | 70 |
1 files changed, 57 insertions, 13 deletions
diff --git a/src/Native/Runtime/MathHelpers.cpp b/src/Native/Runtime/MathHelpers.cpp index 3365e12ba..2e4cfb1b9 100644 --- a/src/Native/Runtime/MathHelpers.cpp +++ b/src/Native/Runtime/MathHelpers.cpp @@ -67,57 +67,91 @@ EXTERN_C REDHAWK_API double REDHAWK_CALLCONV RhpDblRem(double dividend, double d // else... return(fmod(dividend,divisor)); } + +EXTERN_C REDHAWK_API double REDHAWK_CALLCONV RhpDblRound(double value) +{ + return round(value); +} + +EXTERN_C REDHAWK_API float REDHAWK_CALLCONV RhpFltRound(float value) +{ + return roundf(value); +} + #endif // CORERT #ifdef _ARM_ EXTERN_C REDHAWK_API Int32 REDHAWK_CALLCONV RhpIDiv(Int32 i, Int32 j) { + ASSERT(j && "Divide by zero!"); return i / j; } -EXTERN_C REDHAWK_API Int32 REDHAWK_CALLCONV RhpIMod(Int32 i, Int32 j) +EXTERN_C REDHAWK_API UInt32 REDHAWK_CALLCONV RhpUDiv(UInt32 i, UInt32 j) { - return i % j; + ASSERT(j && "Divide by zero!"); + return i / j; } -EXTERN_C REDHAWK_API UInt32 REDHAWK_CALLCONV RhpUDiv(UInt32 i, UInt32 j) +EXTERN_C REDHAWK_API Int64 REDHAWK_CALLCONV RhpLDiv(Int64 i, Int64 j) { + ASSERT(j && "Divide by zero!"); return i / j; } -EXTERN_C REDHAWK_API UInt32 REDHAWK_CALLCONV RhpUMod(UInt32 i, UInt32 j) +EXTERN_C REDHAWK_API UInt64 REDHAWK_CALLCONV RhpULDiv(UInt64 i, UInt64 j) { - return i % j; + ASSERT(j && "Divide by zero!"); + return i / j; } -EXTERN_C REDHAWK_API Int64 REDHAWK_CALLCONV RhpLMul(Int64 i, Int64 j) +EXTERN_C REDHAWK_API Int32 REDHAWK_CALLCONV RhpIMod(Int32 i, Int32 j) { - return i * j; + ASSERT(j && "Divide by zero!"); + return i % j; } -EXTERN_C REDHAWK_API Int64 REDHAWK_CALLCONV RhpLDiv(Int64 i, Int64 j) +EXTERN_C REDHAWK_API UInt32 REDHAWK_CALLCONV RhpUMod(UInt32 i, UInt32 j) { - return i / j; + ASSERT(j && "Divide by zero!"); + return i % j; } EXTERN_C REDHAWK_API Int64 REDHAWK_CALLCONV RhpLMod(Int64 i, Int64 j) { + ASSERT(j && "Divide by zero!"); + return i % j; +} + +EXTERN_C REDHAWK_API UInt64 REDHAWK_CALLCONV RhpULMod(UInt64 i, UInt64 j) +{ + ASSERT(j && "Divide by zero!"); return i % j; } +EXTERN_C REDHAWK_API Int64 REDHAWK_CALLCONV RhpLMul(Int64 i, Int64 j) +{ + return i * j; +} + EXTERN_C REDHAWK_API UInt64 REDHAWK_CALLCONV RhpULMul(UInt64 i, UInt64 j) { return i * j; } -EXTERN_C REDHAWK_API UInt64 REDHAWK_CALLCONV RhpULDiv(UInt64 i, UInt64 j) +EXTERN_C REDHAWK_API UInt64 REDHAWK_CALLCONV RhpLRsz(UInt64 i, Int32 j) { - return i / j; + return i >> j; } -EXTERN_C REDHAWK_API UInt64 REDHAWK_CALLCONV RhpULMod(UInt64 i, UInt64 j) +EXTERN_C REDHAWK_API Int64 REDHAWK_CALLCONV RhpLRsh(Int64 i, Int32 j) { - return i % j; + return i >> j; +} + +EXTERN_C REDHAWK_API Int64 REDHAWK_CALLCONV RhpLLsh(Int64 i, Int32 j) +{ + return i << j; } EXTERN_C REDHAWK_API Int64 REDHAWK_CALLCONV RhpDbl2Lng(double val) @@ -125,6 +159,16 @@ EXTERN_C REDHAWK_API Int64 REDHAWK_CALLCONV RhpDbl2Lng(double val) return (Int64)val; } +EXTERN_C REDHAWK_API Int32 REDHAWK_CALLCONV RhpDbl2Int(double val) +{ + return (Int32)val; +} + +EXTERN_C REDHAWK_API UInt32 REDHAWK_CALLCONV RhpDbl2UInt(double val) +{ + return (UInt32)val; +} + EXTERN_C REDHAWK_API double REDHAWK_CALLCONV RhpLng2Dbl(Int64 val) { return (double)val; |