mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 925586 - IonMonkey: Simplify MLoadTypedArrayElement and MLoadTypedArrayElementStatic range computation. r=nbp
This commit is contained in:
parent
0190ca693f
commit
7cfff67a82
@ -478,6 +478,10 @@ MacroAssembler::loadFromTypedArray(int arrayType, const T &src, AnyRegister dest
|
||||
convertUInt32ToDouble(temp, dest.fpu());
|
||||
} else {
|
||||
load32(src, dest.gpr());
|
||||
|
||||
// Bail out if the value doesn't fit into a signed int32 value. This
|
||||
// is what allows MLoadTypedArrayElement to have a type() of
|
||||
// MIRType_Int32 for UInt32 array loads.
|
||||
test32(dest.gpr(), dest.gpr());
|
||||
j(Assembler::Signed, fail);
|
||||
}
|
||||
|
@ -1265,18 +1265,19 @@ static Range *GetTypedArrayRange(int type)
|
||||
void
|
||||
MLoadTypedArrayElement::computeRange()
|
||||
{
|
||||
if (Range *range = GetTypedArrayRange(arrayType())) {
|
||||
if (type() == MIRType_Int32 && !range->hasInt32UpperBound())
|
||||
range->extendUInt32ToInt32Min();
|
||||
setRange(range);
|
||||
}
|
||||
// We have an Int32 type and if this is a UInt32 load it may produce a value
|
||||
// outside of our range, but we have a bailout to handle those cases.
|
||||
setRange(GetTypedArrayRange(arrayType()));
|
||||
}
|
||||
|
||||
void
|
||||
MLoadTypedArrayElementStatic::computeRange()
|
||||
{
|
||||
if (Range *range = GetTypedArrayRange(typedArray_->type()))
|
||||
setRange(range);
|
||||
// We don't currently use MLoadTypedArrayElementStatic for uint32, so we
|
||||
// don't have to worry about it returning a value outside our type.
|
||||
JS_ASSERT(typedArray_->type() != ScalarTypeRepresentation::TYPE_UINT32);
|
||||
|
||||
setRange(GetTypedArrayRange(typedArray_->type()));
|
||||
}
|
||||
|
||||
void
|
||||
|
Loading…
Reference in New Issue
Block a user