author | Jan de Mooij <jdemooij@mozilla.com> |
Wed, 23 Apr 2014 11:56:21 +0200 | |
changeset 179751 | 90c23195ebb3c965b570fd736f058bb025f72d7e |
parent 179750 | 8d27ef04d88df0f289576441e2b8fdb759bffe13 |
child 179752 | 16d11bb0d2fc122aa81960f740ced37d90364411 |
push id | 26639 |
push user | ryanvm@gmail.com |
push date | Wed, 23 Apr 2014 20:42:51 +0000 |
treeherder | mozilla-central@ed0236a51ed3 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | shu |
bugs | 999559 |
milestone | 31.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/js/src/jit/Bailouts.cpp +++ b/js/src/jit/Bailouts.cpp @@ -10,34 +10,34 @@ #include "jit/BaselineJIT.h" #include "jit/Ion.h" #include "jit/IonSpewer.h" #include "jit/JitCompartment.h" #include "jit/Snapshots.h" #include "vm/TraceLogging.h" -#include "jit/IonFrameIterator-inl.h" +#include "jit/JitFrameIterator-inl.h" #include "vm/Stack-inl.h" using namespace js; using namespace js::jit; // These constructor are exactly the same except for the type of the iterator // which is given to the SnapshotIterator constructor. Doing so avoid the // creation of virtual functions for the IonIterator but may introduce some -// weirdness as IonInlineIterator is using an IonFrameIterator reference. +// weirdness as IonInlineIterator is using a JitFrameIterator reference. // // If a function relies on ionScript() or to use OsiIndex(), due to the -// lack of virtual, these functions will use the IonFrameIterator reference +// lack of virtual, these functions will use the JitFrameIterator reference // contained in the InlineFrameIterator and thus are not able to recover // correctly the data stored in IonBailoutIterator. // // Currently, such cases should not happen because our only use case of the -// IonFrameIterator within InlineFrameIterator is to read the frame content, or +// JitFrameIterator within InlineFrameIterator is to read the frame content, or // to clone it to find the parent scripted frame. Both use cases are fine and // should not cause any issue since the only potential issue is to read the // bailed out frame. SnapshotIterator::SnapshotIterator(const IonBailoutIterator &iter) : snapshot_(iter.ionScript()->snapshots(), iter.snapshotOffset(), iter.ionScript()->snapshotsRVATableSize(), @@ -58,17 +58,17 @@ IonBailoutIterator::dump() const InlineFrameIterator frames(GetJSContextFromJitCode(), this); for (;;) { frames.dump(); if (!frames.more()) break; ++frames; } } else { - IonFrameIterator::dump(); + JitFrameIterator::dump(); } } uint32_t jit::Bailout(BailoutStack *sp, BaselineBailoutInfo **bailoutInfo) { JSContext *cx = GetJSContextFromJitCode(); JS_ASSERT(bailoutInfo); @@ -146,18 +146,18 @@ jit::InvalidationBailout(InvalidationBai } iter.ionScript()->decref(cx->runtime()->defaultFreeOp()); return retval; } IonBailoutIterator::IonBailoutIterator(const JitActivationIterator &activations, - const IonFrameIterator &frame) - : IonFrameIterator(activations), + const JitFrameIterator &frame) + : JitFrameIterator(activations), machine_(frame.machineState()) { returnAddressToFp_ = frame.returnAddressToFp(); topIonScript_ = frame.ionScript(); const OsiIndex *osiIndex = frame.osiIndex(); current_ = (uint8_t *) frame.fp(); type_ = JitFrame_IonJS;
--- a/js/src/jit/Bailouts.h +++ b/js/src/jit/Bailouts.h @@ -4,18 +4,18 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef jit_Bailouts_h #define jit_Bailouts_h #include "jstypes.h" -#include "jit/IonFrameIterator.h" #include "jit/IonFrames.h" +#include "jit/JitFrameIterator.h" #include "vm/Stack.h" namespace js { namespace jit { // A "bailout" is a condition in which we need to recover an interpreter frame // from an IonFrame. Bailouts can happen for the following reasons: // (1) A deoptimization guard, for example, an add overflows or a type check @@ -106,44 +106,44 @@ class JitCompartment; // bailout handler. class BailoutStack; class InvalidationBailoutStack; // Must be implemented by each architecture. // This iterator is constructed at a time where there is no exit frame at the // moment. They must be initialized to the first JS frame instead of the exit -// frame as usually done with IonFrameIterator. -class IonBailoutIterator : public IonFrameIterator +// frame as usually done with JitFrameIterator. +class IonBailoutIterator : public JitFrameIterator { MachineState machine_; uint32_t snapshotOffset_; size_t topFrameSize_; IonScript *topIonScript_; public: IonBailoutIterator(const JitActivationIterator &activations, BailoutStack *sp); IonBailoutIterator(const JitActivationIterator &activations, InvalidationBailoutStack *sp); - IonBailoutIterator(const JitActivationIterator &activations, const IonFrameIterator &frame); + IonBailoutIterator(const JitActivationIterator &activations, const JitFrameIterator &frame); SnapshotOffset snapshotOffset() const { JS_ASSERT(topIonScript_); return snapshotOffset_; } const MachineState &machineState() const { return machine_; } size_t topFrameSize() const { JS_ASSERT(topIonScript_); return topFrameSize_; } IonScript *ionScript() const { if (topIonScript_) return topIonScript_; - return IonFrameIterator::ionScript(); + return JitFrameIterator::ionScript(); } void dump() const; }; bool EnsureHasScopeObjects(JSContext *cx, AbstractFramePtr fp); struct BaselineBailoutInfo;
--- a/js/src/jit/BaselineBailouts.cpp +++ b/js/src/jit/BaselineBailouts.cpp @@ -1533,17 +1533,17 @@ jit::FinishBailoutToBaseline(BaselineBai return false; // Create arguments objects for bailed out frames, to maintain the invariant // that script->needsArgsObj() implies frame->hasArgsObj(). RootedScript innerScript(cx, nullptr); RootedScript outerScript(cx, nullptr); JS_ASSERT(cx->currentlyRunningInJit()); - IonFrameIterator iter(cx); + JitFrameIterator iter(cx); uint32_t frameno = 0; while (frameno < numFrames) { JS_ASSERT(!iter.isIonJS()); if (iter.isBaselineJS()) { BaselineFrame *frame = iter.baselineFrame(); MOZ_ASSERT(frame->script()->hasBaselineScript());
--- a/js/src/jit/BaselineFrame.cpp +++ b/js/src/jit/BaselineFrame.cpp @@ -23,17 +23,17 @@ MarkLocals(BaselineFrame *frame, JSTrace if (start < end) { // Stack grows down. Value *last = frame->valueSlot(end - 1); gc::MarkValueRootRange(trc, end - start, last, "baseline-stack"); } } void -BaselineFrame::trace(JSTracer *trc, IonFrameIterator &frameIterator) +BaselineFrame::trace(JSTracer *trc, JitFrameIterator &frameIterator) { replaceCalleeToken(MarkCalleeToken(trc, calleeToken())); gc::MarkValueRoot(trc, &thisValue(), "baseline-this"); // Mark actual and formal args. if (isNonEvalFunctionFrame()) { unsigned numArgs = js::Max(numActualArgs(), numFormalArgs()); @@ -203,17 +203,17 @@ BaselineFrame::initForOsr(InterpreterFra if (cx->compartment()->debugMode()) { // In debug mode, update any Debugger.Frame objects for the // InterpreterFrame to point to the BaselineFrame. // The caller pushed a fake return address. ScriptFrameIter, used by the // debugger, wants a valid return address, but it's okay to just pick one. // In debug mode there's always at least 1 ICEntry (since there are always // debug prologue/epilogue calls). - IonFrameIterator iter(cx); + JitFrameIterator iter(cx); JS_ASSERT(iter.returnAddress() == nullptr); BaselineScript *baseline = fp->script()->baselineScript(); iter.current()->setReturnAddress(baseline->returnAddressForIC(baseline->icEntry(0))); if (!Debugger::handleBaselineOsr(cx, fp, this)) return false; }
--- a/js/src/jit/BaselineFrame.h +++ b/js/src/jit/BaselineFrame.h @@ -291,17 +291,17 @@ class BaselineFrame bool overRecursed() const { return flags_ & OVER_RECURSED; } void setOverRecursed() { flags_ |= OVER_RECURSED; } - void trace(JSTracer *trc, IonFrameIterator &frame); + void trace(JSTracer *trc, JitFrameIterator &frame); bool isFunctionFrame() const { return CalleeTokenIsFunction(calleeToken()); } bool isGlobalFrame() const { return !CalleeTokenIsFunction(calleeToken()); } bool isEvalFrame() const {
--- a/js/src/jit/BaselineIC.cpp +++ b/js/src/jit/BaselineIC.cpp @@ -768,17 +768,17 @@ ICStubCompiler::emitPostWriteBarrierSlot // // UseCount_Fallback // static bool IsTopFrameConstructing(JSContext *cx) { JS_ASSERT(cx->currentlyRunningInJit()); JitActivationIterator activations(cx->runtime()); - IonFrameIterator iter(activations); + JitFrameIterator iter(activations); JS_ASSERT(iter.type() == JitFrame_Exit); ++iter; JS_ASSERT(iter.type() == JitFrame_BaselineStub); ++iter; JS_ASSERT(iter.isBaselineJS());
--- a/js/src/jit/BaselineJIT.cpp +++ b/js/src/jit/BaselineJIT.cpp @@ -926,17 +926,17 @@ jit::ToggleBaselineSPS(JSRuntime *runtim script->baselineScript()->toggleSPS(enable); } } } static void MarkActiveBaselineScripts(JSRuntime *rt, const JitActivationIterator &activation) { - for (jit::IonFrameIterator iter(activation); !iter.done(); ++iter) { + for (jit::JitFrameIterator iter(activation); !iter.done(); ++iter) { switch (iter.type()) { case JitFrame_BaselineJS: iter.script()->baselineScript()->setActive(); break; case JitFrame_IonJS: { // Keep the baseline script around, since bailouts from the ion // jitcode might need to re-enter into the baseline jitcode. iter.script()->baselineScript()->setActive();
--- a/js/src/jit/Ion.cpp +++ b/js/src/jit/Ion.cpp @@ -2509,17 +2509,17 @@ jit::FastInvoke(JSContext *cx, HandleFun static void InvalidateActivation(FreeOp *fop, uint8_t *ionTop, bool invalidateAll) { IonSpew(IonSpew_Invalidate, "BEGIN invalidating activation"); size_t frameno = 1; - for (IonFrameIterator it(ionTop, SequentialExecution); !it.done(); ++it, ++frameno) { + for (JitFrameIterator it(ionTop, SequentialExecution); !it.done(); ++it, ++frameno) { JS_ASSERT_IF(frameno == 1, it.type() == JitFrame_Exit); #ifdef DEBUG switch (it.type()) { case JitFrame_Exit: IonSpew(IonSpew_Invalidate, "#%d exit frame @ %p", frameno, it.fp()); break; case JitFrame_BaselineJS: @@ -2875,17 +2875,17 @@ jit::ForbidCompilation(JSContext *cx, JS mode, script->filename(), script->lineno()); CancelOffThreadIonCompile(cx->compartment(), script); switch (mode) { case SequentialExecution: if (script->hasIonScript()) { // It is only safe to modify script->ion if the script is not currently - // running, because IonFrameIterator needs to tell what ionScript to + // running, because JitFrameIterator needs to tell what ionScript to // use (either the one on the JSScript, or the one hidden in the // breadcrumbs Invalidation() leaves). Therefore, if invalidation // fails, we cannot disable the script. if (!Invalidate(cx, script, mode, false)) return; } script->setIonScript(ION_DISABLED_SCRIPT);
--- a/js/src/jit/IonFrames-inl.h +++ b/js/src/jit/IonFrames-inl.h @@ -6,78 +6,78 @@ #ifndef jit_IonFrames_inl_h #define jit_IonFrames_inl_h #ifdef JS_ION #include "jit/IonFrames.h" -#include "jit/IonFrameIterator.h" +#include "jit/JitFrameIterator.h" #include "jit/LIR.h" #include "vm/ForkJoin.h" -#include "jit/IonFrameIterator-inl.h" +#include "jit/JitFrameIterator-inl.h" namespace js { namespace jit { inline void SafepointIndex::resolve() { JS_ASSERT(!resolved); safepointOffset_ = safepoint_->offset(); #ifdef DEBUG resolved = true; #endif } inline uint8_t * -IonFrameIterator::returnAddress() const +JitFrameIterator::returnAddress() const { IonCommonFrameLayout *current = (IonCommonFrameLayout *) current_; return current->returnAddress(); } inline size_t -IonFrameIterator::prevFrameLocalSize() const +JitFrameIterator::prevFrameLocalSize() const { IonCommonFrameLayout *current = (IonCommonFrameLayout *) current_; return current->prevFrameLocalSize(); } inline FrameType -IonFrameIterator::prevType() const +JitFrameIterator::prevType() const { IonCommonFrameLayout *current = (IonCommonFrameLayout *) current_; return current->prevType(); } inline bool -IonFrameIterator::isFakeExitFrame() const +JitFrameIterator::isFakeExitFrame() const { bool res = (prevType() == JitFrame_Unwound_Rectifier || prevType() == JitFrame_Unwound_IonJS || prevType() == JitFrame_Unwound_BaselineStub); JS_ASSERT_IF(res, type() == JitFrame_Exit || type() == JitFrame_BaselineJS); return res; } inline IonExitFrameLayout * -IonFrameIterator::exitFrame() const +JitFrameIterator::exitFrame() const { JS_ASSERT(type() == JitFrame_Exit); JS_ASSERT(!isFakeExitFrame()); return (IonExitFrameLayout *) fp(); } inline BaselineFrame * GetTopBaselineFrame(JSContext *cx) { - IonFrameIterator iter(cx); + JitFrameIterator iter(cx); JS_ASSERT(iter.type() == JitFrame_Exit); ++iter; if (iter.isBaselineStub()) ++iter; JS_ASSERT(iter.isBaselineJS()); return iter.baselineFrame(); }
--- a/js/src/jit/IonFrames.cpp +++ b/js/src/jit/IonFrames.cpp @@ -22,17 +22,17 @@ #include "jit/PcScriptCache.h" #include "jit/Recover.h" #include "jit/Safepoints.h" #include "jit/Snapshots.h" #include "jit/VMFunctions.h" #include "vm/ForkJoin.h" #include "vm/Interpreter.h" -#include "jit/IonFrameIterator-inl.h" +#include "jit/JitFrameIterator-inl.h" #include "vm/Probes-inl.h" namespace js { namespace jit { // Given a slot index, returns the offset, in bytes, of that slot from an // IonJSFrameLayout. Slot distances are uniform across architectures, however, // the distance does depend on the size of the frame header. @@ -67,56 +67,56 @@ ReadFrameInt32Slot(IonJSFrameLayout *fp, } static inline bool ReadFrameBooleanSlot(IonJSFrameLayout *fp, int32_t slot) { return *(bool *)((char *)fp + OffsetOfFrameSlot(slot)); } -IonFrameIterator::IonFrameIterator(JSContext *cx) +JitFrameIterator::JitFrameIterator(JSContext *cx) : current_(cx->mainThread().ionTop), type_(JitFrame_Exit), returnAddressToFp_(nullptr), frameSize_(0), cachedSafepointIndex_(nullptr), activation_(nullptr), mode_(SequentialExecution) { } -IonFrameIterator::IonFrameIterator(const ActivationIterator &activations) +JitFrameIterator::JitFrameIterator(const ActivationIterator &activations) : current_(activations.jitTop()), type_(JitFrame_Exit), returnAddressToFp_(nullptr), frameSize_(0), cachedSafepointIndex_(nullptr), activation_(activations.activation()->asJit()), mode_(SequentialExecution) { } -IonFrameIterator::IonFrameIterator(IonJSFrameLayout *fp, ExecutionMode mode) +JitFrameIterator::JitFrameIterator(IonJSFrameLayout *fp, ExecutionMode mode) : current_((uint8_t *)fp), type_(JitFrame_IonJS), returnAddressToFp_(fp->returnAddress()), frameSize_(fp->prevFrameLocalSize()), mode_(mode) { } bool -IonFrameIterator::checkInvalidation() const +JitFrameIterator::checkInvalidation() const { IonScript *dummy; return checkInvalidation(&dummy); } bool -IonFrameIterator::checkInvalidation(IonScript **ionScriptOut) const +JitFrameIterator::checkInvalidation(IonScript **ionScriptOut) const { uint8_t *returnAddr = returnAddressToFp(); JSScript *script = this->script(); // N.B. the current IonScript is not the same as the frame's // IonScript if the frame has since been invalidated. bool invalidated; if (mode_ == ParallelExecution) { // Parallel execution does not have invalidating bailouts. @@ -132,96 +132,96 @@ IonFrameIterator::checkInvalidation(IonS uint8_t *ionScriptDataOffset = returnAddr + invalidationDataOffset; IonScript *ionScript = (IonScript *) Assembler::getPointer(ionScriptDataOffset); JS_ASSERT(ionScript->containsReturnAddress(returnAddr)); *ionScriptOut = ionScript; return true; } CalleeToken -IonFrameIterator::calleeToken() const +JitFrameIterator::calleeToken() const { return ((IonJSFrameLayout *) current_)->calleeToken(); } JSFunction * -IonFrameIterator::callee() const +JitFrameIterator::callee() const { JS_ASSERT(isScripted()); JS_ASSERT(isFunctionFrame()); return CalleeTokenToFunction(calleeToken()); } JSFunction * -IonFrameIterator::maybeCallee() const +JitFrameIterator::maybeCallee() const { if (isScripted() && (isFunctionFrame())) return callee(); return nullptr; } bool -IonFrameIterator::isNative() const +JitFrameIterator::isNative() const { if (type_ != JitFrame_Exit || isFakeExitFrame()) return false; return exitFrame()->footer()->jitCode() == nullptr; } bool -IonFrameIterator::isOOLNative() const +JitFrameIterator::isOOLNative() const { if (type_ != JitFrame_Exit) return false; return exitFrame()->footer()->jitCode() == ION_FRAME_OOL_NATIVE; } bool -IonFrameIterator::isOOLPropertyOp() const +JitFrameIterator::isOOLPropertyOp() const { if (type_ != JitFrame_Exit) return false; return exitFrame()->footer()->jitCode() == ION_FRAME_OOL_PROPERTY_OP; } bool -IonFrameIterator::isOOLProxy() const +JitFrameIterator::isOOLProxy() const { if (type_ != JitFrame_Exit) return false; return exitFrame()->footer()->jitCode() == ION_FRAME_OOL_PROXY; } bool -IonFrameIterator::isDOMExit() const +JitFrameIterator::isDOMExit() const { if (type_ != JitFrame_Exit) return false; return exitFrame()->isDomExit(); } bool -IonFrameIterator::isFunctionFrame() const +JitFrameIterator::isFunctionFrame() const { return CalleeTokenIsFunction(calleeToken()); } JSScript * -IonFrameIterator::script() const +JitFrameIterator::script() const { JS_ASSERT(isScripted()); if (isBaselineJS()) return baselineFrame()->script(); JSScript *script = ScriptFromCalleeToken(calleeToken()); JS_ASSERT(script); return script; } void -IonFrameIterator::baselineScriptAndPc(JSScript **scriptRes, jsbytecode **pcRes) const +JitFrameIterator::baselineScriptAndPc(JSScript **scriptRes, jsbytecode **pcRes) const { JS_ASSERT(isBaselineJS()); JSScript *script = this->script(); if (scriptRes) *scriptRes = script; uint8_t *retAddr = returnAddressToFp(); if (pcRes) { // If the return address is into the prologue entry address, then assume start @@ -241,17 +241,17 @@ IonFrameIterator::baselineScriptAndPc(JS // If not, the return address _must_ be the start address of an op, which can // be computed from the pc mapping table. *pcRes = script->baselineScript()->pcForReturnAddress(script, retAddr); } } Value * -IonFrameIterator::actualArgs() const +JitFrameIterator::actualArgs() const { return jsFrame()->argv() + 1; } static inline size_t SizeOfFramePrefix(FrameType type) { switch (type) { @@ -270,33 +270,33 @@ SizeOfFramePrefix(FrameType type) case JitFrame_Exit: return IonExitFrameLayout::Size(); default: MOZ_ASSUME_UNREACHABLE("unknown frame type"); } } uint8_t * -IonFrameIterator::prevFp() const +JitFrameIterator::prevFp() const { size_t currentSize = SizeOfFramePrefix(type_); // This quick fix must be removed as soon as bug 717297 land. This is // needed because the descriptor size of JS-to-JS frame which is just after // a Rectifier frame should not change. (cf EnsureExitFrame function) if (isFakeExitFrame()) { JS_ASSERT(SizeOfFramePrefix(JitFrame_BaselineJS) == SizeOfFramePrefix(JitFrame_IonJS)); currentSize = SizeOfFramePrefix(JitFrame_IonJS); } currentSize += current()->prevFrameLocalSize(); return current_ + currentSize; } -IonFrameIterator & -IonFrameIterator::operator++() +JitFrameIterator & +JitFrameIterator::operator++() { JS_ASSERT(type_ != JitFrame_Entry); frameSize_ = prevFrameLocalSize(); cachedSafepointIndex_ = nullptr; // If the next frame is the entry frame, just exit. Don't update current_, // since the entry and first frames overlap. @@ -314,27 +314,27 @@ IonFrameIterator::operator++() else if (type_ == JitFrame_Unwound_BaselineStub) type_ = JitFrame_BaselineStub; returnAddressToFp_ = current()->returnAddress(); current_ = prev; return *this; } uintptr_t * -IonFrameIterator::spillBase() const +JitFrameIterator::spillBase() const { // Get the base address to where safepoint registers are spilled. // Out-of-line calls do not unwind the extra padding space used to // aggregate bailout tables, so we use frameSize instead of frameLocals, // which would only account for local stack slots. return reinterpret_cast<uintptr_t *>(fp() - ionScript()->frameSize()); } MachineState -IonFrameIterator::machineState() const +JitFrameIterator::machineState() const { SafepointReader reader(ionScript(), safepoint()); uintptr_t *spill = spillBase(); MachineState machine; for (GeneralRegisterBackwardIterator iter(reader.allGprSpills()); iter.more(); iter++) machine.setRegisterLocation(*iter, --spill); @@ -441,17 +441,17 @@ HandleExceptionIon(JSContext *cx, const default: MOZ_ASSUME_UNREACHABLE("Unexpected try note"); } } } static void -HandleExceptionBaseline(JSContext *cx, const IonFrameIterator &frame, ResumeFromException *rfe, +HandleExceptionBaseline(JSContext *cx, const JitFrameIterator &frame, ResumeFromException *rfe, bool *calledDebugEpilogue) { JS_ASSERT(frame.isBaselineJS()); JS_ASSERT(!*calledDebugEpilogue); RootedScript script(cx); jsbytecode *pc; frame.baselineScriptAndPc(script.address(), &pc); @@ -578,17 +578,17 @@ HandleException(ResumeFromException *rfe // Clear any Ion return override that's been set. // This may happen if a callVM function causes an invalidation (setting the // override), and then fails, bypassing the bailout handlers that would // otherwise clear the return override. if (cx->runtime()->hasIonReturnOverride()) cx->runtime()->takeIonReturnOverride(); - IonFrameIterator iter(cx); + JitFrameIterator iter(cx); while (!iter.isEntry()) { bool overrecursed = false; if (iter.isIonJS()) { // Search each inlined frame for live iterator objects, and close // them. InlineFrameIterator frames(cx, &iter); // Invalidation state will be the same for all inlined scripts in the frame. @@ -688,17 +688,17 @@ HandleException(ResumeFromException *rfe rfe->stackPointer = iter.fp(); } void HandleParallelFailure(ResumeFromException *rfe) { ForkJoinContext *cx = ForkJoinContext::current(); - IonFrameIterator iter(cx->perThreadData->ionTop, ParallelExecution); + JitFrameIterator iter(cx->perThreadData->ionTop, ParallelExecution); parallel::Spew(parallel::SpewBailouts, "Bailing from VM reentry"); while (!iter.isEntry()) { if (iter.isScripted()) { cx->bailoutRecord->updateCause(ParallelBailoutUnsupportedVM, iter.script(), iter.script(), nullptr); break; @@ -769,49 +769,49 @@ MarkCalleeToken(JSTracer *trc, CalleeTok } default: MOZ_ASSUME_UNREACHABLE("unknown callee token type"); } } #ifdef JS_NUNBOX32 static inline uintptr_t -ReadAllocation(const IonFrameIterator &frame, const LAllocation *a) +ReadAllocation(const JitFrameIterator &frame, const LAllocation *a) { if (a->isGeneralReg()) { Register reg = a->toGeneralReg()->reg(); return frame.machineState().read(reg); } if (a->isStackSlot()) { uint32_t slot = a->toStackSlot()->slot(); return *frame.jsFrame()->slotRef(slot); } uint32_t index = a->toArgument()->index(); uint8_t *argv = reinterpret_cast<uint8_t *>(frame.jsFrame()->argv()); return *reinterpret_cast<uintptr_t *>(argv + index); } #endif static void -MarkActualArguments(JSTracer *trc, const IonFrameIterator &frame) +MarkActualArguments(JSTracer *trc, const JitFrameIterator &frame) { IonJSFrameLayout *layout = frame.jsFrame(); JS_ASSERT(CalleeTokenIsFunction(layout->calleeToken())); size_t nargs = frame.numActualArgs(); // Trace function arguments. Note + 1 for thisv. Value *argv = layout->argv(); for (size_t i = 0; i < nargs + 1; i++) gc::MarkValueRoot(trc, &argv[i], "ion-argv"); } #ifdef JS_NUNBOX32 static inline void -WriteAllocation(const IonFrameIterator &frame, const LAllocation *a, uintptr_t value) +WriteAllocation(const JitFrameIterator &frame, const LAllocation *a, uintptr_t value) { if (a->isGeneralReg()) { Register reg = a->toGeneralReg()->reg(); frame.machineState().write(reg, value); return; } if (a->isStackSlot()) { uint32_t slot = a->toStackSlot()->slot(); @@ -820,17 +820,17 @@ WriteAllocation(const IonFrameIterator & } uint32_t index = a->toArgument()->index(); uint8_t *argv = reinterpret_cast<uint8_t *>(frame.jsFrame()->argv()); *reinterpret_cast<uintptr_t *>(argv + index) = value; } #endif static void -MarkIonJSFrame(JSTracer *trc, const IonFrameIterator &frame) +MarkIonJSFrame(JSTracer *trc, const JitFrameIterator &frame) { IonJSFrameLayout *layout = (IonJSFrameLayout *)frame.fp(); layout->replaceCalleeToken(MarkCalleeToken(trc, layout->calleeToken())); IonScript *ionScript = nullptr; if (frame.checkInvalidation(&ionScript)) { // This frame has been invalidated, meaning that its IonScript is no @@ -890,17 +890,17 @@ MarkIonJSFrame(JSTracer *trc, const IonF WriteAllocation(frame, &payload, layout.s.payload.uintptr); } } #endif } #ifdef JSGC_GENERATIONAL static void -UpdateIonJSFrameForMinorGC(JSTracer *trc, const IonFrameIterator &frame) +UpdateIonJSFrameForMinorGC(JSTracer *trc, const JitFrameIterator &frame) { // Minor GCs may move slots/elements allocated in the nursery. Update // any slots/elements pointers stored in this frame. IonJSFrameLayout *layout = (IonJSFrameLayout *)frame.fp(); IonScript *ionScript = nullptr; if (frame.checkInvalidation(&ionScript)) { @@ -936,34 +936,34 @@ UpdateIonJSFrameForMinorGC(JSTracer *trc while (safepoint.getSlotsOrElementsSlot(&slot)) { HeapSlot **slots = reinterpret_cast<HeapSlot **>(layout->slotRef(slot)); trc->runtime()->gcNursery.forwardBufferPointer(slots); } } #endif static void -MarkBaselineStubFrame(JSTracer *trc, const IonFrameIterator &frame) +MarkBaselineStubFrame(JSTracer *trc, const JitFrameIterator &frame) { // Mark the ICStub pointer stored in the stub frame. This is necessary // so that we don't destroy the stub code after unlinking the stub. JS_ASSERT(frame.type() == JitFrame_BaselineStub); IonBaselineStubFrameLayout *layout = (IonBaselineStubFrameLayout *)frame.fp(); if (ICStub *stub = layout->maybeStubPtr()) { JS_ASSERT(ICStub::CanMakeCalls(stub->kind())); stub->trace(trc); } } void JitActivationIterator::jitStackRange(uintptr_t *&min, uintptr_t *&end) { - IonFrameIterator frames(jitTop(), SequentialExecution); + JitFrameIterator frames(jitTop(), SequentialExecution); if (frames.isFakeExitFrame()) { min = reinterpret_cast<uintptr_t *>(frames.fp()); } else { IonExitFrameLayout *exitFrame = frames.exitFrame(); IonExitFooterFrame *footer = exitFrame->footer(); const VMFunction *f = footer->function(); if (exitFrame->isWrapperExit() && f->outParam == Type_Handle) { @@ -989,17 +989,17 @@ JitActivationIterator::jitStackRange(uin while (!frames.done()) ++frames; end = reinterpret_cast<uintptr_t *>(frames.prevFp()); } static void -MarkJitExitFrame(JSTracer *trc, const IonFrameIterator &frame) +MarkJitExitFrame(JSTracer *trc, const JitFrameIterator &frame) { // Ignore fake exit frames created by EnsureExitFrame. if (frame.isFakeExitFrame()) return; IonExitFooterFrame *footer = frame.exitFrame()->footer(); // Mark the code of the code handling the exit path. This is needed because @@ -1129,17 +1129,17 @@ MarkJitExitFrame(JSTracer *trc, const Io case VMFunction::RootCell: gc::MarkGCThingRoot(trc, footer->outParam<void *>(), "ion-vm-out"); break; } } } static void -MarkRectifierFrame(JSTracer *trc, const IonFrameIterator &frame) +MarkRectifierFrame(JSTracer *trc, const JitFrameIterator &frame) { // Mark thisv. // // Baseline JIT code generated as part of the ICCall_Fallback stub may use // it if we're calling a constructor that returns a primitive value. IonRectifierFrameLayout *layout = (IonRectifierFrameLayout *)frame.fp(); gc::MarkValueRoot(trc, &layout->argv()[0], "ion-thisv"); } @@ -1152,17 +1152,17 @@ MarkJitActivation(JSTracer *trc, const J // GC can modify spilled registers, breaking our register checks. // To handle this, we disable these checks for the current VM call // when a GC happens. JitActivation *activation = activations.activation()->asJit(); activation->setCheckRegs(false); } #endif - for (IonFrameIterator frames(activations); !frames.done(); ++frames) { + for (JitFrameIterator frames(activations); !frames.done(); ++frames) { switch (frames.type()) { case JitFrame_Exit: MarkJitExitFrame(trc, frames); break; case JitFrame_BaselineJS: frames.baselineFrame()->trace(trc, frames); break; case JitFrame_BaselineStub: @@ -1192,17 +1192,17 @@ MarkJitActivations(JSRuntime *rt, JSTrac } #ifdef JSGC_GENERATIONAL void UpdateJitActivationsForMinorGC(JSRuntime *rt, JSTracer *trc) { JS_ASSERT(trc->runtime()->isHeapMinorCollecting()); for (JitActivationIterator activations(rt); !activations.done(); ++activations) { - for (IonFrameIterator frames(activations); !frames.done(); ++frames) { + for (JitFrameIterator frames(activations); !frames.done(); ++frames) { if (frames.type() == JitFrame_IonJS) UpdateIonJSFrameForMinorGC(trc, frames); } } } #endif void @@ -1215,17 +1215,17 @@ AutoTempAllocatorRooter::trace(JSTracer void GetPcScript(JSContext *cx, JSScript **scriptRes, jsbytecode **pcRes) { IonSpew(IonSpew_Snapshots, "Recover PC & Script from the last frame."); JSRuntime *rt = cx->runtime(); // Recover the return address. - IonFrameIterator it(rt->mainThread.ionTop, SequentialExecution); + JitFrameIterator it(rt->mainThread.ionTop, SequentialExecution); // If the previous frame is a rectifier frame (maybe unwound), // skip past it. if (it.prevType() == JitFrame_Rectifier || it.prevType() == JitFrame_Unwound_Rectifier) { ++it; JS_ASSERT(it.prevType() == JitFrame_BaselineStub || it.prevType() == JitFrame_BaselineJS || it.prevType() == JitFrame_IonJS); @@ -1301,17 +1301,17 @@ SnapshotIterator::SnapshotIterator(IonSc ionScript->recoversSize()), fp_(fp), machine_(machine), ionScript_(ionScript) { JS_ASSERT(snapshotOffset < ionScript->snapshotsListSize()); } -SnapshotIterator::SnapshotIterator(const IonFrameIterator &iter) +SnapshotIterator::SnapshotIterator(const JitFrameIterator &iter) : snapshot_(iter.ionScript()->snapshots(), iter.osiIndex()->snapshotOffset(), iter.ionScript()->snapshotsRVATableSize(), iter.ionScript()->snapshotsListSize()), recover_(snapshot_, iter.ionScript()->recovers(), iter.ionScript()->recoversSize()), fp_(iter.jsFrame()), @@ -1531,62 +1531,62 @@ void SnapshotIterator::nextFrame() { nextInstruction(); while (!instruction()->isResumePoint()) skipInstruction(); } IonScript * -IonFrameIterator::ionScript() const +JitFrameIterator::ionScript() const { JS_ASSERT(type() == JitFrame_IonJS); IonScript *ionScript = nullptr; if (checkInvalidation(&ionScript)) return ionScript; switch (GetCalleeTokenTag(calleeToken())) { case CalleeToken_Function: case CalleeToken_Script: return mode_ == ParallelExecution ? script()->parallelIonScript() : script()->ionScript(); default: MOZ_ASSUME_UNREACHABLE("unknown callee token type"); } } const SafepointIndex * -IonFrameIterator::safepoint() const +JitFrameIterator::safepoint() const { if (!cachedSafepointIndex_) cachedSafepointIndex_ = ionScript()->getSafepointIndex(returnAddressToFp()); return cachedSafepointIndex_; } const OsiIndex * -IonFrameIterator::osiIndex() const +JitFrameIterator::osiIndex() const { SafepointReader reader(ionScript(), safepoint()); return ionScript()->getOsiIndex(reader.osiReturnPointOffset()); } template <AllowGC allowGC> void -InlineFrameIteratorMaybeGC<allowGC>::resetOn(const IonFrameIterator *iter) +InlineFrameIteratorMaybeGC<allowGC>::resetOn(const JitFrameIterator *iter) { frame_ = iter; framesRead_ = 0; frameCount_ = UINT32_MAX; if (iter) { start_ = SnapshotIterator(*iter); findNextFrame(); } } -template void InlineFrameIteratorMaybeGC<NoGC>::resetOn(const IonFrameIterator *iter); -template void InlineFrameIteratorMaybeGC<CanGC>::resetOn(const IonFrameIterator *iter); +template void InlineFrameIteratorMaybeGC<NoGC>::resetOn(const JitFrameIterator *iter); +template void InlineFrameIteratorMaybeGC<CanGC>::resetOn(const JitFrameIterator *iter); template <AllowGC allowGC> void InlineFrameIteratorMaybeGC<allowGC>::findNextFrame() { JS_ASSERT(more()); si_ = start_; @@ -1714,19 +1714,19 @@ InlineFrameIteratorMaybeGC<allowGC>::isC } return frame_->isConstructing(); } template bool InlineFrameIteratorMaybeGC<NoGC>::isConstructing() const; template bool InlineFrameIteratorMaybeGC<CanGC>::isConstructing() const; bool -IonFrameIterator::isConstructing() const +JitFrameIterator::isConstructing() const { - IonFrameIterator parent(*this); + JitFrameIterator parent(*this); // Skip the current frame and look at the caller's. do { ++parent; } while (!parent.done() && !parent.isScripted()); if (parent.isIonJS()) { // In the case of a JS frame, look up the pc from the snapshot. @@ -1755,17 +1755,17 @@ IonFrameIterator::isConstructing() const return JSOp(*pc) == JSOP_NEW; } JS_ASSERT(parent.done()); return activation_->firstFrameIsConstructing(); } unsigned -IonFrameIterator::numActualArgs() const +JitFrameIterator::numActualArgs() const { if (isScripted()) return jsFrame()->numActualArgs(); JS_ASSERT(isNative()); return exitFrame()->nativeExit()->argc(); } @@ -1786,17 +1786,17 @@ struct DumpOp { #else fprintf(stderr, "?\n"); #endif i_++; } }; void -IonFrameIterator::dumpBaseline() const +JitFrameIterator::dumpBaseline() const { JS_ASSERT(isBaselineJS()); fprintf(stderr, " JS Baseline frame\n"); if (isFunctionFrame()) { fprintf(stderr, " callee fun: "); #ifdef DEBUG js_DumpObject(callee()); @@ -1893,17 +1893,17 @@ InlineFrameIteratorMaybeGC<allowGC>::dum } fputc('\n', stderr); } template void InlineFrameIteratorMaybeGC<NoGC>::dump() const; template void InlineFrameIteratorMaybeGC<CanGC>::dump() const; void -IonFrameIterator::dump() const +JitFrameIterator::dump() const { switch (type_) { case JitFrame_Entry: fprintf(stderr, " Entry frame\n"); fprintf(stderr, " Frame size: %u\n", unsigned(current()->prevFrameLocalSize())); break; case JitFrame_BaselineJS: dumpBaseline();
--- a/js/src/jit/IonFrames.h +++ b/js/src/jit/IonFrames.h @@ -9,17 +9,17 @@ #ifdef JS_ION #include <stdint.h> #include "jscntxt.h" #include "jsfun.h" -#include "jit/IonFrameIterator.h" +#include "jit/JitFrameIterator.h" namespace js { namespace jit { typedef void * CalleeToken; enum CalleeTokenTag { @@ -277,17 +277,17 @@ MakeFrameDescriptor(uint32_t frameSize, { return (frameSize << FRAMESIZE_SHIFT) | type; } // Returns the JSScript associated with the topmost Ion frame. inline JSScript * GetTopIonJSScript(uint8_t *ionTop, void **returnAddrOut, ExecutionMode mode) { - IonFrameIterator iter(ionTop, mode); + JitFrameIterator iter(ionTop, mode); JS_ASSERT(iter.type() == JitFrame_Exit); ++iter; JS_ASSERT(iter.returnAddressToFp() != nullptr); if (returnAddrOut) *returnAddrOut = (void *) iter.returnAddressToFp(); if (iter.isBaselineStub()) {
rename from js/src/jit/IonFrameIterator-inl.h rename to js/src/jit/JitFrameIterator-inl.h --- a/js/src/jit/IonFrameIterator-inl.h +++ b/js/src/jit/JitFrameIterator-inl.h @@ -1,20 +1,20 @@ /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- * vim: set ts=8 sts=4 et sw=4 tw=99: * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef jit_IonFrameIterator_inl_h -#define jit_IonFrameIterator_inl_h +#ifndef jit_JitFrameIterator_inl_h +#define jit_JitFrameIterator_inl_h #ifdef JS_ION -#include "jit/IonFrameIterator.h" +#include "jit/JitFrameIterator.h" #include "jit/Bailouts.h" #include "jit/BaselineFrame.h" namespace js { namespace jit { template <AllowGC allowGC> @@ -29,20 +29,20 @@ InlineFrameIteratorMaybeGC<allowGC>::Inl { if (iter) { start_ = SnapshotIterator(*iter); findNextFrame(); } } inline BaselineFrame * -IonFrameIterator::baselineFrame() const +JitFrameIterator::baselineFrame() const { JS_ASSERT(isBaselineJS()); return (BaselineFrame *)(fp() - BaselineFrame::FramePointerOffset - BaselineFrame::Size()); } } // namespace jit } // namespace js #endif // JS_ION -#endif /* jit_IonFrameIterator_inl_h */ +#endif /* jit_JitFrameIterator_inl_h */
rename from js/src/jit/IonFrameIterator.h rename to js/src/jit/JitFrameIterator.h --- a/js/src/jit/IonFrameIterator.h +++ b/js/src/jit/JitFrameIterator.h @@ -1,16 +1,16 @@ /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- * vim: set ts=8 sts=4 et sw=4 tw=99: * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef jit_IonFrameIterator_h -#define jit_IonFrameIterator_h +#ifndef jit_JitFrameIterator_h +#define jit_JitFrameIterator_h #ifdef JS_ION #include "jsfun.h" #include "jsscript.h" #include "jstypes.h" #include "jit/IonCode.h" @@ -76,45 +76,45 @@ enum ReadFrameArgsBehavior { class IonCommonFrameLayout; class IonJSFrameLayout; class IonExitFrameLayout; class BaselineFrame; class JitActivation; -class IonFrameIterator +class JitFrameIterator { protected: uint8_t *current_; FrameType type_; uint8_t *returnAddressToFp_; size_t frameSize_; private: mutable const SafepointIndex *cachedSafepointIndex_; const JitActivation *activation_; ExecutionMode mode_; void dumpBaseline() const; public: - explicit IonFrameIterator(uint8_t *top, ExecutionMode mode) + explicit JitFrameIterator(uint8_t *top, ExecutionMode mode) : current_(top), type_(JitFrame_Exit), returnAddressToFp_(nullptr), frameSize_(0), cachedSafepointIndex_(nullptr), activation_(nullptr), mode_(mode) { } - explicit IonFrameIterator(JSContext *cx); - explicit IonFrameIterator(const ActivationIterator &activations); - explicit IonFrameIterator(IonJSFrameLayout *fp, ExecutionMode mode); + explicit JitFrameIterator(JSContext *cx); + explicit JitFrameIterator(const ActivationIterator &activations); + explicit JitFrameIterator(IonJSFrameLayout *fp, ExecutionMode mode); // Current frame information. FrameType type() const { return type_; } uint8_t *fp() const { return current_; } @@ -190,17 +190,17 @@ class IonFrameIterator return frameSize_; } // Functions used to iterate on frames. When prevType is JitFrame_Entry, // the current frame is the last frame. inline bool done() const { return type_ == JitFrame_Entry; } - IonFrameIterator &operator++(); + JitFrameIterator &operator++(); // Returns the IonScript associated with this JS frame. IonScript *ionScript() const; // Returns the Safepoint associated with this JS frame. Incurs a lookup // overhead. const SafepointIndex *safepoint() const; @@ -346,17 +346,17 @@ class SnapshotIterator } public: // Connect all informations about the current script in order to recover the // content of baseline frames. SnapshotIterator(IonScript *ionScript, SnapshotOffset snapshotOffset, IonJSFrameLayout *fp, const MachineState &machine); - SnapshotIterator(const IonFrameIterator &iter); + SnapshotIterator(const JitFrameIterator &iter); SnapshotIterator(const IonBailoutIterator &iter); SnapshotIterator(); Value read() { return allocationValue(readAllocation()); } Value maybeRead(bool silentFailure = false) { RValueAllocation a = readAllocation(); @@ -418,17 +418,17 @@ class SnapshotIterator } }; // Reads frame information in callstack order (that is, innermost frame to // outermost frame). template <AllowGC allowGC=CanGC> class InlineFrameIteratorMaybeGC { - const IonFrameIterator *frame_; + const JitFrameIterator *frame_; SnapshotIterator start_; SnapshotIterator si_; uint32_t framesRead_; // When the inline-frame-iterator is created, this variable is defined to // UINT32_MAX. Then the first iteration of findNextFrame, which settle on // the innermost frame, is used to update this counter to the number of // frames contained in the recover buffer. @@ -442,24 +442,24 @@ class InlineFrameIteratorMaybeGC struct Nop { void operator()(const Value &v) { } }; private: void findNextFrame(); public: - InlineFrameIteratorMaybeGC(JSContext *cx, const IonFrameIterator *iter) + InlineFrameIteratorMaybeGC(JSContext *cx, const JitFrameIterator *iter) : callee_(cx), script_(cx) { resetOn(iter); } - InlineFrameIteratorMaybeGC(JSRuntime *rt, const IonFrameIterator *iter) + InlineFrameIteratorMaybeGC(JSRuntime *rt, const JitFrameIterator *iter) : callee_(rt), script_(rt) { resetOn(iter); } InlineFrameIteratorMaybeGC(JSContext *cx, const IonBailoutIterator *iter); @@ -609,19 +609,19 @@ class InlineFrameIteratorMaybeGC InlineFrameIteratorMaybeGC &operator++() { findNextFrame(); return *this; } void dump() const; - void resetOn(const IonFrameIterator *iter); + void resetOn(const JitFrameIterator *iter); - const IonFrameIterator &frame() const { + const JitFrameIterator &frame() const { return *frame_; } // Inline frame number, 0 for the outermost (non-inlined) frame. size_t frameNo() const { MOZ_ASSERT(frameCount_ != UINT32_MAX); return frameCount_ - framesRead_; } @@ -633,9 +633,9 @@ class InlineFrameIteratorMaybeGC typedef InlineFrameIteratorMaybeGC<CanGC> InlineFrameIterator; typedef InlineFrameIteratorMaybeGC<NoGC> InlineFrameIteratorNoGC; } // namespace jit } // namespace js #endif // JS_ION -#endif /* jit_IonFrameIterator_h */ +#endif /* jit_JitFrameIterator_h */
--- a/js/src/jit/VMFunctions.cpp +++ b/js/src/jit/VMFunctions.cpp @@ -1013,17 +1013,17 @@ StringReplace(JSContext *cx, HandleStrin return rval.toString(); } bool Recompile(JSContext *cx) { JS_ASSERT(cx->currentlyRunningInJit()); JitActivationIterator activations(cx->runtime()); - IonFrameIterator iter(activations); + JitFrameIterator iter(activations); JS_ASSERT(iter.type() == JitFrame_Exit); ++iter; bool isConstructing = iter.isConstructing(); RootedScript script(cx, iter.script()); JS_ASSERT(script->hasIonScript());
--- a/js/src/jit/arm/Bailouts-arm.cpp +++ b/js/src/jit/arm/Bailouts-arm.cpp @@ -65,17 +65,17 @@ class BailoutStack // Make sure the compiler doesn't add extra padding. static_assert((sizeof(BailoutStack) % 8) == 0, "BailoutStack should be 8-byte aligned."); } // namespace jit } // namespace js IonBailoutIterator::IonBailoutIterator(const JitActivationIterator &activations, BailoutStack *bailout) - : IonFrameIterator(activations), + : JitFrameIterator(activations), machine_(bailout->machine()) { uint8_t *sp = bailout->parentStackPointer(); uint8_t *fp = sp + bailout->frameSize(); current_ = fp; type_ = JitFrame_IonJS; topFrameSize_ = current_ - sp; @@ -100,17 +100,17 @@ IonBailoutIterator::IonBailoutIterator(c uint32_t bailoutId = ((tableOffset - tableStart) / BAILOUT_TABLE_ENTRY_SIZE) - 1; JS_ASSERT(bailoutId < BAILOUT_TABLE_SIZE); snapshotOffset_ = topIonScript_->bailoutToSnapshot(bailoutId); } IonBailoutIterator::IonBailoutIterator(const JitActivationIterator &activations, InvalidationBailoutStack *bailout) - : IonFrameIterator(activations), + : JitFrameIterator(activations), machine_(bailout->machine()) { returnAddressToFp_ = bailout->osiPointReturnAddress(); topIonScript_ = bailout->ionScript(); const OsiIndex *osiIndex = topIonScript_->getOsiIndex(returnAddressToFp_); current_ = (uint8_t*) bailout->fp(); type_ = JitFrame_IonJS;
--- a/js/src/jit/x64/Bailouts-x64.cpp +++ b/js/src/jit/x64/Bailouts-x64.cpp @@ -42,32 +42,32 @@ class BailoutStack } // namespace js #if defined(_WIN32) # pragma pack(pop) #endif IonBailoutIterator::IonBailoutIterator(const JitActivationIterator &activations, BailoutStack *bailout) - : IonFrameIterator(activations), + : JitFrameIterator(activations), machine_(bailout->machineState()) { uint8_t *sp = bailout->parentStackPointer(); uint8_t *fp = sp + bailout->frameSize(); current_ = fp; type_ = JitFrame_IonJS; topFrameSize_ = current_ - sp; topIonScript_ = script()->ionScript(); snapshotOffset_ = bailout->snapshotOffset(); } IonBailoutIterator::IonBailoutIterator(const JitActivationIterator &activations, InvalidationBailoutStack *bailout) - : IonFrameIterator(activations), + : JitFrameIterator(activations), machine_(bailout->machine()) { returnAddressToFp_ = bailout->osiPointReturnAddress(); topIonScript_ = bailout->ionScript(); const OsiIndex *osiIndex = topIonScript_->getOsiIndex(returnAddressToFp_); current_ = (uint8_t*) bailout->fp(); type_ = JitFrame_IonJS;
--- a/js/src/jit/x86/Bailouts-x86.cpp +++ b/js/src/jit/x86/Bailouts-x86.cpp @@ -62,17 +62,17 @@ class BailoutStack } // namespace js #if defined(_WIN32) # pragma pack(pop) #endif IonBailoutIterator::IonBailoutIterator(const JitActivationIterator &activations, BailoutStack *bailout) - : IonFrameIterator(activations), + : JitFrameIterator(activations), machine_(bailout->machine()) { uint8_t *sp = bailout->parentStackPointer(); uint8_t *fp = sp + bailout->frameSize(); current_ = fp; type_ = JitFrame_IonJS; topFrameSize_ = current_ - sp; @@ -97,17 +97,17 @@ IonBailoutIterator::IonBailoutIterator(c uint32_t bailoutId = ((tableOffset - tableStart) / BAILOUT_TABLE_ENTRY_SIZE) - 1; JS_ASSERT(bailoutId < BAILOUT_TABLE_SIZE); snapshotOffset_ = topIonScript_->bailoutToSnapshot(bailoutId); } IonBailoutIterator::IonBailoutIterator(const JitActivationIterator &activations, InvalidationBailoutStack *bailout) - : IonFrameIterator(activations), + : JitFrameIterator(activations), machine_(bailout->machine()) { returnAddressToFp_ = bailout->osiPointReturnAddress(); topIonScript_ = bailout->ionScript(); const OsiIndex *osiIndex = topIonScript_->getOsiIndex(returnAddressToFp_); current_ = (uint8_t*) bailout->fp(); type_ = JitFrame_IonJS;
--- a/js/src/jsfun.cpp +++ b/js/src/jsfun.cpp @@ -28,17 +28,17 @@ #include "builtin/Eval.h" #include "builtin/Object.h" #include "frontend/BytecodeCompiler.h" #include "frontend/TokenStream.h" #include "gc/Marking.h" #ifdef JS_ION #include "jit/Ion.h" -#include "jit/IonFrameIterator.h" +#include "jit/JitFrameIterator.h" #endif #include "vm/Interpreter.h" #include "vm/Shape.h" #include "vm/StringBuffer.h" #include "vm/WrapperObject.h" #include "vm/Xdr.h" #include "jsscriptinlines.h"
--- a/js/src/vm/Stack.cpp +++ b/js/src/vm/Stack.cpp @@ -13,17 +13,17 @@ #include "gc/Marking.h" #ifdef JS_ION #include "jit/AsmJSModule.h" #include "jit/BaselineFrame.h" #include "jit/JitCompartment.h" #endif #include "vm/Opcodes.h" -#include "jit/IonFrameIterator-inl.h" +#include "jit/JitFrameIterator-inl.h" #include "vm/Interpreter-inl.h" #include "vm/Probes-inl.h" #include "vm/ScopeObject-inl.h" using namespace js; using mozilla::PodCopy; @@ -563,17 +563,17 @@ FrameIter::settleOnActivation() ++data_.activations_; continue; } } } #ifdef JS_ION if (activation->isJit()) { - data_.ionFrames_ = jit::IonFrameIterator(data_.activations_); + data_.ionFrames_ = jit::JitFrameIterator(data_.activations_); // Stop at the first scripted frame. while (!data_.ionFrames_.isScripted() && !data_.ionFrames_.done()) ++data_.ionFrames_; // It's possible to have an JitActivation with no scripted frames, // for instance if we hit an over-recursion during bailout. if (data_.ionFrames_.done()) { @@ -650,27 +650,27 @@ FrameIter::Data::Data(const FrameIter::D , ionFrames_(other.ionFrames_) #endif { } FrameIter::FrameIter(JSContext *cx, SavedOption savedOption) : data_(cx, savedOption, CURRENT_CONTEXT, nullptr) #ifdef JS_ION - , ionInlineFrames_(cx, (js::jit::IonFrameIterator*) nullptr) + , ionInlineFrames_(cx, (js::jit::JitFrameIterator*) nullptr) #endif { settleOnActivation(); } FrameIter::FrameIter(JSContext *cx, ContextOption contextOption, SavedOption savedOption, JSPrincipals *principals) : data_(cx, savedOption, contextOption, principals) #ifdef JS_ION - , ionInlineFrames_(cx, (js::jit::IonFrameIterator*) nullptr) + , ionInlineFrames_(cx, (js::jit::JitFrameIterator*) nullptr) #endif { settleOnActivation(); } FrameIter::FrameIter(const FrameIter &other) : data_(other.data_) #ifdef JS_ION @@ -1102,17 +1102,17 @@ FrameIter::updatePcQuadratic() // ActivationIterator::ionTop_ may be invalid, so create a new // activation iterator. data_.activations_ = ActivationIterator(data_.cx_->runtime()); while (data_.activations_.activation() != activation) ++data_.activations_; // Look for the current frame. - data_.ionFrames_ = jit::IonFrameIterator(data_.activations_); + data_.ionFrames_ = jit::JitFrameIterator(data_.activations_); while (!data_.ionFrames_.isBaselineJS() || data_.ionFrames_.baselineFrame() != frame) ++data_.ionFrames_; // Update the pc. JS_ASSERT(data_.ionFrames_.baselineFrame() == frame); data_.ionFrames_.baselineScriptAndPc(nullptr, &data_.pc_); return; }
--- a/js/src/vm/Stack.h +++ b/js/src/vm/Stack.h @@ -7,17 +7,17 @@ #ifndef vm_Stack_h #define vm_Stack_h #include "mozilla/MemoryReporting.h" #include "jsfun.h" #include "jsscript.h" -#include "jit/IonFrameIterator.h" +#include "jit/JitFrameIterator.h" #ifdef CHECK_OSIPOINT_REGISTERS #include "jit/Registers.h" // for RegisterDump #endif #include "js/OldDebugAPI.h" struct JSCompartment; struct JSGenerator; @@ -1510,17 +1510,17 @@ class FrameIter State state_; jsbytecode * pc_; InterpreterFrameIterator interpFrames_; ActivationIterator activations_; #ifdef JS_ION - jit::IonFrameIterator ionFrames_; + jit::JitFrameIterator ionFrames_; #endif Data(JSContext *cx, SavedOption savedOption, ContextOption contextOption, JSPrincipals *principals); Data(const Data &other); }; FrameIter(JSContext *cx, SavedOption = STOP_AT_SAVED);