mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 19:58:11 +00:00
LibJS: Add fast paths for <, >, <=, and >= with Int32 on both sides
This gives us a ~5% speed-up on Kraken's ai-astar.js
This commit is contained in:
parent
b4c0e27d26
commit
b63d17e2f8
1 changed files with 12 additions and 0 deletions
|
@ -773,6 +773,9 @@ ThrowCompletionOr<FunctionObject*> Value::get_method(GlobalObject& global_object
|
|||
// 13.10 Relational Operators, https://tc39.es/ecma262/#sec-relational-operators
|
||||
ThrowCompletionOr<Value> greater_than(GlobalObject& global_object, Value lhs, Value rhs)
|
||||
{
|
||||
if (lhs.type() == Value::Type::Int32 && rhs.type() == Value::Type::Int32)
|
||||
return lhs.as_i32() > rhs.as_i32();
|
||||
|
||||
TriState relation = TRY(is_less_than(global_object, false, lhs, rhs));
|
||||
if (relation == TriState::Unknown)
|
||||
return Value(false);
|
||||
|
@ -782,6 +785,9 @@ ThrowCompletionOr<Value> greater_than(GlobalObject& global_object, Value lhs, Va
|
|||
// 13.10 Relational Operators, https://tc39.es/ecma262/#sec-relational-operators
|
||||
ThrowCompletionOr<Value> greater_than_equals(GlobalObject& global_object, Value lhs, Value rhs)
|
||||
{
|
||||
if (lhs.type() == Value::Type::Int32 && rhs.type() == Value::Type::Int32)
|
||||
return lhs.as_i32() >= rhs.as_i32();
|
||||
|
||||
TriState relation = TRY(is_less_than(global_object, true, lhs, rhs));
|
||||
if (relation == TriState::Unknown || relation == TriState::True)
|
||||
return Value(false);
|
||||
|
@ -791,6 +797,9 @@ ThrowCompletionOr<Value> greater_than_equals(GlobalObject& global_object, Value
|
|||
// 13.10 Relational Operators, https://tc39.es/ecma262/#sec-relational-operators
|
||||
ThrowCompletionOr<Value> less_than(GlobalObject& global_object, Value lhs, Value rhs)
|
||||
{
|
||||
if (lhs.type() == Value::Type::Int32 && rhs.type() == Value::Type::Int32)
|
||||
return lhs.as_i32() < rhs.as_i32();
|
||||
|
||||
TriState relation = TRY(is_less_than(global_object, true, lhs, rhs));
|
||||
if (relation == TriState::Unknown)
|
||||
return Value(false);
|
||||
|
@ -800,6 +809,9 @@ ThrowCompletionOr<Value> less_than(GlobalObject& global_object, Value lhs, Value
|
|||
// 13.10 Relational Operators, https://tc39.es/ecma262/#sec-relational-operators
|
||||
ThrowCompletionOr<Value> less_than_equals(GlobalObject& global_object, Value lhs, Value rhs)
|
||||
{
|
||||
if (lhs.type() == Value::Type::Int32 && rhs.type() == Value::Type::Int32)
|
||||
return lhs.as_i32() <= rhs.as_i32();
|
||||
|
||||
TriState relation = TRY(is_less_than(global_object, false, lhs, rhs));
|
||||
if (relation == TriState::Unknown || relation == TriState::True)
|
||||
return Value(false);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue