Skip to content

Commit 7d9f39f

Browse files
committed
[armv7] add explicit signedness to conversions for scalar forms of VCVT
1 parent 0becd04 commit 7d9f39f

File tree

1 file changed

+23
-3
lines changed

1 file changed

+23
-3
lines changed

arch/armv7/il.cpp

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4938,14 +4938,28 @@ bool GetLowLevelILForArmInstruction(Architecture* arch, uint64_t addr, LowLevelI
49384938
{
49394939
// To integer cases
49404940
case DT_S32:
4941+
switch (instr.dataType2)
4942+
{
4943+
case DT_F32:
4944+
case DT_F64:
4945+
ConditionExecute(il, instr.cond, il.SetRegister(get_register_size(op1.reg), op1.reg,
4946+
il.SignExtend(get_register_size(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;
49414954
case DT_U32:
49424955
switch (instr.dataType2)
49434956
{
49444957
case DT_F32:
49454958
case DT_F64:
49464959
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)))));
4960+
il.ZeroExtend(get_register_size(op1.reg),
4961+
il.FloatToInt(get_register_size(op1.reg), il.RoundToInt(get_register_size(op2.reg),
4962+
il.Register(get_register_size(op2.reg), op2.reg))))));
49494963
break;
49504964
default:
49514965
break;
@@ -4957,10 +4971,16 @@ bool GetLowLevelILForArmInstruction(Architecture* arch, uint64_t addr, LowLevelI
49574971
switch (instr.dataType2)
49584972
{
49594973
case DT_S32:
4974+
ConditionExecute(il, instr.cond, il.SetRegister(get_register_size(op1.reg), op1.reg,
4975+
il.IntToFloat(get_register_size(op1.reg),
4976+
il.SignExtend(get_register_size(op1.reg),
4977+
il.Register(get_register_size(op2.reg), op2.reg)))));
4978+
break;
49604979
case DT_U32:
49614980
ConditionExecute(il, instr.cond, il.SetRegister(get_register_size(op1.reg), op1.reg,
49624981
il.IntToFloat(get_register_size(op1.reg),
4963-
il.Register(get_register_size(op2.reg), op2.reg))));
4982+
il.ZeroExtend(get_register_size(op1.reg),
4983+
il.Register(get_register_size(op2.reg), op2.reg)))));
49644984
break;
49654985
default:
49664986
break;

0 commit comments

Comments
 (0)