1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-06-01 10:38:13 +00:00

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. :^)
This commit is contained in:
Andreas Kling 2023-11-13 13:49:21 +01:00
parent ad98834b50
commit e8c0cea5f9

View file

@ -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(