From d09bc545865509ea4edd3c3e4ac5550405a67e42 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Thu, 26 Oct 2023 15:24:51 +0200 Subject: [PATCH] LibJIT: Encode mov(reg, 0) as xor(reg, reg) This uses less space for the same result. :^) --- Userland/Libraries/LibJIT/Assembler.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Userland/Libraries/LibJIT/Assembler.h b/Userland/Libraries/LibJIT/Assembler.h index b5a376f4df..29f4ceaaf0 100644 --- a/Userland/Libraries/LibJIT/Assembler.h +++ b/Userland/Libraries/LibJIT/Assembler.h @@ -122,6 +122,13 @@ struct Assembler { } if (dst.type == Operand::Type::Reg && src.type == Operand::Type::Imm64) { + if (src.offset_or_immediate == 0) { + // xor dst, dst + emit8(0x48 | ((to_underlying(dst.reg) >= 8) ? 1 << 0 : 0)); + emit8(0x31); + emit8(0xc0 | (encode_reg(dst.reg) << 3) | encode_reg(dst.reg)); + return; + } emit8(0x48 | ((to_underlying(dst.reg) >= 8) ? 1 << 0 : 0)); emit8(0xb8 | encode_reg(dst.reg)); emit64(src.offset_or_immediate);