mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 01:37:35 +00:00
LibJS/Bytecode: Add fast paths for many binary expression instructions
By handling common cases like Int32 arithmetic directly in the instruction handler, we can avoid the cost of calling the generic helper functions in Value.cpp.
This commit is contained in:
parent
9d9b737a58
commit
da107ec9fb
2 changed files with 221 additions and 32 deletions
|
@ -51,30 +51,32 @@ private:
|
|||
Operand m_src;
|
||||
};
|
||||
|
||||
#define JS_ENUMERATE_COMMON_BINARY_OPS(O) \
|
||||
O(Add, add) \
|
||||
O(Sub, sub) \
|
||||
O(Mul, mul) \
|
||||
O(Div, div) \
|
||||
O(Exp, exp) \
|
||||
O(Mod, mod) \
|
||||
O(In, in) \
|
||||
O(InstanceOf, instance_of) \
|
||||
O(GreaterThan, greater_than) \
|
||||
O(GreaterThanEquals, greater_than_equals) \
|
||||
O(LessThan, less_than) \
|
||||
O(LessThanEquals, less_than_equals) \
|
||||
O(LooselyInequals, loosely_inequals) \
|
||||
O(LooselyEquals, loosely_equals) \
|
||||
O(StrictlyInequals, strict_inequals) \
|
||||
O(StrictlyEquals, strict_equals) \
|
||||
O(BitwiseAnd, bitwise_and) \
|
||||
O(BitwiseOr, bitwise_or) \
|
||||
O(BitwiseXor, bitwise_xor) \
|
||||
O(LeftShift, left_shift) \
|
||||
O(RightShift, right_shift) \
|
||||
#define JS_ENUMERATE_COMMON_BINARY_OPS_WITH_FAST_PATH(O) \
|
||||
O(Add, add) \
|
||||
O(BitwiseAnd, bitwise_and) \
|
||||
O(BitwiseOr, bitwise_or) \
|
||||
O(BitwiseXor, bitwise_xor) \
|
||||
O(GreaterThan, greater_than) \
|
||||
O(GreaterThanEquals, greater_than_equals) \
|
||||
O(LessThan, less_than) \
|
||||
O(LessThanEquals, less_than_equals) \
|
||||
O(Mul, mul) \
|
||||
O(RightShift, right_shift) \
|
||||
O(Sub, sub) \
|
||||
O(UnsignedRightShift, unsigned_right_shift)
|
||||
|
||||
#define JS_ENUMERATE_COMMON_BINARY_OPS_WITHOUT_FAST_PATH(O) \
|
||||
O(Div, div) \
|
||||
O(Exp, exp) \
|
||||
O(Mod, mod) \
|
||||
O(In, in) \
|
||||
O(InstanceOf, instance_of) \
|
||||
O(LooselyInequals, loosely_inequals) \
|
||||
O(LooselyEquals, loosely_equals) \
|
||||
O(StrictlyInequals, strict_inequals) \
|
||||
O(StrictlyEquals, strict_equals) \
|
||||
O(LeftShift, left_shift)
|
||||
|
||||
#define JS_DECLARE_COMMON_BINARY_OP(OpTitleCase, op_snake_case) \
|
||||
class OpTitleCase final : public Instruction { \
|
||||
public: \
|
||||
|
@ -99,7 +101,8 @@ private:
|
|||
Operand m_rhs; \
|
||||
};
|
||||
|
||||
JS_ENUMERATE_COMMON_BINARY_OPS(JS_DECLARE_COMMON_BINARY_OP)
|
||||
JS_ENUMERATE_COMMON_BINARY_OPS_WITHOUT_FAST_PATH(JS_DECLARE_COMMON_BINARY_OP)
|
||||
JS_ENUMERATE_COMMON_BINARY_OPS_WITH_FAST_PATH(JS_DECLARE_COMMON_BINARY_OP)
|
||||
#undef JS_DECLARE_COMMON_BINARY_OP
|
||||
|
||||
#define JS_ENUMERATE_COMMON_UNARY_OPS(O) \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue