mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 21:17:44 +00:00
LibJS/Bytecode: Add fast path for LeftShift with Int32 operands
This commit is contained in:
parent
8e04791480
commit
a5e1e66abc
2 changed files with 16 additions and 2 deletions
|
@ -864,6 +864,20 @@ ThrowCompletionOr<void> RightShift::execute_impl(Bytecode::Interpreter& interpre
|
|||
return {};
|
||||
}
|
||||
|
||||
ThrowCompletionOr<void> LeftShift::execute_impl(Bytecode::Interpreter& interpreter) const
|
||||
{
|
||||
auto& vm = interpreter.vm();
|
||||
auto const lhs = interpreter.get(m_lhs);
|
||||
auto const rhs = interpreter.get(m_rhs);
|
||||
if (lhs.is_int32() && rhs.is_int32() && rhs.as_i32() >= 0) {
|
||||
auto const shift_count = static_cast<u32>(rhs.as_i32()) % 32;
|
||||
interpreter.set(m_dst, Value(lhs.as_i32() << shift_count));
|
||||
return {};
|
||||
}
|
||||
interpreter.set(m_dst, TRY(left_shift(vm, lhs, rhs)));
|
||||
return {};
|
||||
}
|
||||
|
||||
ThrowCompletionOr<void> LessThan::execute_impl(Bytecode::Interpreter& interpreter) const
|
||||
{
|
||||
auto& vm = interpreter.vm();
|
||||
|
|
|
@ -59,6 +59,7 @@ private:
|
|||
O(BitwiseXor, bitwise_xor) \
|
||||
O(GreaterThan, greater_than) \
|
||||
O(GreaterThanEquals, greater_than_equals) \
|
||||
O(LeftShift, left_shift) \
|
||||
O(LessThan, less_than) \
|
||||
O(LessThanEquals, less_than_equals) \
|
||||
O(Mul, mul) \
|
||||
|
@ -75,8 +76,7 @@ private:
|
|||
O(LooselyInequals, loosely_inequals) \
|
||||
O(LooselyEquals, loosely_equals) \
|
||||
O(StrictlyInequals, strict_inequals) \
|
||||
O(StrictlyEquals, strict_equals) \
|
||||
O(LeftShift, left_shift)
|
||||
O(StrictlyEquals, strict_equals)
|
||||
|
||||
#define JS_DECLARE_COMMON_BINARY_OP(OpTitleCase, op_snake_case) \
|
||||
class OpTitleCase final : public Instruction { \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue