Changeset 130726 in webkit
- Timestamp:
- Oct 9, 2012, 12:12:56 AM (13 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 67 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/CMakeLists.txt
r130520 r130726 134 134 interpreter/CallFrame.cpp 135 135 interpreter/Interpreter.cpp 136 interpreter/ RegisterFile.cpp136 interpreter/JSStack.cpp 137 137 interpreter/VMInspector.cpp 138 138 -
trunk/Source/JavaScriptCore/ChangeLog
r130720 r130726 1 2012-10-08 Mark Lam <[email protected]> 2 3 Renamed RegisterFile to JSStack, and removed prototype of the 4 previously deleted Interpreter::privateExecute(). 5 https://bugs.webkit.org/show_bug.cgi?id=98717. 6 7 Reviewed by Filip Pizlo. 8 9 * CMakeLists.txt: 10 * GNUmakefile.list.am: 11 * JavaScriptCore.order: 12 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 13 * JavaScriptCore.xcodeproj/project.pbxproj: 14 * Target.pri: 15 * bytecode/BytecodeConventions.h: 16 * bytecode/CodeBlock.cpp: 17 (JSC::CodeBlock::nameForRegister): 18 * bytecode/CodeBlock.h: 19 (CodeBlock): 20 * bytecode/ValueRecovery.h: 21 (JSC::ValueRecovery::alreadyInJSStack): 22 (JSC::ValueRecovery::alreadyInJSStackAsUnboxedInt32): 23 (JSC::ValueRecovery::alreadyInJSStackAsUnboxedCell): 24 (JSC::ValueRecovery::alreadyInJSStackAsUnboxedBoolean): 25 (JSC::ValueRecovery::alreadyInJSStackAsUnboxedDouble): 26 (JSC::ValueRecovery::displacedInJSStack): 27 (JSC::ValueRecovery::isAlreadyInJSStack): 28 (JSC::ValueRecovery::virtualRegister): 29 (JSC::ValueRecovery::dump): 30 * bytecompiler/BytecodeGenerator.cpp: 31 (JSC::BytecodeGenerator::resolveCallee): 32 (JSC::BytecodeGenerator::emitCall): 33 (JSC::BytecodeGenerator::emitConstruct): 34 * bytecompiler/BytecodeGenerator.h: 35 (JSC::BytecodeGenerator::registerFor): 36 * dfg/DFGAbstractState.h: 37 (AbstractState): 38 * dfg/DFGAssemblyHelpers.h: 39 (JSC::DFG::AssemblyHelpers::emitGetFromCallFrameHeaderPtr): 40 (JSC::DFG::AssemblyHelpers::emitPutToCallFrameHeader): 41 (JSC::DFG::AssemblyHelpers::emitPutImmediateToCallFrameHeader): 42 * dfg/DFGByteCodeParser.cpp: 43 (JSC::DFG::ByteCodeParser::getDirect): 44 (JSC::DFG::ByteCodeParser::findArgumentPositionForLocal): 45 (JSC::DFG::ByteCodeParser::addCall): 46 (JSC::DFG::ByteCodeParser::InlineStackEntry::remapOperand): 47 (JSC::DFG::ByteCodeParser::handleInlining): 48 (JSC::DFG::ByteCodeParser::parseBlock): 49 (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): 50 * dfg/DFGGenerationInfo.h: 51 (GenerationInfo): 52 (JSC::DFG::GenerationInfo::needsSpill): 53 * dfg/DFGGraph.h: 54 * dfg/DFGJITCompiler.cpp: 55 (JSC::DFG::JITCompiler::compileEntry): 56 (JSC::DFG::JITCompiler::compileFunction): 57 * dfg/DFGJITCompiler.h: 58 (JSC::DFG::JITCompiler::beginCall): 59 * dfg/DFGOSREntry.cpp: 60 (JSC::DFG::prepareOSREntry): 61 * dfg/DFGOSRExitCompiler32_64.cpp: 62 (JSC::DFG::OSRExitCompiler::compileExit): 63 * dfg/DFGOSRExitCompiler64.cpp: 64 (JSC::DFG::OSRExitCompiler::compileExit): 65 * dfg/DFGRepatch.cpp: 66 (JSC::DFG::tryBuildGetByIDList): 67 * dfg/DFGSpeculativeJIT.cpp: 68 (JSC::DFG::SpeculativeJIT::compile): 69 (JSC::DFG::SpeculativeJIT::checkArgumentTypes): 70 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor): 71 * dfg/DFGSpeculativeJIT.h: 72 (SpeculativeJIT): 73 (JSC::DFG::SpeculativeJIT::spill): 74 * dfg/DFGSpeculativeJIT32_64.cpp: 75 (JSC::DFG::SpeculativeJIT::emitCall): 76 (JSC::DFG::SpeculativeJIT::compile): 77 * dfg/DFGSpeculativeJIT64.cpp: 78 (JSC::DFG::SpeculativeJIT::fillInteger): 79 (JSC::DFG::SpeculativeJIT::emitCall): 80 (JSC::DFG::SpeculativeJIT::compile): 81 * dfg/DFGThunks.cpp: 82 (JSC::DFG::throwExceptionFromCallSlowPathGenerator): 83 (JSC::DFG::slowPathFor): 84 (JSC::DFG::virtualForThunkGenerator): 85 * dfg/DFGValueSource.cpp: 86 (JSC::DFG::ValueSource::dump): 87 * dfg/DFGValueSource.h: 88 (JSC::DFG::dataFormatToValueSourceKind): 89 (JSC::DFG::valueSourceKindToDataFormat): 90 (JSC::DFG::isInJSStack): 91 (JSC::DFG::ValueSource::forSpeculation): 92 (JSC::DFG::ValueSource::isInJSStack): 93 (JSC::DFG::ValueSource::valueRecovery): 94 * dfg/DFGVariableEventStream.cpp: 95 (JSC::DFG::VariableEventStream::reconstruct): 96 * heap/Heap.cpp: 97 (JSC::Heap::stack): 98 (JSC::Heap::getConservativeRegisterRoots): 99 (JSC::Heap::markRoots): 100 * heap/Heap.h: 101 (JSC): 102 (Heap): 103 * interpreter/CallFrame.cpp: 104 (JSC::CallFrame::stack): 105 * interpreter/CallFrame.h: 106 (JSC::ExecState::calleeAsValue): 107 (JSC::ExecState::callee): 108 (JSC::ExecState::codeBlock): 109 (JSC::ExecState::scope): 110 (JSC::ExecState::callerFrame): 111 (JSC::ExecState::returnPC): 112 (JSC::ExecState::hasReturnPC): 113 (JSC::ExecState::clearReturnPC): 114 (JSC::ExecState::bytecodeOffsetForNonDFGCode): 115 (JSC::ExecState::setBytecodeOffsetForNonDFGCode): 116 (JSC::ExecState::inlineCallFrame): 117 (JSC::ExecState::codeOriginIndexForDFG): 118 (JSC::ExecState::currentVPC): 119 (JSC::ExecState::setCurrentVPC): 120 (JSC::ExecState::setCallerFrame): 121 (JSC::ExecState::setScope): 122 (JSC::ExecState::init): 123 (JSC::ExecState::argumentCountIncludingThis): 124 (JSC::ExecState::offsetFor): 125 (JSC::ExecState::setArgumentCountIncludingThis): 126 (JSC::ExecState::setCallee): 127 (JSC::ExecState::setCodeBlock): 128 (JSC::ExecState::setReturnPC): 129 (JSC::ExecState::setInlineCallFrame): 130 (ExecState): 131 * interpreter/Interpreter.cpp: 132 (JSC::Interpreter::slideRegisterWindowForCall): 133 (JSC::eval): 134 (JSC::loadVarargs): 135 (JSC::Interpreter::dumpRegisters): 136 (JSC::Interpreter::throwException): 137 (JSC::Interpreter::execute): 138 (JSC::Interpreter::executeCall): 139 (JSC::Interpreter::executeConstruct): 140 (JSC::Interpreter::prepareForRepeatCall): 141 (JSC::Interpreter::endRepeatCall): 142 * interpreter/Interpreter.h: 143 (JSC::Interpreter::stack): 144 (Interpreter): 145 (JSC::Interpreter::execute): 146 (JSC): 147 * interpreter/JSStack.cpp: Copied from Source/JavaScriptCore/interpreter/RegisterFile.cpp. 148 (JSC::stackStatisticsMutex): 149 (JSC::JSStack::~JSStack): 150 (JSC::JSStack::growSlowCase): 151 (JSC::JSStack::gatherConservativeRoots): 152 (JSC::JSStack::releaseExcessCapacity): 153 (JSC::JSStack::initializeThreading): 154 (JSC::JSStack::committedByteCount): 155 (JSC::JSStack::addToCommittedByteCount): 156 * interpreter/JSStack.h: Copied from Source/JavaScriptCore/interpreter/RegisterFile.h. 157 (JSStack): 158 (JSC::JSStack::JSStack): 159 (JSC::JSStack::shrink): 160 (JSC::JSStack::grow): 161 * interpreter/RegisterFile.cpp: Removed. 162 * interpreter/RegisterFile.h: Removed. 163 * interpreter/VMInspector.cpp: 164 (JSC::VMInspector::dumpFrame): 165 * jit/JIT.cpp: 166 (JSC::JIT::JIT): 167 (JSC::JIT::privateCompile): 168 * jit/JIT.h: 169 (JSC): 170 (JIT): 171 * jit/JITCall.cpp: 172 (JSC::JIT::compileLoadVarargs): 173 (JSC::JIT::compileCallEval): 174 (JSC::JIT::compileCallEvalSlowCase): 175 (JSC::JIT::compileOpCall): 176 * jit/JITCall32_64.cpp: 177 (JSC::JIT::emit_op_ret): 178 (JSC::JIT::emit_op_ret_object_or_this): 179 (JSC::JIT::compileLoadVarargs): 180 (JSC::JIT::compileCallEval): 181 (JSC::JIT::compileCallEvalSlowCase): 182 (JSC::JIT::compileOpCall): 183 * jit/JITCode.h: 184 (JSC): 185 (JSC::JITCode::execute): 186 * jit/JITInlineMethods.h: 187 (JSC::JIT::emitPutToCallFrameHeader): 188 (JSC::JIT::emitPutCellToCallFrameHeader): 189 (JSC::JIT::emitPutIntToCallFrameHeader): 190 (JSC::JIT::emitPutImmediateToCallFrameHeader): 191 (JSC::JIT::emitGetFromCallFrameHeaderPtr): 192 (JSC::JIT::emitGetFromCallFrameHeader32): 193 (JSC::JIT::updateTopCallFrame): 194 (JSC::JIT::unmap): 195 * jit/JITOpcodes.cpp: 196 (JSC::JIT::privateCompileCTIMachineTrampolines): 197 (JSC::JIT::privateCompileCTINativeCall): 198 (JSC::JIT::emit_op_end): 199 (JSC::JIT::emit_op_ret): 200 (JSC::JIT::emit_op_ret_object_or_this): 201 (JSC::JIT::emit_op_create_this): 202 (JSC::JIT::emit_op_get_arguments_length): 203 (JSC::JIT::emit_op_get_argument_by_val): 204 (JSC::JIT::emit_op_resolve_global_dynamic): 205 * jit/JITOpcodes32_64.cpp: 206 (JSC::JIT::privateCompileCTIMachineTrampolines): 207 (JSC::JIT::privateCompileCTINativeCall): 208 (JSC::JIT::emit_op_end): 209 (JSC::JIT::emit_op_create_this): 210 (JSC::JIT::emit_op_get_arguments_length): 211 (JSC::JIT::emit_op_get_argument_by_val): 212 * jit/JITPropertyAccess.cpp: 213 (JSC::JIT::emit_op_get_scoped_var): 214 (JSC::JIT::emit_op_put_scoped_var): 215 * jit/JITPropertyAccess32_64.cpp: 216 (JSC::JIT::emit_op_get_scoped_var): 217 (JSC::JIT::emit_op_put_scoped_var): 218 * jit/JITStubs.cpp: 219 (JSC::ctiTrampoline): 220 (JSC::JITThunks::JITThunks): 221 (JSC): 222 (JSC::DEFINE_STUB_FUNCTION): 223 * jit/JITStubs.h: 224 (JSC): 225 (JITStackFrame): 226 * jit/JSInterfaceJIT.h: 227 * jit/SpecializedThunkJIT.h: 228 (JSC::SpecializedThunkJIT::SpecializedThunkJIT): 229 (JSC::SpecializedThunkJIT::returnJSValue): 230 (JSC::SpecializedThunkJIT::returnDouble): 231 (JSC::SpecializedThunkJIT::returnInt32): 232 (JSC::SpecializedThunkJIT::returnJSCell): 233 * llint/LLIntData.cpp: 234 (JSC::LLInt::Data::performAssertions): 235 * llint/LLIntOffsetsExtractor.cpp: 236 * llint/LLIntSlowPaths.cpp: 237 (JSC::LLInt::LLINT_SLOW_PATH_DECL): 238 (JSC::LLInt::genericCall): 239 * llint/LLIntSlowPaths.h: 240 (LLInt): 241 * llint/LowLevelInterpreter.asm: 242 * runtime/Arguments.cpp: 243 (JSC::Arguments::tearOffForInlineCallFrame): 244 * runtime/CommonSlowPaths.h: 245 (JSC::CommonSlowPaths::arityCheckFor): 246 * runtime/InitializeThreading.cpp: 247 (JSC::initializeThreadingOnce): 248 * runtime/JSActivation.cpp: 249 (JSC::JSActivation::visitChildren): 250 * runtime/JSGlobalObject.cpp: 251 (JSC::JSGlobalObject::globalExec): 252 * runtime/JSGlobalObject.h: 253 (JSC): 254 (JSGlobalObject): 255 * runtime/JSLock.cpp: 256 (JSC): 257 * runtime/JSVariableObject.h: 258 (JSVariableObject): 259 * runtime/MemoryStatistics.cpp: 260 (JSC::globalMemoryStatistics): 261 1 262 2012-10-08 Kiran Muppala <[email protected]> 2 263 -
trunk/Source/JavaScriptCore/GNUmakefile.list.am
r130520 r130726 368 368 Source/JavaScriptCore/interpreter/Interpreter.cpp \ 369 369 Source/JavaScriptCore/interpreter/Interpreter.h \ 370 Source/JavaScriptCore/interpreter/ RegisterFile.cpp \371 Source/JavaScriptCore/interpreter/ RegisterFile.h \370 Source/JavaScriptCore/interpreter/JSStack.cpp \ 371 Source/JavaScriptCore/interpreter/JSStack.h \ 372 372 Source/JavaScriptCore/interpreter/Register.h \ 373 373 Source/JavaScriptCore/interpreter/VMInspector.cpp \ -
trunk/Source/JavaScriptCore/JavaScriptCore.order
r123878 r130726 30 30 __ZN3WTF11currentTimeEv 31 31 __ZN3WTF8msToYearEd 32 __ZN3JSC12 RegisterFile19initializeThreadingEv32 __ZN3JSC12JSStack19initializeThreadingEv 33 33 __ZN3WTF39initializeMainThreadToProcessMainThreadEv 34 34 __ZN3WTF36lockAtomicallyInitializedStaticMutexEv … … 159 159 __ZN3JSC11InterpreterC1ERNS_12JSGlobalDataE 160 160 __ZN3JSC10HandleHeap12writeBarrierEPNS_7JSValueERKS1_ 161 __ZN3JSC12 RegisterFile23addToCommittedByteCountEl161 __ZN3JSC12JSStack23addToCommittedByteCountEl 162 162 __ZN3JSC11MarkedSpace21allocateFromSizeClassERNS0_9SizeClassE 163 163 __ZN3JSC11MarkedSpace13allocateBlockERNS0_9SizeClassE … … 371 371 __ZN3JSC14MachineThreads23gatherFromCurrentThreadERNS_17ConservativeRootsEPv 372 372 __ZN3JSC17ConservativeRoots3addEPvS1_ 373 __ZN3JSC12 RegisterFile23gatherConservativeRootsERNS_17ConservativeRootsE373 __ZN3JSC12JSStack23gatherConservativeRootsERNS_17ConservativeRootsE 374 374 __ZN3JSC11MarkedSpace10clearMarksEv 375 375 __ZN3JSC9MarkStack6appendERNS_17ConservativeRootsE … … 512 512 __ZThn16_N3JSC11ProgramNodeD0Ev 513 513 __ZN3JSC11ProgramNodeD0Ev 514 __ZN3JSC12 RegisterFile12globalObjectEv515 __ZN3JSC14JSGlobalObject13copyGlobalsToERNS_12 RegisterFileE516 __ZN3JSC12 RegisterFile15setGlobalObjectEPNS_14JSGlobalObjectE514 __ZN3JSC12JSStack12globalObjectEv 515 __ZN3JSC14JSGlobalObject13copyGlobalsToERNS_12JSStackE 516 __ZN3JSC12JSStack15setGlobalObjectEPNS_14JSGlobalObjectE 517 517 _ctiTrampoline 518 518 __ZN3WTF15SegmentedVectorIN3JSC10IdentifierELm64EE6appendIS2_EEvRKT_ … … 683 683 __ZN3JSC9CodeBlockD2Ev 684 684 __ZN3JSC15WeakHandleOwner26isReachableFromOpaqueRootsENS_6HandleINS_7UnknownEEEPvRNS_9MarkStackE 685 __ZN3JSC12 RegisterFile17GlobalObjectOwner8finalizeENS_6HandleINS_7UnknownEEEPv685 __ZN3JSC12JSStack17GlobalObjectOwner8finalizeENS_6HandleINS_7UnknownEEEPv 686 686 __ZN3JSC13ErrorInstanceD1Ev 687 687 __ZN3JSC12StringObjectD1Ev … … 785 785 __ZN3JSC18FunctionExecutableC1EPNS_9ExecStateERKNS_10IdentifierERKNS_10SourceCodeEbPNS_18FunctionParametersEbii 786 786 __ZN3JSC12FuncDeclNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE 787 __ZN3JSC14JSGlobalObject15copyGlobalsFromERNS_12 RegisterFileE787 __ZN3JSC14JSGlobalObject15copyGlobalsFromERNS_12JSStackE 788 788 __ZNK3WTF12AtomicString5lowerEv 789 789 __ZN3JSC41constructFunctionSkippingEvalEnabledCheckEPNS_9ExecStateEPNS_14JSGlobalObjectERKNS_7ArgListERKNS_10IdentifierERKNS_7UStringEi … … 811 811 __ZN3JSC17AssignResolveNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE 812 812 __ZN3JSC17BytecodeGenerator15isLocalConstantERKNS_10IdentifierE 813 _cti_ register_file_check813 _cti_stack_check 814 814 __ZN3JSC16JSCallbackObjectINS_24JSObjectWithGlobalObjectEE17staticValueGetterEPNS_9ExecStateENS_7JSValueERKNS_10IdentifierE 815 815 __ZN3WTF9HashTableISt4pairINS_6RefPtrINS_10StringImplEEEjES1_IS5_PN3JSC7JSValueEENS_18PairFirstExtractorIS9_EENS6_24StructureTransitionTable4HashENS_14PairHashTraitsINSC_10HashTraitsENS_10HashTraitsIS8_EEEESF_E6rehashEi … … 980 980 __ZN3JSC12JSActivation18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE 981 981 _cti_op_call_eval 982 __ZN3JSC11Interpreter8callEvalEPNS_9ExecStateEPNS_12 RegisterFileEPNS_8RegisterEii982 __ZN3JSC11Interpreter8callEvalEPNS_9ExecStateEPNS_12JSStackEPNS_8RegisterEii 983 983 __ZN3JSC14EvalExecutableC1EPNS_9ExecStateERKNS_10SourceCodeEb 984 984 __ZN3JSC14EvalExecutable15compileInternalEPNS_9ExecStateEPNS_14ScopeChainNodeE … … 1714 1714 __ZN3JSC12JSGlobalDataD1Ev 1715 1715 __ZN3JSC12JSGlobalDataD2Ev 1716 __ZN3JSC12 RegisterFileD1Ev1717 __ZN3JSC12 RegisterFileD2Ev1716 __ZN3JSC12JSStackD1Ev 1717 __ZN3JSC12JSStackD2Ev 1718 1718 __ZNK3JSC9HashTable11deleteTableEv 1719 1719 __ZN3JSC5LexerD1Ev … … 1836 1836 __ZN3JSC16createRangeErrorEPNS_9ExecStateERKNS_7UStringE 1837 1837 _cti_op_mul 1838 __ZN3JSC12 RegisterFile21releaseExcessCapacityEv1838 __ZN3JSC12JSStack21releaseExcessCapacityEv 1839 1839 __ZN3JSC16JSCallbackObjectINS_14JSGlobalObjectEED1Ev 1840 1840 _JSObjectHasProperty … … 2483 2483 __ZN3WTF20fastMallocStatisticsEv 2484 2484 __ZN3JSC22globalMemoryStatisticsEv 2485 __ZN3JSC12 RegisterFile18committedByteCountEv2485 __ZN3JSC12JSStack18committedByteCountEv 2486 2486 __ZN3JSC19ExecutableAllocator18committedByteCountEv 2487 2487 __ZN3WTF9HashTableINS_6RefPtrINS_10StringImplEEESt4pairIS3_N3JSC14OffsetLocationEENS_18PairFirstExtractorIS7_EENS_10StringHashENS_14PairHashTraitsINS_10HashTraitsIS3_EENSC_IS6_EEEESD_E4findIPS2_NS_29RefPtrHashMapRawKeyTranslatorISI_S7_SF_SA_EEEENS_17HashTableIteratorIS3_S7_S9_SA_SF_SD_EERKT_ -
trunk/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj
r130520 r130726 2143 2143 </File> 2144 2144 <File 2145 RelativePath="..\..\interpreter\JSStack.cpp" 2146 > 2147 </File> 2148 <File 2149 RelativePath="..\..\interpreter\JSStack.h" 2150 > 2151 </File> 2152 <File 2145 2153 RelativePath="..\..\interpreter\Register.h" 2146 >2147 </File>2148 <File2149 RelativePath="..\..\interpreter\RegisterFile.cpp"2150 >2151 </File>2152 <File2153 RelativePath="..\..\interpreter\RegisterFile.h"2154 2154 > 2155 2155 </File> -
trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
r130520 r130726 280 280 1428082D107EC0570013E7B2 /* CallData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCA62DFE0E2826230004F30D /* CallData.cpp */; }; 281 281 1428082E107EC0570013E7B2 /* ConstructData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCA62DFF0E2826310004F30D /* ConstructData.cpp */; }; 282 1428083A107EC0750013E7B2 /* RegisterFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1429D85B0ED218E900B89619 /* RegisterFile.cpp */; };282 1428083A107EC0750013E7B2 /* JSStack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1429D85B0ED218E900B89619 /* JSStack.cpp */; }; 283 283 14280841107EC0930013E7B2 /* RegExp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F692A87D0255597D01FF60F7 /* RegExp.cpp */; }; 284 284 14280842107EC0930013E7B2 /* RegExpConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCD202BD0E1706A7002C7E82 /* RegExpConstructor.cpp */; }; … … 667 667 BC18C45B0E16F5CD00B34460 /* RegExpObject.h in Headers */ = {isa = PBXBuildFile; fileRef = F692A87C0255597D01FF60F7 /* RegExpObject.h */; settings = {ATTRIBUTES = (Private, ); }; }; 668 668 BC18C45D0E16F5CD00B34460 /* Register.h in Headers */ = {isa = PBXBuildFile; fileRef = 149B24FF0D8AF6D1009CB8C7 /* Register.h */; settings = {ATTRIBUTES = (Private, ); }; }; 669 BC18C45E0E16F5CD00B34460 /* RegisterFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 14D792640DAA03FB001A9F05 /* RegisterFile.h */; settings = {ATTRIBUTES = (Private, ); }; };669 BC18C45E0E16F5CD00B34460 /* JSStack.h in Headers */ = {isa = PBXBuildFile; fileRef = 14D792640DAA03FB001A9F05 /* JSStack.h */; settings = {ATTRIBUTES = (Private, ); }; }; 670 670 BC18C4630E16F5CD00B34460 /* SourceProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 65E866ED0DD59AFA00A2B2A1 /* SourceProvider.h */; settings = {ATTRIBUTES = (Private, ); }; }; 671 671 BC18C4640E16F5CD00B34460 /* SourceCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 65E866EE0DD59AFA00A2B2A1 /* SourceCode.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 1056 1056 1429D77B0ED20D7300B89619 /* Interpreter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Interpreter.h; sourceTree = "<group>"; }; 1057 1057 1429D7D30ED2128200B89619 /* Interpreter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Interpreter.cpp; sourceTree = "<group>"; }; 1058 1429D85B0ED218E900B89619 /* RegisterFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RegisterFile.cpp; sourceTree = "<group>"; };1058 1429D85B0ED218E900B89619 /* JSStack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSStack.cpp; sourceTree = "<group>"; }; 1059 1059 1429D8770ED21ACD00B89619 /* ExceptionHelpers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ExceptionHelpers.cpp; sourceTree = "<group>"; }; 1060 1060 1429D8830ED21C3D00B89619 /* SamplingTool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SamplingTool.cpp; sourceTree = "<group>"; }; … … 1144 1144 14D2F3D8139F4BE200491031 /* MarkedSpace.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MarkedSpace.cpp; sourceTree = "<group>"; }; 1145 1145 14D2F3D9139F4BE200491031 /* MarkedSpace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MarkedSpace.h; sourceTree = "<group>"; }; 1146 14D792640DAA03FB001A9F05 /* RegisterFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegisterFile.h; sourceTree = "<group>"; };1146 14D792640DAA03FB001A9F05 /* JSStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSStack.h; sourceTree = "<group>"; }; 1147 1147 14D857740A4696C80032146C /* testapi.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; name = testapi.js; path = API/tests/testapi.js; sourceTree = "<group>"; }; 1148 1148 14DA818E0D99FD2000B0A4FB /* JSActivation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSActivation.h; sourceTree = "<group>"; }; … … 1768 1768 1429D77B0ED20D7300B89619 /* Interpreter.h */, 1769 1769 149B24FF0D8AF6D1009CB8C7 /* Register.h */, 1770 1429D85B0ED218E900B89619 /* RegisterFile.cpp */,1771 14D792640DAA03FB001A9F05 /* RegisterFile.h */,1770 1429D85B0ED218E900B89619 /* JSStack.cpp */, 1771 14D792640DAA03FB001A9F05 /* JSStack.h */, 1772 1772 ); 1773 1773 path = interpreter; … … 2713 2713 9534AAFB0E5B7A9600B8A45B /* JSProfilerPrivate.h in Headers */, 2714 2714 BC18C4260E16F5CD00B34460 /* JSRetainPtr.h in Headers */, 2715 BC18C45E0E16F5CD00B34460 /* JSStack.h in Headers */, 2715 2716 BC18C4270E16F5CD00B34460 /* JSString.h in Headers */, 2716 2717 86E85539111B9968001AF51E /* JSStringBuilder.h in Headers */, … … 2794 2795 BCD202C40E1706A7002C7E82 /* RegExpPrototype.h in Headers */, 2795 2796 BC18C45D0E16F5CD00B34460 /* Register.h in Headers */, 2796 BC18C45E0E16F5CD00B34460 /* RegisterFile.h in Headers */,2797 2797 969A072B0ED1CE6900F1F681 /* RegisterID.h in Headers */, 2798 2798 86D3B3C410159D7F002865E7 /* RepatchBuffer.h in Headers */, … … 3420 3420 95F6E6950E5B5F970091E860 /* JSProfilerPrivate.cpp in Sources */, 3421 3421 A727FF6B0DA3092200E548D7 /* JSPropertyNameIterator.cpp in Sources */, 3422 1428083A107EC0750013E7B2 /* JSStack.cpp in Sources */, 3422 3423 147F39D5107EC37600427A48 /* JSString.cpp in Sources */, 3423 3424 2600B5A6152BAAA70091EE5F /* JSStringJoiner.cpp in Sources */, … … 3469 3470 14280843107EC0930013E7B2 /* RegExpObject.cpp in Sources */, 3470 3471 14280844107EC0930013E7B2 /* RegExpPrototype.cpp in Sources */, 3471 1428083A107EC0750013E7B2 /* RegisterFile.cpp in Sources */,3472 3472 0F7700921402FF3C0078EB39 /* SamplingCounter.cpp in Sources */, 3473 3473 1429D8850ED21C3D00B89619 /* SamplingTool.cpp in Sources */, -
trunk/Source/JavaScriptCore/Target.pri
r130520 r130726 139 139 interpreter/CallFrame.cpp \ 140 140 interpreter/Interpreter.cpp \ 141 interpreter/ RegisterFile.cpp \141 interpreter/JSStack.cpp \ 142 142 jit/ExecutableAllocatorFixedVMPool.cpp \ 143 143 jit/ExecutableAllocator.cpp \ -
trunk/Source/JavaScriptCore/bytecode/BytecodeConventions.h
r108444 r130726 28 28 29 29 // Register numbers used in bytecode operations have different meaning according to their ranges: 30 // 0x80000000-0xFFFFFFFF Negative indices from the CallFrame pointer are entries in the call frame, see RegisterFile.h.30 // 0x80000000-0xFFFFFFFF Negative indices from the CallFrame pointer are entries in the call frame, see JSStack.h. 31 31 // 0x00000000-0x3FFFFFFF Forwards indices from the CallFrame pointer are local vars and temporaries with the function's callframe. 32 32 // 0x40000000-0x7FFFFFFF Positive indices from 0x40000000 specify entries in the constant pool on the CodeBlock. -
trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp
r130612 r130726 3018 3018 if (registerNumber < 0) { 3019 3019 int argumentPosition = -registerNumber; 3020 argumentPosition -= RegisterFile::CallFrameHeaderSize + 1;3020 argumentPosition -= JSStack::CallFrameHeaderSize + 1; 3021 3021 return String::format("arguments[%3d]", argumentPosition - 1).impl(); 3022 3022 } -
trunk/Source/JavaScriptCore/bytecode/CodeBlock.h
r129297 r130726 160 160 } 161 161 #endif 162 162 163 163 void visitAggregate(SlotVisitor&); 164 164 -
trunk/Source/JavaScriptCore/bytecode/ValueRecovery.h
r124404 r130726 39 39 // code point. 40 40 enum ValueRecoveryTechnique { 41 // It's already in the register fileat the right location.42 AlreadyIn RegisterFile,43 // It's already in the register filebut unboxed.44 AlreadyIn RegisterFileAsUnboxedInt32,45 AlreadyIn RegisterFileAsUnboxedCell,46 AlreadyIn RegisterFileAsUnboxedBoolean,47 AlreadyIn RegisterFileAsUnboxedDouble,41 // It's already in the stack at the right location. 42 AlreadyInJSStack, 43 // It's already in the stack but unboxed. 44 AlreadyInJSStackAsUnboxedInt32, 45 AlreadyInJSStackAsUnboxedCell, 46 AlreadyInJSStackAsUnboxedBoolean, 47 AlreadyInJSStackAsUnboxedDouble, 48 48 // It's in a register. 49 49 InGPR, … … 55 55 InFPR, 56 56 UInt32InGPR, 57 // It's in the register file, but at a different location.58 DisplacedIn RegisterFile,59 // It's in the register file, at a different location, and it's unboxed.60 Int32DisplacedIn RegisterFile,61 DoubleDisplacedIn RegisterFile,62 CellDisplacedIn RegisterFile,63 BooleanDisplacedIn RegisterFile,57 // It's in the stack, but at a different location. 58 DisplacedInJSStack, 59 // It's in the stack, at a different location, and it's unboxed. 60 Int32DisplacedInJSStack, 61 DoubleDisplacedInJSStack, 62 CellDisplacedInJSStack, 63 BooleanDisplacedInJSStack, 64 64 // It's an Arguments object. 65 65 ArgumentsThatWereNotCreated, … … 80 80 bool operator!() const { return !isSet(); } 81 81 82 static ValueRecovery alreadyIn RegisterFile()83 { 84 ValueRecovery result; 85 result.m_technique = AlreadyIn RegisterFile;86 return result; 87 } 88 89 static ValueRecovery alreadyIn RegisterFileAsUnboxedInt32()90 { 91 ValueRecovery result; 92 result.m_technique = AlreadyIn RegisterFileAsUnboxedInt32;93 return result; 94 } 95 96 static ValueRecovery alreadyIn RegisterFileAsUnboxedCell()97 { 98 ValueRecovery result; 99 result.m_technique = AlreadyIn RegisterFileAsUnboxedCell;100 return result; 101 } 102 103 static ValueRecovery alreadyIn RegisterFileAsUnboxedBoolean()104 { 105 ValueRecovery result; 106 result.m_technique = AlreadyIn RegisterFileAsUnboxedBoolean;107 return result; 108 } 109 110 static ValueRecovery alreadyIn RegisterFileAsUnboxedDouble()111 { 112 ValueRecovery result; 113 result.m_technique = AlreadyIn RegisterFileAsUnboxedDouble;82 static ValueRecovery alreadyInJSStack() 83 { 84 ValueRecovery result; 85 result.m_technique = AlreadyInJSStack; 86 return result; 87 } 88 89 static ValueRecovery alreadyInJSStackAsUnboxedInt32() 90 { 91 ValueRecovery result; 92 result.m_technique = AlreadyInJSStackAsUnboxedInt32; 93 return result; 94 } 95 96 static ValueRecovery alreadyInJSStackAsUnboxedCell() 97 { 98 ValueRecovery result; 99 result.m_technique = AlreadyInJSStackAsUnboxedCell; 100 return result; 101 } 102 103 static ValueRecovery alreadyInJSStackAsUnboxedBoolean() 104 { 105 ValueRecovery result; 106 result.m_technique = AlreadyInJSStackAsUnboxedBoolean; 107 return result; 108 } 109 110 static ValueRecovery alreadyInJSStackAsUnboxedDouble() 111 { 112 ValueRecovery result; 113 result.m_technique = AlreadyInJSStackAsUnboxedDouble; 114 114 return result; 115 115 } … … 159 159 } 160 160 161 static ValueRecovery displacedIn RegisterFile(VirtualRegister virtualReg, DataFormat dataFormat)161 static ValueRecovery displacedInJSStack(VirtualRegister virtualReg, DataFormat dataFormat) 162 162 { 163 163 ValueRecovery result; 164 164 switch (dataFormat) { 165 165 case DataFormatInteger: 166 result.m_technique = Int32DisplacedIn RegisterFile;166 result.m_technique = Int32DisplacedInJSStack; 167 167 break; 168 168 169 169 case DataFormatDouble: 170 result.m_technique = DoubleDisplacedIn RegisterFile;170 result.m_technique = DoubleDisplacedInJSStack; 171 171 break; 172 172 173 173 case DataFormatCell: 174 result.m_technique = CellDisplacedIn RegisterFile;174 result.m_technique = CellDisplacedInJSStack; 175 175 break; 176 176 177 177 case DataFormatBoolean: 178 result.m_technique = BooleanDisplacedIn RegisterFile;178 result.m_technique = BooleanDisplacedInJSStack; 179 179 break; 180 180 181 181 default: 182 182 ASSERT(dataFormat != DataFormatNone && dataFormat != DataFormatStorage); 183 result.m_technique = DisplacedIn RegisterFile;183 result.m_technique = DisplacedInJSStack; 184 184 break; 185 185 } … … 223 223 } 224 224 225 bool isAlreadyIn RegisterFile() const225 bool isAlreadyInJSStack() const 226 226 { 227 227 switch (technique()) { 228 case AlreadyIn RegisterFile:229 case AlreadyIn RegisterFileAsUnboxedInt32:230 case AlreadyIn RegisterFileAsUnboxedCell:231 case AlreadyIn RegisterFileAsUnboxedBoolean:232 case AlreadyIn RegisterFileAsUnboxedDouble:228 case AlreadyInJSStack: 229 case AlreadyInJSStackAsUnboxedInt32: 230 case AlreadyInJSStackAsUnboxedCell: 231 case AlreadyInJSStackAsUnboxedBoolean: 232 case AlreadyInJSStackAsUnboxedDouble: 233 233 return true; 234 234 default: … … 265 265 VirtualRegister virtualRegister() const 266 266 { 267 ASSERT(m_technique == DisplacedIn RegisterFile || m_technique == Int32DisplacedInRegisterFile || m_technique == DoubleDisplacedInRegisterFile || m_technique == CellDisplacedInRegisterFile || m_technique == BooleanDisplacedInRegisterFile);267 ASSERT(m_technique == DisplacedInJSStack || m_technique == Int32DisplacedInJSStack || m_technique == DoubleDisplacedInJSStack || m_technique == CellDisplacedInJSStack || m_technique == BooleanDisplacedInJSStack); 268 268 return m_source.virtualReg; 269 269 } … … 278 278 { 279 279 switch (technique()) { 280 case AlreadyIn RegisterFile:280 case AlreadyInJSStack: 281 281 fprintf(out, "-"); 282 282 break; 283 case AlreadyIn RegisterFileAsUnboxedInt32:283 case AlreadyInJSStackAsUnboxedInt32: 284 284 fprintf(out, "(int32)"); 285 285 break; 286 case AlreadyIn RegisterFileAsUnboxedCell:286 case AlreadyInJSStackAsUnboxedCell: 287 287 fprintf(out, "(cell)"); 288 288 break; 289 case AlreadyIn RegisterFileAsUnboxedBoolean:289 case AlreadyInJSStackAsUnboxedBoolean: 290 290 fprintf(out, "(bool)"); 291 291 break; 292 case AlreadyIn RegisterFileAsUnboxedDouble:292 case AlreadyInJSStackAsUnboxedDouble: 293 293 fprintf(out, "(double)"); 294 294 break; … … 313 313 break; 314 314 #endif 315 case DisplacedIn RegisterFile:315 case DisplacedInJSStack: 316 316 fprintf(out, "*%d", virtualRegister()); 317 317 break; 318 case Int32DisplacedIn RegisterFile:318 case Int32DisplacedInJSStack: 319 319 fprintf(out, "*int32(%d)", virtualRegister()); 320 320 break; 321 case DoubleDisplacedIn RegisterFile:321 case DoubleDisplacedInJSStack: 322 322 fprintf(out, "*double(%d)", virtualRegister()); 323 323 break; 324 case CellDisplacedIn RegisterFile:324 case CellDisplacedInJSStack: 325 325 fprintf(out, "*cell(%d)", virtualRegister()); 326 326 break; 327 case BooleanDisplacedIn RegisterFile:327 case BooleanDisplacedInJSStack: 328 328 fprintf(out, "*bool(%d)", virtualRegister()); 329 329 break; -
trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
r130612 r130726 630 630 return 0; 631 631 632 m_calleeRegister.setIndex( RegisterFile::Callee);632 m_calleeRegister.setIndex(JSStack::Callee); 633 633 634 634 // If non-strict eval is in play, we use a separate object in the scope chain for the callee's name. … … 2066 2066 2067 2067 // Reserve space for call frame. 2068 Vector<RefPtr<RegisterID>, RegisterFile::CallFrameHeaderSize> callFrame;2069 for (int i = 0; i < RegisterFile::CallFrameHeaderSize; ++i)2068 Vector<RefPtr<RegisterID>, JSStack::CallFrameHeaderSize> callFrame; 2069 for (int i = 0; i < JSStack::CallFrameHeaderSize; ++i) 2070 2070 callFrame.append(newTemporary()); 2071 2071 … … 2183 2183 2184 2184 // Reserve space for call frame. 2185 Vector<RefPtr<RegisterID>, RegisterFile::CallFrameHeaderSize> callFrame;2186 for (int i = 0; i < RegisterFile::CallFrameHeaderSize; ++i)2185 Vector<RefPtr<RegisterID>, JSStack::CallFrameHeaderSize> callFrame; 2186 for (int i = 0; i < JSStack::CallFrameHeaderSize; ++i) 2187 2187 callFrame.append(newTemporary()); 2188 2188 -
trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h
r129287 r130726 630 630 return m_calleeRegisters[index]; 631 631 632 if (index == RegisterFile::Callee)632 if (index == JSStack::Callee) 633 633 return m_calleeRegister; 634 634 635 635 ASSERT(m_parameters.size()); 636 return m_parameters[index + m_parameters.size() + RegisterFile::CallFrameHeaderSize];636 return m_parameters[index + m_parameters.size() + JSStack::CallFrameHeaderSize]; 637 637 } 638 638 -
trunk/Source/JavaScriptCore/dfg/DFGAbstractState.h
r124404 r130726 186 186 187 187 // Abstractly executes the given node. The new abstract state is stored into an 188 // abstract register filestored in *this. Loads of local variables (that span188 // abstract stack stored in *this. Loads of local variables (that span 189 189 // basic blocks) interrogate the basic block's notion of the state at the head. 190 190 // Stores to local variables are handled in endBasicBlock(). This returns true -
trunk/Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h
r129156 r130726 94 94 #endif 95 95 96 void emitGetFromCallFrameHeaderPtr( RegisterFile::CallFrameHeaderEntry entry, GPRReg to)96 void emitGetFromCallFrameHeaderPtr(JSStack::CallFrameHeaderEntry entry, GPRReg to) 97 97 { 98 98 loadPtr(Address(GPRInfo::callFrameRegister, entry * sizeof(Register)), to); 99 99 } 100 void emitPutToCallFrameHeader(GPRReg from, RegisterFile::CallFrameHeaderEntry entry)100 void emitPutToCallFrameHeader(GPRReg from, JSStack::CallFrameHeaderEntry entry) 101 101 { 102 102 storePtr(from, Address(GPRInfo::callFrameRegister, entry * sizeof(Register))); 103 103 } 104 104 105 void emitPutImmediateToCallFrameHeader(void* value, RegisterFile::CallFrameHeaderEntry entry)105 void emitPutImmediateToCallFrameHeader(void* value, JSStack::CallFrameHeaderEntry entry) 106 106 { 107 107 storePtr(TrustedImmPtr(value), Address(GPRInfo::callFrameRegister, entry * sizeof(Register))); -
trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
r130612 r130726 143 143 } 144 144 145 if (operand == RegisterFile::Callee)145 if (operand == JSStack::Callee) 146 146 return getCallee(); 147 147 … … 370 370 if (!inlineCallFrame) 371 371 break; 372 if (operand >= static_cast<int>(inlineCallFrame->stackOffset - RegisterFile::CallFrameHeaderSize))372 if (operand >= static_cast<int>(inlineCallFrame->stackOffset - JSStack::CallFrameHeaderSize)) 373 373 continue; 374 374 if (operand == inlineCallFrame->stackOffset + CallFrame::thisArgumentOffset()) 375 375 continue; 376 if (operand < static_cast<int>(inlineCallFrame->stackOffset - RegisterFile::CallFrameHeaderSize - inlineCallFrame->arguments.size()))376 if (operand < static_cast<int>(inlineCallFrame->stackOffset - JSStack::CallFrameHeaderSize - inlineCallFrame->arguments.size())) 377 377 continue; 378 378 int argument = operandToArgument(operand - inlineCallFrame->stackOffset); … … 762 762 addVarArgChild(get(currentInstruction[1].u.operand)); 763 763 int argCount = currentInstruction[2].u.operand; 764 if ( RegisterFile::CallFrameHeaderSize + (unsigned)argCount > m_parameterSlots)765 m_parameterSlots = RegisterFile::CallFrameHeaderSize + argCount;764 if (JSStack::CallFrameHeaderSize + (unsigned)argCount > m_parameterSlots) 765 m_parameterSlots = JSStack::CallFrameHeaderSize + argCount; 766 766 767 767 int registerOffset = currentInstruction[3].u.operand; … … 1143 1143 } 1144 1144 1145 if (operand == RegisterFile::Callee)1145 if (operand == JSStack::Callee) 1146 1146 return m_calleeVR; 1147 1147 … … 1365 1365 // FIXME: Don't flush constants! 1366 1366 1367 int inlineCallFrameStart = m_inlineStackTop->remapOperand(registerOffset) - RegisterFile::CallFrameHeaderSize;1367 int inlineCallFrameStart = m_inlineStackTop->remapOperand(registerOffset) - JSStack::CallFrameHeaderSize; 1368 1368 1369 1369 // Make sure that the area used by the call frame is reserved. 1370 for (int arg = inlineCallFrameStart + RegisterFile::CallFrameHeaderSize + codeBlock->m_numVars; arg-- > inlineCallFrameStart;)1370 for (int arg = inlineCallFrameStart + JSStack::CallFrameHeaderSize + codeBlock->m_numVars; arg-- > inlineCallFrameStart;) 1371 1371 m_preservedVars.set(arg); 1372 1372 1373 1373 // Make sure that we have enough locals. 1374 unsigned newNumLocals = inlineCallFrameStart + RegisterFile::CallFrameHeaderSize + codeBlock->m_numCalleeRegisters;1374 unsigned newNumLocals = inlineCallFrameStart + JSStack::CallFrameHeaderSize + codeBlock->m_numCalleeRegisters; 1375 1375 if (newNumLocals > m_numLocals) { 1376 1376 m_numLocals = newNumLocals; … … 1872 1872 1873 1873 case op_create_this: { 1874 set(currentInstruction[1].u.operand, addToGraph(CreateThis, get( RegisterFile::Callee)));1874 set(currentInstruction[1].u.operand, addToGraph(CreateThis, get(JSStack::Callee))); 1875 1875 NEXT_OPCODE(op_create_this); 1876 1876 } … … 2757 2757 2758 2758 unsigned argCount = m_inlineStackTop->m_inlineCallFrame->arguments.size(); 2759 if ( RegisterFile::CallFrameHeaderSize + argCount > m_parameterSlots)2760 m_parameterSlots = RegisterFile::CallFrameHeaderSize + argCount;2759 if (JSStack::CallFrameHeaderSize + argCount > m_parameterSlots) 2760 m_parameterSlots = JSStack::CallFrameHeaderSize + argCount; 2761 2761 2762 2762 addVarArgChild(get(currentInstruction[1].u.operand)); // callee … … 3211 3211 InlineCallFrame inlineCallFrame; 3212 3212 inlineCallFrame.executable.set(*byteCodeParser->m_globalData, byteCodeParser->m_codeBlock->ownerExecutable(), codeBlock->ownerExecutable()); 3213 inlineCallFrame.stackOffset = inlineCallFrameStart + RegisterFile::CallFrameHeaderSize;3213 inlineCallFrame.stackOffset = inlineCallFrameStart + JSStack::CallFrameHeaderSize; 3214 3214 inlineCallFrame.callee.set(*byteCodeParser->m_globalData, byteCodeParser->m_codeBlock->ownerExecutable(), callee); 3215 3215 inlineCallFrame.caller = byteCodeParser->currentCodeOrigin(); -
trunk/Source/JavaScriptCore/dfg/DFGGenerationInfo.h
r121717 r130726 202 202 // Get the format of the value in machine registers (or 'none'). 203 203 DataFormat registerFormat() { return m_registerFormat; } 204 // Get the format of the value as it is spilled in the RegisterFile(or 'none').204 // Get the format of the value as it is spilled in the JSStack (or 'none'). 205 205 DataFormat spillFormat() { return m_spillFormat; } 206 206 … … 256 256 ASSERT(m_registerFormat != DataFormatNone); 257 257 // Constants do not need spilling, nor do values that have already been 258 // spilled to the RegisterFile.258 // spilled to the JSStack. 259 259 return !m_canFill; 260 260 } 261 261 262 // Called when a VirtualRegister is being spilled to the RegisterFilefor the first time.262 // Called when a VirtualRegister is being spilled to the JSStack for the first time. 263 263 void spill(VariableEventStream& stream, VirtualRegister virtualRegister, DataFormat spillFormat) 264 264 { -
trunk/Source/JavaScriptCore/dfg/DFGGraph.h
r129266 r130726 37 37 #include "DFGDominators.h" 38 38 #include "DFGNode.h" 39 #include "JSStack.h" 39 40 #include "MethodOfGettingAValueProfile.h" 40 #include "RegisterFile.h"41 41 #include <wtf/BitVector.h> 42 42 #include <wtf/HashMap.h> -
trunk/Source/JavaScriptCore/dfg/DFGJITCompiler.cpp
r123042 r130726 69 69 // This code currently matches the old JIT. In the function header we need to 70 70 // pop the return address (since we do not allow any recursion on the machine 71 // stack), and perform a fast register filecheck.71 // stack), and perform a fast stack check. 72 72 // FIXME: https://bugs.webkit.org/show_bug.cgi?id=56292 73 // We'll need to convert the remaining cti_ style calls (specifically the register file73 // We'll need to convert the remaining cti_ style calls (specifically the stack 74 74 // check) which will be dependent on stack layout. (We'd need to account for this in 75 75 // both normal return code and when jumping to an exception handler). 76 76 preserveReturnAddressAfterCall(GPRInfo::regT2); 77 emitPutToCallFrameHeader(GPRInfo::regT2, RegisterFile::ReturnPC);78 emitPutImmediateToCallFrameHeader(m_codeBlock, RegisterFile::CodeBlock);77 emitPutToCallFrameHeader(GPRInfo::regT2, JSStack::ReturnPC); 78 emitPutImmediateToCallFrameHeader(m_codeBlock, JSStack::CodeBlock); 79 79 } 80 80 … … 257 257 // so enter after this. 258 258 Label fromArityCheck(this); 259 // Plant a check that sufficient space is available in the RegisterFile.259 // Plant a check that sufficient space is available in the JSStack. 260 260 // FIXME: https://bugs.webkit.org/show_bug.cgi?id=56291 261 261 addPtr(TrustedImm32(m_codeBlock->m_numCalleeRegisters * sizeof(Register)), GPRInfo::callFrameRegister, GPRInfo::regT1); 262 Jump registerFileCheck = branchPtr(Below, AbsoluteAddress(m_globalData->interpreter->registerFile().addressOfEnd()), GPRInfo::regT1);263 // Return here after register filecheck.264 Label from RegisterFileCheck = label();262 Jump stackCheck = branchPtr(Below, AbsoluteAddress(m_globalData->interpreter->stack().addressOfEnd()), GPRInfo::regT1); 263 // Return here after stack check. 264 Label fromStackCheck = label(); 265 265 266 266 … … 272 272 // === Function footer code generation === 273 273 // 274 // Generate code to perform the slow register filecheck (if the fast one in274 // Generate code to perform the slow stack check (if the fast one in 275 275 // the function header fails), and generate the entry point with arity check. 276 276 // 277 // Generate the register filecheck; if the fast check in the function head fails,277 // Generate the stack check; if the fast check in the function head fails, 278 278 // we need to call out to a helper function to check whether more space is available. 279 279 // FIXME: change this from a cti call to a DFG style operation (normal C calling conventions). 280 registerFileCheck.link(this);280 stackCheck.link(this); 281 281 move(stackPointerRegister, GPRInfo::argumentGPR0); 282 282 poke(GPRInfo::callFrameRegister, OBJECT_OFFSETOF(struct JITStackFrame, callFrame) / sizeof(void*)); … … 284 284 CallBeginToken token; 285 285 beginCall(CodeOrigin(0), token); 286 Call call RegisterFileCheck = call();287 notifyCall(call RegisterFileCheck, CodeOrigin(0), token);288 jump(from RegisterFileCheck);286 Call callStackCheck = call(); 287 notifyCall(callStackCheck, CodeOrigin(0), token); 288 jump(fromStackCheck); 289 289 290 290 // The fast entry point into a function does not check the correct number of arguments … … 296 296 compileEntry(); 297 297 298 load32(AssemblyHelpers::payloadFor((VirtualRegister) RegisterFile::ArgumentCount), GPRInfo::regT1);298 load32(AssemblyHelpers::payloadFor((VirtualRegister)JSStack::ArgumentCount), GPRInfo::regT1); 299 299 branch32(AboveOrEqual, GPRInfo::regT1, TrustedImm32(m_codeBlock->numParameters())).linkTo(fromArityCheck, this); 300 300 move(stackPointerRegister, GPRInfo::argumentGPR0); … … 323 323 speculative.linkOSREntries(linkBuffer); 324 324 325 // FIXME: switch the register filecheck & arity check over to DFGOpertaion style calls, not JIT stubs.326 linkBuffer.link(call RegisterFileCheck, cti_register_file_check);325 // FIXME: switch the stack check & arity check over to DFGOpertaion style calls, not JIT stubs. 326 linkBuffer.link(callStackCheck, cti_stack_check); 327 327 linkBuffer.link(callArityCheck, m_codeBlock->m_isConstructor ? cti_op_construct_arityCheck : cti_op_call_arityCheck); 328 328 -
trunk/Source/JavaScriptCore/dfg/DFGJITCompiler.h
r122768 r130726 298 298 { 299 299 unsigned index = m_exceptionChecks.size(); 300 store32(TrustedImm32(index), tagFor(static_cast<VirtualRegister>( RegisterFile::ArgumentCount)));300 store32(TrustedImm32(index), tagFor(static_cast<VirtualRegister>(JSStack::ArgumentCount))); 301 301 token.set(codeOrigin, index); 302 302 } -
trunk/Source/JavaScriptCore/dfg/DFGOSREntry.cpp
r125999 r130726 137 137 // would have otherwise just kept running albeit less quickly. 138 138 139 if (!globalData->interpreter-> registerFile().grow(&exec->registers()[codeBlock->m_numCalleeRegisters])) {139 if (!globalData->interpreter->stack().grow(&exec->registers()[codeBlock->m_numCalleeRegisters])) { 140 140 #if ENABLE(JIT_VERBOSE_OSR) 141 141 dataLog(" OSR failed because stack growth failed.\n"); -
trunk/Source/JavaScriptCore/dfg/DFGOSRExitCompiler32_64.cpp
r129089 r130726 126 126 // expect most of them to be jsUndefined(); if that's true then we handle that 127 127 // specially to minimize code size and execution time. 128 bool haveUnboxedInt32In RegisterFile= false;129 bool haveUnboxedCellIn RegisterFile= false;130 bool haveUnboxedBooleanIn RegisterFile= false;128 bool haveUnboxedInt32InJSStack = false; 129 bool haveUnboxedCellInJSStack = false; 130 bool haveUnboxedBooleanInJSStack = false; 131 131 bool haveUInt32s = false; 132 132 bool haveFPRs = false; … … 138 138 const ValueRecovery& recovery = operands[index]; 139 139 switch (recovery.technique()) { 140 case DisplacedIn RegisterFile:141 case Int32DisplacedIn RegisterFile:142 case CellDisplacedIn RegisterFile:143 case BooleanDisplacedIn RegisterFile:140 case DisplacedInJSStack: 141 case Int32DisplacedInJSStack: 142 case CellDisplacedInJSStack: 143 case BooleanDisplacedInJSStack: 144 144 numberOfDisplacedVirtualRegisters++; 145 145 ASSERT((int)recovery.virtualRegister() >= 0); … … 175 175 break; 176 176 177 case AlreadyIn RegisterFileAsUnboxedInt32:178 haveUnboxedInt32In RegisterFile= true;179 break; 180 181 case AlreadyIn RegisterFileAsUnboxedCell:182 haveUnboxedCellIn RegisterFile= true;183 break; 184 185 case AlreadyIn RegisterFileAsUnboxedBoolean:186 haveUnboxedBooleanIn RegisterFile= true;177 case AlreadyInJSStackAsUnboxedInt32: 178 haveUnboxedInt32InJSStack = true; 179 break; 180 181 case AlreadyInJSStackAsUnboxedCell: 182 haveUnboxedCellInJSStack = true; 183 break; 184 185 case AlreadyInJSStackAsUnboxedBoolean: 186 haveUnboxedBooleanInJSStack = true; 187 187 break; 188 188 … … 215 215 // 5) Perform all reboxing of integers and cells, except for those in registers. 216 216 217 if (haveUnboxedInt32In RegisterFile || haveUnboxedCellInRegisterFile || haveUnboxedBooleanInRegisterFile) {217 if (haveUnboxedInt32InJSStack || haveUnboxedCellInJSStack || haveUnboxedBooleanInJSStack) { 218 218 for (size_t index = 0; index < operands.size(); ++index) { 219 219 const ValueRecovery& recovery = operands[index]; 220 220 switch (recovery.technique()) { 221 case AlreadyIn RegisterFileAsUnboxedInt32:221 case AlreadyInJSStackAsUnboxedInt32: 222 222 m_jit.store32(AssemblyHelpers::TrustedImm32(JSValue::Int32Tag), AssemblyHelpers::tagFor(static_cast<VirtualRegister>(operands.operandForIndex(index)))); 223 223 break; 224 224 225 case AlreadyIn RegisterFileAsUnboxedCell:225 case AlreadyInJSStackAsUnboxedCell: 226 226 m_jit.store32(AssemblyHelpers::TrustedImm32(JSValue::CellTag), AssemblyHelpers::tagFor(static_cast<VirtualRegister>(operands.operandForIndex(index)))); 227 227 break; 228 228 229 case AlreadyIn RegisterFileAsUnboxedBoolean:229 case AlreadyInJSStackAsUnboxedBoolean: 230 230 m_jit.store32(AssemblyHelpers::TrustedImm32(JSValue::BooleanTag), AssemblyHelpers::tagFor(static_cast<VirtualRegister>(operands.operandForIndex(index)))); 231 231 break; … … 328 328 } 329 329 330 // 7) Dump all doubles into the register file, or to the scratch storage if the330 // 7) Dump all doubles into the stack, or to the scratch storage if the 331 331 // destination virtual register is poisoned. 332 332 if (haveFPRs) { … … 361 361 const ValueRecovery& recovery = operands[index]; 362 362 switch (recovery.technique()) { 363 case DisplacedIn RegisterFile:363 case DisplacedInJSStack: 364 364 m_jit.load32(AssemblyHelpers::payloadFor(recovery.virtualRegister()), GPRInfo::toRegister(displacementIndex++)); 365 365 m_jit.load32(AssemblyHelpers::tagFor(recovery.virtualRegister()), GPRInfo::toRegister(displacementIndex++)); 366 366 break; 367 case Int32DisplacedIn RegisterFile:367 case Int32DisplacedInJSStack: 368 368 m_jit.load32(AssemblyHelpers::payloadFor(recovery.virtualRegister()), GPRInfo::toRegister(displacementIndex++)); 369 369 m_jit.move(AssemblyHelpers::TrustedImm32(JSValue::Int32Tag), GPRInfo::toRegister(displacementIndex++)); 370 370 break; 371 case CellDisplacedIn RegisterFile:371 case CellDisplacedInJSStack: 372 372 m_jit.load32(AssemblyHelpers::payloadFor(recovery.virtualRegister()), GPRInfo::toRegister(displacementIndex++)); 373 373 m_jit.move(AssemblyHelpers::TrustedImm32(JSValue::CellTag), GPRInfo::toRegister(displacementIndex++)); 374 374 break; 375 case BooleanDisplacedIn RegisterFile:375 case BooleanDisplacedInJSStack: 376 376 m_jit.load32(AssemblyHelpers::payloadFor(recovery.virtualRegister()), GPRInfo::toRegister(displacementIndex++)); 377 377 m_jit.move(AssemblyHelpers::TrustedImm32(JSValue::BooleanTag), GPRInfo::toRegister(displacementIndex++)); … … 386 386 const ValueRecovery& recovery = operands[index]; 387 387 switch (recovery.technique()) { 388 case DisplacedIn RegisterFile:389 case Int32DisplacedIn RegisterFile:390 case CellDisplacedIn RegisterFile:391 case BooleanDisplacedIn RegisterFile:388 case DisplacedInJSStack: 389 case Int32DisplacedInJSStack: 390 case CellDisplacedInJSStack: 391 case BooleanDisplacedInJSStack: 392 392 m_jit.store32(GPRInfo::toRegister(displacementIndex++), AssemblyHelpers::payloadFor((VirtualRegister)operands.operandForIndex(index))); 393 393 m_jit.store32(GPRInfo::toRegister(displacementIndex++), AssemblyHelpers::tagFor((VirtualRegister)operands.operandForIndex(index))); … … 419 419 const ValueRecovery& recovery = operands[index]; 420 420 switch (recovery.technique()) { 421 case DisplacedIn RegisterFile:421 case DisplacedInJSStack: 422 422 m_jit.load32(AssemblyHelpers::payloadFor(recovery.virtualRegister()), GPRInfo::regT0); 423 423 m_jit.load32(AssemblyHelpers::tagFor(recovery.virtualRegister()), GPRInfo::regT1); … … 426 426 scratchIndex++; 427 427 break; 428 case Int32DisplacedIn RegisterFile:429 case CellDisplacedIn RegisterFile:430 case BooleanDisplacedIn RegisterFile:428 case Int32DisplacedInJSStack: 429 case CellDisplacedInJSStack: 430 case BooleanDisplacedInJSStack: 431 431 m_jit.load32(AssemblyHelpers::payloadFor(recovery.virtualRegister()), GPRInfo::regT0); 432 432 m_jit.store32(GPRInfo::regT0, reinterpret_cast<char*>(scratchDataBuffer + scratchIndex++) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.payload)); … … 441 441 const ValueRecovery& recovery = operands[index]; 442 442 switch (recovery.technique()) { 443 case DisplacedIn RegisterFile:443 case DisplacedInJSStack: 444 444 m_jit.load32(reinterpret_cast<char*>(scratchDataBuffer + scratchIndex) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.payload), GPRInfo::regT0); 445 445 m_jit.load32(reinterpret_cast<char*>(scratchDataBuffer + scratchIndex) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.tag), GPRInfo::regT1); … … 448 448 scratchIndex++; 449 449 break; 450 case Int32DisplacedIn RegisterFile:450 case Int32DisplacedInJSStack: 451 451 m_jit.load32(reinterpret_cast<char*>(scratchDataBuffer + scratchIndex++) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.payload), GPRInfo::regT0); 452 452 m_jit.store32(AssemblyHelpers::TrustedImm32(JSValue::Int32Tag), AssemblyHelpers::tagFor((VirtualRegister)operands.operandForIndex(index))); 453 453 m_jit.store32(GPRInfo::regT0, AssemblyHelpers::payloadFor((VirtualRegister)operands.operandForIndex(index))); 454 454 break; 455 case CellDisplacedIn RegisterFile:455 case CellDisplacedInJSStack: 456 456 m_jit.load32(reinterpret_cast<char*>(scratchDataBuffer + scratchIndex++) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.payload), GPRInfo::regT0); 457 457 m_jit.store32(AssemblyHelpers::TrustedImm32(JSValue::CellTag), AssemblyHelpers::tagFor((VirtualRegister)operands.operandForIndex(index))); 458 458 m_jit.store32(GPRInfo::regT0, AssemblyHelpers::payloadFor((VirtualRegister)operands.operandForIndex(index))); 459 459 break; 460 case BooleanDisplacedIn RegisterFile:460 case BooleanDisplacedInJSStack: 461 461 m_jit.load32(reinterpret_cast<char*>(scratchDataBuffer + scratchIndex++) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.payload), GPRInfo::regT0); 462 462 m_jit.store32(AssemblyHelpers::TrustedImm32(JSValue::BooleanTag), AssemblyHelpers::tagFor((VirtualRegister)operands.operandForIndex(index))); … … 576 576 577 577 ASSERT(m_jit.baselineCodeBlock()->getJITType() == JITCode::BaselineJIT); 578 m_jit.storePtr(AssemblyHelpers::TrustedImmPtr(m_jit.baselineCodeBlock()), AssemblyHelpers::addressFor((VirtualRegister) RegisterFile::CodeBlock));578 m_jit.storePtr(AssemblyHelpers::TrustedImmPtr(m_jit.baselineCodeBlock()), AssemblyHelpers::addressFor((VirtualRegister)JSStack::CodeBlock)); 579 579 580 580 for (CodeOrigin codeOrigin = exit.m_codeOrigin; codeOrigin.inlineCallFrame; codeOrigin = codeOrigin.inlineCallFrame->caller) { … … 598 598 callerFrameGPR = GPRInfo::callFrameRegister; 599 599 600 m_jit.storePtr(AssemblyHelpers::TrustedImmPtr(baselineCodeBlock), AssemblyHelpers::addressFor((VirtualRegister)(inlineCallFrame->stackOffset + RegisterFile::CodeBlock)));601 m_jit.store32(AssemblyHelpers::TrustedImm32(JSValue::CellTag), AssemblyHelpers::tagFor((VirtualRegister)(inlineCallFrame->stackOffset + RegisterFile::ScopeChain)));602 m_jit.storePtr(AssemblyHelpers::TrustedImmPtr(inlineCallFrame->callee->scope()), AssemblyHelpers::payloadFor((VirtualRegister)(inlineCallFrame->stackOffset + RegisterFile::ScopeChain)));603 m_jit.store32(AssemblyHelpers::TrustedImm32(JSValue::CellTag), AssemblyHelpers::tagFor((VirtualRegister)(inlineCallFrame->stackOffset + RegisterFile::CallerFrame)));604 m_jit.storePtr(callerFrameGPR, AssemblyHelpers::payloadFor((VirtualRegister)(inlineCallFrame->stackOffset + RegisterFile::CallerFrame)));605 m_jit.storePtr(AssemblyHelpers::TrustedImmPtr(jumpTarget), AssemblyHelpers::payloadFor((VirtualRegister)(inlineCallFrame->stackOffset + RegisterFile::ReturnPC)));606 m_jit.store32(AssemblyHelpers::TrustedImm32(inlineCallFrame->arguments.size()), AssemblyHelpers::payloadFor((VirtualRegister)(inlineCallFrame->stackOffset + RegisterFile::ArgumentCount)));607 m_jit.store32(AssemblyHelpers::TrustedImm32(JSValue::CellTag), AssemblyHelpers::tagFor((VirtualRegister)(inlineCallFrame->stackOffset + RegisterFile::Callee)));608 m_jit.storePtr(AssemblyHelpers::TrustedImmPtr(inlineCallFrame->callee.get()), AssemblyHelpers::payloadFor((VirtualRegister)(inlineCallFrame->stackOffset + RegisterFile::Callee)));600 m_jit.storePtr(AssemblyHelpers::TrustedImmPtr(baselineCodeBlock), AssemblyHelpers::addressFor((VirtualRegister)(inlineCallFrame->stackOffset + JSStack::CodeBlock))); 601 m_jit.store32(AssemblyHelpers::TrustedImm32(JSValue::CellTag), AssemblyHelpers::tagFor((VirtualRegister)(inlineCallFrame->stackOffset + JSStack::ScopeChain))); 602 m_jit.storePtr(AssemblyHelpers::TrustedImmPtr(inlineCallFrame->callee->scope()), AssemblyHelpers::payloadFor((VirtualRegister)(inlineCallFrame->stackOffset + JSStack::ScopeChain))); 603 m_jit.store32(AssemblyHelpers::TrustedImm32(JSValue::CellTag), AssemblyHelpers::tagFor((VirtualRegister)(inlineCallFrame->stackOffset + JSStack::CallerFrame))); 604 m_jit.storePtr(callerFrameGPR, AssemblyHelpers::payloadFor((VirtualRegister)(inlineCallFrame->stackOffset + JSStack::CallerFrame))); 605 m_jit.storePtr(AssemblyHelpers::TrustedImmPtr(jumpTarget), AssemblyHelpers::payloadFor((VirtualRegister)(inlineCallFrame->stackOffset + JSStack::ReturnPC))); 606 m_jit.store32(AssemblyHelpers::TrustedImm32(inlineCallFrame->arguments.size()), AssemblyHelpers::payloadFor((VirtualRegister)(inlineCallFrame->stackOffset + JSStack::ArgumentCount))); 607 m_jit.store32(AssemblyHelpers::TrustedImm32(JSValue::CellTag), AssemblyHelpers::tagFor((VirtualRegister)(inlineCallFrame->stackOffset + JSStack::Callee))); 608 m_jit.storePtr(AssemblyHelpers::TrustedImmPtr(inlineCallFrame->callee.get()), AssemblyHelpers::payloadFor((VirtualRegister)(inlineCallFrame->stackOffset + JSStack::Callee))); 609 609 } 610 610 -
trunk/Source/JavaScriptCore/dfg/DFGOSRExitCompiler64.cpp
r129089 r130726 134 134 const ValueRecovery& recovery = operands[index]; 135 135 switch (recovery.technique()) { 136 case Int32DisplacedIn RegisterFile:137 case DoubleDisplacedIn RegisterFile:138 case DisplacedIn RegisterFile:136 case Int32DisplacedInJSStack: 137 case DoubleDisplacedInJSStack: 138 case DisplacedInJSStack: 139 139 numberOfDisplacedVirtualRegisters++; 140 140 ASSERT((int)recovery.virtualRegister() >= 0); … … 165 165 166 166 case UnboxedInt32InGPR: 167 case AlreadyIn RegisterFileAsUnboxedInt32:167 case AlreadyInJSStackAsUnboxedInt32: 168 168 haveUnboxedInt32s = true; 169 169 break; 170 170 171 case AlreadyIn RegisterFileAsUnboxedDouble:171 case AlreadyInJSStackAsUnboxedDouble: 172 172 haveUnboxedDoubles = true; 173 173 break; … … 234 234 break; 235 235 236 case AlreadyIn RegisterFileAsUnboxedInt32:236 case AlreadyInJSStackAsUnboxedInt32: 237 237 m_jit.store32(AssemblyHelpers::TrustedImm32(static_cast<uint32_t>(TagTypeNumber >> 32)), AssemblyHelpers::tagFor(static_cast<VirtualRegister>(operands.operandForIndex(index)))); 238 238 break; … … 322 322 } 323 323 324 // 8) Dump all doubles into the register file, or to the scratch storage if324 // 8) Dump all doubles into the stack, or to the scratch storage if 325 325 // the destination virtual register is poisoned. 326 326 … … 341 341 // At this point all GPRs and FPRs are available for scratch use. 342 342 343 // 9) Box all unboxed doubles in the register file.343 // 9) Box all unboxed doubles in the stack. 344 344 if (haveUnboxedDoubles) { 345 345 for (size_t index = 0; index < operands.size(); ++index) { 346 346 const ValueRecovery& recovery = operands[index]; 347 if (recovery.technique() != AlreadyIn RegisterFileAsUnboxedDouble)347 if (recovery.technique() != AlreadyInJSStackAsUnboxedDouble) 348 348 continue; 349 349 m_jit.loadDouble(AssemblyHelpers::addressFor((VirtualRegister)operands.operandForIndex(index)), FPRInfo::fpRegT0); … … 368 368 const ValueRecovery& recovery = operands[index]; 369 369 switch (recovery.technique()) { 370 case DisplacedIn RegisterFile:370 case DisplacedInJSStack: 371 371 m_jit.loadPtr(AssemblyHelpers::addressFor(recovery.virtualRegister()), GPRInfo::toRegister(displacementIndex++)); 372 372 break; 373 373 374 case Int32DisplacedIn RegisterFile: {374 case Int32DisplacedInJSStack: { 375 375 GPRReg gpr = GPRInfo::toRegister(displacementIndex++); 376 376 m_jit.load32(AssemblyHelpers::addressFor(recovery.virtualRegister()), gpr); … … 379 379 } 380 380 381 case DoubleDisplacedIn RegisterFile: {381 case DoubleDisplacedInJSStack: { 382 382 GPRReg gpr = GPRInfo::toRegister(displacementIndex++); 383 383 m_jit.loadPtr(AssemblyHelpers::addressFor(recovery.virtualRegister()), gpr); … … 395 395 const ValueRecovery& recovery = operands[index]; 396 396 switch (recovery.technique()) { 397 case DisplacedIn RegisterFile:398 case Int32DisplacedIn RegisterFile:399 case DoubleDisplacedIn RegisterFile:397 case DisplacedInJSStack: 398 case Int32DisplacedInJSStack: 399 case DoubleDisplacedInJSStack: 400 400 m_jit.storePtr(GPRInfo::toRegister(displacementIndex++), AssemblyHelpers::addressFor((VirtualRegister)operands.operandForIndex(index))); 401 401 break; … … 428 428 429 429 switch (recovery.technique()) { 430 case DisplacedIn RegisterFile:430 case DisplacedInJSStack: 431 431 m_jit.loadPtr(AssemblyHelpers::addressFor(recovery.virtualRegister()), GPRInfo::regT0); 432 432 m_jit.storePtr(GPRInfo::regT0, scratchDataBuffer + scratchIndex++); 433 433 break; 434 434 435 case Int32DisplacedIn RegisterFile: {435 case Int32DisplacedInJSStack: { 436 436 m_jit.load32(AssemblyHelpers::addressFor(recovery.virtualRegister()), GPRInfo::regT0); 437 437 m_jit.orPtr(GPRInfo::tagTypeNumberRegister, GPRInfo::regT0); … … 440 440 } 441 441 442 case DoubleDisplacedIn RegisterFile: {442 case DoubleDisplacedInJSStack: { 443 443 m_jit.loadPtr(AssemblyHelpers::addressFor(recovery.virtualRegister()), GPRInfo::regT0); 444 444 m_jit.subPtr(GPRInfo::tagTypeNumberRegister, GPRInfo::regT0); … … 456 456 const ValueRecovery& recovery = operands[index]; 457 457 switch (recovery.technique()) { 458 case DisplacedIn RegisterFile:459 case Int32DisplacedIn RegisterFile:460 case DoubleDisplacedIn RegisterFile:458 case DisplacedInJSStack: 459 case Int32DisplacedInJSStack: 460 case DoubleDisplacedInJSStack: 461 461 m_jit.loadPtr(scratchDataBuffer + scratchIndex++, GPRInfo::regT0); 462 462 m_jit.storePtr(GPRInfo::regT0, AssemblyHelpers::addressFor((VirtualRegister)operands.operandForIndex(index))); … … 554 554 555 555 ASSERT(m_jit.baselineCodeBlock()->getJITType() == JITCode::BaselineJIT); 556 m_jit.storePtr(AssemblyHelpers::TrustedImmPtr(m_jit.baselineCodeBlock()), AssemblyHelpers::addressFor((VirtualRegister) RegisterFile::CodeBlock));556 m_jit.storePtr(AssemblyHelpers::TrustedImmPtr(m_jit.baselineCodeBlock()), AssemblyHelpers::addressFor((VirtualRegister)JSStack::CodeBlock)); 557 557 558 558 for (CodeOrigin codeOrigin = exit.m_codeOrigin; codeOrigin.inlineCallFrame; codeOrigin = codeOrigin.inlineCallFrame->caller) { … … 576 576 callerFrameGPR = GPRInfo::callFrameRegister; 577 577 578 m_jit.storePtr(AssemblyHelpers::TrustedImmPtr(baselineCodeBlock), AssemblyHelpers::addressFor((VirtualRegister)(inlineCallFrame->stackOffset + RegisterFile::CodeBlock)));579 m_jit.storePtr(AssemblyHelpers::TrustedImmPtr(inlineCallFrame->callee->scope()), AssemblyHelpers::addressFor((VirtualRegister)(inlineCallFrame->stackOffset + RegisterFile::ScopeChain)));580 m_jit.storePtr(callerFrameGPR, AssemblyHelpers::addressFor((VirtualRegister)(inlineCallFrame->stackOffset + RegisterFile::CallerFrame)));581 m_jit.storePtr(AssemblyHelpers::TrustedImmPtr(jumpTarget), AssemblyHelpers::addressFor((VirtualRegister)(inlineCallFrame->stackOffset + RegisterFile::ReturnPC)));582 m_jit.store32(AssemblyHelpers::TrustedImm32(inlineCallFrame->arguments.size()), AssemblyHelpers::payloadFor((VirtualRegister)(inlineCallFrame->stackOffset + RegisterFile::ArgumentCount)));583 m_jit.storePtr(AssemblyHelpers::TrustedImmPtr(inlineCallFrame->callee.get()), AssemblyHelpers::addressFor((VirtualRegister)(inlineCallFrame->stackOffset + RegisterFile::Callee)));578 m_jit.storePtr(AssemblyHelpers::TrustedImmPtr(baselineCodeBlock), AssemblyHelpers::addressFor((VirtualRegister)(inlineCallFrame->stackOffset + JSStack::CodeBlock))); 579 m_jit.storePtr(AssemblyHelpers::TrustedImmPtr(inlineCallFrame->callee->scope()), AssemblyHelpers::addressFor((VirtualRegister)(inlineCallFrame->stackOffset + JSStack::ScopeChain))); 580 m_jit.storePtr(callerFrameGPR, AssemblyHelpers::addressFor((VirtualRegister)(inlineCallFrame->stackOffset + JSStack::CallerFrame))); 581 m_jit.storePtr(AssemblyHelpers::TrustedImmPtr(jumpTarget), AssemblyHelpers::addressFor((VirtualRegister)(inlineCallFrame->stackOffset + JSStack::ReturnPC))); 582 m_jit.store32(AssemblyHelpers::TrustedImm32(inlineCallFrame->arguments.size()), AssemblyHelpers::payloadFor((VirtualRegister)(inlineCallFrame->stackOffset + JSStack::ArgumentCount))); 583 m_jit.storePtr(AssemblyHelpers::TrustedImmPtr(inlineCallFrame->callee.get()), AssemblyHelpers::addressFor((VirtualRegister)(inlineCallFrame->stackOffset + JSStack::Callee))); 584 584 } 585 585 -
trunk/Source/JavaScriptCore/dfg/DFGRepatch.cpp
r129272 r130726 449 449 stubJit.store32( 450 450 MacroAssembler::TrustedImm32(exec->codeOriginIndexForDFG()), 451 CCallHelpers::tagFor(static_cast<VirtualRegister>( RegisterFile::ArgumentCount)));451 CCallHelpers::tagFor(static_cast<VirtualRegister>(JSStack::ArgumentCount))); 452 452 453 453 operationCall = stubJit.call(); -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
r129435 r130726 1368 1368 ASSERT(m_arguments.size() == block.variablesAtHead.numberOfArguments()); 1369 1369 for (size_t i = 0; i < m_arguments.size(); ++i) { 1370 ValueSource valueSource = ValueSource(ValueIn RegisterFile);1370 ValueSource valueSource = ValueSource(ValueInJSStack); 1371 1371 m_arguments[i] = valueSource; 1372 1372 m_stream->appendAndLog(VariableEvent::setLocal(argumentToOperand(i), valueSource.dataFormat())); … … 1385 1385 valueSource = ValueSource(ArgumentsSource); 1386 1386 else if (at(nodeIndex).variableAccessData()->isCaptured()) 1387 valueSource = ValueSource(ValueIn RegisterFile);1387 valueSource = ValueSource(ValueInJSStack); 1388 1388 else if (!at(nodeIndex).refCount()) 1389 1389 valueSource = ValueSource(SourceIsDead); 1390 1390 else if (at(nodeIndex).variableAccessData()->shouldUseDoubleFormat()) 1391 valueSource = ValueSource(DoubleIn RegisterFile);1391 valueSource = ValueSource(DoubleInJSStack); 1392 1392 else 1393 1393 valueSource = ValueSource::forSpeculation(at(nodeIndex).variableAccessData()->argumentAwarePrediction()); … … 1441 1441 ValueRecovery recovery; 1442 1442 if (codeBlock->isCaptured(argumentToOperand(i))) 1443 recovery = ValueRecovery::alreadyIn RegisterFile();1443 recovery = ValueRecovery::alreadyInJSStack(); 1444 1444 else { 1445 1445 ArgumentPosition& argumentPosition = … … 1447 1447 ValueSource valueSource; 1448 1448 if (argumentPosition.shouldUseDoubleFormat()) 1449 valueSource = ValueSource(DoubleIn RegisterFile);1449 valueSource = ValueSource(DoubleInJSStack); 1450 1450 else if (isInt32Speculation(argumentPosition.prediction())) 1451 valueSource = ValueSource(Int32In RegisterFile);1451 valueSource = ValueSource(Int32InJSStack); 1452 1452 else if (isCellSpeculation(argumentPosition.prediction())) 1453 valueSource = ValueSource(CellIn RegisterFile);1453 valueSource = ValueSource(CellInJSStack); 1454 1454 else if (isBooleanSpeculation(argumentPosition.prediction())) 1455 valueSource = ValueSource(BooleanIn RegisterFile);1455 valueSource = ValueSource(BooleanInJSStack); 1456 1456 else 1457 valueSource = ValueSource(ValueIn RegisterFile);1457 valueSource = ValueSource(ValueInJSStack); 1458 1458 recovery = computeValueRecoveryFor(valueSource); 1459 1459 } 1460 1460 // The recovery should refer either to something that has already been 1461 // stored into the register fileat the right place, or to a constant,1461 // stored into the stack at the right place, or to a constant, 1462 1462 // since the Arguments code isn't smart enough to handle anything else. 1463 1463 // The exception is the this argument, which we don't really need to be … … 1551 1551 1552 1552 for (size_t i = 0; i < m_arguments.size(); ++i) 1553 m_arguments[i] = ValueSource(ValueIn RegisterFile);1553 m_arguments[i] = ValueSource(ValueInJSStack); 1554 1554 for (size_t i = 0; i < m_variables.size(); ++i) 1555 m_variables[i] = ValueSource(ValueIn RegisterFile);1555 m_variables[i] = ValueSource(ValueInJSStack); 1556 1556 1557 1557 for (int i = 0; i < m_jit.codeBlock()->numParameters(); ++i) { … … 1650 1650 ValueRecovery SpeculativeJIT::computeValueRecoveryFor(const ValueSource& valueSource) 1651 1651 { 1652 if (valueSource.isIn RegisterFile())1652 if (valueSource.isInJSStack()) 1653 1653 return valueSource.valueRecovery(); 1654 1654 -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h
r130303 r130726 326 326 // calls out from JIT code to C++ helper routines - 327 327 // they spill all live values to the appropriate 328 // slots in the RegisterFilewithout changing any state328 // slots in the JSStack without changing any state 329 329 // in the GenerationInfo. 330 330 SilentRegisterSavePlan silentSavePlanForGPR(VirtualRegister spillMe, GPRReg source) … … 705 705 #endif 706 706 707 // Spill a VirtualRegister to the RegisterFile.707 // Spill a VirtualRegister to the JSStack. 708 708 void spill(VirtualRegister spillMe) 709 709 { … … 715 715 #endif 716 716 // Check the GenerationInfo to see if this value need writing 717 // to the RegisterFile- if not, mark it as spilled & return.717 // to the JSStack - if not, mark it as spilled & return. 718 718 if (!info.needsSpill()) { 719 719 info.setSpilled(*m_stream, spillMe); … … 830 830 } 831 831 832 // Spill all VirtualRegisters back to the RegisterFile.832 // Spill all VirtualRegisters back to the JSStack. 833 833 void flushRegisters() 834 834 { -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp
r130359 r130726 1016 1016 int numPassedArgs = node.numChildren() - 1; 1017 1017 1018 m_jit.store32(MacroAssembler::TrustedImm32(numPassedArgs + dummyThisArgument), callFramePayloadSlot( RegisterFile::ArgumentCount));1019 m_jit.storePtr(GPRInfo::callFrameRegister, callFramePayloadSlot( RegisterFile::CallerFrame));1020 m_jit.store32(calleePayloadGPR, callFramePayloadSlot( RegisterFile::Callee));1021 m_jit.store32(calleeTagGPR, callFrameTagSlot( RegisterFile::Callee));1018 m_jit.store32(MacroAssembler::TrustedImm32(numPassedArgs + dummyThisArgument), callFramePayloadSlot(JSStack::ArgumentCount)); 1019 m_jit.storePtr(GPRInfo::callFrameRegister, callFramePayloadSlot(JSStack::CallerFrame)); 1020 m_jit.store32(calleePayloadGPR, callFramePayloadSlot(JSStack::Callee)); 1021 m_jit.store32(calleeTagGPR, callFrameTagSlot(JSStack::Callee)); 1022 1022 1023 1023 for (int i = 0; i < numPassedArgs; i++) { … … 1050 1050 slowPath.append(m_jit.branch32(MacroAssembler::NotEqual, calleeTagGPR, TrustedImm32(JSValue::CellTag))); 1051 1051 m_jit.loadPtr(MacroAssembler::Address(calleePayloadGPR, OBJECT_OFFSETOF(JSFunction, m_scope)), resultPayloadGPR); 1052 m_jit.storePtr(resultPayloadGPR, MacroAssembler::Address(GPRInfo::callFrameRegister, static_cast<ptrdiff_t>(sizeof(Register)) * RegisterFile::ScopeChain + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.payload)));1053 m_jit.store32(MacroAssembler::TrustedImm32(JSValue::CellTag), MacroAssembler::Address(GPRInfo::callFrameRegister, static_cast<ptrdiff_t>(sizeof(Register)) * RegisterFile::ScopeChain + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.tag)));1052 m_jit.storePtr(resultPayloadGPR, MacroAssembler::Address(GPRInfo::callFrameRegister, static_cast<ptrdiff_t>(sizeof(Register)) * JSStack::ScopeChain + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.payload))); 1053 m_jit.store32(MacroAssembler::TrustedImm32(JSValue::CellTag), MacroAssembler::Address(GPRInfo::callFrameRegister, static_cast<ptrdiff_t>(sizeof(Register)) * JSStack::ScopeChain + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.tag))); 1054 1054 1055 1055 CodeOrigin codeOrigin = at(m_compileIndex).codeOrigin; … … 2162 2162 // as a speculation point. So before we speculate make sure that we 2163 2163 // know where the child of this node needs to go in the virtual 2164 // register file.2164 // stack. 2165 2165 compileMovHint(node); 2166 2166 … … 2191 2191 // fine, because this SetLocal's local (i.e. the LHS in a x = y++ 2192 2192 // statement) would be dead anyway - so the fact that DFG would have 2193 // already made the assignment, and baked it into the register fileduring2193 // already made the assignment, and baked it into the stack during 2194 2194 // OSR exit, would not be visible to the old JIT in any way. 2195 2195 m_codeOriginForOSR = nextNode->codeOrigin; … … 2201 2201 noResult(m_compileIndex); 2202 2202 // Indicate that it's no longer necessary to retrieve the value of 2203 // this bytecode variable from registers or other locations in the register file,2203 // this bytecode variable from registers or other locations in the stack, 2204 2204 // but that it is stored as a double. 2205 recordSetLocal(node.local(), ValueSource(DoubleIn RegisterFile));2205 recordSetLocal(node.local(), ValueSource(DoubleInJSStack)); 2206 2206 break; 2207 2207 } … … 2211 2211 m_jit.storeDouble(value.fpr(), JITCompiler::addressFor(node.local())); 2212 2212 noResult(m_compileIndex); 2213 recordSetLocal(node.local(), ValueSource(DoubleIn RegisterFile));2213 recordSetLocal(node.local(), ValueSource(DoubleInJSStack)); 2214 2214 break; 2215 2215 } … … 2218 2218 m_jit.store32(value.gpr(), JITCompiler::payloadFor(node.local())); 2219 2219 noResult(m_compileIndex); 2220 recordSetLocal(node.local(), ValueSource(Int32In RegisterFile));2220 recordSetLocal(node.local(), ValueSource(Int32InJSStack)); 2221 2221 break; 2222 2222 } … … 2226 2226 m_jit.storePtr(cellGPR, JITCompiler::payloadFor(node.local())); 2227 2227 noResult(m_compileIndex); 2228 recordSetLocal(node.local(), ValueSource(CellIn RegisterFile));2228 recordSetLocal(node.local(), ValueSource(CellInJSStack)); 2229 2229 break; 2230 2230 } … … 2233 2233 m_jit.store32(value.gpr(), JITCompiler::payloadFor(node.local())); 2234 2234 noResult(m_compileIndex); 2235 recordSetLocal(node.local(), ValueSource(BooleanIn RegisterFile));2235 recordSetLocal(node.local(), ValueSource(BooleanInJSStack)); 2236 2236 break; 2237 2237 } … … 2241 2241 m_jit.store32(value.tagGPR(), JITCompiler::tagFor(node.local())); 2242 2242 noResult(m_compileIndex); 2243 recordSetLocal(node.local(), ValueSource(ValueIn RegisterFile));2243 recordSetLocal(node.local(), ValueSource(ValueInJSStack)); 2244 2244 2245 2245 // If we're storing an arguments object that has been optimized away, … … 3052 3052 3053 3053 // Grab the return address. 3054 m_jit.emitGetFromCallFrameHeaderPtr( RegisterFile::ReturnPC, GPRInfo::regT2);3054 m_jit.emitGetFromCallFrameHeaderPtr(JSStack::ReturnPC, GPRInfo::regT2); 3055 3055 // Restore our caller's "r". 3056 m_jit.emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, GPRInfo::callFrameRegister);3056 m_jit.emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, GPRInfo::callFrameRegister); 3057 3057 // Return. 3058 3058 m_jit.restoreReturnAddressBeforeReturn(GPRInfo::regT2); … … 3367 3367 case GetCallee: { 3368 3368 GPRTemporary result(this); 3369 m_jit.loadPtr(JITCompiler::addressFor(static_cast<VirtualRegister>( RegisterFile::Callee)), result.gpr());3369 m_jit.loadPtr(JITCompiler::addressFor(static_cast<VirtualRegister>(JSStack::Callee)), result.gpr()); 3370 3370 cellResult(result.gpr(), m_compileIndex); 3371 3371 break; … … 3376 3376 GPRReg resultGPR = result.gpr(); 3377 3377 3378 m_jit.loadPtr(JITCompiler::addressFor(static_cast<VirtualRegister>( RegisterFile::ScopeChain)), resultGPR);3378 m_jit.loadPtr(JITCompiler::addressFor(static_cast<VirtualRegister>(JSStack::ScopeChain)), resultGPR); 3379 3379 bool checkTopLevel = m_jit.codeBlock()->codeType() == FunctionCode && m_jit.codeBlock()->needsFullScopeChain(); 3380 3380 int skip = node.scopeChainDepth(); … … 4162 4162 4163 4163 ASSERT(!node.codeOrigin.inlineCallFrame); 4164 m_jit.load32(JITCompiler::payloadFor( RegisterFile::ArgumentCount), resultGPR);4164 m_jit.load32(JITCompiler::payloadFor(JSStack::ArgumentCount), resultGPR); 4165 4165 m_jit.sub32(TrustedImm32(1), resultGPR); 4166 4166 integerResult(resultGPR, m_compileIndex); … … 4184 4184 resultPayloadGPR); 4185 4185 } else { 4186 m_jit.load32(JITCompiler::payloadFor( RegisterFile::ArgumentCount), resultPayloadGPR);4186 m_jit.load32(JITCompiler::payloadFor(JSStack::ArgumentCount), resultPayloadGPR); 4187 4187 m_jit.sub32(TrustedImm32(1), resultPayloadGPR); 4188 4188 } … … 4237 4237 JITCompiler::AboveOrEqual, 4238 4238 resultPayloadGPR, 4239 JITCompiler::payloadFor( RegisterFile::ArgumentCount)));4239 JITCompiler::payloadFor(JSStack::ArgumentCount))); 4240 4240 } 4241 4241 … … 4314 4314 JITCompiler::AboveOrEqual, 4315 4315 resultPayloadGPR, 4316 JITCompiler::payloadFor( RegisterFile::ArgumentCount)));4316 JITCompiler::payloadFor(JSStack::ArgumentCount))); 4317 4317 } 4318 4318 -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp
r130359 r130726 73 73 74 74 // Since we statically know that we're filling an integer, and values 75 // in the RegisterFileare boxed, this must be DataFormatJSInteger.75 // in the JSStack are boxed, this must be DataFormatJSInteger. 76 76 // We will check this with a jitAssert below. 77 77 info.fillJSValue(*m_stream, gpr, DataFormatJSInteger); … … 1006 1006 int numPassedArgs = node.numChildren() - 1; 1007 1007 1008 m_jit.store32(MacroAssembler::TrustedImm32(numPassedArgs + dummyThisArgument), callFramePayloadSlot( RegisterFile::ArgumentCount));1009 m_jit.storePtr(GPRInfo::callFrameRegister, callFrameSlot( RegisterFile::CallerFrame));1010 m_jit.storePtr(calleeGPR, callFrameSlot( RegisterFile::Callee));1008 m_jit.store32(MacroAssembler::TrustedImm32(numPassedArgs + dummyThisArgument), callFramePayloadSlot(JSStack::ArgumentCount)); 1009 m_jit.storePtr(GPRInfo::callFrameRegister, callFrameSlot(JSStack::CallerFrame)); 1010 m_jit.storePtr(calleeGPR, callFrameSlot(JSStack::Callee)); 1011 1011 1012 1012 for (int i = 0; i < numPassedArgs; i++) { … … 1034 1034 slowPath = m_jit.branchPtrWithPatch(MacroAssembler::NotEqual, calleeGPR, targetToCheck, MacroAssembler::TrustedImmPtr(JSValue::encode(JSValue()))); 1035 1035 m_jit.loadPtr(MacroAssembler::Address(calleeGPR, OBJECT_OFFSETOF(JSFunction, m_scope)), resultGPR); 1036 m_jit.storePtr(resultGPR, MacroAssembler::Address(GPRInfo::callFrameRegister, static_cast<ptrdiff_t>(sizeof(Register)) * RegisterFile::ScopeChain));1036 m_jit.storePtr(resultGPR, MacroAssembler::Address(GPRInfo::callFrameRegister, static_cast<ptrdiff_t>(sizeof(Register)) * JSStack::ScopeChain)); 1037 1037 1038 1038 CodeOrigin codeOrigin = at(m_compileIndex).codeOrigin; … … 2203 2203 // as a speculation point. So before we speculate make sure that we 2204 2204 // know where the child of this node needs to go in the virtual 2205 // register file.2205 // stack. 2206 2206 compileMovHint(node); 2207 2207 … … 2232 2232 // fine, because this SetLocal's local (i.e. the LHS in a x = y++ 2233 2233 // statement) would be dead anyway - so the fact that DFG would have 2234 // already made the assignment, and baked it into the register fileduring2234 // already made the assignment, and baked it into the stack during 2235 2235 // OSR exit, would not be visible to the old JIT in any way. 2236 2236 m_codeOriginForOSR = nextNode->codeOrigin; … … 2242 2242 noResult(m_compileIndex); 2243 2243 // Indicate that it's no longer necessary to retrieve the value of 2244 // this bytecode variable from registers or other locations in the register file,2244 // this bytecode variable from registers or other locations in the stack, 2245 2245 // but that it is stored as a double. 2246 recordSetLocal(node.local(), ValueSource(DoubleIn RegisterFile));2246 recordSetLocal(node.local(), ValueSource(DoubleInJSStack)); 2247 2247 break; 2248 2248 } … … 2253 2253 m_jit.store32(value.gpr(), JITCompiler::payloadFor(node.local())); 2254 2254 noResult(m_compileIndex); 2255 recordSetLocal(node.local(), ValueSource(Int32In RegisterFile));2255 recordSetLocal(node.local(), ValueSource(Int32InJSStack)); 2256 2256 break; 2257 2257 } … … 2261 2261 m_jit.storePtr(cellGPR, JITCompiler::addressFor(node.local())); 2262 2262 noResult(m_compileIndex); 2263 recordSetLocal(node.local(), ValueSource(CellIn RegisterFile));2263 recordSetLocal(node.local(), ValueSource(CellInJSStack)); 2264 2264 break; 2265 2265 } … … 2268 2268 m_jit.storePtr(boolean.gpr(), JITCompiler::addressFor(node.local())); 2269 2269 noResult(m_compileIndex); 2270 recordSetLocal(node.local(), ValueSource(BooleanIn RegisterFile));2270 recordSetLocal(node.local(), ValueSource(BooleanInJSStack)); 2271 2271 break; 2272 2272 } … … 2277 2277 noResult(m_compileIndex); 2278 2278 2279 recordSetLocal(node.local(), ValueSource(ValueIn RegisterFile));2279 recordSetLocal(node.local(), ValueSource(ValueInJSStack)); 2280 2280 2281 2281 // If we're storing an arguments object that has been optimized away, … … 3088 3088 3089 3089 // Grab the return address. 3090 m_jit.emitGetFromCallFrameHeaderPtr( RegisterFile::ReturnPC, GPRInfo::regT1);3090 m_jit.emitGetFromCallFrameHeaderPtr(JSStack::ReturnPC, GPRInfo::regT1); 3091 3091 // Restore our caller's "r". 3092 m_jit.emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, GPRInfo::callFrameRegister);3092 m_jit.emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, GPRInfo::callFrameRegister); 3093 3093 // Return. 3094 3094 m_jit.restoreReturnAddressBeforeReturn(GPRInfo::regT1); … … 3376 3376 case GetCallee: { 3377 3377 GPRTemporary result(this); 3378 m_jit.loadPtr(JITCompiler::addressFor(static_cast<VirtualRegister>( RegisterFile::Callee)), result.gpr());3378 m_jit.loadPtr(JITCompiler::addressFor(static_cast<VirtualRegister>(JSStack::Callee)), result.gpr()); 3379 3379 cellResult(result.gpr(), m_compileIndex); 3380 3380 break; … … 3385 3385 GPRReg resultGPR = result.gpr(); 3386 3386 3387 m_jit.loadPtr(JITCompiler::addressFor(static_cast<VirtualRegister>( RegisterFile::ScopeChain)), resultGPR);3387 m_jit.loadPtr(JITCompiler::addressFor(static_cast<VirtualRegister>(JSStack::ScopeChain)), resultGPR); 3388 3388 bool checkTopLevel = m_jit.codeBlock()->codeType() == FunctionCode && m_jit.codeBlock()->needsFullScopeChain(); 3389 3389 int skip = node.scopeChainDepth(); … … 4107 4107 4108 4108 ASSERT(!node.codeOrigin.inlineCallFrame); 4109 m_jit.load32(JITCompiler::payloadFor( RegisterFile::ArgumentCount), resultGPR);4109 m_jit.load32(JITCompiler::payloadFor(JSStack::ArgumentCount), resultGPR); 4110 4110 m_jit.sub32(TrustedImm32(1), resultGPR); 4111 4111 integerResult(resultGPR, m_compileIndex); … … 4130 4130 resultGPR); 4131 4131 } else { 4132 m_jit.load32(JITCompiler::payloadFor( RegisterFile::ArgumentCount), resultGPR);4132 m_jit.load32(JITCompiler::payloadFor(JSStack::ArgumentCount), resultGPR); 4133 4133 m_jit.sub32(TrustedImm32(1), resultGPR); 4134 4134 m_jit.orPtr(GPRInfo::tagTypeNumberRegister, resultGPR); … … 4179 4179 JITCompiler::AboveOrEqual, 4180 4180 resultGPR, 4181 JITCompiler::payloadFor( RegisterFile::ArgumentCount)));4181 JITCompiler::payloadFor(JSStack::ArgumentCount))); 4182 4182 } 4183 4183 … … 4244 4244 JITCompiler::AboveOrEqual, 4245 4245 resultGPR, 4246 JITCompiler::payloadFor( RegisterFile::ArgumentCount)));4246 JITCompiler::payloadFor(JSStack::ArgumentCount))); 4247 4247 } 4248 4248 -
trunk/Source/JavaScriptCore/dfg/DFGThunks.cpp
r127625 r130726 114 114 CCallHelpers::Address( 115 115 GPRInfo::callFrameRegister, 116 static_cast<ptrdiff_t>(sizeof(Register)) * RegisterFile::CallerFrame),116 static_cast<ptrdiff_t>(sizeof(Register)) * JSStack::CallerFrame), 117 117 GPRInfo::callFrameRegister); 118 118 jit.peek(GPRInfo::nonPreservedNonReturnGPR, JITSTACKFRAME_ARGS_INDEX); … … 137 137 CCallHelpers::Address( 138 138 GPRInfo::callFrameRegister, 139 static_cast<ptrdiff_t>(sizeof(Register)) * RegisterFile::ReturnPC));139 static_cast<ptrdiff_t>(sizeof(Register)) * JSStack::ReturnPC)); 140 140 jit.storePtr(GPRInfo::callFrameRegister, &globalData->topCallFrame); 141 141 jit.poke(GPRInfo::nonPreservedNonReturnGPR, JITSTACKFRAME_ARGS_INDEX); … … 152 152 CCallHelpers::Address( 153 153 GPRInfo::callFrameRegister, 154 static_cast<ptrdiff_t>(sizeof(Register)) * RegisterFile::ReturnPC),154 static_cast<ptrdiff_t>(sizeof(Register)) * JSStack::ReturnPC), 155 155 GPRInfo::nonPreservedNonReturnGPR); 156 156 jit.storePtr( … … 158 158 CCallHelpers::Address( 159 159 GPRInfo::callFrameRegister, 160 static_cast<ptrdiff_t>(sizeof(Register)) * RegisterFile::ReturnPC));160 static_cast<ptrdiff_t>(sizeof(Register)) * JSStack::ReturnPC)); 161 161 emitPointerValidation(jit, GPRInfo::nonPreservedNonReturnGPR); 162 162 jit.restoreReturnAddressBeforeReturn(GPRInfo::nonPreservedNonReturnGPR); … … 250 250 CCallHelpers::Address( 251 251 GPRInfo::callFrameRegister, 252 static_cast<ptrdiff_t>(sizeof(Register)) * RegisterFile::ScopeChain));252 static_cast<ptrdiff_t>(sizeof(Register)) * JSStack::ScopeChain)); 253 253 #else 254 254 jit.storePtr( … … 256 256 CCallHelpers::Address( 257 257 GPRInfo::callFrameRegister, 258 static_cast<ptrdiff_t>(sizeof(Register)) * RegisterFile::ScopeChain +258 static_cast<ptrdiff_t>(sizeof(Register)) * JSStack::ScopeChain + 259 259 OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.payload))); 260 260 jit.store32( … … 262 262 CCallHelpers::Address( 263 263 GPRInfo::callFrameRegister, 264 static_cast<ptrdiff_t>(sizeof(Register)) * RegisterFile::ScopeChain +264 static_cast<ptrdiff_t>(sizeof(Register)) * JSStack::ScopeChain + 265 265 OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.tag))); 266 266 #endif -
trunk/Source/JavaScriptCore/dfg/DFGValueSource.cpp
r121717 r130726 40 40 fprintf(out, "IsDead"); 41 41 break; 42 case ValueIn RegisterFile:43 fprintf(out, "In RegFile");42 case ValueInJSStack: 43 fprintf(out, "InStack"); 44 44 break; 45 case Int32In RegisterFile:45 case Int32InJSStack: 46 46 fprintf(out, "Int32"); 47 47 break; 48 case CellIn RegisterFile:48 case CellInJSStack: 49 49 fprintf(out, "Cell"); 50 50 break; 51 case BooleanIn RegisterFile:51 case BooleanInJSStack: 52 52 fprintf(out, "Bool"); 53 53 break; 54 case DoubleIn RegisterFile:54 case DoubleInJSStack: 55 55 fprintf(out, "Double"); 56 56 break; -
trunk/Source/JavaScriptCore/dfg/DFGValueSource.h
r123169 r130726 40 40 enum ValueSourceKind { 41 41 SourceNotSet, 42 ValueIn RegisterFile,43 Int32In RegisterFile,44 CellIn RegisterFile,45 BooleanIn RegisterFile,46 DoubleIn RegisterFile,42 ValueInJSStack, 43 Int32InJSStack, 44 CellInJSStack, 45 BooleanInJSStack, 46 DoubleInJSStack, 47 47 ArgumentsSource, 48 48 SourceIsDead, … … 54 54 switch (dataFormat) { 55 55 case DataFormatInteger: 56 return Int32In RegisterFile;56 return Int32InJSStack; 57 57 case DataFormatDouble: 58 return DoubleIn RegisterFile;58 return DoubleInJSStack; 59 59 case DataFormatBoolean: 60 return BooleanIn RegisterFile;60 return BooleanInJSStack; 61 61 case DataFormatCell: 62 return CellIn RegisterFile;62 return CellInJSStack; 63 63 case DataFormatDead: 64 64 return SourceIsDead; … … 67 67 default: 68 68 ASSERT(dataFormat & DataFormatJS); 69 return ValueIn RegisterFile;69 return ValueInJSStack; 70 70 } 71 71 } … … 74 74 { 75 75 switch (kind) { 76 case ValueIn RegisterFile:76 case ValueInJSStack: 77 77 return DataFormatJS; 78 case Int32In RegisterFile:78 case Int32InJSStack: 79 79 return DataFormatInteger; 80 case CellIn RegisterFile:80 case CellInJSStack: 81 81 return DataFormatCell; 82 case BooleanIn RegisterFile:82 case BooleanInJSStack: 83 83 return DataFormatBoolean; 84 case DoubleIn RegisterFile:84 case DoubleInJSStack: 85 85 return DataFormatDouble; 86 86 case ArgumentsSource: … … 93 93 } 94 94 95 static inline bool isIn RegisterFile(ValueSourceKind kind)95 static inline bool isInJSStack(ValueSourceKind kind) 96 96 { 97 97 DataFormat format = valueSourceKindToDataFormat(kind); … … 130 130 { 131 131 if (isInt32Speculation(prediction)) 132 return ValueSource(Int32In RegisterFile);132 return ValueSource(Int32InJSStack); 133 133 if (isArraySpeculation(prediction) || isCellSpeculation(prediction)) 134 return ValueSource(CellIn RegisterFile);134 return ValueSource(CellInJSStack); 135 135 if (isBooleanSpeculation(prediction)) 136 return ValueSource(BooleanIn RegisterFile);137 return ValueSource(ValueIn RegisterFile);136 return ValueSource(BooleanInJSStack); 137 return ValueSource(ValueInJSStack); 138 138 } 139 139 … … 153 153 } 154 154 155 bool isIn RegisterFile() const { return JSC::DFG::isInRegisterFile(kind()); }155 bool isInJSStack() const { return JSC::DFG::isInJSStack(kind()); } 156 156 bool isTriviallyRecoverable() const { return JSC::DFG::isTriviallyRecoverable(kind()); } 157 157 … … 165 165 ASSERT(isTriviallyRecoverable()); 166 166 switch (kind()) { 167 case ValueIn RegisterFile:168 return ValueRecovery::alreadyIn RegisterFile();169 170 case Int32In RegisterFile:171 return ValueRecovery::alreadyIn RegisterFileAsUnboxedInt32();172 173 case CellIn RegisterFile:174 return ValueRecovery::alreadyIn RegisterFileAsUnboxedCell();175 176 case BooleanIn RegisterFile:177 return ValueRecovery::alreadyIn RegisterFileAsUnboxedBoolean();178 179 case DoubleIn RegisterFile:180 return ValueRecovery::alreadyIn RegisterFileAsUnboxedDouble();167 case ValueInJSStack: 168 return ValueRecovery::alreadyInJSStack(); 169 170 case Int32InJSStack: 171 return ValueRecovery::alreadyInJSStackAsUnboxedInt32(); 172 173 case CellInJSStack: 174 return ValueRecovery::alreadyInJSStackAsUnboxedCell(); 175 176 case BooleanInJSStack: 177 return ValueRecovery::alreadyInJSStackAsUnboxedBoolean(); 178 179 case DoubleInJSStack: 180 return ValueRecovery::alreadyInJSStackAsUnboxedDouble(); 181 181 182 182 case SourceIsDead: -
trunk/Source/JavaScriptCore/dfg/DFGVariableEventStream.cpp
r122541 r130726 94 94 valueRecoveries = Operands<ValueRecovery>(codeBlock->numParameters(), numVariables); 95 95 for (size_t i = 0; i < valueRecoveries.size(); ++i) 96 valueRecoveries[i] = ValueRecovery::alreadyIn RegisterFile();96 valueRecoveries[i] = ValueRecovery::alreadyInJSStack(); 97 97 return; 98 98 } … … 281 281 282 282 valueRecoveries[i] = 283 ValueRecovery::displacedIn RegisterFile(static_cast<VirtualRegister>(info->u.virtualReg), info->format);283 ValueRecovery::displacedInJSStack(static_cast<VirtualRegister>(info->u.virtualReg), info->format); 284 284 } 285 285 } -
trunk/Source/JavaScriptCore/heap/Heap.cpp
r130612 r130726 396 396 } 397 397 398 inline RegisterFile& Heap::registerFile()399 { 400 return m_globalData->interpreter-> registerFile();398 inline JSStack& Heap::stack() 399 { 400 return m_globalData->interpreter->stack(); 401 401 } 402 402 … … 404 404 { 405 405 ASSERT(isValidThreadState(m_globalData)); 406 ConservativeRoots registerFileRoots(&m_objectSpace.blocks(), &m_storageSpace);407 registerFile().gatherConservativeRoots(registerFileRoots);408 size_t registerFileRootCount = registerFileRoots.size();409 JSCell** registerRoots = registerFileRoots.roots();410 for (size_t i = 0; i < registerFileRootCount; i++) {406 ConservativeRoots stackRoots(&m_objectSpace.blocks(), &m_storageSpace); 407 stack().gatherConservativeRoots(stackRoots); 408 size_t stackRootCount = stackRoots.size(); 409 JSCell** registerRoots = stackRoots.roots(); 410 for (size_t i = 0; i < stackRootCount; i++) { 411 411 setMarked(registerRoots[i]); 412 412 roots.add(registerRoots[i]); … … 437 437 } 438 438 439 ConservativeRoots registerFileRoots(&m_objectSpace.blocks(), &m_storageSpace);439 ConservativeRoots stackRoots(&m_objectSpace.blocks(), &m_storageSpace); 440 440 m_dfgCodeBlocks.clearMarks(); 441 441 { 442 GCPHASE(Gather RegisterFileRoots);443 registerFile().gatherConservativeRoots(444 registerFileRoots, m_jitStubRoutines, m_dfgCodeBlocks);442 GCPHASE(GatherStackRoots); 443 stack().gatherConservativeRoots( 444 stackRoots, m_jitStubRoutines, m_dfgCodeBlocks); 445 445 } 446 446 … … 497 497 } 498 498 { 499 GCPHASE(Visit RegisterFileRoots);500 MARK_LOG_ROOT(visitor, " Register File");501 visitor.append( registerFileRoots);499 GCPHASE(VisitStackRoots); 500 MARK_LOG_ROOT(visitor, "Stack"); 501 visitor.append(stackRoots); 502 502 visitor.donateAndDrain(); 503 503 } -
trunk/Source/JavaScriptCore/heap/Heap.h
r130612 r130726 56 56 class JSCell; 57 57 class JSGlobalData; 58 class JSStack; 58 59 class JSValue; 59 60 class LiveObjectIterator; 60 61 class LLIntOffsetsExtractor; 61 62 class MarkedArgumentBuffer; 62 class RegisterFile;63 63 class WeakGCHandlePool; 64 64 class SlotVisitor; … … 211 211 void markDeadObjects(); 212 212 213 RegisterFile& registerFile();213 JSStack& stack(); 214 214 BlockAllocator& blockAllocator(); 215 215 -
trunk/Source/JavaScriptCore/interpreter/CallFrame.cpp
r127202 r130726 44 44 } 45 45 46 RegisterFile* CallFrame::registerFile()47 { 48 return &interpreter()-> registerFile();46 JSStack* CallFrame::stack() 47 { 48 return &interpreter()->stack(); 49 49 } 50 50 -
trunk/Source/JavaScriptCore/interpreter/CallFrame.h
r129827 r130726 26 26 #include "AbstractPC.h" 27 27 #include "JSGlobalData.h" 28 #include "JSStack.h" 28 29 #include "MacroAssemblerCodeRef.h" 29 #include "RegisterFile.h"30 30 31 31 namespace JSC { … … 40 40 class ExecState : private Register { 41 41 public: 42 JSValue calleeAsValue() const { return this[ RegisterFile::Callee].jsValue(); }43 JSObject* callee() const { return this[ RegisterFile::Callee].function(); }44 CodeBlock* codeBlock() const { return this[ RegisterFile::CodeBlock].Register::codeBlock(); }42 JSValue calleeAsValue() const { return this[JSStack::Callee].jsValue(); } 43 JSObject* callee() const { return this[JSStack::Callee].function(); } 44 CodeBlock* codeBlock() const { return this[JSStack::CodeBlock].Register::codeBlock(); } 45 45 JSScope* scope() const 46 46 { 47 ASSERT(this[ RegisterFile::ScopeChain].Register::scope());48 return this[ RegisterFile::ScopeChain].Register::scope();47 ASSERT(this[JSStack::ScopeChain].Register::scope()); 48 return this[JSStack::ScopeChain].Register::scope(); 49 49 } 50 50 … … 103 103 CallFrame& operator=(const Register& r) { *static_cast<Register*>(this) = r; return *this; } 104 104 105 CallFrame* callerFrame() const { return this[ RegisterFile::CallerFrame].callFrame(); }105 CallFrame* callerFrame() const { return this[JSStack::CallerFrame].callFrame(); } 106 106 #if ENABLE(JIT) || ENABLE(LLINT) 107 ReturnAddressPtr returnPC() const { return ReturnAddressPtr(this[ RegisterFile::ReturnPC].vPC()); }108 bool hasReturnPC() const { return !!this[ RegisterFile::ReturnPC].vPC(); }109 void clearReturnPC() { registers()[ RegisterFile::ReturnPC] = static_cast<Instruction*>(0); }107 ReturnAddressPtr returnPC() const { return ReturnAddressPtr(this[JSStack::ReturnPC].vPC()); } 108 bool hasReturnPC() const { return !!this[JSStack::ReturnPC].vPC(); } 109 void clearReturnPC() { registers()[JSStack::ReturnPC] = static_cast<Instruction*>(0); } 110 110 #endif 111 111 AbstractPC abstractReturnPC(JSGlobalData& globalData) { return AbstractPC(globalData, this); } … … 117 117 { 118 118 ASSERT(codeBlock()); 119 return this[ RegisterFile::ArgumentCount].tag();119 return this[JSStack::ArgumentCount].tag(); 120 120 } 121 121 … … 123 123 { 124 124 ASSERT(codeBlock()); 125 this[ RegisterFile::ArgumentCount].tag() = static_cast<int32_t>(offset);125 this[JSStack::ArgumentCount].tag() = static_cast<int32_t>(offset); 126 126 } 127 127 #endif … … 137 137 138 138 #if ENABLE(DFG_JIT) 139 InlineCallFrame* inlineCallFrame() const { return this[ RegisterFile::ReturnPC].asInlineCallFrame(); }140 unsigned codeOriginIndexForDFG() const { return this[ RegisterFile::ArgumentCount].tag(); }139 InlineCallFrame* inlineCallFrame() const { return this[JSStack::ReturnPC].asInlineCallFrame(); } 140 unsigned codeOriginIndexForDFG() const { return this[JSStack::ArgumentCount].tag(); } 141 141 #else 142 142 // This will never be called if !ENABLE(DFG_JIT) since all calls should be guarded by … … 152 152 Instruction* currentVPC() const 153 153 { 154 return bitwise_cast<Instruction*>(this[ RegisterFile::ArgumentCount].tag());154 return bitwise_cast<Instruction*>(this[JSStack::ArgumentCount].tag()); 155 155 } 156 156 void setCurrentVPC(Instruction* vpc) 157 157 { 158 this[ RegisterFile::ArgumentCount].tag() = bitwise_cast<int32_t>(vpc);158 this[JSStack::ArgumentCount].tag() = bitwise_cast<int32_t>(vpc); 159 159 } 160 160 #else … … 163 163 #endif 164 164 165 void setCallerFrame(CallFrame* callerFrame) { static_cast<Register*>(this)[ RegisterFile::CallerFrame] = callerFrame; }166 void setScope(JSScope* scope) { static_cast<Register*>(this)[ RegisterFile::ScopeChain] = scope; }165 void setCallerFrame(CallFrame* callerFrame) { static_cast<Register*>(this)[JSStack::CallerFrame] = callerFrame; } 166 void setScope(JSScope* scope) { static_cast<Register*>(this)[JSStack::ScopeChain] = scope; } 167 167 168 168 ALWAYS_INLINE void init(CodeBlock* codeBlock, Instruction* vPC, JSScope* scope, … … 170 170 { 171 171 ASSERT(callerFrame); // Use noCaller() rather than 0 for the outer host call frame caller. 172 ASSERT(callerFrame == noCaller() || callerFrame->removeHostCallFrameFlag()-> registerFile()->end() >= this);172 ASSERT(callerFrame == noCaller() || callerFrame->removeHostCallFrameFlag()->stack()->end() >= this); 173 173 174 174 setCodeBlock(codeBlock); … … 187 187 // Access to arguments as passed. (After capture, arguments may move to a different location.) 188 188 size_t argumentCount() const { return argumentCountIncludingThis() - 1; } 189 size_t argumentCountIncludingThis() const { return this[ RegisterFile::ArgumentCount].payload(); }189 size_t argumentCountIncludingThis() const { return this[JSStack::ArgumentCount].payload(); } 190 190 static int argumentOffset(int argument) { return s_firstArgumentOffset - argument; } 191 191 static int argumentOffsetIncludingThis(int argument) { return s_thisArgumentOffset - argument; } … … 217 217 JSValue argumentAfterCapture(size_t argument); 218 218 219 static int offsetFor(size_t argumentCountIncludingThis) { return argumentCountIncludingThis + RegisterFile::CallFrameHeaderSize; }219 static int offsetFor(size_t argumentCountIncludingThis) { return argumentCountIncludingThis + JSStack::CallFrameHeaderSize; } 220 220 221 221 // FIXME: Remove these. … … 229 229 CallFrame* removeHostCallFrameFlag() { return reinterpret_cast<CallFrame*>(reinterpret_cast<intptr_t>(this) & ~HostCallFrameFlag); } 230 230 231 void setArgumentCountIncludingThis(int count) { static_cast<Register*>(this)[ RegisterFile::ArgumentCount].payload() = count; }232 void setCallee(JSObject* callee) { static_cast<Register*>(this)[ RegisterFile::Callee] = Register::withCallee(callee); }233 void setCodeBlock(CodeBlock* codeBlock) { static_cast<Register*>(this)[ RegisterFile::CodeBlock] = codeBlock; }234 void setReturnPC(void* value) { static_cast<Register*>(this)[ RegisterFile::ReturnPC] = (Instruction*)value; }231 void setArgumentCountIncludingThis(int count) { static_cast<Register*>(this)[JSStack::ArgumentCount].payload() = count; } 232 void setCallee(JSObject* callee) { static_cast<Register*>(this)[JSStack::Callee] = Register::withCallee(callee); } 233 void setCodeBlock(CodeBlock* codeBlock) { static_cast<Register*>(this)[JSStack::CodeBlock] = codeBlock; } 234 void setReturnPC(void* value) { static_cast<Register*>(this)[JSStack::ReturnPC] = (Instruction*)value; } 235 235 236 236 #if ENABLE(DFG_JIT) 237 237 bool isInlineCallFrame(); 238 238 239 void setInlineCallFrame(InlineCallFrame* inlineCallFrame) { static_cast<Register*>(this)[ RegisterFile::ReturnPC] = inlineCallFrame; }239 void setInlineCallFrame(InlineCallFrame* inlineCallFrame) { static_cast<Register*>(this)[JSStack::ReturnPC] = inlineCallFrame; } 240 240 241 241 // Call this to get the semantically correct JS CallFrame* for the … … 270 270 private: 271 271 static const intptr_t HostCallFrameFlag = 1; 272 static const int s_thisArgumentOffset = -1 - RegisterFile::CallFrameHeaderSize;272 static const int s_thisArgumentOffset = -1 - JSStack::CallFrameHeaderSize; 273 273 static const int s_firstArgumentOffset = s_thisArgumentOffset - 1; 274 274 275 275 #ifndef NDEBUG 276 RegisterFile* registerFile();276 JSStack* stack(); 277 277 #endif 278 278 #if ENABLE(DFG_JIT) -
trunk/Source/JavaScriptCore/interpreter/Interpreter.cpp
r129453 r130726 89 89 } 90 90 91 ALWAYS_INLINE CallFrame* Interpreter::slideRegisterWindowForCall(CodeBlock* newCodeBlock, RegisterFile* registerFile, CallFrame* callFrame, size_t registerOffset, int argumentCountIncludingThis)91 ALWAYS_INLINE CallFrame* Interpreter::slideRegisterWindowForCall(CodeBlock* newCodeBlock, JSStack* stack, CallFrame* callFrame, size_t registerOffset, int argumentCountIncludingThis) 92 92 { 93 93 // This ensures enough space for the worst case scenario of zero arguments passed by the caller. 94 if (! registerFile->grow(callFrame->registers() + registerOffset + newCodeBlock->numParameters() + newCodeBlock->m_numCalleeRegisters))94 if (!stack->grow(callFrame->registers() + registerOffset + newCodeBlock->numParameters() + newCodeBlock->m_numCalleeRegisters)) 95 95 return 0; 96 96 … … 164 164 ASSERT(isValidThisObject(thisValue, callFrame)); 165 165 Interpreter* interpreter = callFrame->globalData().interpreter; 166 return interpreter->execute(eval, callFrame, thisValue, callerScopeChain, callFrame->registers() - interpreter-> registerFile().begin() + 1 + RegisterFile::CallFrameHeaderSize);167 } 168 169 CallFrame* loadVarargs(CallFrame* callFrame, RegisterFile* registerFile, JSValue thisValue, JSValue arguments, int firstFreeRegister)166 return interpreter->execute(eval, callFrame, thisValue, callerScopeChain, callFrame->registers() - interpreter->stack().begin() + 1 + JSStack::CallFrameHeaderSize); 167 } 168 169 CallFrame* loadVarargs(CallFrame* callFrame, JSStack* stack, JSValue thisValue, JSValue arguments, int firstFreeRegister) 170 170 { 171 171 if (!arguments) { // f.apply(x, arguments), with arguments unmodified. 172 172 unsigned argumentCountIncludingThis = callFrame->argumentCountIncludingThis(); 173 CallFrame* newCallFrame = CallFrame::create(callFrame->registers() + firstFreeRegister + argumentCountIncludingThis + RegisterFile::CallFrameHeaderSize);174 if (argumentCountIncludingThis > Arguments::MaxArguments + 1 || ! registerFile->grow(newCallFrame->registers())) {173 CallFrame* newCallFrame = CallFrame::create(callFrame->registers() + firstFreeRegister + argumentCountIncludingThis + JSStack::CallFrameHeaderSize); 174 if (argumentCountIncludingThis > Arguments::MaxArguments + 1 || !stack->grow(newCallFrame->registers())) { 175 175 callFrame->globalData().exception = createStackOverflowError(callFrame); 176 176 return 0; … … 185 185 186 186 if (arguments.isUndefinedOrNull()) { 187 CallFrame* newCallFrame = CallFrame::create(callFrame->registers() + firstFreeRegister + 1 + RegisterFile::CallFrameHeaderSize);188 if (! registerFile->grow(newCallFrame->registers())) {187 CallFrame* newCallFrame = CallFrame::create(callFrame->registers() + firstFreeRegister + 1 + JSStack::CallFrameHeaderSize); 188 if (!stack->grow(newCallFrame->registers())) { 189 189 callFrame->globalData().exception = createStackOverflowError(callFrame); 190 190 return 0; … … 204 204 unsigned argCount = argsObject->length(callFrame); 205 205 CallFrame* newCallFrame = CallFrame::create(callFrame->registers() + firstFreeRegister + CallFrame::offsetFor(argCount + 1)); 206 if (argCount > Arguments::MaxArguments || ! registerFile->grow(newCallFrame->registers())) {206 if (argCount > Arguments::MaxArguments || !stack->grow(newCallFrame->registers())) { 207 207 callFrame->globalData().exception = createStackOverflowError(callFrame); 208 208 return 0; … … 218 218 unsigned argCount = array->length(); 219 219 CallFrame* newCallFrame = CallFrame::create(callFrame->registers() + firstFreeRegister + CallFrame::offsetFor(argCount + 1)); 220 if (argCount > Arguments::MaxArguments || ! registerFile->grow(newCallFrame->registers())) {220 if (argCount > Arguments::MaxArguments || !stack->grow(newCallFrame->registers())) { 221 221 callFrame->globalData().exception = createStackOverflowError(callFrame); 222 222 return 0; … … 231 231 unsigned argCount = argObject->get(callFrame, callFrame->propertyNames().length).toUInt32(callFrame); 232 232 CallFrame* newCallFrame = CallFrame::create(callFrame->registers() + firstFreeRegister + CallFrame::offsetFor(argCount + 1)); 233 if (argCount > Arguments::MaxArguments || ! registerFile->grow(newCallFrame->registers())) {233 if (argCount > Arguments::MaxArguments || !stack->grow(newCallFrame->registers())) { 234 234 callFrame->globalData().exception = createStackOverflowError(callFrame); 235 235 return 0; … … 302 302 const Register* end; 303 303 304 it = callFrame->registers() - RegisterFile::CallFrameHeaderSize - callFrame->argumentCountIncludingThis();305 end = callFrame->registers() - RegisterFile::CallFrameHeaderSize;304 it = callFrame->registers() - JSStack::CallFrameHeaderSize - callFrame->argumentCountIncludingThis(); 305 end = callFrame->registers() - JSStack::CallFrameHeaderSize; 306 306 while (it < end) { 307 307 JSValue v = it->jsValue(); … … 711 711 highWaterMark = max(highWaterMark, callerHighWaterMark); 712 712 } 713 m_ registerFile.shrink(highWaterMark);713 m_stack.shrink(highWaterMark); 714 714 715 715 // Unwind the scope chain within the exception handler's call frame. … … 864 864 865 865 // Reserve stack space for this invocation: 866 Register* oldEnd = m_ registerFile.end();867 Register* newEnd = oldEnd + codeBlock->numParameters() + RegisterFile::CallFrameHeaderSize + codeBlock->m_numCalleeRegisters;868 if (!m_ registerFile.grow(newEnd))866 Register* oldEnd = m_stack.end(); 867 Register* newEnd = oldEnd + codeBlock->numParameters() + JSStack::CallFrameHeaderSize + codeBlock->m_numCalleeRegisters; 868 if (!m_stack.grow(newEnd)) 869 869 return checkedReturn(throwStackOverflowError(callFrame)); 870 870 871 871 // Push the call frame for this invocation: 872 CallFrame* newCallFrame = CallFrame::create(oldEnd + codeBlock->numParameters() + RegisterFile::CallFrameHeaderSize);872 CallFrame* newCallFrame = CallFrame::create(oldEnd + codeBlock->numParameters() + JSStack::CallFrameHeaderSize); 873 873 ASSERT(codeBlock->numParameters() == 1); // 1 parameter for 'this'. 874 874 newCallFrame->init(codeBlock, 0, scope, CallFrame::noCaller(), codeBlock->numParameters(), 0); … … 884 884 SamplingTool::CallRecord callRecord(m_sampler.get()); 885 885 886 m_reentryDepth++; 886 m_reentryDepth++; 887 887 #if ENABLE(LLINT_C_LOOP) 888 888 result = LLInt::CLoop::execute(newCallFrame, llint_program_prologue); 889 889 #elif ENABLE(JIT) 890 result = program->generatedJITCode().execute(&m_ registerFile, newCallFrame, scope->globalData());890 result = program->generatedJITCode().execute(&m_stack, newCallFrame, scope->globalData()); 891 891 #endif // ENABLE(JIT) 892 892 … … 897 897 profiler->didExecute(callFrame, program->sourceURL(), program->lineNo()); 898 898 899 m_ registerFile.shrink(oldEnd);899 m_stack.shrink(oldEnd); 900 900 901 901 return checkedReturn(result); … … 913 913 return checkedReturn(throwStackOverflowError(callFrame)); 914 914 915 Register* oldEnd = m_ registerFile.end();915 Register* oldEnd = m_stack.end(); 916 916 ASSERT(callFrame->frameExtent() <= oldEnd || callFrame == callFrame->scope()->globalObject()->globalExec()); 917 917 int argCount = 1 + args.size(); // implicit "this" parameter 918 size_t registerOffset = argCount + RegisterFile::CallFrameHeaderSize;918 size_t registerOffset = argCount + JSStack::CallFrameHeaderSize; 919 919 920 920 CallFrame* newCallFrame = CallFrame::create(oldEnd + registerOffset); 921 if (!m_ registerFile.grow(newCallFrame->registers()))921 if (!m_stack.grow(newCallFrame->registers())) 922 922 return checkedReturn(throwStackOverflowError(callFrame)); 923 923 … … 933 933 JSObject* compileError = callData.js.functionExecutable->compileForCall(callFrame, callDataScope); 934 934 if (UNLIKELY(!!compileError)) { 935 m_ registerFile.shrink(oldEnd);935 m_stack.shrink(oldEnd); 936 936 return checkedReturn(throwError(callFrame, compileError)); 937 937 } 938 938 939 939 CodeBlock* newCodeBlock = &callData.js.functionExecutable->generatedBytecodeForCall(); 940 newCallFrame = slideRegisterWindowForCall(newCodeBlock, &m_ registerFile, newCallFrame, 0, argCount);940 newCallFrame = slideRegisterWindowForCall(newCodeBlock, &m_stack, newCallFrame, 0, argCount); 941 941 if (UNLIKELY(!newCallFrame)) { 942 m_ registerFile.shrink(oldEnd);942 m_stack.shrink(oldEnd); 943 943 return checkedReturn(throwStackOverflowError(callFrame)); 944 944 } … … 959 959 result = LLInt::CLoop::execute(newCallFrame, llint_function_for_call_prologue); 960 960 #elif ENABLE(JIT) 961 result = callData.js.functionExecutable->generatedJITCodeForCall().execute(&m_ registerFile, newCallFrame, callDataScope->globalData());961 result = callData.js.functionExecutable->generatedJITCodeForCall().execute(&m_stack, newCallFrame, callDataScope->globalData()); 962 962 #endif // ENABLE(JIT) 963 963 … … 968 968 profiler->didExecute(callFrame, function); 969 969 970 m_ registerFile.shrink(oldEnd);970 m_stack.shrink(oldEnd); 971 971 return checkedReturn(result); 972 972 } … … 992 992 profiler->didExecute(callFrame, function); 993 993 994 m_ registerFile.shrink(oldEnd);994 m_stack.shrink(oldEnd); 995 995 return checkedReturn(result); 996 996 } … … 1008 1008 return checkedReturn(throwStackOverflowError(callFrame)); 1009 1009 1010 Register* oldEnd = m_ registerFile.end();1010 Register* oldEnd = m_stack.end(); 1011 1011 int argCount = 1 + args.size(); // implicit "this" parameter 1012 size_t registerOffset = argCount + RegisterFile::CallFrameHeaderSize;1013 1014 if (!m_ registerFile.grow(oldEnd + registerOffset))1012 size_t registerOffset = argCount + JSStack::CallFrameHeaderSize; 1013 1014 if (!m_stack.grow(oldEnd + registerOffset)) 1015 1015 return checkedReturn(throwStackOverflowError(callFrame)); 1016 1016 … … 1027 1027 JSObject* compileError = constructData.js.functionExecutable->compileForConstruct(callFrame, constructDataScope); 1028 1028 if (UNLIKELY(!!compileError)) { 1029 m_ registerFile.shrink(oldEnd);1029 m_stack.shrink(oldEnd); 1030 1030 return checkedReturn(throwError(callFrame, compileError)); 1031 1031 } 1032 1032 1033 1033 CodeBlock* newCodeBlock = &constructData.js.functionExecutable->generatedBytecodeForConstruct(); 1034 newCallFrame = slideRegisterWindowForCall(newCodeBlock, &m_ registerFile, newCallFrame, 0, argCount);1034 newCallFrame = slideRegisterWindowForCall(newCodeBlock, &m_stack, newCallFrame, 0, argCount); 1035 1035 if (UNLIKELY(!newCallFrame)) { 1036 m_ registerFile.shrink(oldEnd);1036 m_stack.shrink(oldEnd); 1037 1037 return checkedReturn(throwStackOverflowError(callFrame)); 1038 1038 } … … 1053 1053 result = LLInt::CLoop::execute(newCallFrame, llint_function_for_construct_prologue); 1054 1054 #elif ENABLE(JIT) 1055 result = constructData.js.functionExecutable->generatedJITCodeForConstruct().execute(&m_ registerFile, newCallFrame, constructDataScope->globalData());1055 result = constructData.js.functionExecutable->generatedJITCodeForConstruct().execute(&m_stack, newCallFrame, constructDataScope->globalData()); 1056 1056 #endif // ENABLE(JIT) 1057 1057 m_reentryDepth--; … … 1061 1061 profiler->didExecute(callFrame, constructor); 1062 1062 1063 m_ registerFile.shrink(oldEnd);1063 m_stack.shrink(oldEnd); 1064 1064 if (callFrame->hadException()) 1065 1065 return 0; … … 1088 1088 profiler->didExecute(callFrame, constructor); 1089 1089 1090 m_ registerFile.shrink(oldEnd);1090 m_stack.shrink(oldEnd); 1091 1091 if (callFrame->hadException()) 1092 1092 return 0; … … 1107 1107 } 1108 1108 1109 Register* oldEnd = m_ registerFile.end();1110 size_t registerOffset = argumentCountIncludingThis + RegisterFile::CallFrameHeaderSize;1109 Register* oldEnd = m_stack.end(); 1110 size_t registerOffset = argumentCountIncludingThis + JSStack::CallFrameHeaderSize; 1111 1111 1112 1112 CallFrame* newCallFrame = CallFrame::create(oldEnd + registerOffset); 1113 if (!m_ registerFile.grow(newCallFrame->registers())) {1113 if (!m_stack.grow(newCallFrame->registers())) { 1114 1114 throwStackOverflowError(callFrame); 1115 1115 return CallFrameClosure(); … … 1119 1119 if (error) { 1120 1120 throwError(callFrame, error); 1121 m_ registerFile.shrink(oldEnd);1121 m_stack.shrink(oldEnd); 1122 1122 return CallFrameClosure(); 1123 1123 } 1124 1124 CodeBlock* codeBlock = &functionExecutable->generatedBytecodeForCall(); 1125 1125 1126 newCallFrame = slideRegisterWindowForCall(codeBlock, &m_ registerFile, newCallFrame, 0, argumentCountIncludingThis);1126 newCallFrame = slideRegisterWindowForCall(codeBlock, &m_stack, newCallFrame, 0, argumentCountIncludingThis); 1127 1127 if (UNLIKELY(!newCallFrame)) { 1128 1128 throwStackOverflowError(callFrame); 1129 m_ registerFile.shrink(oldEnd);1129 m_stack.shrink(oldEnd); 1130 1130 return CallFrameClosure(); 1131 1131 } … … 1155 1155 result = LLInt::CLoop::execute(closure.newCallFrame, llint_function_for_call_prologue); 1156 1156 #elif ENABLE(JIT) 1157 result = closure.functionExecutable->generatedJITCodeForCall().execute(&m_ registerFile, closure.newCallFrame, closure.globalData);1157 result = closure.functionExecutable->generatedJITCodeForCall().execute(&m_stack, closure.newCallFrame, closure.globalData); 1158 1158 #endif // ENABLE(JIT) 1159 1159 m_reentryDepth--; … … 1168 1168 { 1169 1169 closure.globalData->topCallFrame = closure.oldCallFrame; 1170 m_ registerFile.shrink(closure.oldEnd);1170 m_stack.shrink(closure.oldEnd); 1171 1171 } 1172 1172 … … 1223 1223 } 1224 1224 1225 Register* oldEnd = m_ registerFile.end();1226 Register* newEnd = m_ registerFile.begin() + globalRegisterOffset + codeBlock->m_numCalleeRegisters;1227 if (!m_ registerFile.grow(newEnd))1225 Register* oldEnd = m_stack.end(); 1226 Register* newEnd = m_stack.begin() + globalRegisterOffset + codeBlock->m_numCalleeRegisters; 1227 if (!m_stack.grow(newEnd)) 1228 1228 return checkedReturn(throwStackOverflowError(callFrame)); 1229 1229 1230 CallFrame* newCallFrame = CallFrame::create(m_ registerFile.begin() + globalRegisterOffset);1230 CallFrame* newCallFrame = CallFrame::create(m_stack.begin() + globalRegisterOffset); 1231 1231 1232 1232 ASSERT(codeBlock->numParameters() == 1); // 1 parameter for 'this'. … … 1248 1248 result = LLInt::CLoop::execute(newCallFrame, llint_eval_prologue); 1249 1249 #elif ENABLE(JIT) 1250 result = eval->generatedJITCode().execute(&m_ registerFile, newCallFrame, scope->globalData());1250 result = eval->generatedJITCode().execute(&m_stack, newCallFrame, scope->globalData()); 1251 1251 #endif // ENABLE(JIT) 1252 1252 m_reentryDepth--; … … 1256 1256 profiler->didExecute(callFrame, eval->sourceURL(), eval->lineNo()); 1257 1257 1258 m_ registerFile.shrink(oldEnd);1258 m_stack.shrink(oldEnd); 1259 1259 return checkedReturn(result); 1260 1260 } -
trunk/Source/JavaScriptCore/interpreter/Interpreter.h
r129453 r130726 36 36 #include "JSValue.h" 37 37 #include "JSObject.h" 38 #include "JSStack.h" 38 39 #include "LLIntData.h" 39 40 #include "Opcode.h" 40 #include "RegisterFile.h"41 41 42 42 #include <wtf/HashMap.h> … … 190 190 void initialize(bool canUseJIT); 191 191 192 RegisterFile& registerFile() { return m_registerFile; }192 JSStack& stack() { return m_stack; } 193 193 194 194 Opcode getOpcode(OpcodeID id) … … 250 250 NEVER_INLINE bool unwindCallFrame(CallFrame*&, JSValue, unsigned& bytecodeOffset, CodeBlock*&); 251 251 252 static ALWAYS_INLINE CallFrame* slideRegisterWindowForCall(CodeBlock*, RegisterFile*, CallFrame*, size_t registerOffset, int argc);252 static ALWAYS_INLINE CallFrame* slideRegisterWindowForCall(CodeBlock*, JSStack*, CallFrame*, size_t registerOffset, int argc); 253 253 254 254 static CallFrame* findFunctionCallFrameFromVMCode(CallFrame*, JSFunction*); 255 256 #if !ENABLE(LLINT_C_LOOP)257 JSValue privateExecute(ExecutionFlag, RegisterFile*, CallFrame*);258 #endif259 255 260 256 void dumpRegisters(CallFrame*); … … 268 264 int m_reentryDepth; 269 265 270 RegisterFile m_registerFile;266 JSStack m_stack; 271 267 272 268 #if ENABLE(COMPUTED_GOTO_OPCODES) && ENABLE(LLINT) … … 288 284 inline JSValue Interpreter::execute(EvalExecutable* eval, CallFrame* callFrame, JSValue thisValue, JSScope* scope) 289 285 { 290 return execute(eval, callFrame, thisValue, scope, m_ registerFile.size() + 1 + RegisterFile::CallFrameHeaderSize);286 return execute(eval, callFrame, thisValue, scope, m_stack.size() + 1 + JSStack::CallFrameHeaderSize); 291 287 } 292 288 293 289 JSValue eval(CallFrame*); 294 CallFrame* loadVarargs(CallFrame*, RegisterFile*, JSValue thisValue, JSValue arguments, int firstFreeRegister);290 CallFrame* loadVarargs(CallFrame*, JSStack*, JSValue thisValue, JSValue arguments, int firstFreeRegister); 295 291 296 292 } // namespace JSC -
trunk/Source/JavaScriptCore/interpreter/JSStack.cpp
r130715 r130726 28 28 29 29 #include "config.h" 30 #include " RegisterFile.h"30 #include "JSStack.h" 31 31 32 32 #include "ConservativeRoots.h" … … 37 37 static size_t committedBytesCount = 0; 38 38 39 static Mutex& registerFileStatisticsMutex()39 static Mutex& stackStatisticsMutex() 40 40 { 41 41 DEFINE_STATIC_LOCAL(Mutex, staticMutex, ()); … … 43 43 } 44 44 45 RegisterFile::~RegisterFile()45 JSStack::~JSStack() 46 46 { 47 47 void* base = m_reservation.base(); … … 51 51 } 52 52 53 bool RegisterFile::growSlowCase(Register* newEnd)53 bool JSStack::growSlowCase(Register* newEnd) 54 54 { 55 55 if (newEnd <= m_commitEnd) { … … 69 69 } 70 70 71 void RegisterFile::gatherConservativeRoots(ConservativeRoots& conservativeRoots)71 void JSStack::gatherConservativeRoots(ConservativeRoots& conservativeRoots) 72 72 { 73 73 conservativeRoots.add(begin(), end()); 74 74 } 75 75 76 void RegisterFile::gatherConservativeRoots(ConservativeRoots& conservativeRoots, JITStubRoutineSet& jitStubRoutines, DFGCodeBlocks& dfgCodeBlocks)76 void JSStack::gatherConservativeRoots(ConservativeRoots& conservativeRoots, JITStubRoutineSet& jitStubRoutines, DFGCodeBlocks& dfgCodeBlocks) 77 77 { 78 78 conservativeRoots.add(begin(), end(), jitStubRoutines, dfgCodeBlocks); 79 79 } 80 80 81 void RegisterFile::releaseExcessCapacity()81 void JSStack::releaseExcessCapacity() 82 82 { 83 83 ptrdiff_t delta = reinterpret_cast<uintptr_t>(m_commitEnd) - reinterpret_cast<uintptr_t>(m_reservation.base()); … … 87 87 } 88 88 89 void RegisterFile::initializeThreading()89 void JSStack::initializeThreading() 90 90 { 91 registerFileStatisticsMutex();91 stackStatisticsMutex(); 92 92 } 93 93 94 size_t RegisterFile::committedByteCount()94 size_t JSStack::committedByteCount() 95 95 { 96 MutexLocker locker( registerFileStatisticsMutex());96 MutexLocker locker(stackStatisticsMutex()); 97 97 return committedBytesCount; 98 98 } 99 99 100 void RegisterFile::addToCommittedByteCount(long byteCount)100 void JSStack::addToCommittedByteCount(long byteCount) 101 101 { 102 MutexLocker locker( registerFileStatisticsMutex());102 MutexLocker locker(stackStatisticsMutex()); 103 103 ASSERT(static_cast<long>(committedBytesCount) + byteCount > -1); 104 104 committedBytesCount += byteCount; -
trunk/Source/JavaScriptCore/interpreter/JSStack.h
r130715 r130726 27 27 */ 28 28 29 #ifndef RegisterFile_h30 #define RegisterFile_h29 #ifndef JSStack_h 30 #define JSStack_h 31 31 32 32 #include "ExecutableAllocator.h" … … 43 43 class LLIntOffsetsExtractor; 44 44 45 class RegisterFile{46 WTF_MAKE_NONCOPYABLE( RegisterFile);45 class JSStack { 46 WTF_MAKE_NONCOPYABLE(JSStack); 47 47 public: 48 48 enum CallFrameHeaderEntry { … … 59 59 static const size_t defaultCapacity = 512 * 1024; 60 60 static const size_t commitSize = 16 * 1024; 61 // Allow 8k of excess registers before we start trying to reap the registerfile61 // Allow 8k of excess registers before we start trying to reap the stack 62 62 static const ptrdiff_t maxExcessCapacity = 8 * 1024; 63 63 64 RegisterFile(size_t capacity = defaultCapacity);65 ~ RegisterFile();64 JSStack(size_t capacity = defaultCapacity); 65 ~JSStack(); 66 66 67 67 void gatherConservativeRoots(ConservativeRoots&); … … 85 85 private: 86 86 friend class LLIntOffsetsExtractor; 87 87 88 88 bool growSlowCase(Register*); 89 89 void releaseExcessCapacity(); … … 94 94 }; 95 95 96 inline RegisterFile::RegisterFile(size_t capacity)96 inline JSStack::JSStack(size_t capacity) 97 97 : m_end(0) 98 98 { … … 104 104 } 105 105 106 inline void RegisterFile::shrink(Register* newEnd)106 inline void JSStack::shrink(Register* newEnd) 107 107 { 108 108 if (newEnd >= m_end) … … 113 113 } 114 114 115 inline bool RegisterFile::grow(Register* newEnd)115 inline bool JSStack::grow(Register* newEnd) 116 116 { 117 117 if (newEnd <= m_end) … … 122 122 } // namespace JSC 123 123 124 #endif // RegisterFile_h124 #endif // JSStack_h -
trunk/Source/JavaScriptCore/interpreter/VMInspector.cpp
r126228 r130726 70 70 71 71 printf("frame [%d] %p { cb %p:%s, retPC %p:%s, scope %p:%s, callee %p:%s, callerFrame %p:%s, argc %d, vPC %p }", 72 frameCount, frame, 73 74 CAST<void*>(frame[RegisterFile::CodeBlock].payload()), 75 getTypeName(frame[RegisterFile::CodeBlock].jsValue()), 76 77 CAST<void*>(frame[RegisterFile::ReturnPC].payload()), 78 getTypeName(frame[RegisterFile::ReturnPC].jsValue()), 79 80 CAST<void*>(frame[RegisterFile::ScopeChain].payload()), 81 getTypeName(frame[RegisterFile::ScopeChain].jsValue()), 82 83 CAST<void*>(frame[RegisterFile::Callee].payload()), 84 getTypeName(frame[RegisterFile::Callee].jsValue()), 85 86 CAST<void*>(frame[RegisterFile::CallerFrame].payload()), 87 getTypeName(frame[RegisterFile::CallerFrame].jsValue()), 88 89 frame[RegisterFile::ArgumentCount].payload(), 90 vPC); 72 frameCount, frame, 73 CAST<void*>(frame[JSStack::CodeBlock].payload()), 74 getTypeName(frame[JSStack::CodeBlock].jsValue()), 75 CAST<void*>(frame[JSStack::ReturnPC].payload()), 76 getTypeName(frame[JSStack::ReturnPC].jsValue()), 77 CAST<void*>(frame[JSStack::ScopeChain].payload()), 78 getTypeName(frame[JSStack::ScopeChain].jsValue()), 79 CAST<void*>(frame[JSStack::Callee].payload()), 80 getTypeName(frame[JSStack::Callee].jsValue()), 81 CAST<void*>(frame[JSStack::CallerFrame].callFrame()), 82 getTypeName(frame[JSStack::CallerFrame].jsValue()), 83 frame[JSStack::ArgumentCount].payload(), 84 vPC); 91 85 92 86 if (funcName || file || (line >= 0)) { -
trunk/Source/JavaScriptCore/jit/JIT.cpp
r130612 r130726 79 79 , m_jumpTargetIndex(0) 80 80 , m_mappedBytecodeOffset((unsigned)-1) 81 , m_mappedVirtualRegisterIndex( RegisterFile::ReturnPC)81 , m_mappedVirtualRegisterIndex(JSStack::ReturnPC) 82 82 , m_mappedTag((RegisterID)-1) 83 83 , m_mappedPayload((RegisterID)-1) … … 607 607 608 608 preserveReturnAddressAfterCall(regT2); 609 emitPutToCallFrameHeader(regT2, RegisterFile::ReturnPC);610 emitPutImmediateToCallFrameHeader(m_codeBlock, RegisterFile::CodeBlock);609 emitPutToCallFrameHeader(regT2, JSStack::ReturnPC); 610 emitPutImmediateToCallFrameHeader(m_codeBlock, JSStack::CodeBlock); 611 611 612 612 Label beginLabel(this); … … 617 617 #endif 618 618 619 Jump registerFileCheck;619 Jump stackCheck; 620 620 if (m_codeBlock->codeType() == FunctionCode) { 621 621 #if ENABLE(DFG_JIT) … … 647 647 648 648 addPtr(TrustedImm32(m_codeBlock->m_numCalleeRegisters * sizeof(Register)), callFrameRegister, regT1); 649 registerFileCheck = branchPtr(Below, AbsoluteAddress(m_globalData->interpreter->registerFile().addressOfEnd()), regT1);649 stackCheck = branchPtr(Below, AbsoluteAddress(m_globalData->interpreter->stack().addressOfEnd()), regT1); 650 650 } 651 651 … … 663 663 Label arityCheck; 664 664 if (m_codeBlock->codeType() == FunctionCode) { 665 registerFileCheck.link(this);665 stackCheck.link(this); 666 666 m_bytecodeOffset = 0; 667 JITStubCall(this, cti_ register_file_check).call();667 JITStubCall(this, cti_stack_check).call(); 668 668 #ifndef NDEBUG 669 669 m_bytecodeOffset = (unsigned)-1; // Reset this, in order to guard its use with ASSERTs. … … 673 673 arityCheck = label(); 674 674 preserveReturnAddressAfterCall(regT2); 675 emitPutToCallFrameHeader(regT2, RegisterFile::ReturnPC);676 emitPutImmediateToCallFrameHeader(m_codeBlock, RegisterFile::CodeBlock);677 678 load32(payloadFor( RegisterFile::ArgumentCount), regT1);675 emitPutToCallFrameHeader(regT2, JSStack::ReturnPC); 676 emitPutImmediateToCallFrameHeader(m_codeBlock, JSStack::CodeBlock); 677 678 load32(payloadFor(JSStack::ArgumentCount), regT1); 679 679 branch32(AboveOrEqual, regT1, TrustedImm32(m_codeBlock->m_numParameters)).linkTo(beginLabel, this); 680 680 -
trunk/Source/JavaScriptCore/jit/JIT.h
r130303 r130726 59 59 class JSPropertyNameIterator; 60 60 class Interpreter; 61 class JSScope; 62 class JSStack; 61 63 class Register; 62 class RegisterFile;63 class JSScope;64 64 class StructureChain; 65 65 … … 779 779 void emitInitRegister(unsigned dst); 780 780 781 void emitPutToCallFrameHeader(RegisterID from, RegisterFile::CallFrameHeaderEntry entry);782 void emitPutCellToCallFrameHeader(RegisterID from, RegisterFile::CallFrameHeaderEntry);783 void emitPutIntToCallFrameHeader(RegisterID from, RegisterFile::CallFrameHeaderEntry);784 void emitPutImmediateToCallFrameHeader(void* value, RegisterFile::CallFrameHeaderEntry entry);785 void emitGetFromCallFrameHeaderPtr( RegisterFile::CallFrameHeaderEntry entry, RegisterID to, RegisterID from = callFrameRegister);786 void emitGetFromCallFrameHeader32( RegisterFile::CallFrameHeaderEntry entry, RegisterID to, RegisterID from = callFrameRegister);781 void emitPutToCallFrameHeader(RegisterID from, JSStack::CallFrameHeaderEntry); 782 void emitPutCellToCallFrameHeader(RegisterID from, JSStack::CallFrameHeaderEntry); 783 void emitPutIntToCallFrameHeader(RegisterID from, JSStack::CallFrameHeaderEntry); 784 void emitPutImmediateToCallFrameHeader(void* value, JSStack::CallFrameHeaderEntry); 785 void emitGetFromCallFrameHeaderPtr(JSStack::CallFrameHeaderEntry, RegisterID to, RegisterID from = callFrameRegister); 786 void emitGetFromCallFrameHeader32(JSStack::CallFrameHeaderEntry, RegisterID to, RegisterID from = callFrameRegister); 787 787 788 788 JSValue getConstantOperand(unsigned src); -
trunk/Source/JavaScriptCore/jit/JITCall.cpp
r129156 r130726 75 75 slowCase.append(branchPtr(NotEqual, regT0, TrustedImmPtr(JSValue::encode(JSValue())))); 76 76 77 emitGetFromCallFrameHeader32( RegisterFile::ArgumentCount, regT0);77 emitGetFromCallFrameHeader32(JSStack::ArgumentCount, regT0); 78 78 slowCase.append(branch32(Above, regT0, TrustedImm32(Arguments::MaxArguments + 1))); 79 79 // regT0: argumentCountIncludingThis 80 80 81 81 move(regT0, regT1); 82 add32(TrustedImm32(firstFreeRegister + RegisterFile::CallFrameHeaderSize), regT1);82 add32(TrustedImm32(firstFreeRegister + JSStack::CallFrameHeaderSize), regT1); 83 83 lshift32(TrustedImm32(3), regT1); 84 84 addPtr(callFrameRegister, regT1); 85 85 // regT1: newCallFrame 86 86 87 slowCase.append(branchPtr(Below, AbsoluteAddress(m_globalData->interpreter-> registerFile().addressOfEnd()), regT1));87 slowCase.append(branchPtr(Below, AbsoluteAddress(m_globalData->interpreter->stack().addressOfEnd()), regT1)); 88 88 89 89 // Initialize ArgumentCount. 90 store32(regT0, Address(regT1, RegisterFile::ArgumentCount * static_cast<int>(sizeof(Register)) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.payload)));90 store32(regT0, Address(regT1, JSStack::ArgumentCount * static_cast<int>(sizeof(Register)) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.payload))); 91 91 92 92 // Initialize 'this'. … … 126 126 stubCall.call(); 127 127 addSlowCase(branchPtr(Equal, regT0, TrustedImmPtr(JSValue::encode(JSValue())))); 128 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, callFrameRegister);128 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, callFrameRegister); 129 129 130 130 sampleCodeBlock(m_codeBlock); … … 135 135 linkSlowCase(iter); 136 136 137 emitGetFromCallFrameHeaderPtr( RegisterFile::Callee, regT0);137 emitGetFromCallFrameHeaderPtr(JSStack::Callee, regT0); 138 138 emitNakedCall(m_globalData->jitStubs->ctiVirtualCall()); 139 139 … … 174 174 175 175 addPtr(TrustedImm32(registerOffset * sizeof(Register)), callFrameRegister, regT1); 176 store32(TrustedImm32(argCount), Address(regT1, RegisterFile::ArgumentCount * static_cast<int>(sizeof(Register)) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.payload)));176 store32(TrustedImm32(argCount), Address(regT1, JSStack::ArgumentCount * static_cast<int>(sizeof(Register)) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.payload))); 177 177 } // regT1 holds newCallFrame with ArgumentCount initialized. 178 178 179 store32(TrustedImm32(instruction - m_codeBlock->instructions().begin()), Address(callFrameRegister, RegisterFile::ArgumentCount * static_cast<int>(sizeof(Register)) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.tag)));179 store32(TrustedImm32(instruction - m_codeBlock->instructions().begin()), Address(callFrameRegister, JSStack::ArgumentCount * static_cast<int>(sizeof(Register)) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.tag))); 180 180 emitGetVirtualRegister(callee, regT0); // regT0 holds callee. 181 181 182 storePtr(callFrameRegister, Address(regT1, RegisterFile::CallerFrame * static_cast<int>(sizeof(Register))));183 storePtr(regT0, Address(regT1, RegisterFile::Callee * static_cast<int>(sizeof(Register))));182 storePtr(callFrameRegister, Address(regT1, JSStack::CallerFrame * static_cast<int>(sizeof(Register)))); 183 storePtr(regT0, Address(regT1, JSStack::Callee * static_cast<int>(sizeof(Register)))); 184 184 move(regT1, callFrameRegister); 185 185 … … 202 202 203 203 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_scope)), regT1); 204 emitPutToCallFrameHeader(regT1, RegisterFile::ScopeChain);204 emitPutToCallFrameHeader(regT1, JSStack::ScopeChain); 205 205 m_callStructureStubCompilationInfo[callLinkInfoIndex].hotPathOther = emitNakedCall(); 206 206 -
trunk/Source/JavaScriptCore/jit/JITCall32_64.cpp
r129156 r130726 60 60 61 61 emitLoad(dst, regT1, regT0); 62 emitGetFromCallFrameHeaderPtr( RegisterFile::ReturnPC, regT2);63 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, callFrameRegister);62 emitGetFromCallFrameHeaderPtr(JSStack::ReturnPC, regT2); 63 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, callFrameRegister); 64 64 65 65 restoreReturnAddressBeforeReturn(regT2); … … 77 77 Jump notObject = emitJumpIfNotObject(regT2); 78 78 79 emitGetFromCallFrameHeaderPtr( RegisterFile::ReturnPC, regT2);80 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, callFrameRegister);79 emitGetFromCallFrameHeaderPtr(JSStack::ReturnPC, regT2); 80 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, callFrameRegister); 81 81 82 82 restoreReturnAddressBeforeReturn(regT2); … … 87 87 emitLoad(thisReg, regT1, regT0); 88 88 89 emitGetFromCallFrameHeaderPtr( RegisterFile::ReturnPC, regT2);90 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, callFrameRegister);89 emitGetFromCallFrameHeaderPtr(JSStack::ReturnPC, regT2); 90 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, callFrameRegister); 91 91 92 92 restoreReturnAddressBeforeReturn(regT2); … … 150 150 slowCase.append(branch32(NotEqual, regT1, TrustedImm32(JSValue::EmptyValueTag))); 151 151 152 load32(payloadFor( RegisterFile::ArgumentCount), regT2);152 load32(payloadFor(JSStack::ArgumentCount), regT2); 153 153 slowCase.append(branch32(Above, regT2, TrustedImm32(Arguments::MaxArguments + 1))); 154 154 // regT2: argumentCountIncludingThis 155 155 156 156 move(regT2, regT3); 157 add32(TrustedImm32(firstFreeRegister + RegisterFile::CallFrameHeaderSize), regT3);157 add32(TrustedImm32(firstFreeRegister + JSStack::CallFrameHeaderSize), regT3); 158 158 lshift32(TrustedImm32(3), regT3); 159 159 addPtr(callFrameRegister, regT3); 160 160 // regT3: newCallFrame 161 161 162 slowCase.append(branchPtr(Below, AbsoluteAddress(m_globalData->interpreter-> registerFile().addressOfEnd()), regT3));162 slowCase.append(branchPtr(Below, AbsoluteAddress(m_globalData->interpreter->stack().addressOfEnd()), regT3)); 163 163 164 164 // Initialize ArgumentCount. 165 store32(regT2, payloadFor( RegisterFile::ArgumentCount, regT3));165 store32(regT2, payloadFor(JSStack::ArgumentCount, regT3)); 166 166 167 167 // Initialize 'this'. … … 203 203 stubCall.call(); 204 204 addSlowCase(branch32(Equal, regT1, TrustedImm32(JSValue::EmptyValueTag))); 205 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, callFrameRegister);205 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, callFrameRegister); 206 206 207 207 sampleCodeBlock(m_codeBlock); … … 212 212 linkSlowCase(iter); 213 213 214 emitLoad( RegisterFile::Callee, regT1, regT0);214 emitLoad(JSStack::Callee, regT1, regT0); 215 215 emitNakedCall(m_globalData->jitStubs->ctiVirtualCall()); 216 216 … … 252 252 addPtr(TrustedImm32(registerOffset * sizeof(Register)), callFrameRegister, regT3); 253 253 254 store32(TrustedImm32(argCount), payloadFor( RegisterFile::ArgumentCount, regT3));254 store32(TrustedImm32(argCount), payloadFor(JSStack::ArgumentCount, regT3)); 255 255 } // regT3 holds newCallFrame with ArgumentCount initialized. 256 256 257 storePtr(TrustedImmPtr(instruction), tagFor( RegisterFile::ArgumentCount, callFrameRegister));257 storePtr(TrustedImmPtr(instruction), tagFor(JSStack::ArgumentCount, callFrameRegister)); 258 258 emitLoad(callee, regT1, regT0); // regT1, regT0 holds callee. 259 259 260 storePtr(callFrameRegister, Address(regT3, RegisterFile::CallerFrame * static_cast<int>(sizeof(Register))));261 emitStore( RegisterFile::Callee, regT1, regT0, regT3);260 storePtr(callFrameRegister, Address(regT3, JSStack::CallerFrame * static_cast<int>(sizeof(Register)))); 261 emitStore(JSStack::Callee, regT1, regT0, regT3); 262 262 move(regT3, callFrameRegister); 263 263 … … 282 282 283 283 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_scope)), regT1); 284 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);284 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 285 285 m_callStructureStubCompilationInfo[callLinkInfoIndex].hotPathOther = emitNakedCall(); 286 286 -
trunk/Source/JavaScriptCore/jit/JITCode.h
r127199 r130726 39 39 #if ENABLE(JIT) 40 40 class JSGlobalData; 41 class RegisterFile;41 class JSStack; 42 42 #endif 43 43 … … 130 130 #if ENABLE(JIT) 131 131 // Execute the code! 132 inline JSValue execute( RegisterFile* registerFile, CallFrame* callFrame, JSGlobalData* globalData)132 inline JSValue execute(JSStack* stack, CallFrame* callFrame, JSGlobalData* globalData) 133 133 { 134 JSValue result = JSValue::decode(ctiTrampoline(m_ref.code().executableAddress(), registerFile, callFrame, 0, 0, globalData));134 JSValue result = JSValue::decode(ctiTrampoline(m_ref.code().executableAddress(), stack, callFrame, 0, 0, globalData)); 135 135 return globalData->exception ? jsNull() : result; 136 136 } -
trunk/Source/JavaScriptCore/jit/JITInlineMethods.h
r130303 r130726 51 51 } 52 52 53 ALWAYS_INLINE void JIT::emitPutToCallFrameHeader(RegisterID from, RegisterFile::CallFrameHeaderEntry entry)53 ALWAYS_INLINE void JIT::emitPutToCallFrameHeader(RegisterID from, JSStack::CallFrameHeaderEntry entry) 54 54 { 55 55 storePtr(from, payloadFor(entry, callFrameRegister)); 56 56 } 57 57 58 ALWAYS_INLINE void JIT::emitPutCellToCallFrameHeader(RegisterID from, RegisterFile::CallFrameHeaderEntry entry)58 ALWAYS_INLINE void JIT::emitPutCellToCallFrameHeader(RegisterID from, JSStack::CallFrameHeaderEntry entry) 59 59 { 60 60 #if USE(JSVALUE32_64) … … 64 64 } 65 65 66 ALWAYS_INLINE void JIT::emitPutIntToCallFrameHeader(RegisterID from, RegisterFile::CallFrameHeaderEntry entry)66 ALWAYS_INLINE void JIT::emitPutIntToCallFrameHeader(RegisterID from, JSStack::CallFrameHeaderEntry entry) 67 67 { 68 68 store32(TrustedImm32(Int32Tag), intTagFor(entry, callFrameRegister)); … … 70 70 } 71 71 72 ALWAYS_INLINE void JIT::emitPutImmediateToCallFrameHeader(void* value, RegisterFile::CallFrameHeaderEntry entry)72 ALWAYS_INLINE void JIT::emitPutImmediateToCallFrameHeader(void* value, JSStack::CallFrameHeaderEntry entry) 73 73 { 74 74 storePtr(TrustedImmPtr(value), Address(callFrameRegister, entry * sizeof(Register))); 75 75 } 76 76 77 ALWAYS_INLINE void JIT::emitGetFromCallFrameHeaderPtr( RegisterFile::CallFrameHeaderEntry entry, RegisterID to, RegisterID from)77 ALWAYS_INLINE void JIT::emitGetFromCallFrameHeaderPtr(JSStack::CallFrameHeaderEntry entry, RegisterID to, RegisterID from) 78 78 { 79 79 loadPtr(Address(from, entry * sizeof(Register)), to); … … 102 102 } 103 103 104 ALWAYS_INLINE void JIT::emitGetFromCallFrameHeader32( RegisterFile::CallFrameHeaderEntry entry, RegisterID to, RegisterID from)104 ALWAYS_INLINE void JIT::emitGetFromCallFrameHeader32(JSStack::CallFrameHeaderEntry entry, RegisterID to, RegisterID from) 105 105 { 106 106 load32(Address(from, entry * sizeof(Register)), to); … … 266 266 if (m_bytecodeOffset) { 267 267 #if USE(JSVALUE32_64) 268 storePtr(TrustedImmPtr(m_codeBlock->instructions().begin() + m_bytecodeOffset + 1), intTagFor( RegisterFile::ArgumentCount));269 #else 270 store32(TrustedImm32(m_bytecodeOffset + 1), intTagFor( RegisterFile::ArgumentCount));268 storePtr(TrustedImmPtr(m_codeBlock->instructions().begin() + m_bytecodeOffset + 1), intTagFor(JSStack::ArgumentCount)); 269 #else 270 store32(TrustedImm32(m_bytecodeOffset + 1), intTagFor(JSStack::ArgumentCount)); 271 271 #endif 272 272 } … … 758 758 { 759 759 m_mappedBytecodeOffset = (unsigned)-1; 760 m_mappedVirtualRegisterIndex = RegisterFile::ReturnPC;760 m_mappedVirtualRegisterIndex = JSStack::ReturnPC; 761 761 m_mappedTag = (RegisterID)-1; 762 762 m_mappedPayload = (RegisterID)-1; -
trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp
r129713 r130726 77 77 // Finish canonical initialization before JS function call. 78 78 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_scope)), regT1); 79 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);79 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 80 80 81 81 // Also initialize ReturnPC for use by lazy linking and exceptions. 82 82 preserveReturnAddressAfterCall(regT3); 83 emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);83 emitPutToCallFrameHeader(regT3, JSStack::ReturnPC); 84 84 85 85 storePtr(callFrameRegister, &m_globalData->topCallFrame); … … 97 97 // Finish canonical initialization before JS function call. 98 98 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_scope)), regT1); 99 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);99 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 100 100 101 101 // Also initialize ReturnPC for use by lazy linking and exeptions. 102 102 preserveReturnAddressAfterCall(regT3); 103 emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);103 emitPutToCallFrameHeader(regT3, JSStack::ReturnPC); 104 104 105 105 storePtr(callFrameRegister, &m_globalData->topCallFrame); … … 117 117 // Finish canonical initialization before JS function call. 118 118 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_scope)), regT1); 119 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);119 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 120 120 121 121 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); … … 140 140 // Finish canonical initialization before JS function call. 141 141 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_scope)), regT1); 142 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);142 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 143 143 144 144 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); … … 157 157 callSlowCase.link(this); 158 158 // Finish canonical initialization before JS function call. 159 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, regT2);160 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT2, regT2);161 emitPutCellToCallFrameHeader(regT2, RegisterFile::ScopeChain);159 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, regT2); 160 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT2, regT2); 161 emitPutCellToCallFrameHeader(regT2, JSStack::ScopeChain); 162 162 163 163 // Also initialize ReturnPC and CodeBlock, like a JS function would. 164 164 preserveReturnAddressAfterCall(regT3); 165 emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);166 emitPutImmediateToCallFrameHeader(0, RegisterFile::CodeBlock);165 emitPutToCallFrameHeader(regT3, JSStack::ReturnPC); 166 emitPutImmediateToCallFrameHeader(0, JSStack::CodeBlock); 167 167 168 168 storePtr(callFrameRegister, &m_globalData->topCallFrame); 169 169 restoreArgumentReference(); 170 170 Call callCallNotJSFunction = call(); 171 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, callFrameRegister);171 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, callFrameRegister); 172 172 restoreReturnAddressBeforeReturn(regT3); 173 173 ret(); … … 175 175 constructSlowCase.link(this); 176 176 // Finish canonical initialization before JS function call. 177 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, regT2);178 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT2, regT2);179 emitPutCellToCallFrameHeader(regT2, RegisterFile::ScopeChain);177 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, regT2); 178 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT2, regT2); 179 emitPutCellToCallFrameHeader(regT2, JSStack::ScopeChain); 180 180 181 181 // Also initialize ReturnPC and CodeBlock, like a JS function would. 182 182 preserveReturnAddressAfterCall(regT3); 183 emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);184 emitPutImmediateToCallFrameHeader(0, RegisterFile::CodeBlock);183 emitPutToCallFrameHeader(regT3, JSStack::ReturnPC); 184 emitPutImmediateToCallFrameHeader(0, JSStack::CodeBlock); 185 185 186 186 storePtr(callFrameRegister, &m_globalData->topCallFrame); 187 187 restoreArgumentReference(); 188 188 Call callConstructNotJSFunction = call(); 189 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, callFrameRegister);189 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, callFrameRegister); 190 190 restoreReturnAddressBeforeReturn(regT3); 191 191 ret(); … … 232 232 Label nativeCallThunk = align(); 233 233 234 emitPutImmediateToCallFrameHeader(0, RegisterFile::CodeBlock);234 emitPutImmediateToCallFrameHeader(0, JSStack::CodeBlock); 235 235 storePtr(callFrameRegister, &m_globalData->topCallFrame); 236 236 … … 238 238 // Load caller frame's scope chain into this callframe so that whatever we call can 239 239 // get to its global data. 240 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, regT0);241 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT1, regT0);242 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);240 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, regT0); 241 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1, regT0); 242 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 243 243 244 244 peek(regT1); 245 emitPutToCallFrameHeader(regT1, RegisterFile::ReturnPC);245 emitPutToCallFrameHeader(regT1, JSStack::ReturnPC); 246 246 247 247 // Calling convention: f(edi, esi, edx, ecx, ...); … … 251 251 subPtr(TrustedImm32(16 - sizeof(void*)), stackPointerRegister); // Align stack after call. 252 252 253 emitGetFromCallFrameHeaderPtr( RegisterFile::Callee, X86Registers::esi);253 emitGetFromCallFrameHeaderPtr(JSStack::Callee, X86Registers::esi); 254 254 loadPtr(Address(X86Registers::esi, OBJECT_OFFSETOF(JSFunction, m_executable)), X86Registers::r9); 255 255 move(regT0, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack. … … 261 261 // Load caller frame's scope chain into this callframe so that whatever we call can 262 262 // get to its global data. 263 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, regT2);264 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT1, regT2);265 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);263 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, regT2); 264 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1, regT2); 265 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 266 266 267 267 preserveReturnAddressAfterCall(regT3); // Callee preserved 268 emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);268 emitPutToCallFrameHeader(regT3, JSStack::ReturnPC); 269 269 270 270 // Calling convention: f(r0 == regT0, r1 == regT1, ...); … … 272 272 move(callFrameRegister, ARMRegisters::r0); 273 273 274 emitGetFromCallFrameHeaderPtr( RegisterFile::Callee, ARMRegisters::r1);274 emitGetFromCallFrameHeaderPtr(JSStack::Callee, ARMRegisters::r1); 275 275 move(regT2, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack. 276 276 loadPtr(Address(ARMRegisters::r1, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); … … 282 282 // Load caller frame's scope chain into this callframe so that whatever we call can 283 283 // get to its global data. 284 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, regT0);285 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT1, regT0);286 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);284 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, regT0); 285 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1, regT0); 286 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 287 287 288 288 preserveReturnAddressAfterCall(regT3); // Callee preserved 289 emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);289 emitPutToCallFrameHeader(regT3, JSStack::ReturnPC); 290 290 291 291 // Calling convention: f(a0, a1, a2, a3); … … 300 300 301 301 // Call 302 emitGetFromCallFrameHeaderPtr( RegisterFile::Callee, MIPSRegisters::a2);302 emitGetFromCallFrameHeaderPtr(JSStack::Callee, MIPSRegisters::a2); 303 303 loadPtr(Address(MIPSRegisters::a2, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); 304 304 move(regT0, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack. … … 383 383 ASSERT(returnValueRegister != callFrameRegister); 384 384 emitGetVirtualRegister(currentInstruction[1].u.operand, returnValueRegister); 385 restoreReturnAddressBeforeReturn(Address(callFrameRegister, RegisterFile::ReturnPC * static_cast<int>(sizeof(Register))));385 restoreReturnAddressBeforeReturn(Address(callFrameRegister, JSStack::ReturnPC * static_cast<int>(sizeof(Register)))); 386 386 ret(); 387 387 } … … 584 584 585 585 // Grab the return address. 586 emitGetFromCallFrameHeaderPtr( RegisterFile::ReturnPC, regT1);586 emitGetFromCallFrameHeaderPtr(JSStack::ReturnPC, regT1); 587 587 588 588 // Restore our caller's "r". 589 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, callFrameRegister);589 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, callFrameRegister); 590 590 591 591 // Return. … … 607 607 608 608 // Grab the return address. 609 emitGetFromCallFrameHeaderPtr( RegisterFile::ReturnPC, regT1);609 emitGetFromCallFrameHeaderPtr(JSStack::ReturnPC, regT1); 610 610 611 611 // Restore our caller's "r". 612 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, callFrameRegister);612 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, callFrameRegister); 613 613 614 614 // Return. … … 622 622 623 623 // Grab the return address. 624 emitGetFromCallFrameHeaderPtr( RegisterFile::ReturnPC, regT1);624 emitGetFromCallFrameHeaderPtr(JSStack::ReturnPC, regT1); 625 625 626 626 // Restore our caller's "r". 627 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, callFrameRegister);627 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, callFrameRegister); 628 628 629 629 // Return. … … 1286 1286 void JIT::emit_op_create_this(Instruction* currentInstruction) 1287 1287 { 1288 emitGetFromCallFrameHeaderPtr( RegisterFile::Callee, regT0);1288 emitGetFromCallFrameHeaderPtr(JSStack::Callee, regT0); 1289 1289 loadPtr(Address(regT0, JSFunction::offsetOfCachedInheritorID()), regT2); 1290 1290 addSlowCase(branchTestPtr(Zero, regT2)); … … 1510 1510 int argumentsRegister = currentInstruction[2].u.operand; 1511 1511 addSlowCase(branchTestPtr(NonZero, addressFor(argumentsRegister))); 1512 emitGetFromCallFrameHeader32( RegisterFile::ArgumentCount, regT0);1512 emitGetFromCallFrameHeader32(JSStack::ArgumentCount, regT0); 1513 1513 sub32(TrustedImm32(1), regT0); 1514 1514 emitFastArithReTagImmediate(regT0, regT0); … … 1540 1540 add32(TrustedImm32(1), regT1); 1541 1541 // regT1 now contains the integer index of the argument we want, including this 1542 emitGetFromCallFrameHeader32( RegisterFile::ArgumentCount, regT2);1542 emitGetFromCallFrameHeader32(JSStack::ArgumentCount, regT2); 1543 1543 addSlowCase(branch32(AboveOrEqual, regT1, regT2)); 1544 1544 … … 1578 1578 int skip = currentInstruction[5].u.operand; 1579 1579 1580 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT0);1580 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT0); 1581 1581 1582 1582 bool checkTopLevel = m_codeBlock->codeType() == FunctionCode && m_codeBlock->needsFullScopeChain(); -
trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.cpp
r129713 r130726 71 71 // Finish canonical initialization before JS function call. 72 72 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_scope)), regT1); 73 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);73 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 74 74 75 75 // Also initialize ReturnPC for use by lazy linking and exceptions. 76 76 preserveReturnAddressAfterCall(regT3); 77 emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);77 emitPutToCallFrameHeader(regT3, JSStack::ReturnPC); 78 78 79 79 storePtr(callFrameRegister, &m_globalData->topCallFrame); … … 91 91 // Finish canonical initialization before JS function call. 92 92 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_scope)), regT1); 93 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);93 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 94 94 95 95 // Also initialize ReturnPC for use by lazy linking and exeptions. 96 96 preserveReturnAddressAfterCall(regT3); 97 emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);97 emitPutToCallFrameHeader(regT3, JSStack::ReturnPC); 98 98 99 99 storePtr(callFrameRegister, &m_globalData->topCallFrame); … … 111 111 // Finish canonical initialization before JS function call. 112 112 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_scope)), regT1); 113 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);113 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 114 114 115 115 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); … … 135 135 // Finish canonical initialization before JS function call. 136 136 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_scope)), regT1); 137 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);137 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 138 138 139 139 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); … … 153 153 callSlowCase.link(this); 154 154 // Finish canonical initialization before JS function call. 155 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, regT2);156 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT2, regT2);157 emitPutCellToCallFrameHeader(regT2, RegisterFile::ScopeChain);155 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, regT2); 156 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT2, regT2); 157 emitPutCellToCallFrameHeader(regT2, JSStack::ScopeChain); 158 158 159 159 // Also initialize ReturnPC and CodeBlock, like a JS function would. 160 160 preserveReturnAddressAfterCall(regT3); 161 emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);162 emitPutImmediateToCallFrameHeader(0, RegisterFile::CodeBlock);161 emitPutToCallFrameHeader(regT3, JSStack::ReturnPC); 162 emitPutImmediateToCallFrameHeader(0, JSStack::CodeBlock); 163 163 164 164 storePtr(callFrameRegister, &m_globalData->topCallFrame); 165 165 restoreArgumentReference(); 166 166 Call callCallNotJSFunction = call(); 167 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, callFrameRegister);167 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, callFrameRegister); 168 168 restoreReturnAddressBeforeReturn(regT3); 169 169 ret(); … … 171 171 constructSlowCase.link(this); 172 172 // Finish canonical initialization before JS function call. 173 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, regT2);174 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT2, regT2);175 emitPutCellToCallFrameHeader(regT2, RegisterFile::ScopeChain);173 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, regT2); 174 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT2, regT2); 175 emitPutCellToCallFrameHeader(regT2, JSStack::ScopeChain); 176 176 177 177 // Also initialize ReturnPC and CodeBlock, like a JS function would. 178 178 preserveReturnAddressAfterCall(regT3); 179 emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);180 emitPutImmediateToCallFrameHeader(0, RegisterFile::CodeBlock);179 emitPutToCallFrameHeader(regT3, JSStack::ReturnPC); 180 emitPutImmediateToCallFrameHeader(0, JSStack::CodeBlock); 181 181 182 182 storePtr(callFrameRegister, &m_globalData->topCallFrame); 183 183 restoreArgumentReference(); 184 184 Call callConstructNotJSFunction = call(); 185 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, callFrameRegister);185 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, callFrameRegister); 186 186 restoreReturnAddressBeforeReturn(regT3); 187 187 ret(); … … 228 228 Label nativeCallThunk = align(); 229 229 230 emitPutImmediateToCallFrameHeader(0, RegisterFile::CodeBlock);230 emitPutImmediateToCallFrameHeader(0, JSStack::CodeBlock); 231 231 storePtr(callFrameRegister, &m_globalData->topCallFrame); 232 232 … … 234 234 // Load caller frame's scope chain into this callframe so that whatever we call can 235 235 // get to its global data. 236 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, regT0);237 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT1, regT0);238 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);236 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, regT0); 237 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1, regT0); 238 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 239 239 240 240 peek(regT1); 241 emitPutToCallFrameHeader(regT1, RegisterFile::ReturnPC);241 emitPutToCallFrameHeader(regT1, JSStack::ReturnPC); 242 242 243 243 // Calling convention: f(ecx, edx, ...); … … 248 248 249 249 // call the function 250 emitGetFromCallFrameHeaderPtr( RegisterFile::Callee, regT1);250 emitGetFromCallFrameHeaderPtr(JSStack::Callee, regT1); 251 251 loadPtr(Address(regT1, OBJECT_OFFSETOF(JSFunction, m_executable)), regT1); 252 252 move(regT0, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack. … … 258 258 // Load caller frame's scope chain into this callframe so that whatever we call can 259 259 // get to its global data. 260 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, regT2);261 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT1, regT2);262 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);260 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, regT2); 261 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1, regT2); 262 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 263 263 264 264 preserveReturnAddressAfterCall(regT3); // Callee preserved 265 emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);265 emitPutToCallFrameHeader(regT3, JSStack::ReturnPC); 266 266 267 267 // Calling convention: f(r0 == regT0, r1 == regT1, ...); … … 270 270 271 271 // call the function 272 emitGetFromCallFrameHeaderPtr( RegisterFile::Callee, ARMRegisters::r1);272 emitGetFromCallFrameHeaderPtr(JSStack::Callee, ARMRegisters::r1); 273 273 move(regT2, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack. 274 274 loadPtr(Address(ARMRegisters::r1, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); … … 279 279 // Load caller frame's scope chain into this callframe so that whatever we call can 280 280 // get to its global data. 281 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, regT2);282 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT1, regT2);283 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);281 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, regT2); 282 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1, regT2); 283 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 284 284 285 285 preserveReturnAddressAfterCall(regT3); // Callee preserved 286 emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);286 emitPutToCallFrameHeader(regT3, JSStack::ReturnPC); 287 287 288 288 // Calling convention: f(r0 == regT4, r1 == regT5, ...); … … 290 290 move(callFrameRegister, regT4); 291 291 292 emitGetFromCallFrameHeaderPtr( RegisterFile::Callee, regT5);292 emitGetFromCallFrameHeaderPtr(JSStack::Callee, regT5); 293 293 move(regT2, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack. 294 294 loadPtr(Address(regT5, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); … … 299 299 // Load caller frame's scope chain into this callframe so that whatever we call can 300 300 // get to its global data. 301 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, regT0);302 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT1, regT0);303 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);301 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, regT0); 302 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1, regT0); 303 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 304 304 305 305 preserveReturnAddressAfterCall(regT3); // Callee preserved 306 emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);306 emitPutToCallFrameHeader(regT3, JSStack::ReturnPC); 307 307 308 308 // Calling convention: f(a0, a1, a2, a3); … … 317 317 318 318 // Call 319 emitGetFromCallFrameHeaderPtr( RegisterFile::Callee, MIPSRegisters::a2);319 emitGetFromCallFrameHeaderPtr(JSStack::Callee, MIPSRegisters::a2); 320 320 loadPtr(Address(MIPSRegisters::a2, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); 321 321 move(regT0, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack. … … 363 363 Call nativeCall; 364 364 365 emitPutImmediateToCallFrameHeader(0, RegisterFile::CodeBlock);365 emitPutImmediateToCallFrameHeader(0, JSStack::CodeBlock); 366 366 storePtr(callFrameRegister, &m_globalData->topCallFrame); 367 367 … … 369 369 // Load caller frame's scope chain into this callframe so that whatever we call can 370 370 // get to its global data. 371 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, regT0);372 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT1, regT0);373 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);371 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, regT0); 372 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1, regT0); 373 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 374 374 375 375 peek(regT1); 376 emitPutToCallFrameHeader(regT1, RegisterFile::ReturnPC);376 emitPutToCallFrameHeader(regT1, JSStack::ReturnPC); 377 377 378 378 // Calling convention: f(ecx, edx, ...); … … 392 392 // Load caller frame's scope chain into this callframe so that whatever we call can 393 393 // get to its global data. 394 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, regT2);395 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT1, regT2);396 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);394 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, regT2); 395 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1, regT2); 396 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 397 397 398 398 preserveReturnAddressAfterCall(regT3); // Callee preserved 399 emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);399 emitPutToCallFrameHeader(regT3, JSStack::ReturnPC); 400 400 401 401 // Calling convention: f(r0 == regT0, r1 == regT1, ...); … … 403 403 move(callFrameRegister, ARMRegisters::r0); 404 404 405 emitGetFromCallFrameHeaderPtr( RegisterFile::Callee, ARMRegisters::r1);405 emitGetFromCallFrameHeaderPtr(JSStack::Callee, ARMRegisters::r1); 406 406 move(regT2, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack. 407 407 loadPtr(Address(ARMRegisters::r1, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); … … 415 415 // Load caller frame's scope chain into this callframe so that whatever we call can 416 416 // get to its global data. 417 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, regT0);418 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT1, regT0);419 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);417 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, regT0); 418 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1, regT0); 419 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 420 420 421 421 preserveReturnAddressAfterCall(regT3); // Callee preserved 422 emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);422 emitPutToCallFrameHeader(regT3, JSStack::ReturnPC); 423 423 424 424 // Calling convention: f(a0, a1, a2, a3); … … 433 433 434 434 // Call 435 emitGetFromCallFrameHeaderPtr( RegisterFile::Callee, MIPSRegisters::a2);435 emitGetFromCallFrameHeaderPtr(JSStack::Callee, MIPSRegisters::a2); 436 436 loadPtr(Address(MIPSRegisters::a2, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); 437 437 move(regT0, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack. … … 447 447 // Load caller frame's scope chain into this callframe so that whatever we call can 448 448 // get to its global data. 449 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, regT2);450 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT1, regT2);451 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);449 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, regT2); 450 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1, regT2); 451 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 452 452 453 453 preserveReturnAddressAfterCall(regT3); // Callee preserved 454 emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);454 emitPutToCallFrameHeader(regT3, JSStack::ReturnPC); 455 455 456 456 // Calling convention: f(r0 == regT4, r1 == regT5, ...); … … 458 458 move(callFrameRegister, regT4); 459 459 460 emitGetFromCallFrameHeaderPtr( RegisterFile::Callee, regT5);460 emitGetFromCallFrameHeaderPtr(JSStack::Callee, regT5); 461 461 move(regT2, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack. 462 462 loadPtr(Address(regT5, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); … … 519 519 ASSERT(returnValueRegister != callFrameRegister); 520 520 emitLoad(currentInstruction[1].u.operand, regT1, regT0); 521 restoreReturnAddressBeforeReturn(Address(callFrameRegister, RegisterFile::ReturnPC * static_cast<int>(sizeof(Register))));521 restoreReturnAddressBeforeReturn(Address(callFrameRegister, JSStack::ReturnPC * static_cast<int>(sizeof(Register)))); 522 522 ret(); 523 523 } … … 1545 1545 void JIT::emit_op_create_this(Instruction* currentInstruction) 1546 1546 { 1547 emitGetFromCallFrameHeaderPtr( RegisterFile::Callee, regT0);1547 emitGetFromCallFrameHeaderPtr(JSStack::Callee, regT0); 1548 1548 loadPtr(Address(regT0, JSFunction::offsetOfCachedInheritorID()), regT2); 1549 1549 addSlowCase(branchTestPtr(Zero, regT2)); … … 1627 1627 int argumentsRegister = currentInstruction[2].u.operand; 1628 1628 addSlowCase(branch32(NotEqual, tagFor(argumentsRegister), TrustedImm32(JSValue::EmptyValueTag))); 1629 load32(payloadFor( RegisterFile::ArgumentCount), regT0);1629 load32(payloadFor(JSStack::ArgumentCount), regT0); 1630 1630 sub32(TrustedImm32(1), regT0); 1631 1631 emitStoreInt32(dst, regT0); … … 1655 1655 add32(TrustedImm32(1), regT2); 1656 1656 // regT2 now contains the integer index of the argument we want, including this 1657 load32(payloadFor( RegisterFile::ArgumentCount), regT3);1657 load32(payloadFor(JSStack::ArgumentCount), regT3); 1658 1658 addSlowCase(branch32(AboveOrEqual, regT2, regT3)); 1659 1659 -
trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp
r130359 r130726 1064 1064 int skip = currentInstruction[3].u.operand; 1065 1065 1066 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT0);1066 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT0); 1067 1067 bool checkTopLevel = m_codeBlock->codeType() == FunctionCode && m_codeBlock->needsFullScopeChain(); 1068 1068 ASSERT(skip || !checkTopLevel); … … 1089 1089 emitGetVirtualRegister(currentInstruction[3].u.operand, regT0); 1090 1090 1091 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT1);1091 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1); 1092 1092 bool checkTopLevel = m_codeBlock->codeType() == FunctionCode && m_codeBlock->needsFullScopeChain(); 1093 1093 ASSERT(skip || !checkTopLevel); -
trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp
r130359 r130726 1102 1102 int skip = currentInstruction[3].u.operand; 1103 1103 1104 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT2);1104 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT2); 1105 1105 bool checkTopLevel = m_codeBlock->codeType() == FunctionCode && m_codeBlock->needsFullScopeChain(); 1106 1106 ASSERT(skip || !checkTopLevel); … … 1131 1131 emitLoad(value, regT1, regT0); 1132 1132 1133 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT2);1133 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT2); 1134 1134 bool checkTopLevel = m_codeBlock->codeType() == FunctionCode && m_codeBlock->needsFullScopeChain(); 1135 1135 ASSERT(skip || !checkTopLevel); -
trunk/Source/JavaScriptCore/jit/JITStubs.cpp
r130612 r130726 225 225 extern "C" { 226 226 227 __declspec(naked) EncodedJSValue ctiTrampoline(void* code, RegisterFile*, CallFrame*, void* /*unused1*/, void* /*unused2*/, JSGlobalData*)227 __declspec(naked) EncodedJSValue ctiTrampoline(void* code, JSStack*, CallFrame*, void* /*unused1*/, void* /*unused2*/, JSGlobalData*) 228 228 { 229 229 __asm { … … 286 286 #elif CPU(SH4) 287 287 #define SYMBOL_STRING(name) #name 288 /* code (r4), RegisterFile* (r5), CallFrame* (r6), void* unused1 (r7), void* unused2(sp), JSGlobalData (sp)*/288 /* code (r4), JSStack* (r5), CallFrame* (r6), void* unused1 (r7), void* unused2(sp), JSGlobalData (sp)*/ 289 289 290 290 asm volatile ( … … 459 459 "li $17,512 # set timeoutCheckRegister" "\n" 460 460 "move $25,$4 # move executableAddress to t9" "\n" 461 "sw $5," STRINGIZE_VALUE_OF(REGISTER_FILE_OFFSET) "($29) # store registerFileto current stack" "\n"461 "sw $5," STRINGIZE_VALUE_OF(REGISTER_FILE_OFFSET) "($29) # store JSStack to current stack" "\n" 462 462 "lw $9," STRINGIZE_VALUE_OF(STACK_LENGTH + 20) "($29) # load globalData from previous stack" "\n" 463 463 "jalr $25" "\n" … … 660 660 #elif COMPILER(RVCT) && CPU(ARM_THUMB2) 661 661 662 __asm EncodedJSValue ctiTrampoline(void*, RegisterFile*, CallFrame*, void* /*unused1*/, void* /*unused2*/, JSGlobalData*)662 __asm EncodedJSValue ctiTrampoline(void*, JSStack*, CallFrame*, void* /*unused1*/, void* /*unused2*/, JSGlobalData*) 663 663 { 664 664 PRESERVE8 … … 728 728 #elif COMPILER(RVCT) && CPU(ARM_TRADITIONAL) 729 729 730 __asm EncodedJSValue ctiTrampoline(void*, RegisterFile*, CallFrame*, void* /*unused1*/, void* /*unused2*/, JSGlobalData*)730 __asm EncodedJSValue ctiTrampoline(void*, JSStack*, CallFrame*, void* /*unused1*/, void* /*unused2*/, JSGlobalData*) 731 731 { 732 732 ARM … … 797 797 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedR11) == PRESERVED_R11_OFFSET); 798 798 799 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, registerFile) == REGISTER_FILE_OFFSET);799 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, JSStack) == REGISTER_FILE_OFFSET); 800 800 // The fifth argument is the first item already on the stack. 801 801 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, unused1) == FIRST_STACK_ARGUMENT); … … 816 816 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedReturnAddress) == PRESERVED_RETURN_ADDRESS_OFFSET); 817 817 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, thunkReturnAddress) == THUNK_RETURN_ADDRESS_OFFSET); 818 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, registerFile) == REGISTER_FILE_OFFSET);818 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, JSStack) == REGISTER_FILE_OFFSET); 819 819 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, globalData) == GLOBAL_DATA_OFFSET); 820 820 … … 1050 1050 1051 1051 // Helper function for JIT stubs that may throw an exception in the middle of 1052 // processing a function call. This function rolls back the register fileto1052 // processing a function call. This function rolls back the stack to 1053 1053 // our caller, so exception processing can proceed from a valid state. 1054 1054 template<typename T> static T throwExceptionFromOpCall(JITStackFrame& jitStackFrame, CallFrame* newCallFrame, ReturnAddressPtr& returnAddressSlot) … … 1360 1360 } 1361 1361 1362 DEFINE_STUB_FUNCTION(void*, register_file_check)1363 { 1364 STUB_INIT_STACK_FRAME(stackFrame); 1365 CallFrame* callFrame = stackFrame.callFrame; 1366 1367 if (UNLIKELY(!stackFrame. registerFile->grow(&callFrame->registers()[callFrame->codeBlock()->m_numCalleeRegisters])))1362 DEFINE_STUB_FUNCTION(void*, stack_check) 1363 { 1364 STUB_INIT_STACK_FRAME(stackFrame); 1365 CallFrame* callFrame = stackFrame.callFrame; 1366 1367 if (UNLIKELY(!stackFrame.stack->grow(&callFrame->registers()[callFrame->codeBlock()->m_numCalleeRegisters]))) 1368 1368 return throwExceptionFromOpCall<void*>(stackFrame, callFrame, STUB_RETURN_ADDRESS, createStackOverflowError(callFrame->callerFrame())); 1369 1369 … … 2192 2192 CallFrame* callFrame = stackFrame.callFrame; 2193 2193 2194 CallFrame* newCallFrame = CommonSlowPaths::arityCheckFor(callFrame, stackFrame. registerFile, CodeForCall);2194 CallFrame* newCallFrame = CommonSlowPaths::arityCheckFor(callFrame, stackFrame.stack, CodeForCall); 2195 2195 if (!newCallFrame) 2196 2196 return throwExceptionFromOpCall<void*>(stackFrame, callFrame, STUB_RETURN_ADDRESS, createStackOverflowError(callFrame->callerFrame())); … … 2205 2205 CallFrame* callFrame = stackFrame.callFrame; 2206 2206 2207 CallFrame* newCallFrame = CommonSlowPaths::arityCheckFor(callFrame, stackFrame. registerFile, CodeForConstruct);2207 CallFrame* newCallFrame = CommonSlowPaths::arityCheckFor(callFrame, stackFrame.stack, CodeForConstruct); 2208 2208 if (!newCallFrame) 2209 2209 return throwExceptionFromOpCall<void*>(stackFrame, callFrame, STUB_RETURN_ADDRESS, createStackOverflowError(callFrame->callerFrame())); … … 2583 2583 2584 2584 CallFrame* callFrame = stackFrame.callFrame; 2585 RegisterFile* registerFile = stackFrame.registerFile;2585 JSStack* stack = stackFrame.stack; 2586 2586 JSValue thisValue = stackFrame.args[0].jsValue(); 2587 2587 JSValue arguments = stackFrame.args[1].jsValue(); 2588 2588 int firstFreeRegister = stackFrame.args[2].int32(); 2589 2589 2590 CallFrame* newCallFrame = loadVarargs(callFrame, registerFile, thisValue, arguments, firstFreeRegister);2590 CallFrame* newCallFrame = loadVarargs(callFrame, stack, thisValue, arguments, firstFreeRegister); 2591 2591 if (!newCallFrame) 2592 2592 VM_THROW_EXCEPTION(); -
trunk/Source/JavaScriptCore/jit/JITStubs.h
r129281 r130726 53 53 class JSObject; 54 54 class JSPropertyNameIterator; 55 class JSStack; 55 56 class JSValue; 56 57 class JSValueEncodedAsPointer; … … 59 60 class PropertySlot; 60 61 class PutPropertySlot; 61 class RegisterFile;62 62 class RegExp; 63 63 class Structure; … … 102 102 103 103 void* code; 104 RegisterFile* registerFile;104 JSStack* stack; 105 105 CallFrame* callFrame; 106 106 void* unused1; … … 138 138 139 139 void* code; 140 RegisterFile* registerFile;140 JSStack* stack; 141 141 CallFrame* callFrame; 142 142 void* unused1; … … 168 168 169 169 // These arguments passed in r1..r3 (r0 contained the entry code pointed, which is not preserved) 170 RegisterFile* registerFile;170 JSStack* stack; 171 171 CallFrame* callFrame; 172 172 … … 197 197 void* preservedLink; 198 198 199 RegisterFile* registerFile;199 JSStack* stack; 200 200 CallFrame* callFrame; 201 201 void* unused1; … … 229 229 230 230 // These arguments passed in a1..a3 (a0 contained the entry code pointed, which is not preserved) 231 RegisterFile* registerFile;231 JSStack* stack; 232 232 CallFrame* callFrame; 233 233 void* unused1; … … 252 252 void* savedTimeoutReg; 253 253 254 RegisterFile* registerFile;254 JSStack* stack; 255 255 CallFrame* callFrame; 256 256 JSValue* exception; … … 285 285 extern "C" void ctiVMThrowTrampoline(); 286 286 extern "C" void ctiOpThrowNotCaught(); 287 extern "C" EncodedJSValue ctiTrampoline(void* code, RegisterFile*, CallFrame*, void* /*unused1*/, void* /*unused2*/, JSGlobalData*);287 extern "C" EncodedJSValue ctiTrampoline(void* code, JSStack*, CallFrame*, void* /*unused1*/, void* /*unused2*/, JSGlobalData*); 288 288 #if ENABLE(DFG_JIT) 289 289 extern "C" void ctiTrampolineEnd(); … … 463 463 void* JIT_STUB cti_op_switch_string(STUB_ARGS_DECLARATION) WTF_INTERNAL; 464 464 void* JIT_STUB cti_op_throw(STUB_ARGS_DECLARATION) WTF_INTERNAL; 465 void* JIT_STUB cti_ register_file_check(STUB_ARGS_DECLARATION) WTF_INTERNAL;465 void* JIT_STUB cti_stack_check(STUB_ARGS_DECLARATION) WTF_INTERNAL; 466 466 void* JIT_STUB cti_vm_lazyLinkCall(STUB_ARGS_DECLARATION) WTF_INTERNAL; 467 467 void* JIT_STUB cti_vm_lazyLinkConstruct(STUB_ARGS_DECLARATION) WTF_INTERNAL; -
trunk/Source/JavaScriptCore/jit/JSInterfaceJIT.h
r127199 r130726 30 30 #include "JITCode.h" 31 31 #include "JITStubs.h" 32 #include "JSStack.h" 32 33 #include "JSString.h" 33 34 #include "JSValue.h" 34 35 #include "MacroAssembler.h" 35 #include "RegisterFile.h"36 36 #include <wtf/AlwaysInline.h> 37 37 #include <wtf/Vector.h> -
trunk/Source/JavaScriptCore/jit/SpecializedThunkJIT.h
r124476 r130726 41 41 { 42 42 // Check that we have the expected number of arguments 43 m_failures.append(branch32(NotEqual, payloadFor( RegisterFile::ArgumentCount), TrustedImm32(expectedArgCount + 1)));43 m_failures.append(branch32(NotEqual, payloadFor(JSStack::ArgumentCount), TrustedImm32(expectedArgCount + 1))); 44 44 } 45 45 … … 84 84 if (src != regT0) 85 85 move(src, regT0); 86 loadPtr(payloadFor( RegisterFile::CallerFrame, callFrameRegister), callFrameRegister);86 loadPtr(payloadFor(JSStack::CallerFrame, callFrameRegister), callFrameRegister); 87 87 ret(); 88 88 } … … 109 109 highNonZero.link(this); 110 110 #endif 111 loadPtr(payloadFor( RegisterFile::CallerFrame, callFrameRegister), callFrameRegister);111 loadPtr(payloadFor(JSStack::CallerFrame, callFrameRegister), callFrameRegister); 112 112 ret(); 113 113 } … … 118 118 move(src, regT0); 119 119 tagReturnAsInt32(); 120 loadPtr(payloadFor( RegisterFile::CallerFrame, callFrameRegister), callFrameRegister);120 loadPtr(payloadFor(JSStack::CallerFrame, callFrameRegister), callFrameRegister); 121 121 ret(); 122 122 } … … 127 127 move(src, regT0); 128 128 tagReturnAsJSCell(); 129 loadPtr(payloadFor( RegisterFile::CallerFrame, callFrameRegister), callFrameRegister);129 loadPtr(payloadFor(JSStack::CallerFrame, callFrameRegister), callFrameRegister); 130 130 ret(); 131 131 } -
trunk/Source/JavaScriptCore/llint/LLIntData.cpp
r127374 r130726 69 69 // Assertions to match LowLevelInterpreter.asm. If you change any of this code, be 70 70 // prepared to change LowLevelInterpreter.asm as well!! 71 ASSERT( RegisterFile::CallFrameHeaderSize * 8 == 48);72 ASSERT( RegisterFile::ArgumentCount * 8 == -48);73 ASSERT( RegisterFile::CallerFrame * 8 == -40);74 ASSERT( RegisterFile::Callee * 8 == -32);75 ASSERT( RegisterFile::ScopeChain * 8 == -24);76 ASSERT( RegisterFile::ReturnPC * 8 == -16);77 ASSERT( RegisterFile::CodeBlock * 8 == -8);78 ASSERT(CallFrame::argumentOffsetIncludingThis(0) == - RegisterFile::CallFrameHeaderSize - 1);71 ASSERT(JSStack::CallFrameHeaderSize * 8 == 48); 72 ASSERT(JSStack::ArgumentCount * 8 == -48); 73 ASSERT(JSStack::CallerFrame * 8 == -40); 74 ASSERT(JSStack::Callee * 8 == -32); 75 ASSERT(JSStack::ScopeChain * 8 == -24); 76 ASSERT(JSStack::ReturnPC * 8 == -16); 77 ASSERT(JSStack::CodeBlock * 8 == -8); 78 ASSERT(CallFrame::argumentOffsetIncludingThis(0) == -JSStack::CallFrameHeaderSize - 1); 79 79 #if CPU(BIG_ENDIAN) 80 80 ASSERT(OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.tag) == 0); -
trunk/Source/JavaScriptCore/llint/LLIntOffsetsExtractor.cpp
r127202 r130726 39 39 #include "JSObject.h" 40 40 #include "JSPropertyNameIterator.h" 41 #include "JSStack.h" 41 42 #include "JSString.h" 42 43 #include "JSTypeInfo.h" … … 45 46 #include "LLIntOfflineAsmConfig.h" 46 47 #include "MarkedSpace.h" 47 #include "RegisterFile.h"48 48 49 49 #include "Structure.h" -
trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp
r129319 r130726 397 397 #endif // ENABLE(JIT) 398 398 399 LLINT_SLOW_PATH_DECL( register_file_check)399 LLINT_SLOW_PATH_DECL(stack_check) 400 400 { 401 401 LLINT_BEGIN(); … … 405 405 dataLog("Num callee registers = %u.\n", exec->codeBlock()->m_numCalleeRegisters); 406 406 dataLog("Num vars = %u.\n", exec->codeBlock()->m_numVars); 407 dataLog("Current end is at %p.\n", exec->globalData().interpreter-> registerFile().end());408 #endif 409 ASSERT(&exec->registers()[exec->codeBlock()->m_numCalleeRegisters] > exec->globalData().interpreter-> registerFile().end());410 if (UNLIKELY(!globalData.interpreter-> registerFile().grow(&exec->registers()[exec->codeBlock()->m_numCalleeRegisters]))) {407 dataLog("Current end is at %p.\n", exec->globalData().interpreter->stack().end()); 408 #endif 409 ASSERT(&exec->registers()[exec->codeBlock()->m_numCalleeRegisters] > exec->globalData().interpreter->stack().end()); 410 if (UNLIKELY(!globalData.interpreter->stack().grow(&exec->registers()[exec->codeBlock()->m_numCalleeRegisters]))) { 411 411 ReturnAddressPtr returnPC = exec->returnPC(); 412 412 exec = exec->callerFrame(); … … 421 421 { 422 422 LLINT_BEGIN(); 423 ExecState* newExec = CommonSlowPaths::arityCheckFor(exec, &globalData.interpreter-> registerFile(), CodeForCall);423 ExecState* newExec = CommonSlowPaths::arityCheckFor(exec, &globalData.interpreter->stack(), CodeForCall); 424 424 if (!newExec) { 425 425 ReturnAddressPtr returnPC = exec->returnPC(); … … 435 435 { 436 436 LLINT_BEGIN(); 437 ExecState* newExec = CommonSlowPaths::arityCheckFor(exec, &globalData.interpreter-> registerFile(), CodeForConstruct);437 ExecState* newExec = CommonSlowPaths::arityCheckFor(exec, &globalData.interpreter->stack(), CodeForConstruct); 438 438 if (!newExec) { 439 439 ReturnAddressPtr returnPC = exec->returnPC(); … … 1409 1409 1410 1410 execCallee->setArgumentCountIncludingThis(pc[2].u.operand); 1411 execCallee->uncheckedR( RegisterFile::Callee) = calleeAsValue;1411 execCallee->uncheckedR(JSStack::Callee) = calleeAsValue; 1412 1412 execCallee->setCallerFrame(exec); 1413 1413 … … 1439 1439 1440 1440 ExecState* execCallee = loadVarargs( 1441 exec, &globalData.interpreter-> registerFile(),1441 exec, &globalData.interpreter->stack(), 1442 1442 LLINT_OP_C(2).jsValue(), LLINT_OP_C(3).jsValue(), pc[4].u.operand); 1443 1443 LLINT_CALL_CHECK_EXCEPTION(exec, pc); 1444 1444 1445 execCallee->uncheckedR( RegisterFile::Callee) = calleeAsValue;1445 execCallee->uncheckedR(JSStack::Callee) = calleeAsValue; 1446 1446 execCallee->setCallerFrame(exec); 1447 1447 exec->setCurrentVPC(pc + OPCODE_LENGTH(op_call_varargs)); … … 1459 1459 execCallee->setArgumentCountIncludingThis(pc[2].u.operand); 1460 1460 execCallee->setCallerFrame(exec); 1461 execCallee->uncheckedR( RegisterFile::Callee) = calleeAsValue;1461 execCallee->uncheckedR(JSStack::Callee) = calleeAsValue; 1462 1462 execCallee->setScope(exec->scope()); 1463 1463 execCallee->setReturnPC(LLInt::getCodePtr(llint_generic_return_point)); -
trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.h
r127393 r130726 113 113 LLINT_SLOW_PATH_HIDDEN_DECL(loop_osr); 114 114 LLINT_SLOW_PATH_HIDDEN_DECL(replace); 115 LLINT_SLOW_PATH_HIDDEN_DECL( register_file_check);115 LLINT_SLOW_PATH_HIDDEN_DECL(stack_check); 116 116 LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_call_arityCheck); 117 117 LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_construct_arityCheck); -
trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm
r130359 r130726 25 25 # of these must have an ASSERT() in LLIntData.cpp 26 26 27 # These declarations must match interpreter/ RegisterFile.h.27 # These declarations must match interpreter/JSStack.h. 28 28 const CallFrameHeaderSize = 48 29 29 const ArgumentCount = -48 … … 39 39 if JSVALUE64 40 40 # - Use a pair of registers to represent the PC: one register for the 41 # base of the register file, and one register for the index.41 # base of the stack, and one register for the index. 42 42 # - The PC base (or PB for short) should be stored in the csr. It will 43 43 # get clobbered on calls to other JS code, but will get saved on calls … … 316 316 loadi CodeBlock::m_numCalleeRegisters[t1], t0 317 317 loadp CodeBlock::m_globalData[t1], t2 318 loadp JSGlobalData::interpreter[t2], t2 # FIXME: Can get to the RegisterFilefrom the JITStackFrame318 loadp JSGlobalData::interpreter[t2], t2 # FIXME: Can get to the JSStack from the JITStackFrame 319 319 lshifti 3, t0 320 320 addp t0, cfr, t0 321 bpaeq Interpreter::m_ registerFile + RegisterFile::m_end[t2], t0, .stackHeightOK321 bpaeq Interpreter::m_stack + JSStack::m_end[t2], t0, .stackHeightOK 322 322 323 323 # Stack height check failed - need to call a slow_path. 324 callSlowPath(_llint_ register_file_check)324 callSlowPath(_llint_stack_check) 325 325 .stackHeightOK: 326 326 end -
trunk/Source/JavaScriptCore/runtime/Arguments.cpp
r130303 r130726 407 407 Register* location = ®isters[CallFrame::argumentOffset(i)]; 408 408 switch (recovery.technique()) { 409 case AlreadyIn RegisterFile:409 case AlreadyInJSStack: 410 410 value = location->jsValue(); 411 411 break; 412 case AlreadyIn RegisterFileAsUnboxedInt32:412 case AlreadyInJSStackAsUnboxedInt32: 413 413 value = jsNumber(location->unboxedInt32()); 414 414 break; 415 case AlreadyIn RegisterFileAsUnboxedCell:415 case AlreadyInJSStackAsUnboxedCell: 416 416 value = location->unboxedCell(); 417 417 break; 418 case AlreadyIn RegisterFileAsUnboxedBoolean:418 case AlreadyInJSStackAsUnboxedBoolean: 419 419 value = jsBoolean(location->unboxedBoolean()); 420 420 break; 421 case AlreadyIn RegisterFileAsUnboxedDouble:421 case AlreadyInJSStackAsUnboxedDouble: 422 422 #if USE(JSVALUE64) 423 423 value = jsNumber(*bitwise_cast<double*>(location)); -
trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.h
r129281 r130726 44 44 namespace CommonSlowPaths { 45 45 46 ALWAYS_INLINE ExecState* arityCheckFor(ExecState* exec, RegisterFile* registerFile, CodeSpecializationKind kind)46 ALWAYS_INLINE ExecState* arityCheckFor(ExecState* exec, JSStack* stack, CodeSpecializationKind kind) 47 47 { 48 48 JSFunction* callee = jsCast<JSFunction*>(exec->callee()); … … 52 52 53 53 // This ensures enough space for the worst case scenario of zero arguments passed by the caller. 54 if (! registerFile->grow(exec->registers() + newCodeBlock->numParameters() + newCodeBlock->m_numCalleeRegisters))54 if (!stack->grow(exec->registers() + newCodeBlock->numParameters() + newCodeBlock->m_numCalleeRegisters)) 55 55 return 0; 56 56 … … 72 72 73 73 ExecState* newExec = ExecState::create(dst); 74 ASSERT((void*)newExec <= registerFile->end());74 ASSERT((void*)newExec <= stack->end()); 75 75 return newExec; 76 76 } -
trunk/Source/JavaScriptCore/runtime/InitializeThreading.cpp
r130520 r130726 66 66 ExecutableAllocator::initializeAllocator(); 67 67 #endif 68 RegisterFile::initializeThreading();68 JSStack::initializeThreading(); 69 69 #if ENABLE(LLINT) 70 70 LLInt::initialize(); -
trunk/Source/JavaScriptCore/runtime/JSActivation.cpp
r130612 r130726 50 50 Base::visitChildren(thisObject, visitor); 51 51 52 // No need to mark our registers if they're still in the RegisterFile.52 // No need to mark our registers if they're still in the JSStack. 53 53 if (!thisObject->isTornOff()) 54 54 return; -
trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
r130303 r130726 513 513 ExecState* JSGlobalObject::globalExec() 514 514 { 515 return CallFrame::create(m_globalCallFrame + RegisterFile::CallFrameHeaderSize);515 return CallFrame::create(m_globalCallFrame + JSStack::CallFrameHeaderSize); 516 516 } 517 517 -
trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h
r130303 r130726 47 47 class GetterSetter; 48 48 class GlobalCodeBlock; 49 class JSStack; 49 50 class LLIntOffsetsExtractor; 50 51 class NativeErrorConstructor; … … 52 53 class RegExpConstructor; 53 54 class RegExpPrototype; 54 class RegisterFile;55 55 56 56 struct ActivationStackNode; … … 92 92 protected: 93 93 94 Register m_globalCallFrame[ RegisterFile::CallFrameHeaderSize];94 Register m_globalCallFrame[JSStack::CallFrameHeaderSize]; 95 95 96 96 WriteBarrier<JSObject> m_globalThis; -
trunk/Source/JavaScriptCore/runtime/JSLock.cpp
r128704 r130726 141 141 // function through a callback. 142 142 // 143 // All threads using the context share the same JS stack (the RegisterFile).144 // Whenever a thread calls into JSC it starts using the RegisterFilefrom the143 // All threads using the context share the same JS stack (the JSStack). 144 // Whenever a thread calls into JSC it starts using the JSStack from the 145 145 // previous 'high water mark' - the maximum point the stack has ever grown to 146 // (returned by RegisterFile::end()). So if a first thread calls out to a146 // (returned by JSStack::end()). So if a first thread calls out to a 147 147 // callback, and a second thread enters JSC, then also exits by calling out 148 148 // to a callback, we can be left with stackframes from both threads in the 149 // RegisterFile. As such, a problem may occur should the first thread's149 // JSStack. As such, a problem may occur should the first thread's 150 150 // callback complete first, and attempt to return to JSC. Were we to allow 151 151 // this to happen, and were its stack to grow further, then it may potentially -
trunk/Source/JavaScriptCore/runtime/JSVariableObject.h
r128260 r130726 69 69 } 70 70 71 WriteBarrierBase<Unknown>* m_registers; // "r" in the register file.71 WriteBarrierBase<Unknown>* m_registers; // "r" in the stack. 72 72 }; 73 73 -
trunk/Source/JavaScriptCore/runtime/MemoryStatistics.cpp
r128071 r130726 29 29 #include "ExecutableAllocator.h" 30 30 #include "JSGlobalData.h" 31 #include " RegisterFile.h"31 #include "JSStack.h" 32 32 33 33 namespace JSC { … … 37 37 GlobalMemoryStatistics stats; 38 38 39 stats.stackBytes = RegisterFile::committedByteCount();39 stats.stackBytes = JSStack::committedByteCount(); 40 40 #if ENABLE(EXECUTABLE_ALLOCATOR_FIXED) || ((PLATFORM(BLACKBERRY) || PLATFORM(EFL)) && ENABLE(JIT)) 41 41 stats.JITBytes = ExecutableAllocator::committedByteCount();
Note:
See TracChangeset
for help on using the changeset viewer.