mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 866137 - Implement range analysis for LoadTypedArrayElement r=jandem
This commit is contained in:
parent
f64ea7aba4
commit
45afcc26ff
@ -4949,6 +4949,8 @@ class MLoadTypedArrayElement
|
||||
AliasSet getAliasSet() const {
|
||||
return AliasSet::Load(AliasSet::TypedArrayElement);
|
||||
}
|
||||
|
||||
void computeRange();
|
||||
};
|
||||
|
||||
// Load a value from a typed array. Out-of-bounds accesses are handled using
|
||||
|
@ -769,10 +769,38 @@ MToInt32::computeRange()
|
||||
setRange(new Range(input.lower(), input.upper()));
|
||||
}
|
||||
|
||||
static Range *GetTypedArrayRange(int type)
|
||||
{
|
||||
switch (type) {
|
||||
case TypedArray::TYPE_UINT8_CLAMPED:
|
||||
case TypedArray::TYPE_UINT8: return new Range(0, UINT8_MAX);
|
||||
case TypedArray::TYPE_UINT16: return new Range(0, UINT16_MAX);
|
||||
case TypedArray::TYPE_UINT32: return new Range(0, UINT32_MAX);
|
||||
|
||||
case TypedArray::TYPE_INT8: return new Range(INT8_MIN, INT8_MAX);
|
||||
case TypedArray::TYPE_INT16: return new Range(INT16_MIN, INT16_MAX);
|
||||
case TypedArray::TYPE_INT32: return new Range(INT32_MIN, INT32_MAX);
|
||||
|
||||
case TypedArray::TYPE_FLOAT32:
|
||||
case TypedArray::TYPE_FLOAT64:
|
||||
break;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
MLoadTypedArrayElement::computeRange()
|
||||
{
|
||||
if (Range *range = GetTypedArrayRange(arrayType()))
|
||||
setRange(range);
|
||||
}
|
||||
|
||||
void
|
||||
MLoadTypedArrayElementStatic::computeRange()
|
||||
{
|
||||
setRange(new Range(this));
|
||||
if (Range *range = GetTypedArrayRange(TypedArray::type(typedArray_)))
|
||||
setRange(range);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
Loading…
Reference in New Issue
Block a user