Skip to content

Commit 193450b

Browse files
committed
[armv7] Add lifting for VCVT floating-point scalar variants
1 parent 4088940 commit 193450b

File tree

1 file changed

+19
-6
lines changed

1 file changed

+19
-6
lines changed

arch/armv7/il.cpp

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4936,18 +4936,31 @@ bool GetLowLevelILForArmInstruction(Architecture* arch, uint64_t addr, LowLevelI
49364936
case ARMV7_VCVT:
49374937
switch (instr.dataType)
49384938
{
4939+
// To integer cases
49394940
case DT_S32:
49404941
case DT_U32:
49414942
switch (instr.dataType2)
49424943
{
49434944
case DT_F32:
49444945
case DT_F64:
4945-
// ConditionExecute(il, instr.cond,
4946-
// il.SetRegister(get_register_size(op1.reg), op1.reg,
4947-
// il.FloatToInt(4, il.Register(get_register_size(op2.reg), op2.reg))));
4948-
ConditionExecute(il, instr.cond,
4949-
il.SetRegister(get_register_size(op1.reg), op1.reg,
4950-
il.FloatToInt(get_register_size(op1.reg), il.Register(get_register_size(op2.reg), op2.reg))));
4946+
ConditionExecute(il, instr.cond, il.SetRegister(get_register_size(op1.reg), op1.reg,
4947+
il.FloatToInt(get_register_size(op1.reg), il.RoundToInt(get_register_size(op2.reg),
4948+
il.Register(get_register_size(op2.reg), op2.reg)))));
4949+
break;
4950+
default:
4951+
break;
4952+
}
4953+
break;
4954+
// To float from integer cases
4955+
case DT_F32:
4956+
case DT_F64:
4957+
switch (instr.dataType2)
4958+
{
4959+
case DT_S32:
4960+
case DT_U32:
4961+
ConditionExecute(il, instr.cond, il.SetRegister(get_register_size(op1.reg), op1.reg,
4962+
il.IntToFloat(get_register_size(op1.reg),
4963+
il.Register(get_register_size(op2.reg), op2.reg))));
49514964
break;
49524965
default:
49534966
break;

0 commit comments

Comments
 (0)