From 9d35016284db8a632b4f0ec83d8ee70d6755987f Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 17 Oct 2023 18:36:12 +0200 Subject: [PATCH] LibJS/JIT: Add Assembler::jump(Operand) and verify_not_reached() Yet another jump() overload, and also a way to crash if we end up somewhere we shouldn't be while in jitted code. --- Userland/Libraries/LibJS/JIT/Assembler.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Userland/Libraries/LibJS/JIT/Assembler.h b/Userland/Libraries/LibJS/JIT/Assembler.h index fa798414a4..9b9e111388 100644 --- a/Userland/Libraries/LibJS/JIT/Assembler.h +++ b/Userland/Libraries/LibJS/JIT/Assembler.h @@ -204,6 +204,25 @@ struct Assembler { return make_label(); } + void jump(Operand op) + { + if (op.type == Operand::Type::Reg) { + if (to_underlying(op.reg) >= 8) + emit8(0x41); + emit8(0xff); + emit8(0xe0 | encode_reg(op.reg)); + } else { + VERIFY_NOT_REACHED(); + } + } + + void verify_not_reached() + { + // ud2 + emit8(0x0f); + emit8(0x0b); + } + void jump(Bytecode::BasicBlock& target) { // jmp target (RIP-relative 32-bit offset)