-
fpizlo@apple.com authored
StructureStubInfo's usedRegisters set should be able to track all registers, not just the ones that our JIT's view as temporaries https://bugs.webkit.org/show_bug.cgi?id=123076 Source/JavaScriptCore: Reviewed by Sam Weinig. Start preparing for a world in which we are patching code generated by LLVM, which may have very different register usage conventions than our JITs. This requires us being more explicit about the registers we are using. For example, the repatching code shouldn't take for granted that tagMaskRegister holds the TagMask or that the register is even in use. * CMakeLists.txt: * GNUmakefile.list.am: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.xcodeproj/project.pbxproj: * assembler/MacroAssembler.h: (JSC::MacroAssembler::numberOfRegisters): (JSC::MacroAssembler::registerIndex): (JSC::MacroAssembler::numberOfFPRegisters): (JSC::MacroAssembler::fpRegisterIndex): (JSC::MacroAssembler::totalNumberOfRegisters): * bytecode/StructureStubInfo.h: * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::usedRegisters): * dfg/DFGSpeculativeJIT.h: * ftl/FTLSaveRestore.cpp: (JSC::FTL::bytesForGPRs): (JSC::FTL::bytesForFPRs): (JSC::FTL::offsetOfGPR): (JSC::FTL::offsetOfFPR): * jit/JITInlineCacheGenerator.cpp: (JSC::JITByIdGenerator::JITByIdGenerator): (JSC::JITPutByIdGenerator::JITPutByIdGenerator): * jit/JITInlineCacheGenerator.h: (JSC::JITGetByIdGenerator::JITGetByIdGenerator): * jit/JITPropertyAccess.cpp: (JSC::JIT::emit_op_get_by_id): (JSC::JIT::emit_op_put_by_id): * jit/JITPropertyAccess32_64.cpp: (JSC::JIT::emit_op_get_by_id): (JSC::JIT::emit_op_put_by_id): * jit/RegisterSet.cpp: Added. (JSC::RegisterSet::specialRegisters): * jit/RegisterSet.h: Added. (JSC::RegisterSet::RegisterSet): (JSC::RegisterSet::set): (JSC::RegisterSet::clear): (JSC::RegisterSet::get): (JSC::RegisterSet::merge): * jit/Repatch.cpp: (JSC::generateProtoChainAccessStub): (JSC::tryCacheGetByID): (JSC::tryBuildGetByIDList): (JSC::emitPutReplaceStub): (JSC::tryRepatchIn): (JSC::linkClosureCall): * jit/TempRegisterSet.cpp: Added. (JSC::TempRegisterSet::TempRegisterSet): * jit/TempRegisterSet.h: Source/WTF: Reviewed by Sam Weinig. Teach BitVector how to efficiently merge (i.e. bitvector |=). * wtf/BitVector.cpp: (WTF::BitVector::mergeSlow): * wtf/BitVector.h: (WTF::BitVector::merge): (WTF::BitVector::cleanseInlineBits): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@157707 268f45cc-cd09-0410-ab3c-d52691b4dbfc
9dbc4b4f