Skip to content
This repository has been archived by the owner on Nov 1, 2020. It is now read-only.

Commit

Permalink
Add some Jit helpers (#3898)
Browse files Browse the repository at this point in the history
Signed-off-by: Petr Bred <bredpetr@gmail.com>
  • Loading branch information
BredPet authored and jkotas committed Jun 19, 2017
1 parent 2546e4b commit cccbcca
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 13 deletions.
45 changes: 45 additions & 0 deletions src/ILCompiler.Compiler/src/Compiler/JitHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,12 @@ public static void GetEntryPoint(TypeSystemContext context, ReadyToRunHelper id,
case ReadyToRunHelper.Dbl2ULng:
mangledName = "RhpDbl2ULng";
break;
case ReadyToRunHelper.Dbl2Int:
mangledName = "RhpDbl2Int";
break;
case ReadyToRunHelper.Dbl2UInt:
mangledName = "RhpDbl2UInt";
break;

case ReadyToRunHelper.Dbl2IntOvf:
methodDesc = context.GetHelperEntryPoint("MathHelpers", "Dbl2IntOvf");
Expand All @@ -145,19 +151,58 @@ public static void GetEntryPoint(TypeSystemContext context, ReadyToRunHelper id,
case ReadyToRunHelper.FltRem:
mangledName = "RhpFltRem";
break;
case ReadyToRunHelper.DblRound:
mangledName = "RhpDblRound";
break;
case ReadyToRunHelper.FltRound:
mangledName = "RhpFltRound";
break;

case ReadyToRunHelper.LMul:
mangledName = "RhpLMul";
break;
case ReadyToRunHelper.LMulOfv:
methodDesc = context.GetHelperEntryPoint("MathHelpers", "LMulOvf");
break;
case ReadyToRunHelper.ULMulOvf:
methodDesc = context.GetHelperEntryPoint("MathHelpers", "ULMulOvf");
break;

case ReadyToRunHelper.Mod:
mangledName = "RhpIMod";
break;
case ReadyToRunHelper.UMod:
mangledName = "RhpUMod";
break;
case ReadyToRunHelper.ULMod:
mangledName = "RhpULMod";
break;
case ReadyToRunHelper.LMod:
mangledName = "RhpLMod";
break;

case ReadyToRunHelper.Div:
mangledName = "RhpIDiv";
break;
case ReadyToRunHelper.UDiv:
mangledName = "RhpUDiv";
break;
case ReadyToRunHelper.ULDiv:
mangledName = "RhpULDiv";
break;
case ReadyToRunHelper.LDiv:
mangledName = "RhpLDiv";
break;

case ReadyToRunHelper.LRsz:
mangledName = "RhpLRsz";
break;
case ReadyToRunHelper.LRsh:
mangledName = "RhpLRsh";
break;
case ReadyToRunHelper.LLsh:
mangledName = "RhpLLsh";
break;

case ReadyToRunHelper.PInvokeBegin:
mangledName = "RhpPInvoke";
Expand Down
70 changes: 57 additions & 13 deletions src/Native/Runtime/MathHelpers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,64 +67,108 @@ 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)
{
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;
Expand Down

0 comments on commit cccbcca

Please sign in to comment.