diff --git a/IDEHelper/Compiler/CeMachine.cpp b/IDEHelper/Compiler/CeMachine.cpp index a34719fd..de3bf0d9 100644 --- a/IDEHelper/Compiler/CeMachine.cpp +++ b/IDEHelper/Compiler/CeMachine.cpp @@ -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), @@ -2266,6 +2274,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; } } @@ -7937,6 +7979,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: { diff --git a/IDEHelper/Compiler/CeMachine.h b/IDEHelper/Compiler/CeMachine.h index c0ab8519..77b2ecbc 100644 --- a/IDEHelper/Compiler/CeMachine.h +++ b/IDEHelper/Compiler/CeMachine.h @@ -149,11 +149,19 @@ enum CeOp : int16 CeOp_Conv_F32_I16, CeOp_Conv_F32_I32, 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_F64_I8, CeOp_Conv_F64_I16, CeOp_Conv_F64_I32, 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_SIZED_NUMERIC_PLUSF(Abs),