▲ | GuB-42 2 days ago | |||||||
"xor ax, ax" is still in use today. The main advantage is that it is shorter, just 2 bytes instead of 3 for the immediate, the difference is bigger in 32 and 64 bit mode as you have to have all these zeroes in the instruction. Shorter usually mean faster, even if the instruction itself isn't faster. | ||||||||
▲ | sparkie 2 days ago | parent | next [-] | |||||||
In long mode, compilers will typically emit `xor eax, eax`, as it only needs 2 bytes: The opcode and modrm byte. `xor ax, ax` takes 3 bytes due to the operand size override prefix (0x66), and `xor rax, rax` takes 3 bytes due to the REX.W prefix. `xor eax, eax` will still clear the full 64-bit register. Shorter basically means you can fit more in instruction cache, which should in theory improve performance marginally. | ||||||||
| ||||||||
▲ | tyfighter 2 days ago | parent | prev | next [-] | |||||||
Modern x86 implementations don't even do the XOR. It just renames the register to "zero". | ||||||||
▲ | burnt-resistor 2 days ago | parent | prev [-] | |||||||
Barely. x86 is fading. Arm doesn't do this in GCC or Clang. > Shorter usually means faster It depends, so spouting generalities doesn't mean anything. Instruction cache line filling vs. cycle reduction vs. reservation station ordering is typically a compiler constraints optimization problem(s). | ||||||||
|