Here is a very small source file in D:
void main()
{
}
and here objdump's disassembly of the .o file:
Disassembly of section .text._Dmain:
0000000000000000 <_Dmain>:
void main()
0: 55 push %rbp
1: 48 8b ec mov %rsp,%rbp
4: 31 c0 xor %eax,%eax
{
6: 5d pop %rbp
7: c3 retq
The compiler is DMD64 D Compiler v2.056 running on an x86_64 Linux machine.
What I wonder is why only 32-bit EAX is being cleared rather than the whole 64-bit RAX? I assume this is a return value, required just as in a C program even if not acknowledged in D source.
xor %eax,%eax
DOES clear the entire rax
in x64. Operation on the dword sized registers automatically clear the high dword of the full register.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With