@@ -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