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