diff --git a/mozilla/js/js2/icodegenerator.cpp b/mozilla/js/js2/icodegenerator.cpp index d337ef110cb..2ed56871422 100644 --- a/mozilla/js/js2/icodegenerator.cpp +++ b/mozilla/js/js2/icodegenerator.cpp @@ -86,7 +86,7 @@ namespace ICG { */ markMaxRegister(); - return new ICodeModule(iCode, maxRegister, maxVariable); + return new ICodeModule(iCode, maxRegister); } /********************************************************************/ diff --git a/mozilla/js/js2/icodegenerator.h b/mozilla/js/js2/icodegenerator.h index f319d8fa4b0..e96b2312f68 100644 --- a/mozilla/js/js2/icodegenerator.h +++ b/mozilla/js/js2/icodegenerator.h @@ -78,14 +78,11 @@ namespace ICG { class ICodeModule { public: - ICodeModule(InstructionStream *iCode, uint32 maxRegister, - uint32 maxVariable) : - its_iCode(iCode), itsMaxRegister(maxRegister), - itsMaxVariable(maxVariable) { } + ICodeModule(InstructionStream *iCode, uint32 maxRegister) : + its_iCode(iCode), itsMaxRegister(maxRegister) { } InstructionStream *its_iCode; uint32 itsMaxRegister; - uint32 itsMaxVariable; }; /****************************************************************/ @@ -103,11 +100,7 @@ namespace ICG { void markMaxRegister() \ { if (topRegister > maxRegister) maxRegister = topRegister; } - void markMaxVariable(uint32 variableIndex) \ - { if (variableIndex > maxVariable) maxVariable = variableIndex; } - Register topRegister; - Register registerBase; Register getRegister() \ { return topRegister++; } void resetTopRegister() \ @@ -116,9 +109,10 @@ namespace ICG { ICodeOp getBranchOp() \ { ASSERT(!iCode->empty()); return iCode->back()->getBranchOp(); } - + + Register topRegister; + Register registerBase; uint32 maxRegister; - uint32 maxVariable; void setLabel(Label *label); void setLabel(InstructionStream *stream, Label *label); @@ -127,8 +121,7 @@ namespace ICG { void branchConditional(Label *label, Register condition); public: - ICodeGenerator() : topRegister(0), registerBase(0), maxRegister(0), - maxVariable(0) \ + ICodeGenerator() : topRegister(0), registerBase(0), maxRegister(0) { iCode = new InstructionStream(); } virtual ~ICodeGenerator() { if (iCode) delete iCode; } @@ -150,11 +143,8 @@ namespace ICG { Register compare(ICodeOp op, Register source1, Register source2); - Register loadVariable(uint32 frameIndex); Register loadImmediate(double value); - - void saveVariable(uint32 frameIndex, Register value); - + Register newObject(); Register newArray(); diff --git a/mozilla/js/js2/interpreter.cpp b/mozilla/js/js2/interpreter.cpp index c6685210ac4..752425788c9 100644 --- a/mozilla/js/js2/interpreter.cpp +++ b/mozilla/js/js2/interpreter.cpp @@ -61,7 +61,6 @@ namespace Interpreter { // initial activation. JSActivation* activation = new JSActivation(iCode, args); - JSValues* locals = &activation->mLocals; JSValues* registers = &activation->mRegisters; InstructionIterator begin_pc = iCode->its_iCode->begin(); @@ -78,7 +77,6 @@ namespace Interpreter { ICodeModule* target = (*registers)[op2(call)].function->getICode(); activation = new JSActivation(target, activation, op3(call)); - locals = &activation->mLocals; registers = &activation->mRegisters; begin_pc = pc = target->its_iCode->begin(); } @@ -95,7 +93,6 @@ namespace Interpreter { frames.pop(); activation = frame->itsActivation; registers = &activation->mRegisters; - locals = &activation->mLocals; (*registers)[frame->itsResult] = result; pc = frame->itsReturnPC; begin_pc = frame->itsBasePC; @@ -165,18 +162,6 @@ namespace Interpreter { (*registers)[dst(li)] = JSValue(src1(li)); } break; - case LOAD_VAR: - { - LoadVar* lv = static_cast(instruction); - (*registers)[dst(lv)] = (*locals)[src1(lv)]; - } - break; - case SAVE_VAR: - { - SaveVar* sv = static_cast(instruction); - (*locals)[dst(sv)] = (*registers)[src1(sv)]; - } - break; case BRANCH: { GenericBranch* bra = diff --git a/mozilla/js/js2/jstypes.h b/mozilla/js/js2/jstypes.h index 4eeeacf4a4b..878996bb988 100644 --- a/mozilla/js/js2/jstypes.h +++ b/mozilla/js/js2/jstypes.h @@ -176,23 +176,23 @@ namespace JSTypes { */ struct JSActivation : public gc_base { JSValues mRegisters; - JSValues mLocals; JSActivation(ICodeModule* iCode, const JSValues& args) - : mRegisters(iCode->itsMaxRegister + 1), mLocals(args) + : mRegisters(iCode->itsMaxRegister + 1) { - // ensure that locals array is large enough. - uint32 localsSize = iCode->itsMaxVariable + 1; - if (localsSize > mLocals.size()) - mLocals.resize(localsSize); + // copy arg list to initial registers. + JSValues::iterator dest = mRegisters.begin(); + for (JSValues::const_iterator src = args.begin(), + end = args.end(); src != end; ++src, ++dest) { + *dest = *src; + } } JSActivation(ICodeModule* iCode, JSActivation* caller, const RegisterList& list) - : mRegisters(iCode->itsMaxRegister + 1), - mLocals(iCode->itsMaxVariable + 1) + : mRegisters(iCode->itsMaxRegister + 1) { - // copy caller's parameter list in to locals. + // copy caller's parameter list to initial registers. JSValues::iterator dest = mRegisters.begin(); const JSValues& params = caller->mRegisters; for (RegisterList::const_iterator src = list.begin(), diff --git a/mozilla/js2/src/icodegenerator.cpp b/mozilla/js2/src/icodegenerator.cpp index d337ef110cb..2ed56871422 100644 --- a/mozilla/js2/src/icodegenerator.cpp +++ b/mozilla/js2/src/icodegenerator.cpp @@ -86,7 +86,7 @@ namespace ICG { */ markMaxRegister(); - return new ICodeModule(iCode, maxRegister, maxVariable); + return new ICodeModule(iCode, maxRegister); } /********************************************************************/ diff --git a/mozilla/js2/src/icodegenerator.h b/mozilla/js2/src/icodegenerator.h index f319d8fa4b0..e96b2312f68 100644 --- a/mozilla/js2/src/icodegenerator.h +++ b/mozilla/js2/src/icodegenerator.h @@ -78,14 +78,11 @@ namespace ICG { class ICodeModule { public: - ICodeModule(InstructionStream *iCode, uint32 maxRegister, - uint32 maxVariable) : - its_iCode(iCode), itsMaxRegister(maxRegister), - itsMaxVariable(maxVariable) { } + ICodeModule(InstructionStream *iCode, uint32 maxRegister) : + its_iCode(iCode), itsMaxRegister(maxRegister) { } InstructionStream *its_iCode; uint32 itsMaxRegister; - uint32 itsMaxVariable; }; /****************************************************************/ @@ -103,11 +100,7 @@ namespace ICG { void markMaxRegister() \ { if (topRegister > maxRegister) maxRegister = topRegister; } - void markMaxVariable(uint32 variableIndex) \ - { if (variableIndex > maxVariable) maxVariable = variableIndex; } - Register topRegister; - Register registerBase; Register getRegister() \ { return topRegister++; } void resetTopRegister() \ @@ -116,9 +109,10 @@ namespace ICG { ICodeOp getBranchOp() \ { ASSERT(!iCode->empty()); return iCode->back()->getBranchOp(); } - + + Register topRegister; + Register registerBase; uint32 maxRegister; - uint32 maxVariable; void setLabel(Label *label); void setLabel(InstructionStream *stream, Label *label); @@ -127,8 +121,7 @@ namespace ICG { void branchConditional(Label *label, Register condition); public: - ICodeGenerator() : topRegister(0), registerBase(0), maxRegister(0), - maxVariable(0) \ + ICodeGenerator() : topRegister(0), registerBase(0), maxRegister(0) { iCode = new InstructionStream(); } virtual ~ICodeGenerator() { if (iCode) delete iCode; } @@ -150,11 +143,8 @@ namespace ICG { Register compare(ICodeOp op, Register source1, Register source2); - Register loadVariable(uint32 frameIndex); Register loadImmediate(double value); - - void saveVariable(uint32 frameIndex, Register value); - + Register newObject(); Register newArray(); diff --git a/mozilla/js2/src/interpreter.cpp b/mozilla/js2/src/interpreter.cpp index c6685210ac4..752425788c9 100644 --- a/mozilla/js2/src/interpreter.cpp +++ b/mozilla/js2/src/interpreter.cpp @@ -61,7 +61,6 @@ namespace Interpreter { // initial activation. JSActivation* activation = new JSActivation(iCode, args); - JSValues* locals = &activation->mLocals; JSValues* registers = &activation->mRegisters; InstructionIterator begin_pc = iCode->its_iCode->begin(); @@ -78,7 +77,6 @@ namespace Interpreter { ICodeModule* target = (*registers)[op2(call)].function->getICode(); activation = new JSActivation(target, activation, op3(call)); - locals = &activation->mLocals; registers = &activation->mRegisters; begin_pc = pc = target->its_iCode->begin(); } @@ -95,7 +93,6 @@ namespace Interpreter { frames.pop(); activation = frame->itsActivation; registers = &activation->mRegisters; - locals = &activation->mLocals; (*registers)[frame->itsResult] = result; pc = frame->itsReturnPC; begin_pc = frame->itsBasePC; @@ -165,18 +162,6 @@ namespace Interpreter { (*registers)[dst(li)] = JSValue(src1(li)); } break; - case LOAD_VAR: - { - LoadVar* lv = static_cast(instruction); - (*registers)[dst(lv)] = (*locals)[src1(lv)]; - } - break; - case SAVE_VAR: - { - SaveVar* sv = static_cast(instruction); - (*locals)[dst(sv)] = (*registers)[src1(sv)]; - } - break; case BRANCH: { GenericBranch* bra = diff --git a/mozilla/js2/src/jstypes.h b/mozilla/js2/src/jstypes.h index 4eeeacf4a4b..878996bb988 100644 --- a/mozilla/js2/src/jstypes.h +++ b/mozilla/js2/src/jstypes.h @@ -176,23 +176,23 @@ namespace JSTypes { */ struct JSActivation : public gc_base { JSValues mRegisters; - JSValues mLocals; JSActivation(ICodeModule* iCode, const JSValues& args) - : mRegisters(iCode->itsMaxRegister + 1), mLocals(args) + : mRegisters(iCode->itsMaxRegister + 1) { - // ensure that locals array is large enough. - uint32 localsSize = iCode->itsMaxVariable + 1; - if (localsSize > mLocals.size()) - mLocals.resize(localsSize); + // copy arg list to initial registers. + JSValues::iterator dest = mRegisters.begin(); + for (JSValues::const_iterator src = args.begin(), + end = args.end(); src != end; ++src, ++dest) { + *dest = *src; + } } JSActivation(ICodeModule* iCode, JSActivation* caller, const RegisterList& list) - : mRegisters(iCode->itsMaxRegister + 1), - mLocals(iCode->itsMaxVariable + 1) + : mRegisters(iCode->itsMaxRegister + 1) { - // copy caller's parameter list in to locals. + // copy caller's parameter list to initial registers. JSValues::iterator dest = mRegisters.begin(); const JSValues& params = caller->mRegisters; for (RegisterList::const_iterator src = list.begin(),