Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/corert.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Bred <bredpetr@gmail.com>2017-06-19 18:09:00 +0300
committerJan Kotas <jkotas@microsoft.com>2017-06-19 18:09:00 +0300
commitcccbccac222c70766962412a2d485a5edd2fbf79 (patch)
treeb355861c2157bcd36e1a4aecb21d093492ae6cb9 /src/Native/Runtime/MathHelpers.cpp
parent2546e4b1072bbc435e84f5dd8a189f96016c708b (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.cpp70
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;