diff --git a/Userland/Libraries/LibJIT/Assembler.h b/Userland/Libraries/LibJIT/Assembler.h index 07a789b006..d462b2b273 100644 --- a/Userland/Libraries/LibJIT/Assembler.h +++ b/Userland/Libraries/LibJIT/Assembler.h @@ -615,14 +615,17 @@ struct Assembler { void add32(Operand dst, Operand src, Optional label) { - if (dst.type == Operand::Type::Reg && to_underlying(dst.reg) < 8 && src.type == Operand::Type::Reg && to_underlying(src.reg) < 8) { + if (dst.is_register_or_memory() && src.type == Operand::Type::Reg) { + emit_rex_for_mr(dst, src, REX_W::No); emit8(0x01); emit_modrm_mr(dst, src); - } else if (dst.type == Operand::Type::Reg && to_underlying(dst.reg) < 8 && src.type == Operand::Type::Imm && src.fits_in_i8()) { + } else if (dst.is_register_or_memory() && src.type == Operand::Type::Imm && src.fits_in_i8()) { + emit_rex_for_slash(dst, REX_W::No); emit8(0x83); emit_modrm_slash(0, dst); emit8(src.offset_or_immediate); - } else if (dst.type == Operand::Type::Reg && to_underlying(dst.reg) < 8 && src.type == Operand::Type::Imm && src.fits_in_i32()) { + } else if (dst.is_register_or_memory() && src.type == Operand::Type::Imm && src.fits_in_i32()) { + emit_rex_for_slash(dst, REX_W::No); emit8(0x81); emit_modrm_slash(0, dst); emit32(src.offset_or_immediate);