1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-09 03:52:19 +02:00

Merge pull request #1581 from aharabada/master

Float to uint conversion in consteval
This commit is contained in:
Brian Fiete 2022-06-03 06:20:48 -07:00 committed by GitHub
commit d31587188d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
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_I32", CEOI_FrameRef32, 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_F64_I8", CEOI_FrameRef8, CEOI_FrameRefF64},
{"CeOp_Conv_F64_I16", CEOI_FrameRef16, CEOI_FrameRefF64},
{"CeOp_Conv_F64_I32", CEOI_FrameRef32, 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},
CEOPINFO_SIZED_NUMERIC_PLUSF_2("Abs", CEOI_FrameRef, CEOI_FrameRef),
@ -2267,6 +2275,40 @@ void CeBuilder::Build()
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;
}
}
@ -7938,6 +7980,30 @@ bool CeContext::Execute(CeFunction* startFunction, uint8* startStackPtr, uint8*
case CeOp_Conv_F64_F32:
CE_CAST(double, float);
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:
{