mirror of
https://github.com/SerenityOS/serenity
synced 2026-05-05 22:52:10 +02: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:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user