зеркало из https://github.com/mozilla/gecko-dev.git
Bug 962555 part 3 - Remove hasLocation & fromLocation from the SnapshotIterator. r=h4writer
This commit is contained in:
Родитель
65edb82582
Коммит
226cc7f3b7
|
@ -237,8 +237,13 @@ class SnapshotIterator : public SnapshotReader
|
||||||
IonScript *ionScript_;
|
IonScript *ionScript_;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool hasLocation(const Location &loc);
|
// Read a spilled register from the machine state.
|
||||||
uintptr_t fromLocation(const Location &loc);
|
bool hasRegister(const Location &loc);
|
||||||
|
uintptr_t fromRegister(const Location &loc);
|
||||||
|
|
||||||
|
// Read an uintptr_t from the stack.
|
||||||
|
bool hasStack(const Location &loc);
|
||||||
|
uintptr_t fromStack(const Location &loc);
|
||||||
|
|
||||||
Value slotValue(const Slot &slot);
|
Value slotValue(const Slot &slot);
|
||||||
bool slotReadable(const Slot &slot);
|
bool slotReadable(const Slot &slot);
|
||||||
|
|
|
@ -1319,19 +1319,30 @@ SnapshotIterator::SnapshotIterator()
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
SnapshotIterator::hasLocation(const Location &loc)
|
SnapshotIterator::hasRegister(const Location &loc)
|
||||||
{
|
{
|
||||||
return loc.isStackSlot() || machine_.has(loc.reg());
|
return machine_.has(loc.reg());
|
||||||
}
|
}
|
||||||
|
|
||||||
uintptr_t
|
uintptr_t
|
||||||
SnapshotIterator::fromLocation(const Location &loc)
|
SnapshotIterator::fromRegister(const Location &loc)
|
||||||
{
|
{
|
||||||
if (loc.isStackSlot())
|
|
||||||
return ReadFrameSlot(fp_, loc.stackSlot());
|
|
||||||
return machine_.read(loc.reg());
|
return machine_.read(loc.reg());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
SnapshotIterator::hasStack(const Location &loc)
|
||||||
|
{
|
||||||
|
JS_ASSERT(loc.isStackSlot());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
uintptr_t
|
||||||
|
SnapshotIterator::fromStack(const Location &loc)
|
||||||
|
{
|
||||||
|
return ReadFrameSlot(fp_, loc.stackSlot());
|
||||||
|
}
|
||||||
|
|
||||||
static Value
|
static Value
|
||||||
FromObjectPayload(uintptr_t payload)
|
FromObjectPayload(uintptr_t payload)
|
||||||
{
|
{
|
||||||
|
@ -1373,14 +1384,18 @@ SnapshotIterator::slotReadable(const Slot &slot)
|
||||||
|
|
||||||
#if defined(JS_NUNBOX32)
|
#if defined(JS_NUNBOX32)
|
||||||
case Slot::UNTYPED_REG_REG:
|
case Slot::UNTYPED_REG_REG:
|
||||||
|
return hasRegister(slot.type()) && hasRegister(slot.payload());
|
||||||
case Slot::UNTYPED_REG_STACK:
|
case Slot::UNTYPED_REG_STACK:
|
||||||
|
return hasRegister(slot.type()) && hasStack(slot.payload());
|
||||||
case Slot::UNTYPED_STACK_REG:
|
case Slot::UNTYPED_STACK_REG:
|
||||||
|
return hasStack(slot.type()) && hasRegister(slot.payload());
|
||||||
case Slot::UNTYPED_STACK_STACK:
|
case Slot::UNTYPED_STACK_STACK:
|
||||||
return hasLocation(slot.type()) && hasLocation(slot.payload());
|
return hasStack(slot.type()) && hasStack(slot.payload());
|
||||||
#elif defined(JS_PUNBOX64)
|
#elif defined(JS_PUNBOX64)
|
||||||
case Slot::UNTYPED_REG:
|
case Slot::UNTYPED_REG:
|
||||||
|
return hasRegister(slot.value());
|
||||||
case Slot::UNTYPED_STACK:
|
case Slot::UNTYPED_STACK:
|
||||||
return hasLocation(slot.value());
|
return hasStack(slot.value());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -1433,21 +1448,48 @@ SnapshotIterator::slotValue(const Slot &slot)
|
||||||
|
|
||||||
#if defined(JS_NUNBOX32)
|
#if defined(JS_NUNBOX32)
|
||||||
case Slot::UNTYPED_REG_REG:
|
case Slot::UNTYPED_REG_REG:
|
||||||
|
{
|
||||||
|
jsval_layout layout;
|
||||||
|
layout.s.tag = (JSValueTag) fromRegister(slot.type());
|
||||||
|
layout.s.payload.word = fromRegister(slot.payload());
|
||||||
|
return IMPL_TO_JSVAL(layout);
|
||||||
|
}
|
||||||
|
|
||||||
case Slot::UNTYPED_REG_STACK:
|
case Slot::UNTYPED_REG_STACK:
|
||||||
|
{
|
||||||
|
jsval_layout layout;
|
||||||
|
layout.s.tag = (JSValueTag) fromRegister(slot.type());
|
||||||
|
layout.s.payload.word = fromStack(slot.payload());
|
||||||
|
return IMPL_TO_JSVAL(layout);
|
||||||
|
}
|
||||||
|
|
||||||
case Slot::UNTYPED_STACK_REG:
|
case Slot::UNTYPED_STACK_REG:
|
||||||
|
{
|
||||||
|
jsval_layout layout;
|
||||||
|
layout.s.tag = (JSValueTag) fromStack(slot.type());
|
||||||
|
layout.s.payload.word = fromRegister(slot.payload());
|
||||||
|
return IMPL_TO_JSVAL(layout);
|
||||||
|
}
|
||||||
|
|
||||||
case Slot::UNTYPED_STACK_STACK:
|
case Slot::UNTYPED_STACK_STACK:
|
||||||
{
|
{
|
||||||
jsval_layout layout;
|
jsval_layout layout;
|
||||||
layout.s.tag = (JSValueTag)fromLocation(slot.type());
|
layout.s.tag = (JSValueTag) fromStack(slot.type());
|
||||||
layout.s.payload.word = fromLocation(slot.payload());
|
layout.s.payload.word = fromStack(slot.payload());
|
||||||
return IMPL_TO_JSVAL(layout);
|
return IMPL_TO_JSVAL(layout);
|
||||||
}
|
}
|
||||||
#elif defined(JS_PUNBOX64)
|
#elif defined(JS_PUNBOX64)
|
||||||
case Slot::UNTYPED_REG:
|
case Slot::UNTYPED_REG:
|
||||||
|
{
|
||||||
|
jsval_layout layout;
|
||||||
|
layout.asBits = fromRegister(slot.value());
|
||||||
|
return IMPL_TO_JSVAL(layout);
|
||||||
|
}
|
||||||
|
|
||||||
case Slot::UNTYPED_STACK:
|
case Slot::UNTYPED_STACK:
|
||||||
{
|
{
|
||||||
jsval_layout layout;
|
jsval_layout layout;
|
||||||
layout.asBits = fromLocation(slot.value());
|
layout.asBits = fromStack(slot.value());
|
||||||
return IMPL_TO_JSVAL(layout);
|
return IMPL_TO_JSVAL(layout);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Загрузка…
Ссылка в новой задаче