I’m noticing the X86InstrInfo::GetInstSizeInBytes() function returning incorrect sizes for some instructions. I looked through the llvm-dev archives and noticed that a patch was submitted once in April 2009 for instruction length calculation on amd-64. I’m using Intel Core 2 Duo (64 bit) so maybe there is a similar issue? I don’t have another computer I can test this on to see if that’s it though. If this turns out to be a bug, rather than some misuse/misinterpretation of the function on my part I can resubmit it via that channel.
The instructions I’ve noticed this occurring for are:
MOV32mi, LEA32r, MOV32mr, and MOV32rm
The length of LEA32r is calculated correctly some of the time. Same for MOV32mr and MOV32rm. The length of MOV32mi seems to always be wrong.
An example breakdown of emitted Machine Instructions – the machine instructions are those outputted when I pass the -debug option to lli.exe (formatted by me for readability, left to right):
8d 9c 24 30 0a 00 00 LEA32r calculated length: 7 ok
8d 6c 24 28 LEA32r calculated length: 7 incorrect
8b 86 24 0a 39 00 MOV32rm calculated length: 6 ok
8b 44 24 10 MOV32rm calculated length: 7 incorrect
89 84 24 34 14 00 00 MOV32mr calculated length: 7 ok
89 2c 24 MOV32mr calculated length: 7 incorrect
c7 44 24 08 08 0a 00 00 MOV32mi calculated length: 11 incorrect
c7 04 24 20 00 38 00 MOV32mi calculated length: 11 incorrect
If more information is needed let me know and I’ll send it.
Thank you in advance and best regards,