1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 20:37:35 +00:00

LibJS/JIT: Add a fast path for floating point comparisons

This commit is contained in:
Stephan Vedder 2023-11-14 16:46:10 +01:00 committed by Andreas Kling
parent 4164af2ca4
commit 32352aa729
3 changed files with 107 additions and 48 deletions

View file

@ -51,11 +51,11 @@ private:
O(In, in) \
O(InstanceOf, instance_of)
# define JS_ENUMERATE_COMPARISON_OPS(O) \
O(LessThan, less_than, SignedLessThan) \
O(LessThanEquals, less_than_equals, SignedLessThanOrEqualTo) \
O(GreaterThan, greater_than, SignedGreaterThan) \
O(GreaterThanEquals, greater_than_equals, SignedGreaterThanOrEqualTo)
# define JS_ENUMERATE_COMPARISON_OPS(O) \
O(LessThan, less_than, SignedLessThan, Below) \
O(LessThanEquals, less_than_equals, SignedLessThanOrEqualTo, BelowOrEqual) \
O(GreaterThan, greater_than, SignedGreaterThan, Above) \
O(GreaterThanEquals, greater_than_equals, SignedGreaterThanOrEqualTo, AboveOrEqual)
# define JS_ENUMERATE_NEW_BUILTIN_ERROR_BYTECODE_OPS(O) \
O(NewTypeError, new_type_error, TypeError)
@ -198,7 +198,9 @@ private:
void jump_if_not_double(Assembler::Reg reg, Assembler::Reg nan, Assembler::Reg temp, Assembler::Label&);
template<typename CodegenI32, typename CodegenDouble, typename CodegenValue>
void branch_if_both_numbers(Assembler::Reg lhs, Assembler::Reg rhs, CodegenI32, CodegenDouble, CodegenValue);
void compile_binary_op_fastpaths(Assembler::Reg lhs, Assembler::Reg rhs, CodegenI32, CodegenDouble, CodegenValue);
template<typename CodegenI32, typename CodegenDouble, typename CodegenValue>
void compiler_comparison_fastpaths(Assembler::Reg lhs, Assembler::Reg rhs, CodegenI32, CodegenDouble, CodegenValue);
explicit Compiler(Bytecode::Executable& bytecode_executable)
: m_bytecode_executable(bytecode_executable)