[fpc-devel] Question about NOP instructions
J. Gareth Moreton
gareth at moreton-family.com
Sun Nov 3 18:10:20 CET 2019
Here's a larger snippet of the code in question - it's a bit too long to
post, but there's a lot of conditional jumps to .Lj1859 earlier on:
.Lj1875:
testl $1024,92(%rbx)
jne .Lj1878
leaq .Ld523(%rip),%rax
movq %rax,-56(%rbp)
movq $11,-64(%rbp)
movq 64(%rbx),%rax
movq %rax,-40(%rbp)
movq $11,-48(%rbp)
leaq .Ld524(%rip),%rax
movq %rax,-24(%rbp)
movq $11,-32(%rbp)
movq 80(%rbx),%rcx
leaq -72(%rbp),%rdx
call CUSTOMCODETOOL$_$TCUSTOMCODETOOL_$__$$_MAINFILENAME$$ANSISTRING
movq -72(%rbp),%rax
movq %rax,-8(%rbp)
movq $11,-16(%rbp)
leaq -64(%rbp),%rcx
movl $3,%edx
call FILEPROCS_$$_DEBUGLN$array_of_const
orl $1024,92(%rbx)
.Lj1878:
movq $0,24(%rbx)
.Lj1859:
nop
.Lj1858:
movq %rbp,%rcx
call
IDENTCOMPLETIONTOOL$_$TIDENTIFIERLISTITEM_$_GETNODE$$TCODETREENODE_$$_fin$00000239
movq %rsi,%rax
movq -88(%rbp),%rbx
movq -80(%rbp),%rsi
leaq (%rbp),%rsp
popq %rbp
ret
.seh_handler __FPC_specific_handler, at unwind
.seh_handlerdata
.long 1
.long 0
.rva .Lj1857
.rva .Lj1858
.rva
IDENTCOMPLETIONTOOL$_$TIDENTIFIERLISTITEM_$_GETNODE$$TCODETREENODE_$$_fin$00000239
The two unwind entries (.rva) are labels that come right after a NOP
instruction, and are the only references to these labels - meanwhile,
the conditional jumps nearer the top go to the labels that appear before
the nop instruction and are otherwise just testing registers and memory
locations with no calls to other routines.
In the meantime, I've got my jump code fully tested for i386-win32 and
x86_64-win64, but am still documenting everything before I post them in
a patch. I'm not sure how it behaves on non-Intel platforms yet, but I
can confirm that it at least compiles.
Gareth aka. Kit
On 03/11/2019 10:44, Florian Klaempfl wrote:
> Am 02.11.2019 um 15:08 schrieb J. Gareth Moreton:
>> Hi everyone,
>>
>> During my optimisation travels, I frequently stumble across lone NOP
>> instructions in the compiled assembly language. Normally I leave these
>> alone, but occasionally I stumble across things like this:
>>
>> ...
>> movq $0,24(%rbx)
>> .Lj1859:
>> nop
>> .Lj1858:
>> movq %rbp,%rcx
>> ...
>>
> Can you please post the complete code? Without it, it's hard to say
>
>> And there are jumps elsewhere that go to one label or the other. Is
>> there any reason why a jump should lead to the NOP, or can they all be
>> redirected to after the NOP instruction?
> Some are the result of exception handling on x86_64-win64, see
> compiler/x86_64/nx64flw.pas
> _______________________________________________
> fpc-devel maillist - fpc-devel at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
>
--
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus
More information about the fpc-devel
mailing list