From e8c0cea5f9affac2e6192842bb81a5f16fe69c8e Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 13 Nov 2023 13:49:21 +0100 Subject: [PATCH] LibJS/JIT: Use right shift to extract type tags in equality codegen 7% speed-up on Kraken/ai-astar.js, covers up most of the regression from adding more fast paths. :^) --- Userland/Libraries/LibJS/JIT/Compiler.cpp | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/Userland/Libraries/LibJS/JIT/Compiler.cpp b/Userland/Libraries/LibJS/JIT/Compiler.cpp index c5d641a986..105323c391 100644 --- a/Userland/Libraries/LibJS/JIT/Compiler.cpp +++ b/Userland/Libraries/LibJS/JIT/Compiler.cpp @@ -626,27 +626,21 @@ void Compiler::branch_if_same_type_for_equality(Assembler::Reg lhs, Assembler::R Assembler::Label same_type_case {}; Assembler::Label not_same_type_case {}; - // GPR0 = lhs & TAG_EXTRACTION + // GPR0 = lhs >> TAG_SHIFT m_assembler.mov( Assembler::Operand::Register(GPR0), Assembler::Operand::Register(lhs)); - m_assembler.mov( - Assembler::Operand::Register(GPR1), - Assembler::Operand::Imm(TAG_EXTRACTION)); - m_assembler.bitwise_and( + m_assembler.shift_right( Assembler::Operand::Register(GPR0), - Assembler::Operand::Register(GPR1)); + Assembler::Operand::Imm(TAG_SHIFT)); - // GPR1 = rhs & TAG_EXTRACTION + // GPR1 = rhs >> TAG_SHIFT m_assembler.mov( Assembler::Operand::Register(GPR1), Assembler::Operand::Register(rhs)); - m_assembler.mov( - Assembler::Operand::Register(GPR2), - Assembler::Operand::Imm(TAG_EXTRACTION)); - m_assembler.bitwise_and( + m_assembler.shift_right( Assembler::Operand::Register(GPR1), - Assembler::Operand::Register(GPR2)); + Assembler::Operand::Imm(TAG_SHIFT)); // if (GPR0 == GPR1) goto same_type_case m_assembler.jump_if(