1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 11:38:21 +02:00

Float to uint conversion in consteval

This commit is contained in:
Simon Lübeß 2022-05-30 22:26:52 +02:00
parent 75333a0928
commit 3f9c2fd3f7
2 changed files with 74 additions and 0 deletions

View file

@ -176,11 +176,19 @@ static CeOpInfo gOpInfo[] =
{"CeOp_Conv_F32_I16", CEOI_FrameRef16, CEOI_FrameRefF32}, {"CeOp_Conv_F32_I16", CEOI_FrameRef16, CEOI_FrameRefF32},
{"CeOp_Conv_F32_I32", CEOI_FrameRef32, CEOI_FrameRefF32}, {"CeOp_Conv_F32_I32", CEOI_FrameRef32, CEOI_FrameRefF32},
{"CeOp_Conv_F32_I64", CEOI_FrameRef64, CEOI_FrameRefF32}, {"CeOp_Conv_F32_I64", CEOI_FrameRef64, CEOI_FrameRefF32},
{"CeOp_Conv_F32_U8", CEOI_FrameRef8, CEOI_FrameRefF32},
{"CeOp_Conv_F32_U16", CEOI_FrameRef16, CEOI_FrameRefF32},
{"CeOp_Conv_F32_U32", CEOI_FrameRef32, CEOI_FrameRefF32},
{"CeOp_Conv_F32_U64", CEOI_FrameRef64, CEOI_FrameRefF32},
{"CeOp_Conv_F32_F64", CEOI_FrameRefF32, CEOI_FrameRefF32}, {"CeOp_Conv_F32_F64", CEOI_FrameRefF32, CEOI_FrameRefF32},
{"CeOp_Conv_F64_I8", CEOI_FrameRef8, CEOI_FrameRefF64}, {"CeOp_Conv_F64_I8", CEOI_FrameRef8, CEOI_FrameRefF64},
{"CeOp_Conv_F64_I16", CEOI_FrameRef16, CEOI_FrameRefF64}, {"CeOp_Conv_F64_I16", CEOI_FrameRef16, CEOI_FrameRefF64},
{"CeOp_Conv_F64_I32", CEOI_FrameRef32, CEOI_FrameRefF64}, {"CeOp_Conv_F64_I32", CEOI_FrameRef32, CEOI_FrameRefF64},
{"CeOp_Conv_F64_I64", CEOI_FrameRef64, CEOI_FrameRefF64}, {"CeOp_Conv_F64_I64", CEOI_FrameRef64, CEOI_FrameRefF64},
{"CeOp_Conv_F64_U8", CEOI_FrameRef8, CEOI_FrameRefF64},
{"CeOp_Conv_F64_U16", CEOI_FrameRef16, CEOI_FrameRefF64},
{"CeOp_Conv_F64_U32", CEOI_FrameRef32, CEOI_FrameRefF64},
{"CeOp_Conv_F64_U64", CEOI_FrameRef64, CEOI_FrameRefF64},
{"CeOp_Conv_F64_F32", CEOI_FrameRefF32, CEOI_FrameRefF64}, {"CeOp_Conv_F64_F32", CEOI_FrameRefF32, CEOI_FrameRefF64},
CEOPINFO_SIZED_NUMERIC_PLUSF_2("Abs", CEOI_FrameRef, CEOI_FrameRef), CEOPINFO_SIZED_NUMERIC_PLUSF_2("Abs", CEOI_FrameRef, CEOI_FrameRef),
@ -2266,6 +2274,40 @@ void CeBuilder::Build()
break; break;
} }
break; break;
case BeTypeCode_Float:
switch (toTypeCode)
{
case BeTypeCode_Int8:
op = CeOp_Conv_F32_U8;
break;
case BeTypeCode_Int16:
op = CeOp_Conv_F32_U16;
break;
case BeTypeCode_Int32:
op = CeOp_Conv_F32_U32;
break;
case BeTypeCode_Int64:
op = CeOp_Conv_F32_U64;
break;
}
break;
case BeTypeCode_Double:
switch (toTypeCode)
{
case BeTypeCode_Int8:
op = CeOp_Conv_F64_U8;
break;
case BeTypeCode_Int16:
op = CeOp_Conv_F64_U16;
break;
case BeTypeCode_Int32:
op = CeOp_Conv_F64_U32;
break;
case BeTypeCode_Int64:
op = CeOp_Conv_F64_U64;
break;
}
break;
} }
} }
@ -7937,6 +7979,30 @@ bool CeContext::Execute(CeFunction* startFunction, uint8* startStackPtr, uint8*
case CeOp_Conv_F64_F32: case CeOp_Conv_F64_F32:
CE_CAST(double, float); CE_CAST(double, float);
break; break;
case CeOp_Conv_F32_U8:
CE_CAST(float, uint8);
break;
case CeOp_Conv_F32_U16:
CE_CAST(float, uint16);
break;
case CeOp_Conv_F32_U32:
CE_CAST(float, uint32);
break;
case CeOp_Conv_F32_U64:
CE_CAST(float, uint64);
break;
case CeOp_Conv_F64_U8:
CE_CAST(float, uint8);
break;
case CeOp_Conv_F64_U16:
CE_CAST(float, uint16);
break;
case CeOp_Conv_F64_U32:
CE_CAST(float, uint32);
break;
case CeOp_Conv_F64_U64:
CE_CAST(float, uint64);
break;
case CeOp_Abs_I8: case CeOp_Abs_I8:
{ {

View file

@ -149,11 +149,19 @@ enum CeOp : int16
CeOp_Conv_F32_I16, CeOp_Conv_F32_I16,
CeOp_Conv_F32_I32, CeOp_Conv_F32_I32,
CeOp_Conv_F32_I64, CeOp_Conv_F32_I64,
CeOp_Conv_F32_U8,
CeOp_Conv_F32_U16,
CeOp_Conv_F32_U32,
CeOp_Conv_F32_U64,
CeOp_Conv_F32_F64, CeOp_Conv_F32_F64,
CeOp_Conv_F64_I8, CeOp_Conv_F64_I8,
CeOp_Conv_F64_I16, CeOp_Conv_F64_I16,
CeOp_Conv_F64_I32, CeOp_Conv_F64_I32,
CeOp_Conv_F64_I64, CeOp_Conv_F64_I64,
CeOp_Conv_F64_U8,
CeOp_Conv_F64_U16,
CeOp_Conv_F64_U32,
CeOp_Conv_F64_U64,
CeOp_Conv_F64_F32, CeOp_Conv_F64_F32,
CEOP_SIZED_NUMERIC_PLUSF(Abs), CEOP_SIZED_NUMERIC_PLUSF(Abs),