Bug 379744

Summary: disInstr(arm): unhandled instruction: 0xEEBE2AC6 (vcvt.s32.f32)
Product: [Developer tools] valgrind Reporter: HuanTran <phongvan1phongvan>
Component: memcheckAssignee: Julian Seward <jseward>
Status: RESOLVED NOT A BUG    
Severity: crash CC: ivosh, phongvan1phongvan
Priority: NOR    
Version First Reported In: unspecified   
Target Milestone: ---   
Platform: Other   
OS: Linux   
Latest Commit: Version Fixed/Implemented In:
Sentry Crash Report:

Description HuanTran 2017-05-12 09:29:32 UTC
CPU: Freescale i.MX6Q rev1.5

when application using abs() function on armv7 build with yocto toolchain this crash happen:

disInstr(arm): unhandled instruction: 0xEEBE2AC6
                 cond=14(0xE) 27:20=235(0xEB) 4:4=0 3:0=6(0x6)
==2400== valgrind: Unrecognised instruction at address 0x44da4.
Comment 1 Ivo Raisr 2017-05-12 13:16:30 UTC
Please could you supply the unhandled instruction name?
You can use objdump or gdb, for example.
Comment 2 HuanTran 2017-05-13 05:36:16 UTC
==980== valgrind: Unrecognised instruction at address 0x454ac
(gdb) disas 0x454ac
   0x000454a0 <+324>:   vmul.f64        d16, d17, d16
   0x000454a4 <+328>:   vdiv.f64        d16, d16, d18
   0x000454a8 <+332>:   vcvt.f32.f64    s16, d16
   0x000454ac <+336>:   vcvt.s32.f32    s16, s16, #20   <-- this one
   0x000454b0 <+340>:   vmov    r3, s16
   0x000454b4 <+344>:   vmov    s0, r3
   0x000454b8 <+348>:   vcvt.f64.s32    d0, s0

Actually the code cause problem is:
float rad = ...;
int _rad20 = (int)(rad * (1 << 20));

When i change the code to:
int _rad20 = (int)((int)rad * (1 << 20));

valgrind can work without problem, I guest the problem is multiple float with an int type
Comment 3 HuanTran 2017-05-13 05:49:34 UTC
Seem Release 3.11.0 (22 September 2015) fix this bug
Comment 4 Ivo Raisr 2017-05-13 06:03:02 UTC
Next time please do not report bugs against soooo old releases - ideally try with sources compiled from source repository.