mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-08 08:48:39 +09:00
Merge remote-tracking branch 'origin/tracking' into custom
This commit is contained in:
commit
1977864a3a
131 changed files with 6239 additions and 442 deletions
|
|
@ -935,6 +935,9 @@ MConstant::MConstant(const js::Value& vp, CompilerConstraintList* constraints)
|
|||
case MIRType::Symbol:
|
||||
payload_.sym = vp.toSymbol();
|
||||
break;
|
||||
case MIRType::BigInt:
|
||||
payload_.bi = vp.toBigInt();
|
||||
break;
|
||||
case MIRType::Object:
|
||||
payload_.obj = &vp.toObject();
|
||||
// Create a singleton type set for the object. This isn't necessary for
|
||||
|
|
@ -1014,7 +1017,12 @@ MConstant::assertInitializedPayload() const
|
|||
case MIRType::String:
|
||||
case MIRType::Object:
|
||||
case MIRType::Symbol:
|
||||
case MIRType::BigInt:
|
||||
#if MOZ_LITTLE_ENDIAN
|
||||
MOZ_ASSERT_IF(JS_BITS_PER_WORD == 32, (payload_.asBits >> 32) == 0);
|
||||
#else
|
||||
MOZ_ASSERT_IF(JS_BITS_PER_WORD == 32, (payload_.asBits << 32) == 0);
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
MOZ_ASSERT(IsNullOrUndefined(type()) || IsMagicType(type()));
|
||||
|
|
@ -1103,6 +1111,9 @@ MConstant::printOpcode(GenericPrinter& out) const
|
|||
case MIRType::Symbol:
|
||||
out.printf("symbol at %p", (void*)toSymbol());
|
||||
break;
|
||||
case MIRType::BigInt:
|
||||
out.printf("BigInt at %p", (void*)toBigInt());
|
||||
break;
|
||||
case MIRType::String:
|
||||
out.printf("string %p", (void*)toString());
|
||||
break;
|
||||
|
|
@ -1164,6 +1175,8 @@ MConstant::toJSValue() const
|
|||
return StringValue(toString());
|
||||
case MIRType::Symbol:
|
||||
return SymbolValue(toSymbol());
|
||||
case MIRType::BigInt:
|
||||
return BigIntValue(toBigInt());
|
||||
case MIRType::Object:
|
||||
return ObjectValue(toObject());
|
||||
case MIRType::MagicOptimizedArguments:
|
||||
|
|
@ -1207,6 +1220,9 @@ MConstant::valueToBoolean(bool* res) const
|
|||
case MIRType::Symbol:
|
||||
*res = true;
|
||||
return true;
|
||||
case MIRType::BigInt:
|
||||
*res = !toBigInt()->isZero();
|
||||
return true;
|
||||
case MIRType::String:
|
||||
*res = toString()->length() != 0;
|
||||
return true;
|
||||
|
|
@ -2199,6 +2215,7 @@ MUnbox::printOpcode(GenericPrinter& out) const
|
|||
case MIRType::Boolean: out.printf("to Boolean"); break;
|
||||
case MIRType::String: out.printf("to String"); break;
|
||||
case MIRType::Symbol: out.printf("to Symbol"); break;
|
||||
case MIRType::BigInt: out.printf("to BigInt"); break;
|
||||
case MIRType::Object: out.printf("to Object"); break;
|
||||
default: break;
|
||||
}
|
||||
|
|
@ -2591,6 +2608,7 @@ jit::TypeSetIncludes(TypeSet* types, MIRType input, TypeSet* inputTypes)
|
|||
case MIRType::Float32:
|
||||
case MIRType::String:
|
||||
case MIRType::Symbol:
|
||||
case MIRType::BigInt:
|
||||
case MIRType::MagicOptimizedArguments:
|
||||
return types->hasType(TypeSet::PrimitiveType(ValueTypeFromMIRType(input)));
|
||||
|
||||
|
|
@ -2846,9 +2864,11 @@ void
|
|||
MBinaryBitwiseInstruction::infer(BaselineInspector*, jsbytecode*)
|
||||
{
|
||||
if (getOperand(0)->mightBeType(MIRType::Object) || getOperand(0)->mightBeType(MIRType::Symbol) ||
|
||||
getOperand(1)->mightBeType(MIRType::Object) || getOperand(1)->mightBeType(MIRType::Symbol))
|
||||
getOperand(1)->mightBeType(MIRType::Object) || getOperand(1)->mightBeType(MIRType::Symbol) ||
|
||||
getOperand(1)->mightBeType(MIRType::BigInt))
|
||||
{
|
||||
specialization_ = MIRType::None;
|
||||
setResultType(MIRType::Value);
|
||||
} else {
|
||||
specializeAs(MIRType::Int32);
|
||||
}
|
||||
|
|
@ -2858,9 +2878,10 @@ void
|
|||
MBinaryBitwiseInstruction::specializeAs(MIRType type)
|
||||
{
|
||||
MOZ_ASSERT(type == MIRType::Int32 || type == MIRType::Int64);
|
||||
MOZ_ASSERT(this->type() == type);
|
||||
MOZ_ASSERT(this->type() == MIRType::Value || this->type() == type);
|
||||
|
||||
specialization_ = type;
|
||||
setResultType(type);
|
||||
|
||||
if (isBitOr() || isBitAnd() || isBitXor())
|
||||
setCommutative();
|
||||
|
|
@ -2870,17 +2891,23 @@ void
|
|||
MShiftInstruction::infer(BaselineInspector*, jsbytecode*)
|
||||
{
|
||||
if (getOperand(0)->mightBeType(MIRType::Object) || getOperand(1)->mightBeType(MIRType::Object) ||
|
||||
getOperand(0)->mightBeType(MIRType::Symbol) || getOperand(1)->mightBeType(MIRType::Symbol))
|
||||
getOperand(0)->mightBeType(MIRType::Symbol) || getOperand(1)->mightBeType(MIRType::Symbol) ||
|
||||
getOperand(0)->mightBeType(MIRType::BigInt) || getOperand(1)->mightBeType(MIRType::BigInt))
|
||||
{
|
||||
specialization_ = MIRType::None;
|
||||
else
|
||||
setResultType(MIRType::Value);
|
||||
} else {
|
||||
specialization_ = MIRType::Int32;
|
||||
setResultType(MIRType::Int32);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MUrsh::infer(BaselineInspector* inspector, jsbytecode* pc)
|
||||
{
|
||||
if (getOperand(0)->mightBeType(MIRType::Object) || getOperand(1)->mightBeType(MIRType::Object) ||
|
||||
getOperand(0)->mightBeType(MIRType::Symbol) || getOperand(1)->mightBeType(MIRType::Symbol))
|
||||
getOperand(0)->mightBeType(MIRType::Symbol) || getOperand(1)->mightBeType(MIRType::Symbol) ||
|
||||
getOperand(0)->mightBeType(MIRType::BigInt) || getOperand(1)->mightBeType(MIRType::BigInt))
|
||||
{
|
||||
specialization_ = MIRType::None;
|
||||
setResultType(MIRType::Value);
|
||||
|
|
@ -3828,7 +3855,7 @@ MBitNot::NewInt32(TempAllocator& alloc, MDefinition* input)
|
|||
{
|
||||
MBitNot* ins = new(alloc) MBitNot(input);
|
||||
ins->specialization_ = MIRType::Int32;
|
||||
MOZ_ASSERT(ins->type() == MIRType::Int32);
|
||||
ins->setResultType(MIRType::Int32);
|
||||
return ins;
|
||||
}
|
||||
|
||||
|
|
@ -3874,6 +3901,9 @@ MTypeOf::foldsTo(TempAllocator& alloc)
|
|||
case MIRType::Symbol:
|
||||
type = JSTYPE_SYMBOL;
|
||||
break;
|
||||
case MIRType::BigInt:
|
||||
type = JSTYPE_BIGINT;
|
||||
break;
|
||||
case MIRType::Null:
|
||||
type = JSTYPE_OBJECT;
|
||||
break;
|
||||
|
|
@ -4453,6 +4483,12 @@ MCompare::tryFoldTypeOf(bool* result)
|
|||
*result = (jsop() == JSOP_STRICTNE || jsop() == JSOP_NE);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (constant->toString() == TypeName(JSTYPE_BIGINT, names)) {
|
||||
if (!typeOf->input()->mightBeType(MIRType::BigInt)) {
|
||||
*result = (jsop() == JSOP_STRICTNE || jsop() == JSOP_NE);
|
||||
return true;
|
||||
}
|
||||
} else if (constant->toString() == TypeName(JSTYPE_OBJECT, names)) {
|
||||
if (!typeOf->input()->mightBeType(MIRType::Object) &&
|
||||
!typeOf->input()->mightBeType(MIRType::Null))
|
||||
|
|
@ -5606,6 +5642,8 @@ MConstant::appendRoots(MRootList& roots) const
|
|||
return roots.append(toString());
|
||||
case MIRType::Symbol:
|
||||
return roots.append(toSymbol());
|
||||
case MIRType::BigInt:
|
||||
return roots.append(toBigInt());
|
||||
case MIRType::Object:
|
||||
return roots.append(&toObject());
|
||||
case MIRType::Undefined:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue