diff options
Diffstat (limited to 'Source/JavaScriptCore/ChangeLog')
-rw-r--r-- | Source/JavaScriptCore/ChangeLog | 9281 |
1 files changed, 0 insertions, 9281 deletions
diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog deleted file mode 100644 index df3f15070..000000000 --- a/Source/JavaScriptCore/ChangeLog +++ /dev/null @@ -1,9281 +0,0 @@ -2013-04-09 Balazs Kilvady <kilvadyb@homejinni.com> - - LLInt conditional branch compilation fault on MIPS. - https://bugs.webkit.org/show_bug.cgi?id=114264 - - Reviewed by Filip Pizlo. - - Fix conditional branch compilation in LLInt offlineasm. - - * offlineasm/mips.rb: - -2013-02-18 Balazs Kilvady <kilvadyb@homejinni.com> - - MIPS DFG implementation. - https://bugs.webkit.org/show_bug.cgi?id=101328 - - Reviewed by Oliver Hunt. - - DFG implementation for MIPS. - - * assembler/MIPSAssembler.h: - (JSC::MIPSAssembler::MIPSAssembler): - (JSC::MIPSAssembler::sllv): - (JSC::MIPSAssembler::movd): - (MIPSAssembler): - (JSC::MIPSAssembler::negd): - (JSC::MIPSAssembler::labelForWatchpoint): - (JSC::MIPSAssembler::label): - (JSC::MIPSAssembler::vmov): - (JSC::MIPSAssembler::linkDirectJump): - (JSC::MIPSAssembler::maxJumpReplacementSize): - (JSC::MIPSAssembler::revertJumpToMove): - (JSC::MIPSAssembler::replaceWithJump): - * assembler/MacroAssembler.h: - (MacroAssembler): - (JSC::MacroAssembler::poke): - * assembler/MacroAssemblerMIPS.h: - (JSC::MacroAssemblerMIPS::add32): - (MacroAssemblerMIPS): - (JSC::MacroAssemblerMIPS::and32): - (JSC::MacroAssemblerMIPS::lshift32): - (JSC::MacroAssemblerMIPS::mul32): - (JSC::MacroAssemblerMIPS::or32): - (JSC::MacroAssemblerMIPS::rshift32): - (JSC::MacroAssemblerMIPS::urshift32): - (JSC::MacroAssemblerMIPS::sub32): - (JSC::MacroAssemblerMIPS::xor32): - (JSC::MacroAssemblerMIPS::store32): - (JSC::MacroAssemblerMIPS::jump): - (JSC::MacroAssemblerMIPS::branchAdd32): - (JSC::MacroAssemblerMIPS::branchMul32): - (JSC::MacroAssemblerMIPS::branchSub32): - (JSC::MacroAssemblerMIPS::branchNeg32): - (JSC::MacroAssemblerMIPS::call): - (JSC::MacroAssemblerMIPS::loadDouble): - (JSC::MacroAssemblerMIPS::moveDouble): - (JSC::MacroAssemblerMIPS::swapDouble): - (JSC::MacroAssemblerMIPS::subDouble): - (JSC::MacroAssemblerMIPS::mulDouble): - (JSC::MacroAssemblerMIPS::divDouble): - (JSC::MacroAssemblerMIPS::negateDouble): - (JSC::MacroAssemblerMIPS::branchEqual): - (JSC::MacroAssemblerMIPS::branchNotEqual): - (JSC::MacroAssemblerMIPS::branchTruncateDoubleToInt32): - (JSC::MacroAssemblerMIPS::branchTruncateDoubleToUint32): - (JSC::MacroAssemblerMIPS::truncateDoubleToInt32): - (JSC::MacroAssemblerMIPS::truncateDoubleToUint32): - (JSC::MacroAssemblerMIPS::branchDoubleNonZero): - (JSC::MacroAssemblerMIPS::branchDoubleZeroOrNaN): - (JSC::MacroAssemblerMIPS::invert): - (JSC::MacroAssemblerMIPS::replaceWithJump): - (JSC::MacroAssemblerMIPS::maxJumpReplacementSize): - * dfg/DFGAssemblyHelpers.h: - (AssemblyHelpers): - (JSC::DFG::AssemblyHelpers::preserveReturnAddressAfterCall): - (JSC::DFG::AssemblyHelpers::restoreReturnAddressBeforeReturn): - (JSC::DFG::AssemblyHelpers::debugCall): - * dfg/DFGCCallHelpers.h: - (CCallHelpers): - (JSC::DFG::CCallHelpers::setupArguments): - (JSC::DFG::CCallHelpers::setupArgumentsWithExecState): - * dfg/DFGFPRInfo.h: - (DFG): - (FPRInfo): - (JSC::DFG::FPRInfo::toRegister): - (JSC::DFG::FPRInfo::toIndex): - (JSC::DFG::FPRInfo::debugName): - * dfg/DFGGPRInfo.h: - (DFG): - (GPRInfo): - (JSC::DFG::GPRInfo::toRegister): - (JSC::DFG::GPRInfo::toIndex): - (JSC::DFG::GPRInfo::debugName): - * dfg/DFGSpeculativeJIT.h: - (SpeculativeJIT): - * jit/JSInterfaceJIT.h: - (JSInterfaceJIT): - * runtime/JSGlobalData.h: - (JSC::ScratchBuffer::allocationSize): - (ScratchBuffer): - -2013-02-01 Balazs Kilvady <kilvadyb@homejinni.com> - - offlineasm BaseIndex handling is broken on ARM due to MIPS changes - https://bugs.webkit.org/show_bug.cgi?id=108261 - - Reviewed by Filip Pizlo. - - offlineasm BaseIndex handling fix on MIPS. - - * offlineasm/mips.rb: - * offlineasm/risc.rb: - -2013-01-07 Balazs Kilvady <kilvadyb@homejinni.com> - - MIPS LLInt implementation. - https://bugs.webkit.org/show_bug.cgi?id=99706 - - Reviewed by Filip Pizlo. - - LLInt implementation for MIPS. - - * assembler/MacroAssemblerMIPS.h: - (JSC::MacroAssemblerMIPS::jump): - * dfg/DFGOperations.cpp: - (JSC): - * jit/JITStubs.cpp: - (JSC): - * jit/JITStubs.h: - (JITStackFrame): - * llint/LLIntOfflineAsmConfig.h: - * llint/LowLevelInterpreter.asm: - * llint/LowLevelInterpreter32_64.asm: - * offlineasm/backends.rb: - * offlineasm/instructions.rb: - * offlineasm/mips.rb: Added. - -2013-02-27 Simon Hausmann <simon.hausmann@digia.com> - - [Qt][Mac] Fix massive parallel builds - - Reviewed by Tor Arne Vestbø. - - There exists a race condition that LLIntDesiredOffsets.h is written to - by two parllel instances of the ruby script. This patch ensures that similar to the output file, - the generated file is also prefixed according to the build configuration. - - * LLIntOffsetsExtractor.pro: - -2012-12-18 Mark Hahnenberg <mhahnenberg@apple.com> - - Restrictions on oversize CopiedBlock allocations should be relaxed - https://bugs.webkit.org/show_bug.cgi?id=105339 - - Reviewed by Filip Pizlo. - - Currently the DFG has a single branch in the inline allocation path for property/array storage where - it checks to see if the number of bytes requested will fit in the current block. This does not match - what the C++ allocation path does; it checks if the requested number of bytes is oversize, and then - if it's not, it tries to fit it in the current block. The garbage collector assumes that ALL allocations - that are greater than 16KB are in oversize blocks. Therefore, this mismatch can lead to crashes when - the collector tries to perform some operation on a CopiedBlock. - - To avoid adding an extra branch to the inline allocation path in the JIT, we should make it so that - oversize blocks are allocated on the same alignment boundaries so that there is a single mask to find - the block header of any CopiedBlock (rather than two, one for normal and one for oversize blocks), and - we should figure out if a block is oversize by some other method than just whatever the JSObject says - it is. One way we could record this info Region of the block, since we allocate a one-off Region for - oversize blocks. - - * heap/BlockAllocator.h: - (JSC::Region::isCustomSize): - (Region): - (JSC::Region::createCustomSize): - (JSC::Region::Region): - (JSC::BlockAllocator::deallocateCustomSize): - * heap/CopiedBlock.h: - (CopiedBlock): - (JSC::CopiedBlock::isOversize): - (JSC): - * heap/CopiedSpace.cpp: - (JSC::CopiedSpace::tryAllocateOversize): - (JSC::CopiedSpace::tryReallocate): - (JSC::CopiedSpace::tryReallocateOversize): - * heap/CopiedSpace.h: - (CopiedSpace): - * heap/CopiedSpaceInlines.h: - (JSC::CopiedSpace::contains): - (JSC::CopiedSpace::tryAllocate): - (JSC): - * heap/CopyVisitor.h: - (CopyVisitor): - * heap/CopyVisitorInlines.h: - (JSC::CopyVisitor::checkIfShouldCopy): - (JSC::CopyVisitor::didCopy): - * heap/SlotVisitorInlines.h: - (JSC::SlotVisitor::copyLater): - * runtime/JSObject.cpp: - (JSC::JSObject::copyButterfly): - -2012-12-17 Mark Hahnenberg <mhahnenberg@apple.com> - - Butterfly::growArrayRight shouldn't be called on null Butterfly objects - https://bugs.webkit.org/show_bug.cgi?id=105221 - - Reviewed by Filip Pizlo. - - Currently we depend upon the fact that Butterfly::growArrayRight works with null Butterfly - objects purely by coincidence. We should add a new static function that null checks the old - Butterfly object and creates a new one if it's null, or calls growArrayRight if it isn't for - use in the couple of places in JSObject that expect such behavior to work. - - * runtime/Butterfly.h: - (Butterfly): - * runtime/ButterflyInlines.h: - (JSC::Butterfly::createOrGrowArrayRight): - (JSC): - * runtime/JSObject.cpp: - (JSC::JSObject::createInitialIndexedStorage): - (JSC::JSObject::createArrayStorage): - -2013-01-02 Simon Hausmann <simon.hausmann@digia.com> - - [MinGW-w64] Centralize workaround for pow() implementation - https://bugs.webkit.org/show_bug.cgi?id=105925 - - Reviewed by Sam Weinig. - - As suggested by Sam, move the MinGW-w64 workaround into MathExtras.h - away from the JSC usage. - - * runtime/MathObject.cpp: - (JSC::mathPow): - -2012-12-17 Jonathan Liu <net147@gmail.com> - - Fix Math.pow implementation with MinGW-w64 - https://bugs.webkit.org/show_bug.cgi?id=105087 - - Reviewed by Simon Hausmann. - - The MinGW-w64 runtime has different behaviour for pow() - compared to other C runtimes. This results in the following - test262 tests failing with the latest MinGW-w64 runtime: - - S15.8.2.13_A14 - - S15.8.2.13_A16 - - S15.8.2.13_A20 - - S15.8.2.13_A22 - - Handle the special cases that are different with MinGW-w64. - - * runtime/MathObject.cpp: - (JSC::mathPow): - -2012-12-07 Jonathan Liu <net147@gmail.com> - - Add missing forward declaration for JSC::ArrayAllocationProfile - https://bugs.webkit.org/show_bug.cgi?id=104425 - - Reviewed by Kentaro Hara. - - The header for the JSC::ArrayConstructor class is missing a forward - declaration for the JSC::ArrayAllocationProfile class which causes - compilation to fail when compiling with MinGW-w64. - - * runtime/ArrayConstructor.h: - (JSC): - -2012-12-07 Jonathan Liu <net147@gmail.com> - - Add missing const qualifier to JSC::CodeBlock::getJITType() - https://bugs.webkit.org/show_bug.cgi?id=104424 - - Reviewed by Laszlo Gombos. - - JSC::CodeBlock::getJITType() has the const qualifier when JIT is - enabled but is missing the const qualifier when JIT is disabled. - - * bytecode/CodeBlock.h: - (JSC::CodeBlock::getJITType): - -2012-11-30 Pierre Rossi <pierre.rossi@gmail.com> - - [Qt] Unreviewed speculative Mac build fix after r136232 - - Update the include path so that LLIntAssembly.h is picked up. - The bot didn't break until later when a clean build was triggered. - - * JavaScriptCore.pri: - -2012-11-30 Allan Sandfeld Jensen <allan.jensen@digia.com> - - Crash in conversion of empty OpaqueJSString to Identifier - https://bugs.webkit.org/show_bug.cgi?id=101867 - - Reviewed by NOBODY (OOPS!). - - The constructor call used for both null and empty OpaqueJSStrings results - in an assertion voilation and crash. This patch instead uses the Identifier - constructors which are specifically for null and empty Identifier. - - * API/OpaqueJSString.cpp: - (OpaqueJSString::identifier): - -2012-11-30 Tor Arne Vestbø <tor.arne.vestbo@digia.com> - - [Qt] Place the LLIntOffsetsExtractor binaries in debug/release subdirs on Mac - - Otherwise we'll end up using the same LLIntAssembly.h for both build - configs of JavaScriptCore -- one of them which will be for the wrong - config. - - Reviewed by Simon Hausmann. - - * LLIntOffsetsExtractor.pro: - -2012-11-30 Julien BRIANCEAU <jbrianceau@nds.com> - - [sh4] Fix compilation warnings in JavaScriptCore JIT for sh4 arch - https://bugs.webkit.org/show_bug.cgi?id=103378 - - Reviewed by Filip Pizlo. - - * assembler/MacroAssemblerSH4.h: - (JSC::MacroAssemblerSH4::branchTest32): - (JSC::MacroAssemblerSH4::branchAdd32): - (JSC::MacroAssemblerSH4::branchMul32): - (JSC::MacroAssemblerSH4::branchSub32): - (JSC::MacroAssemblerSH4::branchOr32): - -2012-11-29 Rafael Weinstein <rafaelw@chromium.org> - - [HTMLTemplateElement] Add feature flag - https://bugs.webkit.org/show_bug.cgi?id=103694 - - Reviewed by Adam Barth. - - This flag will guard the implementation of the HTMLTemplateElement. - http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html - - * Configurations/FeatureDefines.xcconfig: - -2012-11-29 Filip Pizlo <fpizlo@apple.com> - - It should be easy to find code blocks in debug dumps - https://bugs.webkit.org/show_bug.cgi?id=103623 - - Reviewed by Goeffrey Garen. - - This gives CodeBlock a relatively strong, but also relatively compact, hash. We compute - it lazily so that it only impacts run-time when debug support is enabled. We stringify - it smartly so that it's short and easy to type. We base it on the source code so that - the optimization level is irrelevant. And, we use SHA1 since it's already in our code - base. Now, when a piece of code wants to print some debugging to say that it's operating - on some code block, it can use this CodeBlockHash instead of memory addresses. - - This also takes CodeBlock debugging into the new world of print() and dataLog(). In - particular, CodeBlock::dump() corresponds to the thing you want printed if you do: - - dataLog("I heart ", *myCodeBlock); - - Probably, you want to just print some identifying information at this point rather than - the full bytecode dump. So, the existing CodeBlock::dump() has been renamed to - CodeBlock::dumpBytecode(), and CodeBlock::dump() now prints the CodeBlockHash plus just - a few little tidbits. - - Here's an example of CodeBlock::dump() output: - - EkILzr:[0x103883a00, BaselineFunctionCall] - - EkILzr is the CodeBlockHash. 0x103883a00 is the CodeBlock's address in memory. The other - part is self-explanatory. - - Finally, this new notion of CodeBlockHash is available for other purposes like bisecting - breakage. As such CodeBlockHash has all of the comparison operator overloads. When - bisecting in DFGDriver.cpp, you can now say things like: - - if (codeBlock->hash() < CodeBlockHash("CAAAAA")) - return false; - - And yes, CAAAAA is near the median hash, and the largest one is smaller than E99999. Such - is life when you use base 62 to encode a 32-bit number. - - * CMakeLists.txt: - * GNUmakefile.list.am: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * Target.pri: - * bytecode/CallLinkInfo.h: - (CallLinkInfo): - (JSC::CallLinkInfo::specializationKind): - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::hash): - (JSC): - (JSC::CodeBlock::dumpAssumingJITType): - (JSC::CodeBlock::dump): - (JSC::CodeBlock::dumpBytecode): - (JSC::CodeBlock::CodeBlock): - (JSC::CodeBlock::finalizeUnconditionally): - (JSC::CodeBlock::resetStubInternal): - (JSC::CodeBlock::reoptimize): - (JSC::ProgramCodeBlock::jettison): - (JSC::EvalCodeBlock::jettison): - (JSC::FunctionCodeBlock::jettison): - (JSC::CodeBlock::shouldOptimizeNow): - (JSC::CodeBlock::tallyFrequentExitSites): - (JSC::CodeBlock::dumpValueProfiles): - * bytecode/CodeBlock.h: - (JSC::CodeBlock::specializationKind): - (CodeBlock): - (JSC::CodeBlock::getJITType): - * bytecode/CodeBlockHash.cpp: Added. - (JSC): - (JSC::CodeBlockHash::CodeBlockHash): - (JSC::CodeBlockHash::dump): - * bytecode/CodeBlockHash.h: Added. - (JSC): - (CodeBlockHash): - (JSC::CodeBlockHash::CodeBlockHash): - (JSC::CodeBlockHash::hash): - (JSC::CodeBlockHash::operator==): - (JSC::CodeBlockHash::operator!=): - (JSC::CodeBlockHash::operator<): - (JSC::CodeBlockHash::operator>): - (JSC::CodeBlockHash::operator<=): - (JSC::CodeBlockHash::operator>=): - * bytecode/CodeBlockWithJITType.h: Added. - (JSC): - (CodeBlockWithJITType): - (JSC::CodeBlockWithJITType::CodeBlockWithJITType): - (JSC::CodeBlockWithJITType::dump): - * bytecode/CodeOrigin.cpp: Added. - (JSC): - (JSC::CodeOrigin::inlineDepthForCallFrame): - (JSC::CodeOrigin::inlineDepth): - (JSC::CodeOrigin::inlineStack): - (JSC::InlineCallFrame::hash): - * bytecode/CodeOrigin.h: - (InlineCallFrame): - (JSC::InlineCallFrame::specializationKind): - (JSC): - * bytecode/CodeType.cpp: Added. - (WTF): - (WTF::printInternal): - * bytecode/CodeType.h: - (WTF): - * bytecode/ExecutionCounter.cpp: - (JSC::ExecutionCounter::dump): - * bytecode/ExecutionCounter.h: - (ExecutionCounter): - * dfg/DFGByteCodeParser.cpp: - (JSC::DFG::ByteCodeParser::parseCodeBlock): - * dfg/DFGDisassembler.cpp: - (JSC::DFG::Disassembler::dump): - * dfg/DFGGraph.cpp: - (JSC::DFG::Graph::dumpCodeOrigin): - * dfg/DFGOSRExitCompiler.cpp: - * dfg/DFGOperations.cpp: - * dfg/DFGRepatch.cpp: - (JSC::DFG::generateProtoChainAccessStub): - (JSC::DFG::tryCacheGetByID): - (JSC::DFG::tryBuildGetByIDList): - (JSC::DFG::emitPutReplaceStub): - (JSC::DFG::emitPutTransitionStub): - (JSC::DFG::dfgLinkClosureCall): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::dumpCallFrame): - * jit/JITCode.cpp: Added. - (WTF): - (WTF::printInternal): - * jit/JITCode.h: - (JSC::JITCode::jitType): - (WTF): - * jit/JITDisassembler.cpp: - (JSC::JITDisassembler::dump): - (JSC::JITDisassembler::dumpForInstructions): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::privateCompilePatchGetArrayLength): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdSelfList): - (JSC::JIT::privateCompileGetByIdProtoList): - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - (JSC::JIT::privateCompileGetByVal): - (JSC::JIT::privateCompilePutByVal): - * jit/JITPropertyAccess32_64.cpp: - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::privateCompilePatchGetArrayLength): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdSelfList): - (JSC::JIT::privateCompileGetByIdProtoList): - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - * jit/JITStubs.cpp: - (JSC::DEFINE_STUB_FUNCTION): - * runtime/CodeSpecializationKind.cpp: Added. - (WTF): - (WTF::printInternal): - * runtime/CodeSpecializationKind.h: - (JSC::specializationFromIsCall): - (JSC): - (JSC::specializationFromIsConstruct): - (WTF): - * runtime/Executable.cpp: - (JSC::ExecutableBase::hashFor): - (JSC): - (JSC::NativeExecutable::hashFor): - (JSC::ScriptExecutable::hashFor): - * runtime/Executable.h: - (ExecutableBase): - (NativeExecutable): - (ScriptExecutable): - (JSC::ScriptExecutable::source): - -2012-11-29 Michael Saboff <msaboff@apple.com> - - Speculative Windows build fix after r136086. - - Unreviewed build fix. - - Suspect that ?setDumpsGeneratedCode@BytecodeGenerator@JSC@@SAX_N@Z needs to be removed from Windows - export list since the symbol was removed in r136086. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - -2012-11-28 Filip Pizlo <fpizlo@apple.com> - - SpeculatedType dumping should not use the static char buffer[thingy] idiom - https://bugs.webkit.org/show_bug.cgi?id=103584 - - Reviewed by Michael Saboff. - - Changed SpeculatedType to be "dumpable" by saying things like: - - dataLog("thingy = ", SpeculationDump(thingy)) - - Removed the old stringification functions, and changed all code that referred to them - to use the new dataLog()/print() style. - - * CMakeLists.txt: - * GNUmakefile.list.am: - * JavaScriptCore.xcodeproj/project.pbxproj: - * Target.pri: - * bytecode/SpeculatedType.cpp: - (JSC::dumpSpeculation): - (JSC::speculationToAbbreviatedString): - (JSC::dumpSpeculationAbbreviated): - * bytecode/SpeculatedType.h: - * bytecode/ValueProfile.h: - (JSC::ValueProfileBase::dump): - * bytecode/VirtualRegister.h: - (WTF::printInternal): - * dfg/DFGAbstractValue.h: - (JSC::DFG::AbstractValue::dump): - * dfg/DFGByteCodeParser.cpp: - (JSC::DFG::ByteCodeParser::injectLazyOperandSpeculation): - (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit): - * dfg/DFGGraph.cpp: - (JSC::DFG::Graph::dump): - (JSC::DFG::Graph::predictArgumentTypes): - * dfg/DFGGraph.h: - (Graph): - * dfg/DFGStructureAbstractValue.h: - * dfg/DFGVariableAccessDataDump.cpp: Added. - (JSC::DFG::VariableAccessDataDump::VariableAccessDataDump): - (JSC::DFG::VariableAccessDataDump::dump): - * dfg/DFGVariableAccessDataDump.h: Added. - (VariableAccessDataDump): - -2012-11-28 Michael Saboff <msaboff@apple.com> - - Change Bytecompiler s_dumpsGeneratedCode to an Options value - https://bugs.webkit.org/show_bug.cgi?id=103588 - - Reviewed by Filip Pizlo. - - Moved the control of dumping bytecodes to Options::dumpGeneratedBytecodes. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::CodeBlock): - * bytecompiler/BytecodeGenerator.cpp: - * bytecompiler/BytecodeGenerator.h: - * jsc.cpp: - (runWithScripts): - * runtime/Options.h: - -2012-11-28 Mark Hahnenberg <mhahnenberg@apple.com> - - Copying phase should use work lists - https://bugs.webkit.org/show_bug.cgi?id=101390 - - Reviewed by Filip Pizlo. - - * JavaScriptCore.xcodeproj/project.pbxproj: - * heap/BlockAllocator.cpp: - (JSC::BlockAllocator::BlockAllocator): - * heap/BlockAllocator.h: New RegionSet for CopyWorkListSegments. - (BlockAllocator): - (JSC::CopyWorkListSegment): - * heap/CopiedBlock.h: Added a per-block CopyWorkList to keep track of the JSCells that need to be revisited during the copying - phase to copy their backing stores. - (CopiedBlock): - (JSC::CopiedBlock::CopiedBlock): - (JSC::CopiedBlock::didSurviveGC): - (JSC::CopiedBlock::didEvacuateBytes): There is now a one-to-one relationship between GCThreads and the CopiedBlocks they're - responsible for evacuating, we no longer need any of that fancy compare and swap stuff. - (JSC::CopiedBlock::pin): - (JSC::CopiedBlock::hasWorkList): - (JSC::CopiedBlock::workList): - * heap/CopiedBlockInlines.h: Added. - (JSC::CopiedBlock::reportLiveBytes): Since we now have to grab a SpinLock to perform operations on the CopyWorkList during marking, - we don't need to do any of that fancy compare and swap stuff we were doing for tracking live bytes. - * heap/CopiedSpace.h: - (CopiedSpace): - * heap/CopiedSpaceInlines.h: - (JSC::CopiedSpace::pin): - * heap/CopyVisitor.cpp: - (JSC::CopyVisitor::copyFromShared): We now iterate over a range of CopiedBlocks rather than MarkedBlocks and revisit the cells in those - blocks' CopyWorkLists. - * heap/CopyVisitor.h: - (CopyVisitor): - * heap/CopyVisitorInlines.h: - (JSC::CopyVisitor::visitCell): The function responsible for calling the correct copyBackingStore() function for each JSCell from - a CopiedBlock's CopyWorkList. - (JSC::CopyVisitor::didCopy): We no longer need to check if the block is empty here because we know exactly when we're done - evacuating a CopiedBlock, which is when we've gone through all of the CopiedBlock's CopyWorkList. - * heap/CopyWorkList.h: Added. - (CopyWorkListSegment): Individual chunk of a CopyWorkList that is allocated from the BlockAllocator. - (JSC::CopyWorkListSegment::create): - (JSC::CopyWorkListSegment::size): - (JSC::CopyWorkListSegment::isFull): - (JSC::CopyWorkListSegment::get): - (JSC::CopyWorkListSegment::append): - (JSC::CopyWorkListSegment::CopyWorkListSegment): - (JSC::CopyWorkListSegment::data): - (JSC::CopyWorkListSegment::endOfBlock): - (CopyWorkListIterator): Responsible for giving CopyVisitors a contiguous notion of access across the separate CopyWorkListSegments - that make up each CopyWorkList. - (JSC::CopyWorkListIterator::get): - (JSC::CopyWorkListIterator::operator*): - (JSC::CopyWorkListIterator::operator->): - (JSC::CopyWorkListIterator::operator++): - (JSC::CopyWorkListIterator::operator==): - (JSC::CopyWorkListIterator::operator!=): - (JSC::CopyWorkListIterator::CopyWorkListIterator): - (CopyWorkList): Data structure that keeps track of the JSCells that need copying in a particular CopiedBlock. - (JSC::CopyWorkList::CopyWorkList): - (JSC::CopyWorkList::~CopyWorkList): - (JSC::CopyWorkList::append): - (JSC::CopyWorkList::begin): - (JSC::CopyWorkList::end): - * heap/GCThreadSharedData.cpp: - (JSC::GCThreadSharedData::GCThreadSharedData): We no longer use the m_blockSnapshot from the Heap during the copying phase. - (JSC::GCThreadSharedData::didStartCopying): We now copy the set of all blocks in the CopiedSpace to a separate vector for - iterating over during the copying phase since the set stored in the CopiedSpace will change as blocks are evacuated and - recycled throughout the copying phase. - * heap/GCThreadSharedData.h: - (GCThreadSharedData): - * heap/Heap.h: - (Heap): - * heap/SlotVisitor.h: We now need to know the object who is being marked that has a backing store so that we can store it - in a CopyWorkList to revisit later during the copying phase. - * heap/SlotVisitorInlines.h: - (JSC::SlotVisitor::copyLater): - * runtime/JSObject.cpp: - (JSC::JSObject::visitButterfly): - -2012-11-28 Filip Pizlo <fpizlo@apple.com> - - Disassembly methods should be able to disassemble to any PrintStream& rather than always using WTF::dataFile() - https://bugs.webkit.org/show_bug.cgi?id=103492 - - Reviewed by Mark Hahnenberg. - - Switched disassembly code to use PrintStream&, and to use print() rather than printf(). - - * dfg/DFGDisassembler.cpp: - (JSC::DFG::Disassembler::dump): - (DFG): - (JSC::DFG::Disassembler::dumpDisassembly): - * dfg/DFGDisassembler.h: - (Disassembler): - * dfg/DFGGraph.cpp: - (JSC::DFG::printWhiteSpace): - (JSC::DFG::Graph::dumpCodeOrigin): - (JSC::DFG::Graph::printNodeWhiteSpace): - (JSC::DFG::Graph::dump): - (DFG): - (JSC::DFG::Graph::dumpBlockHeader): - * dfg/DFGGraph.h: - (Graph): - * jit/JITDisassembler.cpp: - (JSC::JITDisassembler::dump): - (JSC::JITDisassembler::dumpForInstructions): - (JSC::JITDisassembler::dumpDisassembly): - * jit/JITDisassembler.h: - (JITDisassembler): - -2012-11-28 Filip Pizlo <fpizlo@apple.com> - - It should be possible to say dataLog("count = ", count, "\n") instead of dataLogF("count = %d\n", count) - https://bugs.webkit.org/show_bug.cgi?id=103009 - - Reviewed by Michael Saboff. - - Instead of converting all of JSC to use the new dataLog()/print() methods, I just changed - one place: dumping of abstract values. This is mainly just to ensure that the code I - added to WTF is actually doing things. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * dfg/DFGAbstractValue.h: - (JSC::DFG::AbstractValue::dump): - (WTF): - (WTF::printInternal): - * dfg/DFGStructureAbstractValue.h: - (JSC::DFG::StructureAbstractValue::dump): - (WTF): - (WTF::printInternal): - -2012-11-28 Oliver Hunt <oliver@apple.com> - - Make source cache include more information about the function extent. - https://bugs.webkit.org/show_bug.cgi?id=103552 - - Reviewed by Gavin Barraclough. - - Add a bit more information to the source cache. - - * parser/Parser.cpp: - (JSC::::parseFunctionInfo): - Store the function start offset - * parser/SourceProviderCacheItem.h: - (JSC::SourceProviderCacheItem::SourceProviderCacheItem): - (SourceProviderCacheItem): - Add additional field for the start of the real function string, and re-arrange - fields to avoid growing the struct. - -2012-11-27 Filip Pizlo <fpizlo@apple.com> - - Convert some remaining uses of FILE* to PrintStream&. - - Rubber stamped by Mark Hahnenberg. - - * bytecode/ValueProfile.h: - (JSC::ValueProfileBase::dump): - * bytecode/ValueRecovery.h: - (JSC::ValueRecovery::dump): - * dfg/DFGByteCodeParser.cpp: - (JSC::DFG::ByteCodeParser::parseCodeBlock): - * dfg/DFGNode.h: - (JSC::DFG::Node::dumpChildren): - -2012-11-27 Filip Pizlo <fpizlo@apple.com> - - Fix indentation in JSValue.h - - Rubber stamped by Mark Hahnenberg. - - * runtime/JSValue.h: - -2012-11-26 Filip Pizlo <fpizlo@apple.com> - - DFG SetLocal should use forwardSpeculationCheck instead of its own half-baked version of same - https://bugs.webkit.org/show_bug.cgi?id=103353 - - Reviewed by Oliver Hunt and Gavin Barraclough. - - Made it possible to use forward speculations for most of the operand classes. Changed the conditional - direction parameter from being 'bool isForward' to an enum (SpeculationDirection). Changed SetLocal - to use forward speculations and got rid of its half-baked version of same. - - Also added the ability to force the DFG's disassembler to dump all nodes, even ones that are dead. - - * dfg/DFGByteCodeParser.cpp: - (JSC::DFG::ByteCodeParser::parseBlock): - * dfg/DFGDisassembler.cpp: - (JSC::DFG::Disassembler::dump): - * dfg/DFGDriver.cpp: - (JSC::DFG::compile): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::speculationCheck): - (DFG): - (JSC::DFG::SpeculativeJIT::convertLastOSRExitToForward): - (JSC::DFG::SpeculativeJIT::speculationWatchpoint): - (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution): - (JSC::DFG::SpeculativeJIT::fillStorage): - * dfg/DFGSpeculativeJIT.h: - (SpeculativeJIT): - (JSC::DFG::SpeculateIntegerOperand::SpeculateIntegerOperand): - (JSC::DFG::SpeculateIntegerOperand::gpr): - (SpeculateIntegerOperand): - (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand): - (JSC::DFG::SpeculateDoubleOperand::fpr): - (SpeculateDoubleOperand): - (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand): - (JSC::DFG::SpeculateCellOperand::gpr): - (SpeculateCellOperand): - (JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand): - (JSC::DFG::SpeculateBooleanOperand::gpr): - (SpeculateBooleanOperand): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): - (JSC::DFG::SpeculativeJIT::fillSpeculateInt): - (JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict): - (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): - (JSC::DFG::SpeculativeJIT::fillSpeculateCell): - (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): - (JSC::DFG::SpeculativeJIT::fillSpeculateInt): - (JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict): - (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): - (JSC::DFG::SpeculativeJIT::fillSpeculateCell): - (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): - (JSC::DFG::SpeculativeJIT::compile): - * runtime/Options.h: - (JSC): - -2012-11-26 Daniel Bates <dbates@webkit.org> - - Substitute "allSeparators8Bit" for "allSeperators8Bit" in JSC::jsSpliceSubstringsWithSeparators() - <https://bugs.webkit.org/show_bug.cgi?id=103303> - - Reviewed by Simon Fraser. - - Fix misspelled word, "Seperators" [sic], in a local variable name in JSC::jsSpliceSubstringsWithSeparators(). - - * runtime/StringPrototype.cpp: - (JSC::jsSpliceSubstringsWithSeparators): - -2012-11-26 Daniel Bates <dbates@webkit.org> - - JavaScript fails to handle String.replace() with large replacement string - https://bugs.webkit.org/show_bug.cgi?id=102956 - <rdar://problem/12738012> - - Reviewed by Oliver Hunt. - - Fix an issue where we didn't check for overflow when computing the length - of the result of String.replace() with a large replacement string. - - * runtime/StringPrototype.cpp: - (JSC::jsSpliceSubstringsWithSeparators): - -2012-11-26 Zeno Albisser <zeno@webkit.org> - - [Qt] Fix the LLInt build on Mac - https://bugs.webkit.org/show_bug.cgi?id=97587 - - Reviewed by Simon Hausmann. - - * DerivedSources.pri: - * JavaScriptCore.pro: - -2012-11-26 Oliver Hunt <oliver@apple.com> - - 32-bit build fix. Move the method decalration outside of the X86_64 only section. - - * assembler/MacroAssembler.h: - (MacroAssembler): - (JSC::MacroAssembler::shouldConsiderBlinding): - -2012-11-26 Oliver Hunt <oliver@apple.com> - - Don't blind all the things. - https://bugs.webkit.org/show_bug.cgi?id=102572 - - Reviewed by Gavin Barraclough. - - No longer blind all the constants in the instruction stream. We use a - simple non-deterministic filter to avoid blinding everything. Also modified - the basic integer blinding logic to avoid blinding small negative values. - - * assembler/MacroAssembler.h: - (MacroAssembler): - (JSC::MacroAssembler::shouldConsiderBlinding): - (JSC::MacroAssembler::shouldBlind): - -2012-11-26 Mark Hahnenberg <mhahnenberg@apple.com> - - JSObject::copyButterfly doesn't handle undecided indexing types correctly - https://bugs.webkit.org/show_bug.cgi?id=102573 - - Reviewed by Filip Pizlo. - - We don't do any copying into the newly allocated vector and we don't zero-initialize CopiedBlocks - during the copying phase, so we end up with uninitialized memory in arrays which have undecided indexing - types. We should just do the actual memcpy from the old block to the new one. - - * runtime/JSObject.cpp: - (JSC::JSObject::copyButterfly): Just do the same thing that we do for other contiguous indexing types. - -2012-11-26 Julien BRIANCEAU <jbrianceau@nds.com> - - [sh4] JavaScriptCore JIT build is broken since r135330 - Add missing implementation for sh4 arch. - https://bugs.webkit.org/show_bug.cgi?id=103145 - - Reviewed by Oliver Hunt. - - * assembler/MacroAssemblerSH4.h: - (JSC::MacroAssemblerSH4::canJumpReplacePatchableBranchPtrWithPatch): - (MacroAssemblerSH4): - (JSC::MacroAssemblerSH4::startOfBranchPtrWithPatchOnRegister): - (JSC::MacroAssemblerSH4::revertJumpReplacementToBranchPtrWithPatch): - (JSC::MacroAssemblerSH4::startOfPatchableBranchPtrWithPatchOnAddress): - (JSC::MacroAssemblerSH4::revertJumpReplacementToPatchableBranchPtrWithPatch): - * assembler/SH4Assembler.h: - (JSC::SH4Assembler::revertJump): - (SH4Assembler): - (JSC::SH4Assembler::printInstr): - -2012-11-26 Yuqiang Xian <yuqiang.xian@intel.com> - - Use load64 instead of loadPtr to load a JSValue on JSVALUE64 platforms - https://bugs.webkit.org/show_bug.cgi?id=100909 - - Reviewed by Brent Fulgham. - - This is a (trivial) fix after r132701. - - * dfg/DFGOSRExitCompiler64.cpp: - (JSC::DFG::OSRExitCompiler::compileExit): - -2012-11-26 Gabor Ballabas <gaborb@inf.u-szeged.hu> - - [Qt][ARM] REGRESSION(r130826): It made 33 JSC test and 466 layout tests crash - https://bugs.webkit.org/show_bug.cgi?id=98857 - - Reviewed by Zoltan Herczeg. - - Implement a new version of patchableBranch32 to fix crashing JSC - tests. - - * assembler/MacroAssembler.h: - (MacroAssembler): - * assembler/MacroAssemblerARM.h: - (JSC::MacroAssemblerARM::patchableBranch32): - (MacroAssemblerARM): - -2012-11-21 Filip Pizlo <fpizlo@apple.com> - - Any function that can log things should be able to easily log them to a memory buffer as well - https://bugs.webkit.org/show_bug.cgi?id=103000 - - Reviewed by Sam Weinig. - - Change all users of WTF::dataFile() to expect a PrintStream& rather than a FILE*. - - * bytecode/Operands.h: - (JSC::OperandValueTraits::dump): - (JSC::dumpOperands): - (JSC): - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::dump): - * dfg/DFGAbstractState.h: - (AbstractState): - * dfg/DFGAbstractValue.h: - (JSC::DFG::AbstractValue::dump): - * dfg/DFGCommon.h: - (JSC::DFG::NodeIndexTraits::dump): - * dfg/DFGStructureAbstractValue.h: - (JSC::DFG::StructureAbstractValue::dump): - * dfg/DFGVariableEvent.cpp: - (JSC::DFG::VariableEvent::dump): - (JSC::DFG::VariableEvent::dumpFillInfo): - (JSC::DFG::VariableEvent::dumpSpillInfo): - * dfg/DFGVariableEvent.h: - (VariableEvent): - * disassembler/Disassembler.h: - (JSC): - (JSC::tryToDisassemble): - * disassembler/UDis86Disassembler.cpp: - (JSC::tryToDisassemble): - -2012-11-23 Alexis Menard <alexis@webkit.org> - - [CSS3 Backgrounds and Borders] Implement new CSS3 background-position parsing. - https://bugs.webkit.org/show_bug.cgi?id=102104 - - Reviewed by Julien Chaffraix. - - Protect the new feature behind a feature flag. - - * Configurations/FeatureDefines.xcconfig: - -2012-11-23 Gabor Ballabas <gaborb@inf.u-szeged.hu> - - Fix the ARM traditional build after r135330 - https://bugs.webkit.org/show_bug.cgi?id=102871 - - Reviewed by Zoltan Herczeg. - - Added missing functionality to traditional ARM architecture. - - * assembler/ARMAssembler.h: - (JSC::ARMAssembler::revertJump): - (ARMAssembler): - * assembler/MacroAssemblerARM.h: - (JSC::MacroAssemblerARM::startOfPatchableBranchPtrWithPatchOnAddress): - (JSC::MacroAssemblerARM::startOfBranchPtrWithPatchOnRegister): - (MacroAssemblerARM): - (JSC::MacroAssemblerARM::revertJumpReplacementToBranchPtrWithPatch): - -2012-11-16 Yury Semikhatsky <yurys@chromium.org> - - Memory instrumentation: extract MemoryObjectInfo declaration into a separate file - https://bugs.webkit.org/show_bug.cgi?id=102510 - - Reviewed by Pavel Feldman. - - Added new symbols for the methods that have moved into .../wtf/MemoryInstrumentation.cpp - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - -2012-11-23 Julien BRIANCEAU <jbrianceau@nds.com> - - [sh4] JavaScriptCore JIT build is broken since r130839 - Add missing implementation for sh4 arch. - https://bugs.webkit.org/show_bug.cgi?id=101479 - - Reviewed by Filip Pizlo. - - * assembler/MacroAssemblerSH4.h: - (JSC::MacroAssemblerSH4::load8Signed): - (MacroAssemblerSH4): - (JSC::MacroAssemblerSH4::load16Signed): - (JSC::MacroAssemblerSH4::store8): - (JSC::MacroAssemblerSH4::store16): - (JSC::MacroAssemblerSH4::moveDoubleToInts): - (JSC::MacroAssemblerSH4::moveIntsToDouble): - (JSC::MacroAssemblerSH4::loadFloat): - (JSC::MacroAssemblerSH4::loadDouble): - (JSC::MacroAssemblerSH4::storeFloat): - (JSC::MacroAssemblerSH4::storeDouble): - (JSC::MacroAssemblerSH4::addDouble): - (JSC::MacroAssemblerSH4::convertFloatToDouble): - (JSC::MacroAssemblerSH4::convertDoubleToFloat): - (JSC::MacroAssemblerSH4::urshift32): - * assembler/SH4Assembler.h: - (JSC::SH4Assembler::sublRegReg): - (JSC::SH4Assembler::subvlRegReg): - (JSC::SH4Assembler::floatfpulfrn): - (JSC::SH4Assembler::fldsfpul): - (JSC::SH4Assembler::fstsfpul): - (JSC::SH4Assembler::dcnvsd): - (SH4Assembler): - (JSC::SH4Assembler::movbRegMem): - (JSC::SH4Assembler::sizeOfConstantPool): - (JSC::SH4Assembler::linkJump): - (JSC::SH4Assembler::printInstr): - (JSC::SH4Assembler::printBlockInstr): - -2012-11-22 Balazs Kilvady <kilvadyb@homejinni.com> - - Fix the MIPS build after r135330 - https://bugs.webkit.org/show_bug.cgi?id=102872 - - Reviewed by Gavin Barraclough. - - Revert/replace functions added to MIPS port. - - * assembler/MIPSAssembler.h: - (JSC::MIPSAssembler::revertJumpToMove): - (MIPSAssembler): - (JSC::MIPSAssembler::replaceWithJump): - * assembler/MacroAssemblerMIPS.h: - (MacroAssemblerMIPS): - (JSC::MacroAssemblerMIPS::startOfBranchPtrWithPatchOnRegister): - (JSC::MacroAssemblerMIPS::revertJumpReplacementToBranchPtrWithPatch): - (JSC::MacroAssemblerMIPS::startOfPatchableBranchPtrWithPatchOnAddress): - -2012-11-21 Filip Pizlo <fpizlo@apple.com> - - Rename dataLog() and dataLogV() to dataLogF() and dataLogFV() - https://bugs.webkit.org/show_bug.cgi?id=103001 - - Rubber stamped by Dan Bernstein. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * assembler/LinkBuffer.cpp: - (JSC::LinkBuffer::finalizeCodeWithDisassembly): - (JSC::LinkBuffer::dumpLinkStatistics): - (JSC::LinkBuffer::dumpCode): - * assembler/LinkBuffer.h: - (JSC): - * assembler/SH4Assembler.h: - (JSC::SH4Assembler::vprintfStdoutInstr): - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dumpBytecodeCommentAndNewLine): - (JSC::CodeBlock::printUnaryOp): - (JSC::CodeBlock::printBinaryOp): - (JSC::CodeBlock::printConditionalJump): - (JSC::CodeBlock::printGetByIdOp): - (JSC::dumpStructure): - (JSC::dumpChain): - (JSC::CodeBlock::printGetByIdCacheStatus): - (JSC::CodeBlock::printCallOp): - (JSC::CodeBlock::printPutByIdOp): - (JSC::CodeBlock::printStructure): - (JSC::CodeBlock::printStructures): - (JSC::CodeBlock::dump): - (JSC::CodeBlock::dumpStatistics): - (JSC::CodeBlock::finalizeUnconditionally): - (JSC::CodeBlock::resetStubInternal): - (JSC::CodeBlock::reoptimize): - (JSC::ProgramCodeBlock::jettison): - (JSC::EvalCodeBlock::jettison): - (JSC::FunctionCodeBlock::jettison): - (JSC::CodeBlock::shouldOptimizeNow): - (JSC::CodeBlock::tallyFrequentExitSites): - (JSC::CodeBlock::dumpValueProfiles): - * bytecode/Opcode.cpp: - (JSC::OpcodeStats::~OpcodeStats): - * bytecode/SamplingTool.cpp: - (JSC::SamplingFlags::stop): - (JSC::SamplingRegion::dumpInternal): - (JSC::SamplingTool::dump): - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::initialize): - (JSC::DFG::AbstractState::endBasicBlock): - (JSC::DFG::AbstractState::mergeStateAtTail): - (JSC::DFG::AbstractState::mergeToSuccessors): - * dfg/DFGAbstractValue.h: - (JSC::DFG::AbstractValue::dump): - * dfg/DFGArgumentsSimplificationPhase.cpp: - (JSC::DFG::ArgumentsSimplificationPhase::run): - * dfg/DFGByteCodeParser.cpp: - (JSC::DFG::ByteCodeParser::injectLazyOperandSpeculation): - (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit): - (JSC::DFG::ByteCodeParser::getArrayModeAndEmitChecks): - (JSC::DFG::ByteCodeParser::makeSafe): - (JSC::DFG::ByteCodeParser::makeDivSafe): - (JSC::DFG::ByteCodeParser::handleCall): - (JSC::DFG::ByteCodeParser::handleInlining): - (JSC::DFG::ByteCodeParser::parseBlock): - (JSC::DFG::ByteCodeParser::processPhiStack): - (JSC::DFG::ByteCodeParser::linkBlock): - (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): - (JSC::DFG::ByteCodeParser::parseCodeBlock): - (JSC::DFG::ByteCodeParser::parse): - * dfg/DFGCFAPhase.cpp: - (JSC::DFG::CFAPhase::performBlockCFA): - (JSC::DFG::CFAPhase::performForwardCFA): - * dfg/DFGCFGSimplificationPhase.cpp: - (JSC::DFG::CFGSimplificationPhase::run): - (JSC::DFG::CFGSimplificationPhase::fixPossibleGetLocal): - (JSC::DFG::CFGSimplificationPhase::fixPhis): - (JSC::DFG::CFGSimplificationPhase::fixJettisonedPredecessors): - (JSC::DFG::CFGSimplificationPhase::removePotentiallyDeadPhiReference): - (JSC::DFG::CFGSimplificationPhase::mergeBlocks): - * dfg/DFGCSEPhase.cpp: - (JSC::DFG::CSEPhase::endIndexForPureCSE): - (JSC::DFG::CSEPhase::setReplacement): - (JSC::DFG::CSEPhase::eliminate): - (JSC::DFG::CSEPhase::performNodeCSE): - * dfg/DFGCapabilities.cpp: - (JSC::DFG::debugFail): - * dfg/DFGConstantFoldingPhase.cpp: - (JSC::DFG::ConstantFoldingPhase::foldConstants): - (JSC::DFG::ConstantFoldingPhase::paintUnreachableCode): - * dfg/DFGDisassembler.cpp: - (JSC::DFG::Disassembler::dump): - * dfg/DFGDriver.cpp: - (JSC::DFG::compile): - * dfg/DFGFixupPhase.cpp: - (JSC::DFG::FixupPhase::fixupNode): - (JSC::DFG::FixupPhase::fixDoubleEdge): - * dfg/DFGGraph.cpp: - (JSC::DFG::printWhiteSpace): - (JSC::DFG::Graph::dumpCodeOrigin): - (JSC::DFG::Graph::dump): - (JSC::DFG::Graph::dumpBlockHeader): - (JSC::DFG::Graph::predictArgumentTypes): - * dfg/DFGJITCompiler.cpp: - (JSC::DFG::JITCompiler::link): - * dfg/DFGOSREntry.cpp: - (JSC::DFG::prepareOSREntry): - * dfg/DFGOSRExitCompiler.cpp: - * dfg/DFGOSRExitCompiler32_64.cpp: - (JSC::DFG::OSRExitCompiler::compileExit): - * dfg/DFGOSRExitCompiler64.cpp: - (JSC::DFG::OSRExitCompiler::compileExit): - * dfg/DFGOperations.cpp: - * dfg/DFGPhase.cpp: - (JSC::DFG::Phase::beginPhase): - * dfg/DFGPhase.h: - (JSC::DFG::runAndLog): - * dfg/DFGPredictionPropagationPhase.cpp: - (JSC::DFG::PredictionPropagationPhase::propagate): - (JSC::DFG::PredictionPropagationPhase::propagateForward): - (JSC::DFG::PredictionPropagationPhase::propagateBackward): - (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting): - * dfg/DFGRegisterBank.h: - (JSC::DFG::RegisterBank::dump): - * dfg/DFGScoreBoard.h: - (JSC::DFG::ScoreBoard::use): - (JSC::DFG::ScoreBoard::dump): - * dfg/DFGSlowPathGenerator.h: - (JSC::DFG::SlowPathGenerator::generate): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution): - (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecutionWithConditionalDirection): - (JSC::DFG::SpeculativeJIT::runSlowPathGenerators): - (JSC::DFG::SpeculativeJIT::dump): - (JSC::DFG::SpeculativeJIT::checkConsistency): - (JSC::DFG::SpeculativeJIT::compile): - (JSC::DFG::SpeculativeJIT::checkGeneratedTypeForToInt32): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): - (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): - (JSC::DFG::SpeculativeJIT::fillSpeculateCell): - (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): - (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): - (JSC::DFG::SpeculativeJIT::fillSpeculateCell): - (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): - * dfg/DFGStructureCheckHoistingPhase.cpp: - (JSC::DFG::StructureCheckHoistingPhase::run): - * dfg/DFGValidate.cpp: - (Validate): - (JSC::DFG::Validate::reportValidationContext): - (JSC::DFG::Validate::dumpData): - (JSC::DFG::Validate::dumpGraphIfAppropriate): - * dfg/DFGVariableEventStream.cpp: - (JSC::DFG::VariableEventStream::logEvent): - (JSC::DFG::VariableEventStream::reconstruct): - * dfg/DFGVirtualRegisterAllocationPhase.cpp: - (JSC::DFG::VirtualRegisterAllocationPhase::run): - * heap/Heap.cpp: - * heap/HeapStatistics.cpp: - (JSC::HeapStatistics::logStatistics): - (JSC::HeapStatistics::showObjectStatistics): - * heap/MarkStack.h: - * heap/MarkedBlock.h: - * heap/SlotVisitor.cpp: - (JSC::SlotVisitor::validate): - * interpreter/CallFrame.cpp: - (JSC::CallFrame::dumpCaller): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::dumpRegisters): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - (JSC::JIT::privateCompile): - * jit/JITDisassembler.cpp: - (JSC::JITDisassembler::dump): - (JSC::JITDisassembler::dumpForInstructions): - * jit/JITStubRoutine.h: - (JSC): - * jit/JITStubs.cpp: - (JSC::DEFINE_STUB_FUNCTION): - * jit/JumpReplacementWatchpoint.cpp: - (JSC::JumpReplacementWatchpoint::fireInternal): - * llint/LLIntExceptions.cpp: - (JSC::LLInt::interpreterThrowInCaller): - (JSC::LLInt::returnToThrow): - (JSC::LLInt::callToThrow): - * llint/LLIntSlowPaths.cpp: - (JSC::LLInt::llint_trace_operand): - (JSC::LLInt::llint_trace_value): - (JSC::LLInt::LLINT_SLOW_PATH_DECL): - (JSC::LLInt::traceFunctionPrologue): - (JSC::LLInt::jitCompileAndSetHeuristics): - (JSC::LLInt::entryOSR): - (JSC::LLInt::handleHostCall): - (JSC::LLInt::setUpCall): - * profiler/Profile.cpp: - (JSC::Profile::debugPrintData): - (JSC::Profile::debugPrintDataSampleStyle): - * profiler/ProfileNode.cpp: - (JSC::ProfileNode::debugPrintData): - (JSC::ProfileNode::debugPrintDataSampleStyle): - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::dumpRegExpTrace): - * runtime/RegExp.cpp: - (JSC::RegExp::matchCompareWithInterpreter): - * runtime/SamplingCounter.cpp: - (JSC::AbstractSamplingCounter::dump): - * runtime/Structure.cpp: - (JSC::Structure::dumpStatistics): - (JSC::PropertyMapStatisticsExitLogger::~PropertyMapStatisticsExitLogger): - * tools/CodeProfile.cpp: - (JSC::CodeProfile::report): - * tools/ProfileTreeNode.h: - (JSC::ProfileTreeNode::dumpInternal): - * yarr/YarrInterpreter.cpp: - (JSC::Yarr::ByteCompiler::dumpDisjunction): - -2012-11-21 Filip Pizlo <fpizlo@apple.com> - - It should be possible to say disassemble(stuff) instead of having to say if (!tryToDisassemble(stuff)) dataLog("I failed") - https://bugs.webkit.org/show_bug.cgi?id=103010 - - Reviewed by Anders Carlsson. - - You can still say tryToDisassemble(), which will tell you if it failed; you can then - decide what to do instead. But it's better to say disassemble(), which will just print - the instruction ranges if tryToDisassemble() failed. This is particularly appropriate - since that's what all previous users of tryToDisassemble() would have done in some - form or another. - - * CMakeLists.txt: - * GNUmakefile.list.am: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * Target.pri: - * assembler/LinkBuffer.cpp: - (JSC::LinkBuffer::finalizeCodeWithDisassembly): - * dfg/DFGDisassembler.cpp: - (JSC::DFG::Disassembler::dumpDisassembly): - * disassembler/Disassembler.cpp: Added. - (JSC): - (JSC::disassemble): - * disassembler/Disassembler.h: - (JSC): - * jit/JITDisassembler.cpp: - (JSC::JITDisassembler::dumpDisassembly): - -2012-11-21 Filip Pizlo <fpizlo@apple.com> - - dumpOperands() claims that it needs a non-const Operands& when that is completely false - https://bugs.webkit.org/show_bug.cgi?id=103005 - - Reviewed by Eric Carlson. - - * bytecode/Operands.h: - (JSC::dumpOperands): - (JSC): - -2012-11-20 Filip Pizlo <fpizlo@apple.com> - - Baseline JIT's disassembly should be just as pretty as the DFG's - https://bugs.webkit.org/show_bug.cgi?id=102873 - - Reviewed by Sam Weinig. - - Integrated the CodeBlock's bytecode dumper with the JIT's disassembler. Also fixed - some type goof-ups (instructions are not in a Vector<Instruction> so using a Vector - iterator makes no sense) and stream-lined some things (you don't actually need a - full-fledged ExecState* to dump bytecode). - - * CMakeLists.txt: - * GNUmakefile.list.am: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * Target.pri: - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::printUnaryOp): - (JSC::CodeBlock::printBinaryOp): - (JSC::CodeBlock::printConditionalJump): - (JSC::CodeBlock::printGetByIdOp): - (JSC::CodeBlock::printCallOp): - (JSC::CodeBlock::printPutByIdOp): - (JSC::CodeBlock::dump): - (JSC): - (JSC::CodeBlock::CodeBlock): - * bytecode/CodeBlock.h: - (CodeBlock): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::dumpCallFrame): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - (JSC::JIT::privateCompile): - * jit/JIT.h: - (JIT): - * jit/JITDisassembler.cpp: Added. - (JSC): - (JSC::JITDisassembler::JITDisassembler): - (JSC::JITDisassembler::~JITDisassembler): - (JSC::JITDisassembler::dump): - (JSC::JITDisassembler::dumpForInstructions): - (JSC::JITDisassembler::dumpDisassembly): - * jit/JITDisassembler.h: Added. - (JSC): - (JITDisassembler): - (JSC::JITDisassembler::setStartOfCode): - (JSC::JITDisassembler::setForBytecodeMainPath): - (JSC::JITDisassembler::setForBytecodeSlowPath): - (JSC::JITDisassembler::setEndOfSlowPath): - (JSC::JITDisassembler::setEndOfCode): - -2012-11-21 Daniel Bates <dbates@webkit.org> - - JavaScript fails to concatenate large strings - <https://bugs.webkit.org/show_bug.cgi?id=102963> - - Reviewed by Michael Saboff. - - Fixes an issue where we inadvertently didn't check the length of - a JavaScript string for overflow. - - * runtime/Operations.h: - (JSC::jsString): - (JSC::jsStringFromArguments): - -2012-11-20 Filip Pizlo <fpizlo@apple.com> - - DFG should be able to cache closure calls (part 2/2) - https://bugs.webkit.org/show_bug.cgi?id=102662 - - Reviewed by Gavin Barraclough. - - Added caching of calls where the JSFunction* varies, but the Structure* and ExecutableBase* - stay the same. This is accomplished by replacing the branch that compares against a constant - JSFunction* with a jump to a closure call stub. The closure call stub contains a fast path, - and jumps slow directly to the virtual call thunk. - - Looks like a 1% win on V8v7. - - * CMakeLists.txt: - * GNUmakefile.list.am: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * Target.pri: - * bytecode/CallLinkInfo.cpp: - (JSC::CallLinkInfo::unlink): - * bytecode/CallLinkInfo.h: - (CallLinkInfo): - (JSC::CallLinkInfo::isLinked): - (JSC::getCallLinkInfoBytecodeIndex): - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::finalizeUnconditionally): - (JSC): - (JSC::CodeBlock::findClosureCallForReturnPC): - (JSC::CodeBlock::bytecodeOffset): - (JSC::CodeBlock::codeOriginForReturn): - * bytecode/CodeBlock.h: - (JSC::CodeBlock::getCallLinkInfo): - (CodeBlock): - (JSC::CodeBlock::isIncomingCallAlreadyLinked): - * dfg/DFGJITCompiler.cpp: - (JSC::DFG::JITCompiler::link): - * dfg/DFGJITCompiler.h: - (JSC::DFG::JITCompiler::addJSCall): - (JSC::DFG::JITCompiler::JSCallRecord::JSCallRecord): - (JSCallRecord): - * dfg/DFGOperations.cpp: - * dfg/DFGOperations.h: - * dfg/DFGRepatch.cpp: - (JSC::DFG::linkSlowFor): - (DFG): - (JSC::DFG::dfgLinkFor): - (JSC::DFG::dfgLinkSlowFor): - (JSC::DFG::dfgLinkClosureCall): - * dfg/DFGRepatch.h: - (DFG): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::emitCall): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::emitCall): - * dfg/DFGThunks.cpp: - (DFG): - (JSC::DFG::linkClosureCallThunkGenerator): - * dfg/DFGThunks.h: - (DFG): - * heap/Heap.h: - (Heap): - (JSC::Heap::jitStubRoutines): - * heap/JITStubRoutineSet.h: - (JSC::JITStubRoutineSet::size): - (JSC::JITStubRoutineSet::at): - (JITStubRoutineSet): - * jit/ClosureCallStubRoutine.cpp: Added. - (JSC): - (JSC::ClosureCallStubRoutine::ClosureCallStubRoutine): - (JSC::ClosureCallStubRoutine::~ClosureCallStubRoutine): - (JSC::ClosureCallStubRoutine::markRequiredObjectsInternal): - * jit/ClosureCallStubRoutine.h: Added. - (JSC): - (ClosureCallStubRoutine): - (JSC::ClosureCallStubRoutine::structure): - (JSC::ClosureCallStubRoutine::executable): - (JSC::ClosureCallStubRoutine::codeOrigin): - * jit/GCAwareJITStubRoutine.cpp: - (JSC::GCAwareJITStubRoutine::GCAwareJITStubRoutine): - * jit/GCAwareJITStubRoutine.h: - (GCAwareJITStubRoutine): - (JSC::GCAwareJITStubRoutine::isClosureCall): - * jit/JIT.cpp: - (JSC::JIT::privateCompile): - -2012-11-20 Filip Pizlo <fpizlo@apple.com> - - DFG should be able to cache closure calls (part 1/2) - https://bugs.webkit.org/show_bug.cgi?id=102662 - - Reviewed by Gavin Barraclough. - - Add ability to revert a jump replacement back to - branchPtrWithPatch(Condition, RegisterID, TrustedImmPtr). This is meant to be - a mandatory piece of functionality for all assemblers. I also renamed some of - the functions for reverting jump replacements back to - patchableBranchPtrWithPatch(Condition, Address, TrustedImmPtr), so as to avoid - confusion. - - * assembler/ARMv7Assembler.h: - (JSC::ARMv7Assembler::BadReg): - (ARMv7Assembler): - (JSC::ARMv7Assembler::revertJumpTo_movT3): - * assembler/LinkBuffer.h: - (JSC): - * assembler/MacroAssemblerARMv7.h: - (JSC::MacroAssemblerARMv7::startOfBranchPtrWithPatchOnRegister): - (MacroAssemblerARMv7): - (JSC::MacroAssemblerARMv7::revertJumpReplacementToBranchPtrWithPatch): - (JSC::MacroAssemblerARMv7::startOfPatchableBranchPtrWithPatchOnAddress): - * assembler/MacroAssemblerX86.h: - (JSC::MacroAssemblerX86::startOfBranchPtrWithPatchOnRegister): - (MacroAssemblerX86): - (JSC::MacroAssemblerX86::startOfPatchableBranchPtrWithPatchOnAddress): - (JSC::MacroAssemblerX86::revertJumpReplacementToBranchPtrWithPatch): - * assembler/MacroAssemblerX86_64.h: - (JSC::MacroAssemblerX86_64::startOfBranchPtrWithPatchOnRegister): - (JSC::MacroAssemblerX86_64::startOfPatchableBranchPtrWithPatchOnAddress): - (MacroAssemblerX86_64): - (JSC::MacroAssemblerX86_64::revertJumpReplacementToBranchPtrWithPatch): - * assembler/RepatchBuffer.h: - (JSC::RepatchBuffer::startOfBranchPtrWithPatchOnRegister): - (RepatchBuffer): - (JSC::RepatchBuffer::startOfPatchableBranchPtrWithPatchOnAddress): - (JSC::RepatchBuffer::revertJumpReplacementToBranchPtrWithPatch): - * assembler/X86Assembler.h: - (JSC::X86Assembler::revertJumpTo_cmpl_ir_force32): - (X86Assembler): - * dfg/DFGRepatch.cpp: - (JSC::DFG::replaceWithJump): - (JSC::DFG::dfgResetGetByID): - (JSC::DFG::dfgResetPutByID): - -2012-11-20 Yong Li <yoli@rim.com> - - [ARMv7] Neither linkCall() nor linkPointer() should flush code. - https://bugs.webkit.org/show_bug.cgi?id=99213 - - Reviewed by George Staikos. - - LinkBuffer doesn't need to flush code during linking. It will - eventually flush the whole executable. Fixing this gives >%5 - sunspider boost (on QNX). - - Also make replaceWithLoad() and replaceWithAddressComputation() flush - only when necessary. - - * assembler/ARMv7Assembler.h: - (JSC::ARMv7Assembler::linkCall): - (JSC::ARMv7Assembler::linkPointer): - (JSC::ARMv7Assembler::relinkCall): - (JSC::ARMv7Assembler::repatchInt32): - (JSC::ARMv7Assembler::repatchPointer): - (JSC::ARMv7Assembler::replaceWithLoad): Flush only after it did write. - (JSC::ARMv7Assembler::replaceWithAddressComputation): Flush only after it did write. - (JSC::ARMv7Assembler::setInt32): - (JSC::ARMv7Assembler::setPointer): - -2012-11-19 Filip Pizlo <fpizlo@apple.com> - - Remove support for ARMv7 errata from the jump code - https://bugs.webkit.org/show_bug.cgi?id=102759 - - Reviewed by Oliver Hunt. - - The jump replacement code was wrong to begin with since it wasn't doing - a cache flush on the inserted padding. And, to my knowledge, we don't need - this anymore, so this patch removes all errata code from the ARMv7 port. - - * assembler/ARMv7Assembler.h: - (JSC::ARMv7Assembler::computeJumpType): - (JSC::ARMv7Assembler::replaceWithJump): - (JSC::ARMv7Assembler::maxJumpReplacementSize): - (JSC::ARMv7Assembler::canBeJumpT3): - (JSC::ARMv7Assembler::canBeJumpT4): - -2012-11-19 Patrick Gansterer <paroga@webkit.org> - - [CMake] Create JavaScriptCore ForwardingHeaders - https://bugs.webkit.org/show_bug.cgi?id=92665 - - Reviewed by Brent Fulgham. - - When using CMake to build the Windows port, we need - to generate the forwarding headers with it too. - - * CMakeLists.txt: - -2012-11-19 Kihong Kwon <kihong.kwon@samsung.com> - - Add PROXIMITY_EVENTS feature - https://bugs.webkit.org/show_bug.cgi?id=102658 - - Reviewed by Kentaro Hara. - - Add PROXIMITY_EVENTS feature to xcode project for JavaScriptCore. - - * Configurations/FeatureDefines.xcconfig: - -2012-11-18 Dan Bernstein <mitz@apple.com> - - Try to fix the DFG build after r135099. - - * dfg/DFGCommon.h: - (JSC::DFG::shouldShowDisassembly): - -2012-11-18 Filip Pizlo <fpizlo@apple.com> - - Unreviewed, build fix for !ENABLE(DFG_JIT). - - * dfg/DFGCommon.h: - (JSC::DFG::shouldShowDisassembly): - (DFG): - -2012-11-18 Filip Pizlo <fpizlo@apple.com> - - JSC should have more logging in structure-related code - https://bugs.webkit.org/show_bug.cgi?id=102630 - - Reviewed by Simon Fraser. - - - JSValue::description() now tells you if something is a structure, and if so, - what kind of structure it is. - - - Jettisoning logic now tells you why things are being jettisoned. - - - It's now possible to turn off GC-triggered jettisoning entirely. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::finalizeUnconditionally): - (JSC::CodeBlock::reoptimize): - (JSC::ProgramCodeBlock::jettison): - (JSC::EvalCodeBlock::jettison): - (JSC::FunctionCodeBlock::jettison): - * bytecode/CodeBlock.h: - (JSC::CodeBlock::shouldImmediatelyAssumeLivenessDuringScan): - * runtime/JSValue.cpp: - (JSC::JSValue::description): - * runtime/Options.h: - (JSC): - -2012-11-18 Filip Pizlo <fpizlo@apple.com> - - DFG constant folding phase should say 'changed = true' whenever it changes the graph - https://bugs.webkit.org/show_bug.cgi?id=102550 - - Rubber stamped by Mark Hahnenberg. - - * dfg/DFGConstantFoldingPhase.cpp: - (JSC::DFG::ConstantFoldingPhase::foldConstants): - -2012-11-17 Elliott Sprehn <esprehn@chromium.org> - - Expose JSObject removeDirect and PrivateName to WebCore - https://bugs.webkit.org/show_bug.cgi?id=102546 - - Reviewed by Geoffrey Garen. - - Export removeDirect for use in WebCore so JSDependentRetained works. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - -2012-11-16 Filip Pizlo <fpizlo@apple.com> - - Given a PutById or GetById with a proven structure, the DFG should be able to emit a PutByOffset or GetByOffset instead - https://bugs.webkit.org/show_bug.cgi?id=102327 - - Reviewed by Mark Hahnenberg. - - If the profiler tells us that a GetById or PutById may be polymorphic but our - control flow analysis proves that it isn't, we should trust the control flow - analysis over the profiler. This arises in cases where GetById or PutById were - inlined: the inlined function may have been called from other places that led - to polymorphism, but in the current inlined context, there is no polymorphism. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * bytecode/GetByIdStatus.cpp: - (JSC::GetByIdStatus::computeFor): - (JSC): - * bytecode/GetByIdStatus.h: - (JSC::GetByIdStatus::GetByIdStatus): - (GetByIdStatus): - * bytecode/PutByIdStatus.cpp: - (JSC::PutByIdStatus::computeFor): - (JSC): - * bytecode/PutByIdStatus.h: - (JSC): - (JSC::PutByIdStatus::PutByIdStatus): - (PutByIdStatus): - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::execute): - * dfg/DFGAbstractValue.h: - (JSC::DFG::AbstractValue::bestProvenStructure): - (AbstractValue): - * dfg/DFGConstantFoldingPhase.cpp: - (JSC::DFG::ConstantFoldingPhase::foldConstants): - (JSC::DFG::ConstantFoldingPhase::addStructureTransitionCheck): - (ConstantFoldingPhase): - * dfg/DFGNode.h: - (JSC::DFG::Node::convertToGetByOffset): - (Node): - (JSC::DFG::Node::convertToPutByOffset): - (JSC::DFG::Node::hasStorageResult): - * runtime/JSGlobalObject.h: - (JSC::Structure::prototypeChain): - (JSC): - (JSC::Structure::isValid): - * runtime/Operations.h: - (JSC::isPrototypeChainNormalized): - (JSC): - * runtime/Structure.h: - (Structure): - (JSC::Structure::transitionDidInvolveSpecificValue): - -2012-11-16 Tony Chang <tony@chromium.org> - - Remove ENABLE_CSS_HIERARCHIES since it's no longer in use - https://bugs.webkit.org/show_bug.cgi?id=102554 - - Reviewed by Andreas Kling. - - As mentioned in https://bugs.webkit.org/show_bug.cgi?id=79939#c41 , - we're going to revist this feature once additional vendor support is - achieved. - - * Configurations/FeatureDefines.xcconfig: - -2012-11-16 Patrick Gansterer <paroga@webkit.org> - - Build fix for WinCE after r133688. - - Use numeric_limits<uint32_t>::max() instead of UINT32_MAX. - - * runtime/CodeCache.h: - (JSC::CacheMap::CacheMap): - -2012-11-15 Filip Pizlo <fpizlo@apple.com> - - ClassInfo.h should have correct indentation. - - Rubber stamped by Mark Hahnenberg. - - ClassInfo.h had some true creativity in its use of whitespace. Some things within - the namespace were indented four spaces and others where not. One #define had its - contents indented four spaces, while another didn't. I applied the following rule: - - - Non-macro things in the namespace should not be indented (that's our current - accepted practice). - - - Macros should never be indented but if they are multi-line then their subsequent - bodies should be indented four spaces. I believe that is consistent with what we - do elsewhere. - - * runtime/ClassInfo.h: - (JSC): - (MethodTable): - (ClassInfo): - (JSC::ClassInfo::propHashTable): - (JSC::ClassInfo::isSubClassOf): - (JSC::ClassInfo::hasStaticProperties): - -2012-11-15 Filip Pizlo <fpizlo@apple.com> - - DFG should copy propagate trivially no-op ConvertThis - https://bugs.webkit.org/show_bug.cgi?id=102445 - - Reviewed by Oliver Hunt. - - Copy propagation is always a good thing, since it reveals must-alias relationships - to the CFA and CSE. This accomplishes copy propagation for ConvertThis by first - converting it to an Identity node (which is done by the constant folder since it - has access to CFA results) and then performing substitution of references to - Identity with references to Identity's child in the CSE. - - I'm not aiming for a big speed-up here; I just think that this will be useful for - the work on https://bugs.webkit.org/show_bug.cgi?id=102327. - - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::execute): - * dfg/DFGCSEPhase.cpp: - (JSC::DFG::CSEPhase::performNodeCSE): - * dfg/DFGConstantFoldingPhase.cpp: - (JSC::DFG::ConstantFoldingPhase::foldConstants): - * dfg/DFGNodeType.h: - (DFG): - * dfg/DFGPredictionPropagationPhase.cpp: - (JSC::DFG::PredictionPropagationPhase::propagate): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - -2012-11-15 Filip Pizlo <fpizlo@apple.com> - - CallData.h should have correct indentation. - - Rubber stamped by Mark Hahneberg. - - * runtime/CallData.h: - (JSC): - -2012-11-15 Filip Pizlo <fpizlo@apple.com> - - Remove methodCallDummy since it is not used anymore. - - Rubber stamped by Mark Hahnenberg. - - * runtime/JSGlobalObject.cpp: - (JSC::JSGlobalObject::reset): - (JSC): - (JSC::JSGlobalObject::visitChildren): - * runtime/JSGlobalObject.h: - (JSGlobalObject): - -2012-11-14 Filip Pizlo <fpizlo@apple.com> - - Structure should be able to easily tell if the prototype chain might intercept a store - https://bugs.webkit.org/show_bug.cgi?id=102326 - - Reviewed by Geoffrey Garen. - - This improves our ability to reason about the correctness of the more optimized - prototype chain walk in JSObject::put(), while also making it straight forward to - check if the prototype chain will do strange things to a property store by just - looking at the structure. - - * runtime/JSObject.cpp: - (JSC::JSObject::put): - * runtime/Structure.cpp: - (JSC::Structure::prototypeChainMayInterceptStoreTo): - (JSC): - * runtime/Structure.h: - (Structure): - -2012-11-15 Thiago Marcos P. Santos <thiago.santos@intel.com> - - [CMake] Do not regenerate LLIntAssembly.h on every incremental build - https://bugs.webkit.org/show_bug.cgi?id=102248 - - Reviewed by Kenneth Rohde Christiansen. - - Update LLIntAssembly.h's mtime after running asm.rb to make the build - system dependency tracking consistent. - - * CMakeLists.txt: - -2012-11-15 Thiago Marcos P. Santos <thiago.santos@intel.com> - - Fix compiler warnings about signed/unsigned comparison on i386 - https://bugs.webkit.org/show_bug.cgi?id=102249 - - Reviewed by Kenneth Rohde Christiansen. - - Add casting to unsigned to shut up gcc warnings. Build was broken on - JSVALUE32_64 ports compiling with -Werror. - - * llint/LLIntData.cpp: - (JSC::LLInt::Data::performAssertions): - -2012-11-14 Brent Fulgham <bfulgham@webkit.org> - - [Windows, WinCairo] Unreviewed build fix. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - Missed one of the exports that was part of the WebKit2.def. - -2012-11-14 Brent Fulgham <bfulgham@webkit.org> - - [Windows, WinCairo] Correct build failure. - https://bugs.webkit.org/show_bug.cgi?id=102302 - - WebCore symbols were mistakenly added to the JavaScriptCore - library definition file. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Remove - WebCore symbols that were incorrectly added to the export file. - -2012-11-14 Mark Lam <mark.lam@apple.com> - - Change JSEventListener::m_jsFunction to be a weak ref. - https://bugs.webkit.org/show_bug.cgi?id=101989. - - Reviewed by Geoffrey Garen. - - Added infrastructure for scanning weak ref slots. - - * heap/SlotVisitor.cpp: Added #include "SlotVisitorInlines.h". - * heap/SlotVisitor.h: - (SlotVisitor): Added SlotVisitor::appendUnbarrieredWeak(). - * heap/SlotVisitorInlines.h: Added #include "Weak.h". - (JSC::SlotVisitor::appendUnbarrieredWeak): Added. - * heap/Weak.h: - (JSC::operator==): Added operator==() for Weak. - * runtime/JSCell.h: Removed #include "SlotVisitorInlines.h". - * runtime/JSObject.h: Added #include "SlotVisitorInlines.h". - -2012-11-14 Filip Pizlo <fpizlo@apple.com> - - Read-only properties created with putDirect() should tell the structure that there are read-only properties - https://bugs.webkit.org/show_bug.cgi?id=102292 - - Reviewed by Gavin Barraclough. - - This mostly affects things like function.length. - - * runtime/JSObject.h: - (JSC::JSObject::putDirectInternal): - -2012-11-13 Filip Pizlo <fpizlo@apple.com> - - Don't access Node& after adding nodes to the graph. - https://bugs.webkit.org/show_bug.cgi?id=102005 - - Reviewed by Oliver Hunt. - - * dfg/DFGFixupPhase.cpp: - (JSC::DFG::FixupPhase::fixupNode): - -2012-11-14 Valery Ignatyev <valery.ignatyev@ispras.ru> - - Replace (typeof(x) != <"object", "undefined", ...>) with - !(typeof(x) == <"object",..>). Later is_object, is_<...> bytecode operation - will be used. - - https://bugs.webkit.org/show_bug.cgi?id=98893 - - Reviewed by Filip Pizlo. - - This eliminates expensive typeof implementation and - allows to use DFG optimizations, which doesn't support 'typeof'. - - * bytecompiler/NodesCodegen.cpp: - (JSC::BinaryOpNode::emitBytecode): - -2012-11-14 Peter Gal <galpeter@inf.u-szeged.hu> - - [Qt][ARM]REGRESSION(r133985): It broke the build - https://bugs.webkit.org/show_bug.cgi?id=101740 - - Reviewed by Csaba Osztrogonác. - - Changed the emitGenericContiguousPutByVal to accept the additional IndexingType argument. - This information was passed as a template parameter. - - * jit/JIT.h: - (JSC::JIT::emitInt32PutByVal): - (JSC::JIT::emitDoublePutByVal): - (JSC::JIT::emitContiguousPutByVal): - (JIT): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::emitGenericContiguousPutByVal): - * jit/JITPropertyAccess32_64.cpp: - (JSC::JIT::emitGenericContiguousPutByVal): - -2012-11-14 Peter Gal <galpeter@inf.u-szeged.hu> - - Fix the MIPS build after r134332 - https://bugs.webkit.org/show_bug.cgi?id=102227 - - Reviewed by Csaba Osztrogonác. - - Added missing methods for the MacroAssemblerMIPS, based on the MacroAssemblerARMv7. - - * assembler/MacroAssemblerMIPS.h: - (JSC::MacroAssemblerMIPS::canJumpReplacePatchableBranchPtrWithPatch): - (MacroAssemblerMIPS): - (JSC::MacroAssemblerMIPS::startOfPatchableBranchPtrWithPatch): - (JSC::MacroAssemblerMIPS::revertJumpReplacementToPatchableBranchPtrWithPatch): - -2012-11-14 Peter Gal <galpeter@inf.u-szeged.hu> - - Fix the [-Wreturn-type] warning in JavaScriptCore/assembler/MacroAssemblerARM.h - https://bugs.webkit.org/show_bug.cgi?id=102206 - - Reviewed by Csaba Osztrogonác. - - Add a return value for the function to suppress the warning. - - * assembler/MacroAssemblerARM.h: - (JSC::MacroAssemblerARM::startOfPatchableBranchPtrWithPatch): - -2012-11-14 Sheriff Bot <webkit.review.bot@gmail.com> - - Unreviewed, rolling out r134599. - http://trac.webkit.org/changeset/134599 - https://bugs.webkit.org/show_bug.cgi?id=102225 - - It broke the 32 bit EFL build (Requested by Ossy on #webkit). - - * jit/JITPropertyAccess.cpp: - * jit/JITPropertyAccess32_64.cpp: - (JSC): - (JSC::JIT::emitGenericContiguousPutByVal): - -2012-11-14 Balazs Kilvady <kilvadyb@homejinni.com> - - [Qt][ARM]REGRESSION(r133985): It broke the build - https://bugs.webkit.org/show_bug.cgi?id=101740 - - Reviewed by Csaba Osztrogonác. - - Template function body moved to fix VALUE_PROFILER disabled case. - - * jit/JITPropertyAccess.cpp: - (JSC): - (JSC::JIT::emitGenericContiguousPutByVal): - * jit/JITPropertyAccess32_64.cpp: - -2012-11-13 Filip Pizlo <fpizlo@apple.com> - - DFG CreateThis should be able to statically account for the structure of the object it creates, if profiling indicates that this structure is always the same - https://bugs.webkit.org/show_bug.cgi?id=102017 - - Reviewed by Geoffrey Garen. - - This adds a watchpoint in JSFunction on the cached inheritor ID. It also changes - NewObject to take a structure as an operand (previously it implicitly used the owning - global object's empty object structure). Any GetCallee where the callee is predictable - is turned into a CheckFunction + WeakJSConstant, and any CreateThis on a WeakJSConstant - where the inheritor ID watchpoint is still valid is turned into an InheritorIDWatchpoint - followed by a NewObject. NewObject already accounts for the structure it uses for object - creation in the CFA. - - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::execute): - * dfg/DFGByteCodeParser.cpp: - (JSC::DFG::ByteCodeParser::parseBlock): - * dfg/DFGCSEPhase.cpp: - (JSC::DFG::CSEPhase::checkFunctionElimination): - * dfg/DFGGraph.cpp: - (JSC::DFG::Graph::dump): - * dfg/DFGNode.h: - (JSC::DFG::Node::hasFunction): - (JSC::DFG::Node::function): - (JSC::DFG::Node::hasStructure): - * dfg/DFGNodeType.h: - (DFG): - * dfg/DFGOperations.cpp: - * dfg/DFGOperations.h: - * dfg/DFGPredictionPropagationPhase.cpp: - (JSC::DFG::PredictionPropagationPhase::propagate): - * dfg/DFGSpeculativeJIT.h: - (JSC::DFG::SpeculativeJIT::callOperation): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * runtime/Executable.h: - (JSC::JSFunction::JSFunction): - * runtime/JSBoundFunction.cpp: - (JSC): - * runtime/JSFunction.cpp: - (JSC::JSFunction::JSFunction): - (JSC::JSFunction::put): - (JSC::JSFunction::defineOwnProperty): - * runtime/JSFunction.h: - (JSC::JSFunction::tryGetKnownInheritorID): - (JSFunction): - (JSC::JSFunction::addInheritorIDWatchpoint): - -2012-11-13 Filip Pizlo <fpizlo@apple.com> - - JSFunction and its descendants should be destructible - https://bugs.webkit.org/show_bug.cgi?id=102062 - - Reviewed by Mark Hahnenberg. - - This will make it easy to place an InlineWatchpointSet inside JSFunction. In the - future, we could make JSFunction non-destructible again by making a version of - WatchpointSet that is entirely GC'd, but this seems like overkill for now. - - This is performance-neutral. - - * runtime/JSBoundFunction.cpp: - (JSC::JSBoundFunction::destroy): - (JSC): - * runtime/JSBoundFunction.h: - (JSBoundFunction): - * runtime/JSFunction.cpp: - (JSC): - (JSC::JSFunction::destroy): - * runtime/JSFunction.h: - (JSFunction): - -2012-11-13 Cosmin Truta <ctruta@rim.com> - - Uninitialized fields in class JSLock - https://bugs.webkit.org/show_bug.cgi?id=101695 - - Reviewed by Mark Hahnenberg. - - Initialize JSLock::m_ownerThread and JSLock::m_lockDropDepth. - - * runtime/JSLock.cpp: - (JSC::JSLock::JSLock): - -2012-11-13 Peter Gal <galpeter@inf.u-szeged.hu> - - Fix the ARM traditional build after r134332 - https://bugs.webkit.org/show_bug.cgi?id=102044 - - Reviewed by Zoltan Herczeg. - - Added missing methods for the MacroAssemblerARM, based on the MacroAssemblerARMv7. - - * assembler/MacroAssemblerARM.h: - (JSC::MacroAssemblerARM::canJumpReplacePatchableBranchPtrWithPatch): - (MacroAssemblerARM): - (JSC::MacroAssemblerARM::startOfPatchableBranchPtrWithPatch): - (JSC::MacroAssemblerARM::revertJumpReplacementToPatchableBranchPtrWithPatch): - -2012-11-12 Filip Pizlo <fpizlo@apple.com> - - op_get_callee should have value profiling - https://bugs.webkit.org/show_bug.cgi?id=102047 - - Reviewed by Sam Weinig. - - This will allow us to detect if the callee is always the same, which is probably - the common case for a lot of constructors. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::CodeBlock): - * bytecode/Opcode.h: - (JSC): - (JSC::padOpcodeName): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::BytecodeGenerator): - * jit/JITOpcodes.cpp: - (JSC::JIT::emit_op_get_callee): - * jit/JITOpcodes32_64.cpp: - (JSC::JIT::emit_op_get_callee): - * llint/LowLevelInterpreter32_64.asm: - * llint/LowLevelInterpreter64.asm: - -2012-11-12 Filip Pizlo <fpizlo@apple.com> - - The act of getting the callee during 'this' construction should be explicit in bytecode - https://bugs.webkit.org/show_bug.cgi?id=102016 - - Reviewed by Michael Saboff. - - This is mostly a rollout of http://trac.webkit.org/changeset/116673, but also includes - changes to have create_this use the result of get_callee. - - No performance or behavioral impact. This is just meant to allow us to profile - get_callee in the future. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * bytecode/Opcode.h: - (JSC): - (JSC::padOpcodeName): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::BytecodeGenerator): - * dfg/DFGByteCodeParser.cpp: - (JSC::DFG::ByteCodeParser::parseBlock): - * dfg/DFGCapabilities.h: - (JSC::DFG::canCompileOpcode): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - * jit/JIT.h: - (JIT): - * jit/JITOpcodes.cpp: - (JSC::JIT::emit_op_get_callee): - (JSC): - (JSC::JIT::emit_op_create_this): - * jit/JITOpcodes32_64.cpp: - (JSC::JIT::emit_op_get_callee): - (JSC): - (JSC::JIT::emit_op_create_this): - * llint/LLIntSlowPaths.cpp: - (JSC::LLInt::LLINT_SLOW_PATH_DECL): - * llint/LowLevelInterpreter32_64.asm: - * llint/LowLevelInterpreter64.asm: - -2012-11-12 Filip Pizlo <fpizlo@apple.com> - - Unreviewed, fix ARMv7 build. - - * assembler/MacroAssemblerARMv7.h: - (JSC::MacroAssemblerARMv7::startOfPatchableBranchPtrWithPatch): - (JSC::MacroAssemblerARMv7::revertJumpReplacementToPatchableBranchPtrWithPatch): - -2012-11-12 Filip Pizlo <fpizlo@apple.com> - - Patching of jumps to stubs should use jump replacement rather than branch destination overwrite - https://bugs.webkit.org/show_bug.cgi?id=101909 - - Reviewed by Geoffrey Garen. - - This saves a few instructions in inline cases, on those architectures where it is - easy to figure out where to put the jump replacement. Sub-1% speed-up across the - board. - - * assembler/MacroAssemblerARMv7.h: - (MacroAssemblerARMv7): - (JSC::MacroAssemblerARMv7::canJumpReplacePatchableBranchPtrWithPatch): - (JSC::MacroAssemblerARMv7::startOfPatchableBranchPtrWithPatch): - (JSC::MacroAssemblerARMv7::revertJumpReplacementToPatchableBranchPtrWithPatch): - * assembler/MacroAssemblerX86.h: - (JSC::MacroAssemblerX86::canJumpReplacePatchableBranchPtrWithPatch): - (MacroAssemblerX86): - (JSC::MacroAssemblerX86::startOfPatchableBranchPtrWithPatch): - (JSC::MacroAssemblerX86::revertJumpReplacementToPatchableBranchPtrWithPatch): - * assembler/MacroAssemblerX86_64.h: - (JSC::MacroAssemblerX86_64::canJumpReplacePatchableBranchPtrWithPatch): - (MacroAssemblerX86_64): - (JSC::MacroAssemblerX86_64::startOfPatchableBranchPtrWithPatch): - (JSC::MacroAssemblerX86_64::revertJumpReplacementToPatchableBranchPtrWithPatch): - * assembler/RepatchBuffer.h: - (JSC::RepatchBuffer::startOfPatchableBranchPtrWithPatch): - (RepatchBuffer): - (JSC::RepatchBuffer::replaceWithJump): - (JSC::RepatchBuffer::revertJumpReplacementToPatchableBranchPtrWithPatch): - * assembler/X86Assembler.h: - (X86Assembler): - (JSC::X86Assembler::revertJumpTo_movq_i64r): - (JSC::X86Assembler::revertJumpTo_cmpl_im_force32): - (X86InstructionFormatter): - * bytecode/StructureStubInfo.h: - * dfg/DFGRepatch.cpp: - (JSC::DFG::replaceWithJump): - (DFG): - (JSC::DFG::tryCacheGetByID): - (JSC::DFG::tryBuildGetByIDList): - (JSC::DFG::tryBuildGetByIDProtoList): - (JSC::DFG::tryCachePutByID): - (JSC::DFG::dfgResetGetByID): - (JSC::DFG::dfgResetPutByID): - -2012-11-11 Filip Pizlo <fpizlo@apple.com> - - DFG ArithMul overflow check elimination is too aggressive - https://bugs.webkit.org/show_bug.cgi?id=101871 - - Reviewed by Oliver Hunt. - - The code was ignoring the fact that ((a * b) | 0) == (((a | 0) * (b | 0)) | 0) - only holds if a * b < 2^53. So, I changed it to only enable the optimization - when a < 2^22 and b is an int32 (and vice versa), using a super trivial peephole - analysis to prove the inequality. I considered writing an epic forward flow - formulation that tracks the ranges of integer values but then I thought better - of it. - - This also rewires the ArithMul integer speculation logic. Previously, we would - assume that an ArithMul was only UsedAsNumber if it escaped, and separately we - would decide whether to speculate integer based on a proof of the <2^22 - inequality. Now, we treat the double rounding behavior of ArithMul as if the - result was UsedAsNumber even if it did not escape. Then we try to prove that - double rounding cannot happen by attemping to prove that a < 2^22. This then - feeds back into the decision of whether or not to speculate integer (if we fail - to prove a < 2^22 then we're UsedAsNumber, and if we're also MayOverflow then - that forces double speculation). - - No performance impact. It just fixes a bug. - - * dfg/DFGGraph.h: - (JSC::DFG::Graph::mulShouldSpeculateInteger): - * dfg/DFGPredictionPropagationPhase.cpp: - (PredictionPropagationPhase): - (JSC::DFG::PredictionPropagationPhase::isWithinPowerOfTwoForConstant): - (JSC::DFG::PredictionPropagationPhase::isWithinPowerOfTwoNonRecursive): - (JSC::DFG::PredictionPropagationPhase::isWithinPowerOfTwo): - (JSC::DFG::PredictionPropagationPhase::propagate): - -2012-11-11 Filip Pizlo <fpizlo@apple.com> - - DFG should not emit function checks if we've already proved that the operand is that exact function - https://bugs.webkit.org/show_bug.cgi?id=101885 - - Reviewed by Oliver Hunt. - - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::execute): - * dfg/DFGAbstractValue.h: - (JSC::DFG::AbstractValue::filterByValue): - (AbstractValue): - * dfg/DFGConstantFoldingPhase.cpp: - (JSC::DFG::ConstantFoldingPhase::foldConstants): - -2012-11-12 Kentaro Hara <haraken@chromium.org> - - [V8][JSC] ScriptProfileNode::callUID needs not to be [Custom] - https://bugs.webkit.org/show_bug.cgi?id=101892 - - Reviewed by Adam Barth. - - Added callUID(), which enables us to kill custom bindings for ScriptProfileNode::callUID. - - * profiler/ProfileNode.h: - (JSC::ProfileNode::callUID): - -2012-11-12 Carlos Garcia Campos <cgarcia@igalia.com> - - Unreviewed. Fix make distcheck. - - * GNUmakefile.list.am: Add missing header. - -2012-11-11 Michael Pruett <michael@68k.org> - - Fix assertion failure in JSObject::tryGetIndexQuickly() - https://bugs.webkit.org/show_bug.cgi?id=101869 - - Reviewed by Filip Pizlo. - - Currently JSObject::tryGetIndexQuickly() triggers an assertion - failure when the object has an undecided indexing type. This - case should be treated the same as a blank indexing type. - - * runtime/JSObject.h: - (JSC::JSObject::tryGetIndexQuickly): - -2012-11-11 Filip Pizlo <fpizlo@apple.com> - - DFG register allocation should be greedy rather than round-robin - https://bugs.webkit.org/show_bug.cgi?id=101870 - - Reviewed by Geoffrey Garen. - - This simplifies the code, reduces some code duplication, and shows some slight - performance improvements in a few places, likely due to the fact that lower-numered - registers also typically have smaller encodings. - - * dfg/DFGRegisterBank.h: - (JSC::DFG::RegisterBank::RegisterBank): - (JSC::DFG::RegisterBank::tryAllocate): - (JSC::DFG::RegisterBank::allocate): - (JSC::DFG::RegisterBank::allocateInternal): - (RegisterBank): - -2012-11-11 Kenichi Ishibashi <bashi@chromium.org> - - WTFString::utf8() should have a mode of conversion to use replacement character - https://bugs.webkit.org/show_bug.cgi?id=101678 - - Reviewed by Alexey Proskuryakov. - - Follow the change on String::utf8() - - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::encode): Pass String::StrictConversion instead of true to String::utf8(). - -2012-11-10 Filip Pizlo <fpizlo@apple.com> - - DFG should optimize out the NaN check on loads from double arrays if the array prototype chain is having a great time - https://bugs.webkit.org/show_bug.cgi?id=101718 - - Reviewed by Geoffrey Garen. - - If we're reading from a JSArray in double mode, where the array's structure is - primordial (all aspects of the structure are unchanged except for indexing type), - and the result of the load is used in arithmetic that is known to not distinguish - between NaN and undefined, then we should not emit a NaN check. Looks like a 5% - win on navier-stokes. - - Also fixed an OpInfo initialization goof for String ops that was revealed by this - change. - - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::execute): - * dfg/DFGArrayMode.cpp: - (JSC::DFG::arraySpeculationToString): - * dfg/DFGArrayMode.h: - (JSC::DFG::ArrayMode::isSaneChain): - (ArrayMode): - (JSC::DFG::ArrayMode::isInBounds): - * dfg/DFGByteCodeParser.cpp: - (JSC::DFG::ByteCodeParser::handleIntrinsic): - * dfg/DFGFixupPhase.cpp: - (JSC::DFG::FixupPhase::fixupNode): - * dfg/DFGNodeFlags.cpp: - (JSC::DFG::nodeFlagsAsString): - * dfg/DFGNodeFlags.h: - (DFG): - * dfg/DFGPredictionPropagationPhase.cpp: - (JSC::DFG::PredictionPropagationPhase::propagate): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * runtime/JSGlobalObject.cpp: - (JSC::JSGlobalObject::arrayPrototypeChainIsSane): - (JSC): - * runtime/JSGlobalObject.h: - (JSGlobalObject): - -2012-11-10 Filip Pizlo <fpizlo@apple.com> - - DFG constant folding and CFG simplification should be smart enough to know that if a logical op's operand is proven to have a non-masquerading structure then it always evaluates to true - https://bugs.webkit.org/show_bug.cgi?id=101511 - - Reviewed by Geoffrey Garen. - - This is the second attempt at this patch, which fixes the !"" case. - - To make life easier, this moves BranchDirection into BasicBlock so that after - running the CFA, we always know, for each block, what direction the CFA - proved. CFG simplification now both uses and preserves cfaBranchDirection in - its transformations. - - Also made both LogicalNot and Branch check whether the operand is a known cell - with a known structure, and if so, made them do the appropriate folding. - - 5% speed-up on V8/raytrace because it makes raytrace's own null checks - evaporate (i.e. idioms like 'if (!x) throw "unhappiness"') thanks to the fact - that we were already doing structure check hoisting. - - * JavaScriptCore.xcodeproj/project.pbxproj: - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::endBasicBlock): - (JSC::DFG::AbstractState::execute): - (JSC::DFG::AbstractState::mergeToSuccessors): - * dfg/DFGAbstractState.h: - (AbstractState): - * dfg/DFGBasicBlock.h: - (JSC::DFG::BasicBlock::BasicBlock): - (BasicBlock): - * dfg/DFGBranchDirection.h: Added. - (DFG): - (JSC::DFG::branchDirectionToString): - (JSC::DFG::isKnownDirection): - (JSC::DFG::branchCondition): - * dfg/DFGCFGSimplificationPhase.cpp: - (JSC::DFG::CFGSimplificationPhase::run): - (JSC::DFG::CFGSimplificationPhase::mergeBlocks): - -2012-11-10 Sheriff Bot <webkit.review.bot@gmail.com> - - Unreviewed, rolling out r133971. - http://trac.webkit.org/changeset/133971 - https://bugs.webkit.org/show_bug.cgi?id=101839 - - Causes WebProcess to hang at 100% on www.apple.com (Requested - by kling on #webkit). - - * JavaScriptCore.xcodeproj/project.pbxproj: - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::endBasicBlock): - (JSC::DFG::AbstractState::execute): - (JSC::DFG::AbstractState::mergeToSuccessors): - * dfg/DFGAbstractState.h: - (JSC::DFG::AbstractState::branchDirectionToString): - (AbstractState): - * dfg/DFGBasicBlock.h: - (JSC::DFG::BasicBlock::BasicBlock): - (BasicBlock): - * dfg/DFGBranchDirection.h: Removed. - * dfg/DFGCFGSimplificationPhase.cpp: - (JSC::DFG::CFGSimplificationPhase::run): - (JSC::DFG::CFGSimplificationPhase::mergeBlocks): - -2012-11-09 Filip Pizlo <fpizlo@apple.com> - - If the DFG ArrayMode says that an access is on an OriginalArray, then the checks should always enforce this - https://bugs.webkit.org/show_bug.cgi?id=101720 - - Reviewed by Mark Hahnenberg. - - Previously, "original" arrays was just a hint that we could find the structure - of the array if we needed to even if the array profile didn't have it due to - polymorphism. Now, "original" arrays are a property that is actually checked: - if an array access has ArrayMode::arrayClass() == Array::OriginalArray, then we - can be sure that the code performing the access is dealing with not just a - JSArray, but a JSArray that has no named properties, no indexed accessors, and - the ArrayPrototype as its prototype. This will be useful for optimizations that - are being done as part of https://bugs.webkit.org/show_bug.cgi?id=101720. - - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::execute): - * dfg/DFGArrayMode.cpp: - (JSC::DFG::ArrayMode::originalArrayStructure): - (DFG): - (JSC::DFG::ArrayMode::alreadyChecked): - * dfg/DFGArrayMode.h: - (JSC): - (DFG): - (JSC::DFG::ArrayMode::withProfile): - (ArrayMode): - (JSC::DFG::ArrayMode::benefitsFromOriginalArray): - * dfg/DFGConstantFoldingPhase.cpp: - (JSC::DFG::ConstantFoldingPhase::foldConstants): - * dfg/DFGFixupPhase.cpp: - (JSC::DFG::FixupPhase::checkArray): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode): - (JSC::DFG::SpeculativeJIT::checkArray): - (JSC::DFG::SpeculativeJIT::compileGetByValOnString): - (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray): - (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray): - (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray): - (JSC::DFG::SpeculativeJIT::compileGetByValOnArguments): - (JSC::DFG::SpeculativeJIT::compileGetArgumentsLength): - -2012-11-09 Filip Pizlo <fpizlo@apple.com> - - Fix indentation of BooleanPrototype.h - - Rubber stamped by Mark Hahnenberg. - - * runtime/BooleanPrototype.h: - -2012-11-09 Filip Pizlo <fpizlo@apple.com> - - Fix indentation of BooleanObject.h - - Rubber stamped by Mark Hahnenberg. - - * runtime/BooleanObject.h: - -2012-11-09 Filip Pizlo <fpizlo@apple.com> - - Fix indentation of BooleanConstructor.h - - Rubber stamped by Mark Hahnenberg. - - * runtime/BooleanConstructor.h: - -2012-11-09 Filip Pizlo <fpizlo@apple.com> - - Fix indentation of BatchedTransitionOptimizer.h - - Rubber stamped by Mark Hahnenberg. - - * runtime/BatchedTransitionOptimizer.h: - -2012-11-09 Oliver Hunt <oliver@apple.com> - - So Thingy probably isn't the best name for a class, so - renamed to CacheMap. - - RS=Geoff - - * runtime/CodeCache.h: - (JSC::CacheMap::CacheMap): - -2012-11-09 Filip Pizlo <fpizlo@apple.com> - - ArrayPrototype should start out with a blank indexing type - https://bugs.webkit.org/show_bug.cgi?id=101719 - - Reviewed by Mark Hahnenberg. - - This allows us to track if the array prototype ever ends up with indexed - properties. - - * runtime/ArrayPrototype.cpp: - (JSC::ArrayPrototype::create): - (JSC::ArrayPrototype::ArrayPrototype): - * runtime/ArrayPrototype.h: - (ArrayPrototype): - (JSC::ArrayPrototype::createStructure): - -2012-11-08 Mark Hahnenberg <mhahnenberg@apple.com> - - MarkStackArray should use the BlockAllocator instead of the MarkStackSegmentAllocator - https://bugs.webkit.org/show_bug.cgi?id=101642 - - Reviewed by Filip Pizlo. - - MarkStackSegmentAllocator is like a miniature version of the BlockAllocator. Now that the BlockAllocator has support - for a variety of block sizes, we should get rid of the MarkStackSegmentAllocator in favor of the BlockAllocator. - - * heap/BlockAllocator.h: Add new specializations of regionSetFor for the new MarkStackSegments. - (JSC): - (JSC::MarkStackSegment): - * heap/GCThreadSharedData.cpp: - (JSC::GCThreadSharedData::GCThreadSharedData): - (JSC::GCThreadSharedData::reset): - * heap/GCThreadSharedData.h: - (GCThreadSharedData): - * heap/MarkStack.cpp: - (JSC::MarkStackArray::MarkStackArray): We now have a doubly linked list of MarkStackSegments, so we need to refactor - all the places that used the old custom tail/previous logic. - (JSC::MarkStackArray::~MarkStackArray): - (JSC::MarkStackArray::expand): - (JSC::MarkStackArray::refill): - (JSC::MarkStackArray::donateSomeCellsTo): Refactor to use the new linked list. - (JSC::MarkStackArray::stealSomeCellsFrom): Ditto. - * heap/MarkStack.h: - (JSC): - (MarkStackSegment): - (JSC::MarkStackSegment::MarkStackSegment): - (JSC::MarkStackSegment::sizeFromCapacity): - (MarkStackArray): - * heap/MarkStackInlines.h: - (JSC::MarkStackSegment::create): - (JSC): - (JSC::MarkStackArray::postIncTop): - (JSC::MarkStackArray::preDecTop): - (JSC::MarkStackArray::setTopForFullSegment): - (JSC::MarkStackArray::setTopForEmptySegment): - (JSC::MarkStackArray::top): - (JSC::MarkStackArray::validatePrevious): - (JSC::MarkStackArray::append): - (JSC::MarkStackArray::removeLast): - (JSC::MarkStackArray::isEmpty): - (JSC::MarkStackArray::size): - * heap/SlotVisitor.cpp: - (JSC::SlotVisitor::SlotVisitor): - -2012-11-09 Gabor Ballabas <gaborb@inf.u-szeged.hu> - - [Qt] r133953 broke the ARM_TRADITIONAL build - https://bugs.webkit.org/show_bug.cgi?id=101706 - - Reviewed by Csaba Osztrogonác. - - Fix for both hardfp and softfp. - - * dfg/DFGCCallHelpers.h: - (CCallHelpers): - (JSC::DFG::CCallHelpers::setupArgumentsWithExecState): - -2012-11-09 Sheriff Bot <webkit.review.bot@gmail.com> - - Unreviewed, rolling out r134051. - http://trac.webkit.org/changeset/134051 - https://bugs.webkit.org/show_bug.cgi?id=101757 - - It didn't fix the build (Requested by Ossy on #webkit). - - * dfg/DFGCCallHelpers.h: - (JSC::DFG::CCallHelpers::setupArgumentsWithExecState): - -2012-11-09 Gabor Ballabas <gaborb@inf.u-szeged.hu> - - [Qt] r133953 broke the ARM_TRADITIONAL build - https://bugs.webkit.org/show_bug.cgi?id=101706 - - Reviewed by Csaba Osztrogonác. - - Fix the ARM_TRADITIONAL build after r133953 - - * dfg/DFGCCallHelpers.h: - (JSC::DFG::CCallHelpers::setupArgumentsWithExecState): - (CCallHelpers): - -2012-11-09 Csaba Osztrogonác <ossy@webkit.org> - - [Qt] Fix the LLINT build from ARMv7 platform - https://bugs.webkit.org/show_bug.cgi?id=101712 - - Reviewed by Simon Hausmann. - - Enable generating of LLIntAssembly.h on ARM platforms. - - * DerivedSources.pri: - * JavaScriptCore.pro: - -2012-11-08 Filip Pizlo <fpizlo@apple.com> - - ArrayPrototype.h should have correct indentation - - Rubber stamped by Sam Weinig. - - * runtime/ArrayPrototype.h: - -2012-11-08 Mark Lam <mark.lam@apple.com> - - Renamed ...InlineMethods.h files to ...Inlines.h. - https://bugs.webkit.org/show_bug.cgi?id=101145. - - Reviewed by Geoffrey Garen. - - This is only a refactoring effort to rename the files. There are no - functionality changes. - - * API/JSObjectRef.cpp: - * GNUmakefile.list.am: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * bytecode/CodeBlock.cpp: - * dfg/DFGOperations.cpp: - * heap/ConservativeRoots.cpp: - * heap/CopiedBlock.h: - * heap/CopiedSpace.cpp: - * heap/CopiedSpaceInlineMethods.h: Removed. - * heap/CopiedSpaceInlines.h: Copied from Source/JavaScriptCore/heap/CopiedSpaceInlineMethods.h. - * heap/CopyVisitor.cpp: - * heap/CopyVisitorInlineMethods.h: Removed. - * heap/CopyVisitorInlines.h: Copied from Source/JavaScriptCore/heap/CopyVisitorInlineMethods.h. - * heap/GCThread.cpp: - * heap/GCThreadSharedData.cpp: - * heap/HandleStack.cpp: - * heap/Heap.cpp: - * heap/HeapRootVisitor.h: - * heap/MarkStack.cpp: - * heap/MarkStackInlineMethods.h: Removed. - * heap/MarkStackInlines.h: Copied from Source/JavaScriptCore/heap/MarkStackInlineMethods.h. - * heap/SlotVisitor.cpp: - * heap/SlotVisitor.h: - * heap/SlotVisitorInlineMethods.h: Removed. - * heap/SlotVisitorInlines.h: Copied from Source/JavaScriptCore/heap/SlotVisitorInlineMethods.h. - * jit/HostCallReturnValue.cpp: - * jit/JIT.cpp: - * jit/JITArithmetic.cpp: - * jit/JITArithmetic32_64.cpp: - * jit/JITCall.cpp: - * jit/JITCall32_64.cpp: - * jit/JITInlineMethods.h: Removed. - * jit/JITInlines.h: Copied from Source/JavaScriptCore/jit/JITInlineMethods.h. - * jit/JITOpcodes.cpp: - * jit/JITOpcodes32_64.cpp: - * jit/JITPropertyAccess.cpp: - * jit/JITPropertyAccess32_64.cpp: - * jsc.cpp: - * runtime/ArrayConstructor.cpp: - * runtime/ArrayPrototype.cpp: - * runtime/ButterflyInlineMethods.h: Removed. - * runtime/ButterflyInlines.h: Copied from Source/JavaScriptCore/runtime/ButterflyInlineMethods.h. - * runtime/IndexingHeaderInlineMethods.h: Removed. - * runtime/IndexingHeaderInlines.h: Copied from Source/JavaScriptCore/runtime/IndexingHeaderInlineMethods.h. - * runtime/JSActivation.h: - * runtime/JSArray.cpp: - * runtime/JSArray.h: - * runtime/JSCell.h: - * runtime/JSObject.cpp: - * runtime/JSValueInlineMethods.h: Removed. - * runtime/JSValueInlines.h: Copied from Source/JavaScriptCore/runtime/JSValueInlineMethods.h. - * runtime/LiteralParser.cpp: - * runtime/ObjectConstructor.cpp: - * runtime/Operations.h: - * runtime/RegExpMatchesArray.cpp: - * runtime/RegExpObject.cpp: - * runtime/StringPrototype.cpp: - -2012-11-08 Filip Pizlo <fpizlo@apple.com> - - ArrayConstructor.h should have correct indentation - - Rubber stamped by Sam Weinig. - - * runtime/ArrayConstructor.h: - -2012-11-08 Filip Pizlo <fpizlo@apple.com> - - DFG should know that int == null is always false - https://bugs.webkit.org/show_bug.cgi?id=101665 - - Reviewed by Oliver Hunt. - - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::execute): - -2012-11-08 Filip Pizlo <fpizlo@apple.com> - - Arguments.h should have correct indentation - - Rubber stamped by Sam Weinig. - - * runtime/Arguments.h: - -2012-11-08 Filip Pizlo <fpizlo@apple.com> - - It should be possible to JIT compile get_by_vals and put_by_vals even if the DFG is disabled. - - Reviewed by Oliver Hunt. - - * jit/JITInlineMethods.h: - (JSC::JIT::chooseArrayMode): - -2012-11-08 Filip Pizlo <fpizlo@apple.com> - - op_call should have LLInt call link info even if the DFG is disabled - https://bugs.webkit.org/show_bug.cgi?id=101672 - - Reviewed by Oliver Hunt. - - Get rid of the evil uses of fall-through. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::CodeBlock): - -2012-11-08 Oliver Hunt <oliver@apple.com> - - Improve effectiveness of function-level caching - https://bugs.webkit.org/show_bug.cgi?id=101667 - - Reviewed by Filip Pizlo. - - Added a random-eviction based cache for unlinked functions, and switch - UnlinkedFunctionExecutable's code references to Weak<>, thereby letting - us remove the explicit UnlinkedFunctionExecutable::clearCode() calls that - were being triggered by GC. - - Refactored the random eviction part of the CodeCache into a separate data - structure so that I didn't have to duplicate the code again, and then used - that for the new function cache. - - * bytecode/UnlinkedCodeBlock.cpp: - (JSC::UnlinkedFunctionExecutable::visitChildren): - (JSC::UnlinkedFunctionExecutable::codeBlockFor): - * bytecode/UnlinkedCodeBlock.h: - (JSC::UnlinkedFunctionExecutable::clearCodeForRecompilation): - (UnlinkedFunctionExecutable): - * debugger/Debugger.cpp: - * runtime/CodeCache.cpp: - (JSC::CodeCache::getCodeBlock): - (JSC::CodeCache::generateFunctionCodeBlock): - (JSC::CodeCache::getFunctionExecutableFromGlobalCode): - (JSC::CodeCache::usedFunctionCode): - (JSC): - * runtime/Executable.cpp: - (JSC::FunctionExecutable::clearUnlinkedCodeForRecompilationIfNotCompiling): - (JSC::FunctionExecutable::clearCode): - * runtime/Executable.h: - (FunctionExecutable): - -2012-11-07 Filip Pizlo <fpizlo@apple.com> - - DFG constant folding and CFG simplification should be smart enough to know that if a logical op's operand is proven to have a non-masquerading structure then it always evaluates to true - https://bugs.webkit.org/show_bug.cgi?id=101511 - - Reviewed by Oliver Hunt. - - To make life easier, this moves BranchDirection into BasicBlock so that after - running the CFA, we always know, for each block, what direction the CFA - proved. CFG simplification now both uses and preserves cfaBranchDirection in - its transformations. - - Also made both LogicalNot and Branch check whether the operand is a known cell - with a known structure, and if so, made them do the appropriate folding. - - 5% speed-up on V8/raytrace because it makes raytrace's own null checks - evaporate (i.e. idioms like 'if (!x) throw "unhappiness"') thanks to the fact - that we were already doing structure check hoisting. - - * JavaScriptCore.xcodeproj/project.pbxproj: - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::endBasicBlock): - (JSC::DFG::AbstractState::execute): - (JSC::DFG::AbstractState::mergeToSuccessors): - * dfg/DFGAbstractState.h: - (AbstractState): - * dfg/DFGBasicBlock.h: - (JSC::DFG::BasicBlock::BasicBlock): - (BasicBlock): - * dfg/DFGBranchDirection.h: Added. - (DFG): - (JSC::DFG::branchDirectionToString): - (JSC::DFG::isKnownDirection): - (JSC::DFG::branchCondition): - * dfg/DFGCFGSimplificationPhase.cpp: - (JSC::DFG::CFGSimplificationPhase::run): - (JSC::DFG::CFGSimplificationPhase::mergeBlocks): - -2012-11-08 Christophe Dumez <christophe.dumez@intel.com> - - [JSC] HTML extensions to String.prototype should escape " as " in argument values - https://bugs.webkit.org/show_bug.cgi?id=90667 - - Reviewed by Benjamin Poulain. - - Escape quotation mark as " in argument values to: - - String.prototype.anchor(name) - - String.prototype.fontcolor(color) - - String.prototype.fontsize(size) - - String.prototype.link(href) - - This behavior matches Chromium/V8 and Firefox/Spidermonkey - implementations and is requited by: - http://mathias.html5.org/specs/javascript/#escapeattributevalue - - This also fixes a potential security risk (XSS vector). - - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncFontcolor): - (JSC::stringProtoFuncFontsize): - (JSC::stringProtoFuncAnchor): - (JSC::stringProtoFuncLink): - -2012-11-08 Anders Carlsson <andersca@apple.com> - - HeapStatistics::s_pauseTimeStarts and s_pauseTimeEnds should be Vectors - https://bugs.webkit.org/show_bug.cgi?id=101651 - - Reviewed by Andreas Kling. - - HeapStatistics uses Deques when Vectors would work just as good. - - * heap/HeapStatistics.cpp: - * heap/HeapStatistics.h: - (HeapStatistics): - -2012-11-07 Filip Pizlo <fpizlo@apple.com> - - DFG should not assume that something is a double just because it might be undefined - https://bugs.webkit.org/show_bug.cgi?id=101438 - - Reviewed by Oliver Hunt. - - This changes all non-bitop arithmetic to (a) statically expect that variables are - defined prior to use in arithmetic and (b) not fall off into double paths just - because a value may not be a number. This is accomplished with two new notions of - speculation: - - shouldSpeculateIntegerExpectingDefined: Should we speculate that the value is an - integer if we ignore undefined (i.e. SpecOther) predictions? - - shouldSpeculateIntegerForArithmetic: Should we speculate that the value is an - integer if we ignore non-numeric predictions? - - This is a ~2x speed-up on programs that seem to our prediction propagator to have - paths in which otherwise numeric variables are undefined. - - * bytecode/SpeculatedType.h: - (JSC::isInt32SpeculationForArithmetic): - (JSC): - (JSC::isInt32SpeculationExpectingDefined): - (JSC::isDoubleSpeculationForArithmetic): - (JSC::isNumberSpeculationExpectingDefined): - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::execute): - * dfg/DFGFixupPhase.cpp: - (JSC::DFG::FixupPhase::fixupNode): - * dfg/DFGGraph.h: - (JSC::DFG::Graph::addShouldSpeculateInteger): - (JSC::DFG::Graph::mulShouldSpeculateInteger): - (JSC::DFG::Graph::negateShouldSpeculateInteger): - (JSC::DFG::Graph::addImmediateShouldSpeculateInteger): - (JSC::DFG::Graph::mulImmediateShouldSpeculateInteger): - * dfg/DFGNode.h: - (JSC::DFG::Node::shouldSpeculateIntegerForArithmetic): - (Node): - (JSC::DFG::Node::shouldSpeculateIntegerExpectingDefined): - (JSC::DFG::Node::shouldSpeculateDoubleForArithmetic): - (JSC::DFG::Node::shouldSpeculateNumberExpectingDefined): - * dfg/DFGPredictionPropagationPhase.cpp: - (JSC::DFG::PredictionPropagationPhase::propagate): - (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::compileAdd): - (JSC::DFG::SpeculativeJIT::compileArithMod): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * jit/JITArithmetic.cpp: - (JSC::JIT::emit_op_div): - -2012-11-06 Filip Pizlo <fpizlo@apple.com> - - JSC should infer when indexed storage contains only integers or doubles - https://bugs.webkit.org/show_bug.cgi?id=98606 - - Reviewed by Oliver Hunt. - - This adds two new indexing types: int32 and double. It also adds array allocation profiling, - which allows array allocations to converge to allocating arrays using those types to which - those arrays would have been converted. - - 20% speed-up on navier-stokes. 40% speed-up on various Kraken DSP tests. Some slow-downs too, - but a performance win overall on all benchmarks we track. - - * API/JSObjectRef.cpp: - (JSObjectMakeArray): - * CMakeLists.txt: - * GNUmakefile.list.am: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * Target.pri: - * assembler/AbstractMacroAssembler.h: - (JumpList): - (JSC::AbstractMacroAssembler::JumpList::JumpList): - * assembler/MacroAssemblerX86Common.h: - (JSC::MacroAssemblerX86Common::branchDouble): - * assembler/X86Assembler.h: - (JSC::X86Assembler::jnp): - (X86Assembler): - (JSC::X86Assembler::X86InstructionFormatter::emitRex): - * bytecode/ArrayAllocationProfile.cpp: Added. - (JSC): - (JSC::ArrayAllocationProfile::updateIndexingType): - * bytecode/ArrayAllocationProfile.h: Added. - (JSC): - (ArrayAllocationProfile): - (JSC::ArrayAllocationProfile::ArrayAllocationProfile): - (JSC::ArrayAllocationProfile::selectIndexingType): - (JSC::ArrayAllocationProfile::updateLastAllocation): - (JSC::ArrayAllocationProfile::selectIndexingTypeFor): - (JSC::ArrayAllocationProfile::updateLastAllocationFor): - * bytecode/ArrayProfile.cpp: - (JSC::ArrayProfile::updatedObservedArrayModes): - (JSC): - * bytecode/ArrayProfile.h: - (JSC): - (JSC::arrayModesInclude): - (JSC::shouldUseSlowPutArrayStorage): - (JSC::shouldUseFastArrayStorage): - (JSC::shouldUseContiguous): - (JSC::shouldUseDouble): - (JSC::shouldUseInt32): - (ArrayProfile): - * bytecode/ByValInfo.h: - (JSC::isOptimizableIndexingType): - (JSC::jitArrayModeForIndexingType): - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - (JSC::CodeBlock::CodeBlock): - (JSC::CodeBlock::updateAllPredictionsAndCountLiveness): - (JSC): - (JSC::CodeBlock::updateAllValueProfilePredictions): - (JSC::CodeBlock::updateAllArrayPredictions): - (JSC::CodeBlock::updateAllPredictions): - (JSC::CodeBlock::shouldOptimizeNow): - * bytecode/CodeBlock.h: - (CodeBlock): - (JSC::CodeBlock::numberOfArrayAllocationProfiles): - (JSC::CodeBlock::addArrayAllocationProfile): - (JSC::CodeBlock::updateAllValueProfilePredictions): - (JSC::CodeBlock::updateAllArrayPredictions): - * bytecode/DFGExitProfile.h: - (JSC::DFG::exitKindToString): - * bytecode/Instruction.h: - (JSC): - (JSC::Instruction::Instruction): - * bytecode/Opcode.h: - (JSC): - (JSC::padOpcodeName): - * bytecode/SpeculatedType.h: - (JSC): - (JSC::isRealNumberSpeculation): - * bytecode/UnlinkedCodeBlock.cpp: - (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock): - * bytecode/UnlinkedCodeBlock.h: - (JSC): - (JSC::UnlinkedCodeBlock::addArrayAllocationProfile): - (JSC::UnlinkedCodeBlock::numberOfArrayAllocationProfiles): - (UnlinkedCodeBlock): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::newArrayAllocationProfile): - (JSC): - (JSC::BytecodeGenerator::emitNewArray): - (JSC::BytecodeGenerator::emitExpectedFunctionSnippet): - * bytecompiler/BytecodeGenerator.h: - (BytecodeGenerator): - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::execute): - * dfg/DFGArrayMode.cpp: - (JSC::DFG::ArrayMode::fromObserved): - (JSC::DFG::ArrayMode::refine): - (DFG): - (JSC::DFG::ArrayMode::alreadyChecked): - (JSC::DFG::arrayTypeToString): - * dfg/DFGArrayMode.h: - (JSC::DFG::ArrayMode::withType): - (ArrayMode): - (JSC::DFG::ArrayMode::withTypeAndConversion): - (JSC::DFG::ArrayMode::usesButterfly): - (JSC::DFG::ArrayMode::isSpecific): - (JSC::DFG::ArrayMode::supportsLength): - (JSC::DFG::ArrayMode::arrayModesThatPassFiltering): - * dfg/DFGByteCodeParser.cpp: - (JSC::DFG::ByteCodeParser::getArrayMode): - (ByteCodeParser): - (JSC::DFG::ByteCodeParser::handleIntrinsic): - (JSC::DFG::ByteCodeParser::handleConstantInternalFunction): - (JSC::DFG::ByteCodeParser::parseBlock): - * dfg/DFGCCallHelpers.h: - (JSC::DFG::CCallHelpers::setupArgumentsWithExecState): - (CCallHelpers): - * dfg/DFGCallArrayAllocatorSlowPathGenerator.h: - (JSC::DFG::CallArrayAllocatorSlowPathGenerator::generateInternal): - (JSC::DFG::CallArrayAllocatorWithVariableSizeSlowPathGenerator::generateInternal): - * dfg/DFGFixupPhase.cpp: - (JSC::DFG::FixupPhase::fixupNode): - (JSC::DFG::FixupPhase::checkArray): - * dfg/DFGGraph.cpp: - (JSC::DFG::Graph::dump): - * dfg/DFGGraph.h: - (JSC::DFG::Graph::byValIsPure): - * dfg/DFGNode.h: - (NewArrayBufferData): - (JSC::DFG::Node::hasIndexingType): - (Node): - (JSC::DFG::Node::indexingType): - (JSC::DFG::Node::setIndexingType): - * dfg/DFGOperations.cpp: - * dfg/DFGOperations.h: - * dfg/DFGPredictionPropagationPhase.cpp: - (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::emitAllocateJSArray): - (JSC::DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode): - (DFG): - (JSC::DFG::SpeculativeJIT::checkArray): - (JSC::DFG::SpeculativeJIT::arrayify): - (JSC::DFG::SpeculativeJIT::compileDoublePutByVal): - (JSC::DFG::SpeculativeJIT::compileGetArrayLength): - * dfg/DFGSpeculativeJIT.h: - (JSC::DFG::SpeculativeJIT::callOperation): - (SpeculativeJIT): - (SpeculateIntegerOperand): - (JSC::DFG::SpeculateIntegerOperand::use): - (SpeculateDoubleOperand): - (JSC::DFG::SpeculateDoubleOperand::use): - * dfg/DFGSpeculativeJIT32_64.cpp: - (DFG): - (JSC::DFG::SpeculativeJIT::compileContiguousPutByVal): - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * jit/JIT.h: - (JSC::JIT::emitInt32GetByVal): - (JIT): - (JSC::JIT::emitInt32PutByVal): - (JSC::JIT::emitDoublePutByVal): - (JSC::JIT::emitContiguousPutByVal): - * jit/JITExceptions.cpp: - (JSC::genericThrow): - * jit/JITInlineMethods.h: - (JSC::arrayProfileSaw): - (JSC::JIT::chooseArrayMode): - * jit/JITOpcodes.cpp: - (JSC::JIT::emit_op_new_array): - (JSC::JIT::emit_op_new_array_with_size): - (JSC::JIT::emit_op_new_array_buffer): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::emit_op_get_by_val): - (JSC::JIT::emitDoubleGetByVal): - (JSC): - (JSC::JIT::emitContiguousGetByVal): - (JSC::JIT::emit_op_put_by_val): - (JSC::JIT::emitGenericContiguousPutByVal): - (JSC::JIT::emitSlow_op_put_by_val): - (JSC::JIT::privateCompileGetByVal): - (JSC::JIT::privateCompilePutByVal): - * jit/JITPropertyAccess32_64.cpp: - (JSC::JIT::emit_op_get_by_val): - (JSC::JIT::emitContiguousGetByVal): - (JSC::JIT::emitDoubleGetByVal): - (JSC): - (JSC::JIT::emit_op_put_by_val): - (JSC::JIT::emitGenericContiguousPutByVal): - (JSC::JIT::emitSlow_op_put_by_val): - * jit/JITStubs.cpp: - (JSC::DEFINE_STUB_FUNCTION): - * jit/JITStubs.h: - (JSC): - * jsc.cpp: - (GlobalObject::finishCreation): - * llint/LLIntSlowPaths.cpp: - (JSC::LLInt::jitCompileAndSetHeuristics): - (JSC::LLInt::LLINT_SLOW_PATH_DECL): - * llint/LowLevelInterpreter.asm: - * llint/LowLevelInterpreter32_64.asm: - * llint/LowLevelInterpreter64.asm: - * offlineasm/x86.rb: - * runtime/ArrayConstructor.cpp: - (JSC::constructArrayWithSizeQuirk): - * runtime/ArrayConstructor.h: - (JSC): - * runtime/ArrayPrototype.cpp: - (JSC::arrayProtoFuncConcat): - (JSC::arrayProtoFuncSlice): - (JSC::arrayProtoFuncSplice): - (JSC::arrayProtoFuncFilter): - (JSC::arrayProtoFuncMap): - * runtime/Butterfly.h: - (JSC::Butterfly::contiguousInt32): - (JSC::Butterfly::contiguousDouble): - (JSC::Butterfly::fromContiguous): - * runtime/ButterflyInlineMethods.h: - (JSC::Butterfly::createUninitializedDuringCollection): - * runtime/FunctionPrototype.cpp: - (JSC::functionProtoFuncBind): - * runtime/IndexingHeaderInlineMethods.h: - (JSC::IndexingHeader::indexingPayloadSizeInBytes): - * runtime/IndexingType.cpp: - (JSC::leastUpperBoundOfIndexingTypes): - (JSC): - (JSC::leastUpperBoundOfIndexingTypeAndType): - (JSC::leastUpperBoundOfIndexingTypeAndValue): - (JSC::indexingTypeToString): - * runtime/IndexingType.h: - (JSC): - (JSC::hasUndecided): - (JSC::hasInt32): - (JSC::hasDouble): - * runtime/JSArray.cpp: - (JSC::JSArray::setLength): - (JSC::JSArray::pop): - (JSC::JSArray::push): - (JSC::JSArray::shiftCountWithAnyIndexingType): - (JSC::JSArray::unshiftCountWithAnyIndexingType): - (JSC::compareNumbersForQSortWithInt32): - (JSC): - (JSC::compareNumbersForQSortWithDouble): - (JSC::JSArray::sortNumericVector): - (JSC::JSArray::sortNumeric): - (JSC::JSArray::sortCompactedVector): - (JSC::JSArray::sort): - (JSC::JSArray::sortVector): - (JSC::JSArray::fillArgList): - (JSC::JSArray::copyToArguments): - (JSC::JSArray::compactForSorting): - * runtime/JSArray.h: - (JSArray): - (JSC::createContiguousArrayButterfly): - (JSC::JSArray::create): - (JSC::JSArray::tryCreateUninitialized): - * runtime/JSGlobalObject.cpp: - (JSC::JSGlobalObject::reset): - (JSC): - (JSC::JSGlobalObject::haveABadTime): - (JSC::JSGlobalObject::visitChildren): - * runtime/JSGlobalObject.h: - (JSGlobalObject): - (JSC::JSGlobalObject::originalArrayStructureForIndexingType): - (JSC::JSGlobalObject::arrayStructureForIndexingTypeDuringAllocation): - (JSC::JSGlobalObject::arrayStructureForProfileDuringAllocation): - (JSC::JSGlobalObject::isOriginalArrayStructure): - (JSC::constructEmptyArray): - (JSC::constructArray): - * runtime/JSObject.cpp: - (JSC::JSObject::copyButterfly): - (JSC::JSObject::getOwnPropertySlotByIndex): - (JSC::JSObject::putByIndex): - (JSC::JSObject::enterDictionaryIndexingMode): - (JSC::JSObject::createInitialIndexedStorage): - (JSC): - (JSC::JSObject::createInitialUndecided): - (JSC::JSObject::createInitialInt32): - (JSC::JSObject::createInitialDouble): - (JSC::JSObject::createInitialContiguous): - (JSC::JSObject::convertUndecidedToInt32): - (JSC::JSObject::convertUndecidedToDouble): - (JSC::JSObject::convertUndecidedToContiguous): - (JSC::JSObject::constructConvertedArrayStorageWithoutCopyingElements): - (JSC::JSObject::convertUndecidedToArrayStorage): - (JSC::JSObject::convertInt32ToDouble): - (JSC::JSObject::convertInt32ToContiguous): - (JSC::JSObject::convertInt32ToArrayStorage): - (JSC::JSObject::convertDoubleToContiguous): - (JSC::JSObject::convertDoubleToArrayStorage): - (JSC::JSObject::convertContiguousToArrayStorage): - (JSC::JSObject::convertUndecidedForValue): - (JSC::JSObject::convertInt32ForValue): - (JSC::JSObject::setIndexQuicklyToUndecided): - (JSC::JSObject::convertInt32ToDoubleOrContiguousWhilePerformingSetIndex): - (JSC::JSObject::convertDoubleToContiguousWhilePerformingSetIndex): - (JSC::JSObject::ensureInt32Slow): - (JSC::JSObject::ensureDoubleSlow): - (JSC::JSObject::ensureContiguousSlow): - (JSC::JSObject::ensureArrayStorageSlow): - (JSC::JSObject::ensureArrayStorageExistsAndEnterDictionaryIndexingMode): - (JSC::JSObject::switchToSlowPutArrayStorage): - (JSC::JSObject::deletePropertyByIndex): - (JSC::JSObject::getOwnPropertyNames): - (JSC::JSObject::putByIndexBeyondVectorLengthWithoutAttributes): - (JSC::JSObject::putByIndexBeyondVectorLength): - (JSC::JSObject::putDirectIndexBeyondVectorLength): - (JSC::JSObject::getNewVectorLength): - (JSC::JSObject::countElements): - (JSC::JSObject::ensureLengthSlow): - (JSC::JSObject::getOwnPropertyDescriptor): - * runtime/JSObject.h: - (JSC::JSObject::getArrayLength): - (JSC::JSObject::getVectorLength): - (JSC::JSObject::canGetIndexQuickly): - (JSC::JSObject::getIndexQuickly): - (JSC::JSObject::tryGetIndexQuickly): - (JSC::JSObject::canSetIndexQuickly): - (JSC::JSObject::canSetIndexQuicklyForPutDirect): - (JSC::JSObject::setIndexQuickly): - (JSC::JSObject::initializeIndex): - (JSC::JSObject::hasSparseMap): - (JSC::JSObject::inSparseIndexingMode): - (JSObject): - (JSC::JSObject::ensureInt32): - (JSC::JSObject::ensureDouble): - (JSC::JSObject::ensureLength): - (JSC::JSObject::indexingData): - (JSC::JSObject::currentIndexingData): - (JSC::JSObject::getHolyIndexQuickly): - (JSC::JSObject::relevantLength): - (JSC::JSObject::currentRelevantLength): - * runtime/JSValue.cpp: - (JSC::JSValue::description): - * runtime/LiteralParser.cpp: - (JSC::::parse): - * runtime/ObjectConstructor.cpp: - (JSC::objectConstructorGetOwnPropertyNames): - (JSC::objectConstructorKeys): - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncMatch): - (JSC::stringProtoFuncSplit): - * runtime/Structure.cpp: - (JSC::Structure::nonPropertyTransition): - * runtime/StructureTransitionTable.h: - (JSC::newIndexingType): - -2012-11-08 Balazs Kilvady <kilvadyb@homejinni.com> - - ASSERT problem on MIPS - https://bugs.webkit.org/show_bug.cgi?id=100589 - - Reviewed by Oliver Hunt. - - ASSERT fix for MIPS arch. - - * jit/JITOpcodes.cpp: - (JSC::JIT::emit_resolve_operations): - -2012-11-08 Michael Saboff <msaboff@apple.com> - - OpaqueJSClassContextData() should use StringImpl::isolatedCopy() to make string copies - https://bugs.webkit.org/show_bug.cgi?id=101507 - - Reviewed by Andreas Kling. - - Changed to use isolatedCopy() for key Strings. - - * API/JSClassRef.cpp: - (OpaqueJSClassContextData::OpaqueJSClassContextData): - -2012-11-07 Mark Hahnenberg <mhahnenberg@apple.com> - - WeakBlocks should be HeapBlocks - https://bugs.webkit.org/show_bug.cgi?id=101411 - - Reviewed by Oliver Hunt. - - Currently WeakBlocks use fastMalloc memory. They are very similar to the other HeapBlocks, however, - so we should change them to being allocated with the BlockAllocator. - - * heap/BlockAllocator.cpp: - (JSC::BlockAllocator::BlockAllocator): - * heap/BlockAllocator.h: Added a new RegionSet for WeakBlocks. - (JSC): - (BlockAllocator): - (JSC::WeakBlock): - * heap/Heap.h: Friended WeakSet to allow access to the BlockAllocator. - (Heap): - * heap/WeakBlock.cpp: - (JSC::WeakBlock::create): Refactored to use HeapBlocks rather than fastMalloc. - (JSC::WeakBlock::WeakBlock): - * heap/WeakBlock.h: Changed the WeakBlock size to 4 KB so that it divides evenly into the Region size. - (JSC): - (WeakBlock): - * heap/WeakSet.cpp: - (JSC::WeakSet::~WeakSet): - (JSC::WeakSet::addAllocator): - -2012-11-07 Filip Pizlo <fpizlo@apple.com> - - Indentation of ArgList.h is wrong - https://bugs.webkit.org/show_bug.cgi?id=101441 - - Reviewed by Andreas Kling. - - Just unindented by 4 spaces. - - * runtime/ArgList.h: - -2012-11-07 Gabor Ballabas <gaborb@inf.u-szeged.hu> - - [Qt][ARM] REGRESSION(r133688): It made all JSC and layout tests crash on ARM traditional platform - https://bugs.webkit.org/show_bug.cgi?id=101465 - - Reviewed by Oliver Hunt. - - Fix failing javascriptcore tests on ARM after r133688 - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::CodeBlock): - -2012-11-06 Oliver Hunt <oliver@apple.com> - - Reduce parser overhead in JSC - https://bugs.webkit.org/show_bug.cgi?id=101127 - - Reviewed by Filip Pizlo. - - An exciting journey into the world of architecture in which our hero - adds yet another layer to JSC codegeneration. - - This patch adds a marginally more compact form of bytecode that is - free from any data specific to a given execution context, and that - does store any data structures necessary for execution. To actually - execute this UnlinkedBytecode we still need to instantiate a real - CodeBlock, but this is a much faster linear time operation than any - of the earlier parsing or code generation passes. - - As the unlinked code is context free we can then simply use a cache - from source to unlinked code mapping to completely avoid all of the - old parser overhead. The cache is currently very simple and memory - heavy, using the complete source text as a key (rather than SourceCode - or equivalent), and a random eviction policy. - - This seems to produce a substantial win when loading identical content - in different contexts. - - * API/tests/testapi.c: - (main): - * CMakeLists.txt: - * GNUmakefile.list.am: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * bytecode/CodeBlock.cpp: - * bytecode/CodeBlock.h: - Moved a number of fields, and a bunch of logic to UnlinkedCodeBlock.h/cpp - * bytecode/Opcode.h: - Added a global const init no op instruction needed to get correct - behaviour without any associated semantics. - * bytecode/UnlinkedCodeBlock.cpp: Added. - * bytecode/UnlinkedCodeBlock.h: Added. - A fairly shallow, GC allocated version of the old CodeBlock - classes with a 32bit instruction size, and just metadata - size tracking. - * bytecompiler/BytecodeGenerator.cpp: - * bytecompiler/BytecodeGenerator.h: - Replace direct access to m_symbolTable with access through - symbolTable(). ProgramCode no longer has a symbol table at - all so some previously unconditional (and pointless) uses - of symbolTable get null checks. - A few other changes to deal with type changes due to us generating - unlinked code (eg. pointer free, so profile indices rather than - pointers). - * dfg/DFGByteCodeParser.cpp: - * dfg/DFGCapabilities.h: - Support global_init_nop - * interpreter/Interpreter.cpp: - Now get the ProgramExecutable to initialise new global properties - before starting execution. - * jit/JIT.cpp: - * jit/JITDriver.h: - * jit/JITStubs.cpp: - * llint/LLIntData.cpp: - * llint/LLIntSlowPaths.cpp: - * llint/LowLevelInterpreter.asm: - * llint/LowLevelInterpreter32_64.asm: - * llint/LowLevelInterpreter64.asm: - Adding init_global_const_nop everywhere else - * parser/Parser.h: - * parser/ParserModes.h: Added. - * parser/ParserTokens.h: - Parser no longer needs a global object or callframe to function - * runtime/CodeCache.cpp: Added. - * runtime/CodeCache.h: Added. - A simple, random eviction, Source->UnlinkedCode cache - * runtime/Executable.cpp: - * runtime/Executable.h: - Executables now reference their unlinked counterparts, and - request code specifically for the target global object. - * runtime/JSGlobalData.cpp: - * runtime/JSGlobalData.h: - GlobalData now owns a CodeCache and a set of new structures - for the unlinked code types. - * runtime/JSGlobalObject.cpp: - * runtime/JSGlobalObject.h: - Utility functions used by executables to perform compilation - - * runtime/JSType.h: - Add new JSTypes for unlinked code - -2012-11-06 Michael Saboff <msaboff@apple.com> - - JSStringCreateWithCFString() Should create an 8 bit String if possible - https://bugs.webkit.org/show_bug.cgi?id=101104 - - Reviewed by Darin Adler. - - Try converting the CFString to an 8 bit string using CFStringGetBytes(..., - kCFStringEncodingISOLatin1, ...) and return the 8 bit string if successful. - If not proceed with 16 bit conversion. - - * API/JSStringRefCF.cpp: - (JSStringCreateWithCFString): - -2012-11-06 Oliver Hunt <oliver@apple.com> - - Reduce direct m_symbolTable usage in CodeBlock - https://bugs.webkit.org/show_bug.cgi?id=101391 - - Reviewed by Sam Weinig. - - Simple refactoring. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - (JSC::CodeBlock::dumpStatistics): - (JSC::CodeBlock::nameForRegister): - * bytecode/CodeBlock.h: - (JSC::CodeBlock::isCaptured): - -2012-11-06 Michael Saboff <msaboff@apple.com> - - Lexer::scanRegExp, create 8 bit pattern and flag Identifiers from 16 bit source when possible - https://bugs.webkit.org/show_bug.cgi?id=101013 - - Reviewed by Darin Adler. - - Changed scanRegExp so that it will create 8 bit identifiers from 8 bit sources and from 16 bit sources - whan all the characters are 8 bit. Using two templated helpers, the "is all 8 bit" check is only performed - on 16 bit sources. The first helper is orCharacter() that will accumulate the or value of all characters - only for 16 bit sources. Replaced the helper Lexer::makeIdentifierSameType() with Lexer::makeRightSizedIdentifier(). - - * parser/Lexer.cpp: - (JSC::orCharacter<LChar>): Explicit template that serves as a placeholder. - (JSC::orCharacter<UChar>): Explicit template that actually or accumulates characters. - (JSC::Lexer::scanRegExp): - * parser/Lexer.h: - (Lexer): - (JSC::Lexer::makeRightSizedIdentifier<LChar>): New template that always creates an 8 bit Identifier. - (JSC::Lexer::makeRightSizedIdentifier<UChar>): New template that creates an 8 bit Identifier for 8 bit - data in a 16 bit source. - -2012-11-06 Filip Pizlo <fpizlo@apple.com> - - Indentation of JSCell.h is wrong - https://bugs.webkit.org/show_bug.cgi?id=101379 - - Rubber stamped by Alexey Proskuryakov. - - Just removed four spaces on a bunch of lines. - - * runtime/JSCell.h: - -2012-11-05 Filip Pizlo <fpizlo@apple.com> - - Indentation of JSObject.h is wrong - https://bugs.webkit.org/show_bug.cgi?id=101313 - - Rubber stamped by Alexey Proskuryakov. - - Just unindented code, since namespace bodies shouldn't be indented. - - * runtime/JSObject.h: - -2012-11-05 Filip Pizlo <fpizlo@apple.com> - - Indentation of JSArray.h is wrong - https://bugs.webkit.org/show_bug.cgi?id=101314 - - Rubber stamped by Alexey Proskuryakov. - - Just removing the indentation inside the namespace body. - - * runtime/JSArray.h: - -2012-11-05 Filip Pizlo <fpizlo@apple.com> - - DFG should not fall down to patchable GetById just because a prototype had things added to it - https://bugs.webkit.org/show_bug.cgi?id=101299 - - Reviewed by Geoffrey Garen. - - This looks like a slight win on V8v7 and SunSpider. - - * bytecode/DFGExitProfile.h: - (JSC::DFG::exitKindToString): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - -2012-11-05 Filip Pizlo <fpizlo@apple.com> - - Get rid of method_check - https://bugs.webkit.org/show_bug.cgi?id=101147 - - Reviewed by Geoffrey Garen. - - op_method_check no longer buys us anything, since get_by_id proto caching - gives just as much profiling information and the DFG inlines monomorphic - proto accesses anyway. - - This also has the potential for a speed-up since it makes parsing of - profiling data easier. No longer do we have to deal with the confusion of - the get_by_id portion of a method_check appearing monomorphic even though - we're really dealing with a bimorphic access (method_check specializes for - one case and get_by_id for another). - - This looks like a 1% speed-up on both SunSpider and V8v7. - - * CMakeLists.txt: - * GNUmakefile.list.am: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * Target.pri: - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::printGetByIdCacheStatus): - (JSC::CodeBlock::dump): - (JSC::CodeBlock::finalizeUnconditionally): - (JSC::CodeBlock::shrinkToFit): - (JSC::CodeBlock::unlinkCalls): - * bytecode/CodeBlock.h: - (JSC::CodeBlock::getCallLinkInfo): - (JSC::CodeBlock::callLinkInfo): - (CodeBlock): - * bytecode/GetByIdStatus.cpp: - (JSC::GetByIdStatus::computeFromLLInt): - * bytecode/MethodCallLinkInfo.cpp: Removed. - * bytecode/MethodCallLinkInfo.h: Removed. - * bytecode/MethodCallLinkStatus.cpp: Removed. - * bytecode/MethodCallLinkStatus.h: Removed. - * bytecode/Opcode.h: - (JSC): - (JSC::padOpcodeName): - * bytecompiler/BytecodeGenerator.cpp: - (JSC): - * bytecompiler/BytecodeGenerator.h: - (BytecodeGenerator): - * bytecompiler/NodesCodegen.cpp: - (JSC::FunctionCallDotNode::emitBytecode): - * dfg/DFGByteCodeParser.cpp: - (JSC::DFG::ByteCodeParser::parseBlock): - * dfg/DFGCapabilities.h: - (JSC::DFG::canCompileOpcode): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - (JSC::PropertyStubCompilationInfo::copyToStubInfo): - (JSC::JIT::privateCompile): - * jit/JIT.h: - (JSC::PropertyStubCompilationInfo::slowCaseInfo): - (PropertyStubCompilationInfo): - (JSC): - (JIT): - * jit/JITPropertyAccess.cpp: - (JSC): - (JSC::JIT::emitSlow_op_get_by_id): - (JSC::JIT::compileGetByIdSlowCase): - * jit/JITPropertyAccess32_64.cpp: - (JSC): - (JSC::JIT::compileGetByIdSlowCase): - * jit/JITStubs.cpp: - (JSC): - * jit/JITStubs.h: - * llint/LowLevelInterpreter.asm: - -2012-11-05 Yuqiang Xian <yuqiang.xian@intel.com> - - Refactor LLInt64 to distinguish the pointer operations from the 64-bit integer operations - https://bugs.webkit.org/show_bug.cgi?id=100321 - - Reviewed by Filip Pizlo. - - We have refactored the MacroAssembler and JIT compilers to distinguish - the pointer operations from the 64-bit integer operations (see bug #99154). - Now we want to do the similar work for LLInt, and the goal is same as - the one mentioned in 99154. - - This is the second part of the modification: in the low level interpreter, - changing the operations on 64-bit integers to use the "<foo>q" instructions. - This also removes some unused/meaningless "<foo>p" instructions. - - * llint/LowLevelInterpreter.asm: - * llint/LowLevelInterpreter.cpp: - (JSC::CLoop::execute): - * llint/LowLevelInterpreter64.asm: - * offlineasm/armv7.rb: - * offlineasm/cloop.rb: - * offlineasm/instructions.rb: - * offlineasm/x86.rb: - -2012-11-05 Filip Pizlo <fpizlo@apple.com> - - Prototype chain caching should check that the path from the base object to the slot base involves prototype hops only - https://bugs.webkit.org/show_bug.cgi?id=101276 - - Reviewed by Gavin Barraclough. - - Changed normalizePrototypeChain() to report an invalid prototype chain if any object is a proxy. - This catches cases where our prototype chain checks would have been insufficient to guard against - newly introduced properties, despecialized properties, or deleted properties in the chain of - objects involved in the access. - - * dfg/DFGRepatch.cpp: - (JSC::DFG::tryCacheGetByID): - (JSC::DFG::tryBuildGetByIDProtoList): - (JSC::DFG::tryCachePutByID): - (JSC::DFG::tryBuildPutByIdList): - * jit/JITStubs.cpp: - (JSC::JITThunks::tryCachePutByID): - (JSC::JITThunks::tryCacheGetByID): - (JSC::DEFINE_STUB_FUNCTION): - * llint/LLIntSlowPaths.cpp: - (JSC::LLInt::LLINT_SLOW_PATH_DECL): - * runtime/Operations.h: - (JSC): - (JSC::normalizePrototypeChain): - -2012-11-05 Dima Gorbik <dgorbik@apple.com> - - Back out controversial changes from Bug 98665. - https://bugs.webkit.org/show_bug.cgi?id=101244 - - Reviewed by David Kilzer. - - Backing out changes from Bug 98665 until further discussions take place on rules for including Platform.h in Assertions.h. - - * API/tests/minidom.c: - * API/tests/testapi.c: - -2012-11-04 Filip Pizlo <fpizlo@apple.com> - - Reduce the verbosity of referring to QNaN in JavaScriptCore - https://bugs.webkit.org/show_bug.cgi?id=101174 - - Reviewed by Geoffrey Garen. - - Introduces a #define QNaN in JSValue.h, and replaces all previous uses of - std::numeric_limits<double>::quiet_NaN() with QNaN. - - * API/JSValueRef.cpp: - (JSValueMakeNumber): - (JSValueToNumber): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::emitFloatTypedArrayGetByVal): - * runtime/CachedTranscendentalFunction.h: - (JSC::CachedTranscendentalFunction::initialize): - * runtime/DateConstructor.cpp: - (JSC::constructDate): - * runtime/DateInstanceCache.h: - (JSC::DateInstanceData::DateInstanceData): - (JSC::DateInstanceCache::reset): - * runtime/ExceptionHelpers.cpp: - (JSC::InterruptedExecutionError::defaultValue): - (JSC::TerminatedExecutionError::defaultValue): - * runtime/JSCell.h: - (JSC::JSValue::getPrimitiveNumber): - * runtime/JSDateMath.cpp: - (JSC::parseDateFromNullTerminatedCharacters): - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - (JSC::JSGlobalData::resetDateCache): - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::parseInt): - (JSC::jsStrDecimalLiteral): - (JSC::toDouble): - (JSC::jsToNumber): - (JSC::parseFloat): - * runtime/JSValue.cpp: - (JSC::JSValue::toNumberSlowCase): - * runtime/JSValue.h: - (JSC): - * runtime/JSValueInlineMethods.h: - (JSC::jsNaN): - * runtime/MathObject.cpp: - (JSC::mathProtoFuncMax): - (JSC::mathProtoFuncMin): - -2012-11-03 Filip Pizlo <fpizlo@apple.com> - - Baseline JIT should use structure watchpoints whenever possible - https://bugs.webkit.org/show_bug.cgi?id=101146 - - Reviewed by Sam Weinig. - - No speed-up yet except on toy programs. I think that it will start to show - speed-ups with https://bugs.webkit.org/show_bug.cgi?id=101147, which this is - a step towards. - - * jit/JIT.h: - (JIT): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdProtoList): - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - (JSC::JIT::addStructureTransitionCheck): - (JSC): - (JSC::JIT::testPrototype): - * jit/JITPropertyAccess32_64.cpp: - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdProtoList): - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - -2012-11-04 Csaba Osztrogonác <ossy@webkit.org> - - [Qt] udis86_itab.c is always regenerated - https://bugs.webkit.org/show_bug.cgi?id=100756 - - Reviewed by Simon Hausmann. - - * DerivedSources.pri: Generate sources to the generated directory. - * disassembler/udis86/differences.txt: - * disassembler/udis86/itab.py: Add --outputDir option. - (UdItabGenerator.__init__): - (genItabH): - (genItabC): - (main): - -2012-11-02 Filip Pizlo <fpizlo@apple.com> - - LLInt 32-bit put_by_val ArrayStorage case should use the right register (t3, not t2) for the index in the publicLength updating path - https://bugs.webkit.org/show_bug.cgi?id=101118 - - Reviewed by Gavin Barraclough. - - * llint/LowLevelInterpreter32_64.asm: - -2012-11-02 Filip Pizlo <fpizlo@apple.com> - - DFG::Node::converToStructureTransitionWatchpoint should take kindly to ArrayifyToStructure - https://bugs.webkit.org/show_bug.cgi?id=101117 - - Reviewed by Gavin Barraclough. - - We have logic to convert ArrayifyToStructure to StructureTransitionWatchpoint, which is awesome, except - that previously convertToStructureTransitionWatchpoint was (a) asserting that it never saw an - ArrayifyToStructure and (b) would incorrectly create a ForwardStructureTransitionWatchpoint if it did. - - * dfg/DFGNode.h: - (JSC::DFG::Node::convertToStructureTransitionWatchpoint): - -2012-11-02 Filip Pizlo <fpizlo@apple.com> - - DFG::SpeculativeJIT::typedArrayDescriptor should use the Float64Array descriptor for Float64Arrays - https://bugs.webkit.org/show_bug.cgi?id=101114 - - Reviewed by Gavin Barraclough. - - As in https://bugs.webkit.org/show_bug.cgi?id=101112, this was only wrong when Float64Array descriptors - hadn't been initialized yet. That happens rarely, but when it does happen, we would crash. - - This would also become much more wrong if we ever put type size info (num bytes, etc) in the descriptor - and used that directly. So it's good to fix it. - - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::typedArrayDescriptor): - -2012-11-02 Filip Pizlo <fpizlo@apple.com> - - JIT::privateCompileGetByVal should use the uint8ClampedArrayDescriptor for compiling accesses to Uint8ClampedArrays - https://bugs.webkit.org/show_bug.cgi?id=101112 - - Reviewed by Gavin Barraclough. - - The only reason why the code was wrong to use uint8ArrayDescriptor instead is that if we're just using - Uint8ClampedArrays then the descriptor for Uint8Array may not have been initialized. - - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompileGetByVal): - -2012-11-02 Mark Hahnenberg <mhahnenberg@apple.com> - - MarkedBlocks should use something other than the mark bits to indicate liveness for newly allocated objects - https://bugs.webkit.org/show_bug.cgi?id=100877 - - Reviewed by Filip Pizlo. - - Currently when we canonicalize cell liveness data in MarkedBlocks, we set the mark bit for every cell in the - block except for those in the free list. This allows us to consider objects that were allocated since the - previous collection to be considered live until they have a chance to be properly marked by the collector. - - If we want to use the mark bits to signify other types of information, e.g. using sticky mark bits for generational - collection, we will have to keep track of newly allocated objects in a different fashion when we canonicalize cell liveness. - - One method would be to allocate a separate set of bits while canonicalizing liveness data. These bits would - track the newly allocated objects in the block separately from those objects who had already been marked. We would - then check these bits, along with the mark bits, when determining liveness. - - * heap/Heap.h: - (Heap): - (JSC::Heap::isLive): We now check for the presence of the newlyAllocated Bitmap. - (JSC): - * heap/MarkedBlock.cpp: - (JSC::MarkedBlock::specializedSweep): We clear the newlyAllocated Bitmap if we're creating a free list. This - will happen if we canonicalize liveness data for some other reason than collection (e.g. forEachCell) and - then start allocating again. - (JSC::SetNewlyAllocatedFunctor::SetNewlyAllocatedFunctor): - (SetNewlyAllocatedFunctor): - (JSC::SetNewlyAllocatedFunctor::operator()): We set the newlyAllocated bits for all the objects - that aren't already marked. We undo the bits for the objects in the free list later in canonicalizeCellLivenessData. - (JSC::MarkedBlock::canonicalizeCellLivenessData): We should never have a FreeListed block with a newlyAllocated Bitmap. - We allocate the new Bitmap, set the bits for all the objects that aren't already marked, and then unset all of the - bits for the items currently in the FreeList. - * heap/MarkedBlock.h: - (JSC::MarkedBlock::clearMarks): We clear the newlyAllocated bitmap if it exists because at this point we don't need it - any more. - (JSC::MarkedBlock::isEmpty): If we have some objects that are newlyAllocated, we are not empty. - (JSC::MarkedBlock::isNewlyAllocated): - (JSC): - (JSC::MarkedBlock::setNewlyAllocated): - (JSC::MarkedBlock::clearNewlyAllocated): - (JSC::MarkedBlock::isLive): We now check the newlyAllocated Bitmap, if it exists, when determining liveness of a cell in - a block that is Marked. - * heap/WeakBlock.cpp: - (JSC::WeakBlock::visit): We need to make sure we don't finalize objects that are in the newlyAllocated Bitmap. - (JSC::WeakBlock::reap): Ditto. - -2012-11-02 Filip Pizlo <fpizlo@apple.com> - - JIT::privateCompileGetByVal should use MacroAssemblerCodePtr::createFromExecutableAddress like JIT::privateCompilePutByVal - https://bugs.webkit.org/show_bug.cgi?id=101109 - - Reviewed by Gavin Barraclough. - - This fixes crashes on ARMv7 resulting from the return address already being tagged with the THUMB2 bit. - - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompileGetByVal): - -2012-11-02 Simon Fraser <simon.fraser@apple.com> - - Enable SUBPIXEL_LAYOUT on Mac - https://bugs.webkit.org/show_bug.cgi?id=101076 - - Reviewed by Dave Hyatt. - - Define ENABLE_SUBPIXEL_LAYOUT and include it in FEATURE_DEFINES. - - * Configurations/FeatureDefines.xcconfig: - -2012-11-02 Michael Saboff <msaboff@apple.com> - - RegExp.prototype.toString Should Produce an 8 bit JSString if possible. - https://bugs.webkit.org/show_bug.cgi?id=101003 - - Reviewed by Geoffrey Garen. - - Took the logic of regExpObjectSource() and created two templated helpers that uses the - source character type when appending to the StringBuilder. - - * runtime/RegExpObject.cpp: - (JSC::appendLineTerminatorEscape): Checks line terminate type to come up with escaped version. - (JSC::regExpObjectSourceInternal): Templated version of original. - (JSC::regExpObjectSource): Wrapper function. - -2012-11-02 Adam Barth <abarth@webkit.org> - - ENABLE(UNDO_MANAGER) is disabled everywhere and is not under active development - https://bugs.webkit.org/show_bug.cgi?id=100711 - - Reviewed by Eric Seidel. - - * Configurations/FeatureDefines.xcconfig: - -2012-11-02 Simon Hausmann <simon.hausmann@digia.com> - - [Qt] Fix build on Windows when Qt is configured with -release - https://bugs.webkit.org/show_bug.cgi?id=101041 - - Reviewed by Jocelyn Turcotte. - - When Qt is configured with -debug or -release, the release/debug build of for example - QtCore is not available by default. For LLIntExtractor we always need to build debug - _and_ release versions, but we do not actually need any Qt libraries nor qtmain(d).lib. - Therefore we can disable all these features but need to keep $$QT.core.includes in the - INCLUDEPATH for some defines from qglobal.h. - - * LLIntOffsetsExtractor.pro: - -2012-11-01 Mark Lam <mark.lam@apple.com> - - A llint workaround for a toolchain issue. - https://bugs.webkit.org/show_bug.cgi?id=101012. - - Reviewed by Michael Saboff. - - * llint/LowLevelInterpreter.asm: - - use a local label to workaround the toolchain issue with undeclared - global labels. - -2012-11-01 Oliver Hunt <oliver@apple.com> - - Remove GlobalObject constant register that is typically unused - https://bugs.webkit.org/show_bug.cgi?id=101005 - - Reviewed by Geoffrey Garen. - - The GlobalObject constant register is frequently allocated even when it - is not used, it is also getting in the way of some other optimisations. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::CodeBlock): - * bytecode/CodeBlock.h: - (CodeBlock): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::BytecodeGenerator): - * dfg/DFGByteCodeParser.cpp: - (JSC::DFG::ByteCodeParser::parseResolveOperations): - -2012-10-31 Filip Pizlo <fpizlo@apple.com> - - DFG optimized string access code should be enabled - https://bugs.webkit.org/show_bug.cgi?id=100825 - - Reviewed by Oliver Hunt. - - - Removes prediction checks from the parser. - - - Fixes the handling of array mode refinement for strings. I.e. we don't do - any refinement - we already know it's going to be a string. We could - revisit this in the future, but for now the DFG lacks the ability to - handle any array modes other than Array::String for string intrinsics, so - this is as good as it gets. - - - Removes uses of isBlahSpeculation for checking if a mode is already - checked. isBlahSpeculation implicitly checks if the SpeculatedType is not - BOTTOM ("empty"), which breaks for checking if a mode is already checked - since a mode may already be "checked" in the sense that we've proven that - the code is unreachable. - - ~1% speed-up on V8v7, mostly from a speed-up on crypto, which uses string - intrinsics in one of the hot functions. - - * bytecode/SpeculatedType.h: - (JSC::speculationChecked): - (JSC): - * dfg/DFGArrayMode.cpp: - (JSC::DFG::ArrayMode::alreadyChecked): - * dfg/DFGByteCodeParser.cpp: - (JSC::DFG::ByteCodeParser::handleIntrinsic): - * dfg/DFGFixupPhase.cpp: - (JSC::DFG::FixupPhase::fixupNode): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt): - -2012-10-31 Filip Pizlo <fpizlo@apple.com> - - Sparse array size threshold should be increased to 100000 - https://bugs.webkit.org/show_bug.cgi?id=100827 - - Reviewed by Oliver Hunt. - - This enables the use of contiguous arrays in programs that previously - couldn't use them. And I so far can't see any examples of this being - a downside. To the extent that there is a downside, it ought to be - addressed by GC: https://bugs.webkit.org/show_bug.cgi?id=100828 - - * runtime/ArrayConventions.h: - (JSC): - -2012-10-31 Mark Lam <mark.lam@apple.com> - - C++ llint 64-bit backend needs to zero extend results of int32 operations. - https://bugs.webkit.org/show_bug.cgi?id=100899. - - Reviewed by Filip Pizlo. - - llint asm instructions ending in "i" for a 64-bit machine expects the - high 32-bit of registers to be zero'ed out when a 32-bit instruction - writes into a register. Fixed the C++ llint to honor this. - - Fixed the index register used in BaseIndex addressing to be of size - intptr_t as expected. - - Updated CLoopRegister to handle different endiannesss configurations. - - * llint/LowLevelInterpreter.cpp: - (JSC::CLoopRegister::clearHighWord): - - new method to clear the high 32-bit of a 64-bit register. - It's a no-op for the 32-bit build. - (CLoopRegister): - - CLoopRegister now takes care of packing and byte endianness order. - (JSC::CLoop::execute): - Added an assert. - * offlineasm/cloop.rb: - - Add calls to clearHighWord() wherever needed. - -2012-10-31 Mark Lam <mark.lam@apple.com> - - A JSC printf (support for %J+s and %b). - https://bugs.webkit.org/show_bug.cgi?id=100566. - - Reviewed by Michael Saboff. - - Added VMInspector::printf(), fprintf(), sprintf(), and snprintf(). - - %b prints ints as boolean TRUE (non-zero) or FALSE (zero). - - %Js prints a WTF::String* like a %s prints a char*. - Also works for 16bit WTF::Strings (prints wchar_t* using %S). - - '+' is a modifier meaning 'use verbose mode', and %J+s is an example - of its use. - - * JavaScriptCore.xcodeproj/project.pbxproj: - * interpreter/VMInspector.cpp: - (FormatPrinter): - (JSC::FormatPrinter::~FormatPrinter): - (JSC::FormatPrinter::print): - (JSC::FormatPrinter::printArg): - (JSC::FormatPrinter::printWTFString): - (JSC::FileFormatPrinter::FileFormatPrinter): - (JSC::FileFormatPrinter::printArg): - (JSC::StringFormatPrinter::StringFormatPrinter): - (JSC::StringFormatPrinter::printArg): - (JSC::StringNFormatPrinter::StringNFormatPrinter): - (JSC::StringNFormatPrinter::printArg): - (JSC::VMInspector::fprintf): - (JSC::VMInspector::printf): - (JSC::VMInspector::sprintf): - (JSC::VMInspector::snprintf): - * interpreter/VMInspector.h: - (VMInspector): - -2012-10-31 Mark Lam <mark.lam@apple.com> - - 64-bit llint PC offset can be negative: using an unsigned shift is a bug. - https://bugs.webkit.org/show_bug.cgi?id=100896. - - Reviewed by Filip Pizlo. - - Fixed the PC offset divisions in the 64-bit llint asm to use rshift instead of urshift. - - * llint/LowLevelInterpreter64.asm: - -2012-10-30 Yuqiang Xian <yuqiang.xian@intel.com> - - glsl-function-atan.html WebGL conformance test fails after https://bugs.webkit.org/show_bug.cgi?id=99154 - https://bugs.webkit.org/show_bug.cgi?id=100789 - - Reviewed by Filip Pizlo. - - We accidently missed a bitwise double to int64 conversion. - - * dfg/DFGSpeculativeJIT.h: - (JSC::DFG::SpeculativeJIT::silentFill): - -2012-10-30 Joseph Pecoraro <pecoraro@apple.com> - - [Mac] Sync up FeatureDefine Configuration Files - https://bugs.webkit.org/show_bug.cgi?id=100171 - - Reviewed by David Kilzer. - - Follow up to better coordinate with iOS feature defines. Make: - - - ENABLE_FILTERS always on - - ENABLE_INPUT_* iphonesimulator values point to the iphoneos values - - * Configurations/FeatureDefines.xcconfig: - -2012-10-30 Joseph Pecoraro <pecoraro@apple.com> - - [Mac] Sync up FeatureDefine Configuration Files - https://bugs.webkit.org/show_bug.cgi?id=100171 - - Reviewed by David Kilzer. - - Ensure an identical FeatureDefine files across all projects. Changes: - - - ENABLE_CSS_BOX_DECORATION_BREAK should be in all - - ENABLE_PDFKIT_PLUGIN should be in all - - ENABLE_RESOLUTION_MEDIA_QUERY should be in all - - ENABLE_ENCRYPTED_MEDIA should be in all - - ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING with corrected value - - Some alphabetical ordering cleanup - - * Configurations/FeatureDefines.xcconfig: - -2012-10-30 Mark Hahnenberg <mhahnenberg@apple.com> - - Arrays can change IndexingType in the middle of sorting - https://bugs.webkit.org/show_bug.cgi?id=100773 - - Reviewed by Filip Pizlo. - - Instead of giving up, we just fetch the appropriate vector based on the current - IndexingType of the array. - - * runtime/JSArray.cpp: - (JSC::JSArray::sortVector): - * runtime/JSObject.h: - (JSObject): - (JSC::JSObject::currentIndexingData): - (JSC::JSObject::currentRelevantLength): - -2012-10-29 Anders Carlsson <andersca@apple.com> - - Build WebKit as C++11 on Mac - https://bugs.webkit.org/show_bug.cgi?id=100720 - - Reviewed by Daniel Bates. - - * Configurations/Base.xcconfig: - Add CLANG_CXX_LANGUAGE_STANDARD=gnu++0x. - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::generate): - (JSC::BytecodeGenerator::pushFinallyContext): - (JSC::BytecodeGenerator::beginSwitch): - * llint/LLIntOffsetsExtractor.cpp: - * runtime/Identifier.cpp: - (JSC::Identifier::add8): - * runtime/Identifier.h: - (JSC::Identifier::add): - * runtime/JSONObject.cpp: - (JSC::appendStringToStringBuilder): - * runtime/StringPrototype.cpp: - (JSC::replaceUsingStringSearch): - Add static_casts to prevent implicit type conversions in non-constant initializer lists. - -2012-10-28 Mark Rowe <mrowe@apple.com> - - Simplify Xcode configuration settings that used to vary between OS versions. - - Reviewed by Dan Bernstein. - - * Configurations/Base.xcconfig: - * Configurations/DebugRelease.xcconfig: - * Configurations/JavaScriptCore.xcconfig: - -2012-10-28 Mark Rowe <mrowe@apple.com> - - Remove references to unsupported OS and Xcode versions. - - Reviewed by Anders Carlsson. - - * Configurations/Base.xcconfig: - * Configurations/CompilerVersion.xcconfig: Removed. - * Configurations/DebugRelease.xcconfig: - * Configurations/Version.xcconfig: - * JavaScriptCore.xcodeproj/project.pbxproj: - -2012-10-29 Michael Saboff <msaboff@apple.com> - - Non-special escape character sequences cause JSC::Lexer::parseString to create 16 bit strings - https://bugs.webkit.org/show_bug.cgi?id=100576 - - Reviewed by Darin Adler. - - Changed singleEscape() processing to be based on a lookup of a static table. The table - covers ASCII characters SPACE through DEL. If a character can be a single character escape, - then the table provides the non-zero result of that escape. Updated the result of - singleEscape to be an LChar to make the table as small as possible. - Added a new test fast/js/normal-character-escapes-in-string-literals.html to validated - the behavior. - - * parser/Lexer.cpp: - (JSC::singleEscape): - (JSC::Lexer::parseString): - (JSC::Lexer::parseStringSlowCase): - -2012-10-29 Enrica Casucci <enrica@apple.com> - - Add ENABLE_USERSELECT_ALL feature flag. - https://bugs.webkit.org/show_bug.cgi?id=100559 - - Reviewed by Eric Seidel. - - * Configurations/FeatureDefines.xcconfig: - -2012-10-28 Filip Pizlo <fpizlo@apple.com> - - DFG should be able to emit effectful structure checks - https://bugs.webkit.org/show_bug.cgi?id=99260 - - Reviewed by Oliver Hunt. - - This change allows us to find out if an array access that has gone polymorphic - is operating over known structures - i.e. the primordial array structures of the - global object that the code block containing the array access belongs to. We - term this state "OriginalArray" for short. The fact that the access has gone - polymorphic means that the array profile will not be able to report the set of - structures it had seen - but if it can tell us that all of the structures were - primordial then it just so happens that we can deduce what the structure set - would have been by just querying the code block's global object. This allows us - to emit an ArrayifyToStructure instead of an Arrayify if we find that we need to - do conversions. The fast path of an ArrayifyToStructure is exactly like the fast - path of a CheckStructure and is mostly subject to the same optimizations. It - also burns one fewer registers. - - Essentially the notion of OriginalArray is a super cheap way of getting the - array profile to tell us a structure set instead of a singleton structure. - Currently, the array profile can only tell us the structure seen at an array - access if there was exactly one structure. If there were multiple structures, it - won't tell us anything other than the array modes and other auxiliary profiling - data (whether there were stores to holes, for example). With OriginalArray, we - cheaply get a structure set if all of the structures were primordial for the - code block's global object, since in that case the array mode set (ArrayModes) - can directly tell us the structure set. In the future, we might consider adding - complete structure sets to the array profiles, but I suspect that we would hit - diminishing returns if we did so - it would only help if we have array accesses - that are both polymorphic and are cross-global-object accesses (rare) or if the - arrays had named properties or other structure transitions that are unrelated to - indexing type (also rare). - - This also does away with Arrayify (and the new ArrayifyToStructure) returning - the butterfly pointer. This turns out to be faster and easier to CSE. - - And, this also changes constant folding to be able to eliminate CheckStructure, - ForwardCheckStructure, and ArrayifyToStructure in addition to being able to - transform them into structure transition watchpoints. This is great for - ArrayifyToStructure because then CSE and CFA know that there is no side effect. - Converting CheckStructure and ForwardCheckStructure to also behave this way is - just a matter of elegance. - - This has no performance impact right now. It's intended to alleviate some of the - regressions seen in the early implementation of - https://bugs.webkit.org/show_bug.cgi?id=98606. - - * bytecode/ArrayProfile.cpp: - (JSC::ArrayProfile::computeUpdatedPrediction): - * bytecode/ArrayProfile.h: - (JSC): - (JSC::ArrayProfile::ArrayProfile): - (ArrayProfile): - (JSC::ArrayProfile::usesOriginalArrayStructures): - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::updateAllPredictionsAndCountLiveness): - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::execute): - * dfg/DFGArrayMode.cpp: - (JSC::DFG::ArrayMode::fromObserved): - (JSC::DFG::ArrayMode::alreadyChecked): - (JSC::DFG::arrayClassToString): - * dfg/DFGArrayMode.h: - (JSC::DFG::ArrayMode::withProfile): - (JSC::DFG::ArrayMode::isJSArray): - (ArrayMode): - (JSC::DFG::ArrayMode::isJSArrayWithOriginalStructure): - (JSC::DFG::ArrayMode::supportsLength): - (JSC::DFG::ArrayMode::arrayModesWithIndexingShape): - * dfg/DFGByteCodeParser.cpp: - (JSC::DFG::ByteCodeParser::getArrayMode): - (JSC::DFG::ByteCodeParser::getArrayModeAndEmitChecks): - (JSC::DFG::ByteCodeParser::handleGetByOffset): - * dfg/DFGCSEPhase.cpp: - (JSC::DFG::CSEPhase::checkStructureElimination): - (JSC::DFG::CSEPhase::structureTransitionWatchpointElimination): - (JSC::DFG::CSEPhase::getPropertyStorageLoadElimination): - (JSC::DFG::CSEPhase::checkArrayElimination): - (JSC::DFG::CSEPhase::getScopeRegistersLoadElimination): - * dfg/DFGConstantFoldingPhase.cpp: - (JSC::DFG::ConstantFoldingPhase::foldConstants): - * dfg/DFGFixupPhase.cpp: - (JSC::DFG::FixupPhase::fixupNode): - (JSC::DFG::FixupPhase::checkArray): - * dfg/DFGNode.h: - (JSC::DFG::Node::hasStructure): - (JSC::DFG::Node::hasArrayMode): - (JSC::DFG::Node::arrayMode): - * dfg/DFGNodeType.h: - (DFG): - * dfg/DFGPredictionPropagationPhase.cpp: - (JSC::DFG::PredictionPropagationPhase::propagate): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode): - (JSC::DFG::SpeculativeJIT::arrayify): - * dfg/DFGSpeculativeJIT.h: - (SpeculativeJIT): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * runtime/JSGlobalObject.h: - (JSC::JSGlobalObject::isOriginalArrayStructure): - * runtime/Structure.cpp: - (JSC::Structure::nonPropertyTransition): - -2012-10-28 Filip Pizlo <fpizlo@apple.com> - - There should not be blind spots in array length array profiling - https://bugs.webkit.org/show_bug.cgi?id=100620 - - Reviewed by Oliver Hunt. - - I don't think this has any performance impact. But it's good to not have random - programs occasionally emit a GetById for array length accesses. - - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::privateCompilePatchGetArrayLength): - * jit/JITPropertyAccess32_64.cpp: - (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::privateCompilePatchGetArrayLength): - -2012-10-28 Filip Pizlo <fpizlo@apple.com> - - Unreviewed, make always-true enum-to-int comparisons use casts. - - * dfg/DFGFPRInfo.h: - (JSC::DFG::FPRInfo::debugName): - * dfg/DFGGPRInfo.h: - (JSC::DFG::JSValueSource::tagGPR): - (JSC::DFG::GPRInfo::toIndex): - (JSC::DFG::GPRInfo::debugName): - * runtime/JSTypeInfo.h: - (JSC::TypeInfo::TypeInfo): - -2012-10-27 Filip Pizlo <fpizlo@apple.com> - - OSR exit compilation should defend against argument recoveries from code blocks that are no longer on the inline stack - https://bugs.webkit.org/show_bug.cgi?id=100601 - - Reviewed by Oliver Hunt. - - This happened to me while I was fixing bugs for https://bugs.webkit.org/show_bug.cgi?id=100599. - I'm not sure how to reproduce this. - - * dfg/DFGAssemblyHelpers.h: - (JSC::DFG::AssemblyHelpers::baselineCodeBlockFor): - (AssemblyHelpers): - * dfg/DFGOSRExitCompiler32_64.cpp: - (JSC::DFG::OSRExitCompiler::compileExit): - * dfg/DFGOSRExitCompiler64.cpp: - (JSC::DFG::OSRExitCompiler::compileExit): - -2012-10-27 Filip Pizlo <fpizlo@apple.com> - - DFG::Array::Mode needs to be cleaned up - https://bugs.webkit.org/show_bug.cgi?id=100599 - - Reviewed by Oliver Hunt. - - Turn the previous massive Array::Mode enum into a class that contains four - fields, the type, whether it's a JSArray, the level of speculation, and the - kind of conversion to perform. - - No performance or behavioral change. - - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::execute): - * dfg/DFGArgumentsSimplificationPhase.cpp: - (JSC::DFG::ArgumentsSimplificationPhase::run): - * dfg/DFGArrayMode.cpp: - (JSC::DFG::ArrayMode::fromObserved): - (JSC::DFG::ArrayMode::refine): - (JSC::DFG::ArrayMode::alreadyChecked): - (JSC::DFG::arrayTypeToString): - (JSC::DFG::arrayClassToString): - (DFG): - (JSC::DFG::arraySpeculationToString): - (JSC::DFG::arrayConversionToString): - (JSC::DFG::ArrayMode::toString): - * dfg/DFGArrayMode.h: - (DFG): - (ArrayMode): - (JSC::DFG::ArrayMode::ArrayMode): - (JSC::DFG::ArrayMode::type): - (JSC::DFG::ArrayMode::arrayClass): - (JSC::DFG::ArrayMode::speculation): - (JSC::DFG::ArrayMode::conversion): - (JSC::DFG::ArrayMode::asWord): - (JSC::DFG::ArrayMode::fromWord): - (JSC::DFG::ArrayMode::withSpeculation): - (JSC::DFG::ArrayMode::usesButterfly): - (JSC::DFG::ArrayMode::isJSArray): - (JSC::DFG::ArrayMode::isInBounds): - (JSC::DFG::ArrayMode::mayStoreToHole): - (JSC::DFG::ArrayMode::isOutOfBounds): - (JSC::DFG::ArrayMode::isSlowPut): - (JSC::DFG::ArrayMode::canCSEStorage): - (JSC::DFG::ArrayMode::lengthNeedsStorage): - (JSC::DFG::ArrayMode::modeForPut): - (JSC::DFG::ArrayMode::isSpecific): - (JSC::DFG::ArrayMode::supportsLength): - (JSC::DFG::ArrayMode::benefitsFromStructureCheck): - (JSC::DFG::ArrayMode::doesConversion): - (JSC::DFG::ArrayMode::arrayModesThatPassFiltering): - (JSC::DFG::ArrayMode::operator==): - (JSC::DFG::ArrayMode::operator!=): - (JSC::DFG::ArrayMode::arrayModesWithIndexingShape): - (JSC::DFG::canCSEStorage): - (JSC::DFG::lengthNeedsStorage): - * dfg/DFGByteCodeParser.cpp: - (JSC::DFG::ByteCodeParser::getArrayMode): - (JSC::DFG::ByteCodeParser::getArrayModeAndEmitChecks): - (JSC::DFG::ByteCodeParser::handleIntrinsic): - (JSC::DFG::ByteCodeParser::parseBlock): - * dfg/DFGCSEPhase.cpp: - (JSC::DFG::CSEPhase::getArrayLengthElimination): - (JSC::DFG::CSEPhase::checkArrayElimination): - (JSC::DFG::CSEPhase::getIndexedPropertyStorageLoadElimination): - (JSC::DFG::CSEPhase::performNodeCSE): - * dfg/DFGConstantFoldingPhase.cpp: - (JSC::DFG::ConstantFoldingPhase::foldConstants): - * dfg/DFGFixupPhase.cpp: - (JSC::DFG::FixupPhase::fixupNode): - (JSC::DFG::FixupPhase::checkArray): - (JSC::DFG::FixupPhase::blessArrayOperation): - * dfg/DFGGraph.cpp: - (JSC::DFG::Graph::dump): - * dfg/DFGGraph.h: - (JSC::DFG::Graph::byValIsPure): - * dfg/DFGNode.h: - (JSC::DFG::Node::arrayMode): - (JSC::DFG::Node::setArrayMode): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::typedArrayDescriptor): - (JSC::DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode): - (JSC::DFG::SpeculativeJIT::checkArray): - (JSC::DFG::SpeculativeJIT::arrayify): - (JSC::DFG::SpeculativeJIT::compileGetByValOnString): - (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray): - (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray): - (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray): - (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage): - (JSC::DFG::SpeculativeJIT::compileGetByValOnArguments): - (JSC::DFG::SpeculativeJIT::compileGetArgumentsLength): - (JSC::DFG::SpeculativeJIT::compileGetArrayLength): - (JSC::DFG::SpeculativeJIT::temporaryRegisterForPutByVal): - * dfg/DFGSpeculativeJIT.h: - (JSC::DFG::SpeculativeJIT::putByValWillNeedExtraRegister): - (SpeculativeJIT): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - -2012-10-27 Dan Bernstein <mitz@apple.com> - - REAL_PLATFORM_NAME build setting is no longer needed - https://bugs.webkit.org/show_bug.cgi?id=100587 - - Reviewed by Mark Rowe. - - Removed the definition of REAL_PLATFORM_NAME and replaced references to it with references - to PLATFORM_NAME. - - * Configurations/Base.xcconfig: - * Configurations/CompilerVersion.xcconfig: - * Configurations/DebugRelease.xcconfig: - * Configurations/FeatureDefines.xcconfig: - * Configurations/JSC.xcconfig: - * Configurations/JavaScriptCore.xcconfig: - * Configurations/ToolExecutable.xcconfig: - -2012-10-25 Filip Pizlo <fpizlo@apple.com> - - Forward OSR calculation is wrong in the presence of multiple SetLocals, or a mix of SetLocals and Phantoms - https://bugs.webkit.org/show_bug.cgi?id=100461 - - Reviewed by Oliver Hunt and Gavin Barraclough. - - This does a couple of things. First, it removes the part of the change in r131822 that made the forward - OSR exit calculator capable of handling multiple SetLocals. That change was wrong, because it would - blindly assume that all SetLocals had the same ValueRecovery, and would ignore the possibility that if - there is no value recovery then a ForwardCheckStructure on the first SetLocal would not know how to - recover the state associated with the second SetLocal. Then, it introduces the invariant that any bytecode - op that decomposes into multiple SetLocals must first emit dead SetLocals as hints and then emit a second - set of SetLocals to actually do the setting of the locals. This means that if a ForwardCheckStructure (or - any other hoisted forward speculation) is inserted, it will always be inserted on the second set of - SetLocals (since hoisting only touches the live ones), at which point OSR will already know about the - mov hints implied by the first set of (dead) SetLocals. This gives us the behavior we wanted, namely, that - a ForwardCheckStructure applied to a variant set by a resolve_with_base-like operation can correctly do a - forward exit while also ensuring that prior to exiting we set the appropriate locals. - - * dfg/DFGByteCodeParser.cpp: - (JSC::DFG::ByteCodeParser::parseBlock): - * dfg/DFGOSRExit.cpp: - (JSC::DFG::OSRExit::OSRExit): - * dfg/DFGOSRExit.h: - (OSRExit): - * dfg/DFGOSRExitCompiler.cpp: - * dfg/DFGOSRExitCompiler32_64.cpp: - (JSC::DFG::OSRExitCompiler::compileExit): - * dfg/DFGOSRExitCompiler64.cpp: - (JSC::DFG::OSRExitCompiler::compileExit): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::convertLastOSRExitToForward): - -2012-10-26 Simon Hausmann <simon.hausmann@digia.com> - - [Qt] Fix the LLInt build on Windows - https://bugs.webkit.org/show_bug.cgi?id=97648 - - Reviewed by Tor Arne Vestbø. - - The main change for the port on Windows is changing the way offsets are extracted - and the LLIntAssembly.h is generated to accomodate release and debug configurations. - - Firstly the LLIntOffsetsExtractor binary is now built as-is (no DESTDIR set) and - placed into debug\LLIntOffsetsExtractor.exe and release\LLIntOffsetsExtractor.exe - on Windows debug_and_release builds. On other patforms it remainds in the regular - out directory. - - Secondly the LLIntAssembly.h files must be different for different build types, - so the LLIntAssembly.h generator in DerivedSources.pri operates no on the extractor - binary files as input. Using a simple exists() check we verify the presence of either - a regular, a debug\LLIntOffsetsExtractor and a release\LLIntOffsetsExtractor binary - and process all of them. The resulting assembly files consequently end up in - generated\debug\LLIntAssembly.h and generated\release\LLIntAssembly.h. - - In Target.pri we have to also make sure that those directories are in the include - path according to the release or debug configuration. - - Lastly a small tweak - swapping WTF.pri and JSC.pri inclusions - in the - LLIntOffsetsExtractor build was needed to make sure that we include - JavaScriptCore/config.h instead of WTF/config.h, required to fix the - build issues originally pasted in bug #97648. - - * DerivedSources.pri: - * JavaScriptCore.pro: - * LLIntOffsetsExtractor.pro: - * Target.pri: - -2012-10-26 Gabor Ballabas <gaborb@inf.u-szeged.hu> - - [Qt] Enable JSC's disassembler on x86, x86_64 Linux - https://bugs.webkit.org/show_bug.cgi?id=100386 - - Reviewed by Simon Hausmann. - - It works fine on Linux x86, x86_64 just needs to be enabled in the - QtWebKit build system. - - * DerivedSources.pri: - * JavaScriptCore.pri: - * Target.pri: - -2012-10-26 Thiago Marcos P. Santos <thiago.santos@intel.com> - - Add feature flags for CSS Device Adaptation - https://bugs.webkit.org/show_bug.cgi?id=95960 - - Reviewed by Kenneth Rohde Christiansen. - - * Configurations/FeatureDefines.xcconfig: - -2012-10-26 Simon Hausmann <simon.hausmann@digia.com> - - [WIN] Make LLInt offsets extractor work on Windows - https://bugs.webkit.org/show_bug.cgi?id=100369 - - Reviewed by Kenneth Rohde Christiansen. - - Open the input file explicitly in binary mode to prevent ruby/Windows from thinking that - it's a text mode file that needs even new line conversions. The binary mode parameter is - ignored on other platforms. - - * offlineasm/offsets.rb: - -2012-10-25 Michael Saboff <msaboff@apple.com> - - SymbolTableIndexHashTraits::needsDestruction should be set to true - https://bugs.webkit.org/show_bug.cgi?id=100437 - - Reviewed by Mark Hahnenberg. - - For correctness, set SymbolTableIndexHashTraits::needsDestruction to true since SymbolTableEntry's do - need to have their destructor called due to the possibility of rare data. - - * runtime/SymbolTable.h: - (SymbolTableIndexHashTraits): - -2012-10-25 Filip Pizlo <fpizlo@apple.com> - - DFG Arrayify elimination should replace it with GetButterfly rather than Phantom - https://bugs.webkit.org/show_bug.cgi?id=100441 - - Reviewed by Oliver Hunt and Gavin Barraclough. - - Made array profiler's to-string helper behave correctly. - - Made Arrayify elimination do the right thing (convert to GetButterfly). - - Made CFA's interference analysis track clobbered array modes correctly, mostly by - simplifying the machinery. - - * bytecode/ArrayProfile.cpp: - (JSC::arrayModesToString): - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::execute): - * dfg/DFGAbstractValue.h: - (JSC::DFG::AbstractValue::clobberArrayModes): - (AbstractValue): - * dfg/DFGConstantFoldingPhase.cpp: - (JSC::DFG::ConstantFoldingPhase::foldConstants): - -2012-10-25 Filip Pizlo <fpizlo@apple.com> - - REGRESSION (r131793-r131826): Crash going to wikifonia.org - https://bugs.webkit.org/show_bug.cgi?id=100281 - - Reviewed by Oliver Hunt. - - Restore something that got lost in the resolve refactoring: the ability to give up on life if - we see a resolve of 'arguments'. - - * runtime/JSScope.cpp: - (JSC::JSScope::resolveContainingScopeInternal): - -2012-10-25 Dominik Röttsches <dominik.rottsches@intel.com> - - Conditionalize XHR timeout support - https://bugs.webkit.org/show_bug.cgi?id=100356 - - Reviewed by Adam Barth. - - Adding XHR_TIMEOUT feature to conditionalize this on ports without network backend support. - - * Configurations/FeatureDefines.xcconfig: - -2012-10-25 Michael Saboff <msaboff@apple.com> - - REGRESSION (r131836): failures in list styles tests on EFL, GTK - https://bugs.webkit.org/show_bug.cgi?id=99824 - - Reviewed by Oliver Hunt. - - Saved start of string since it is modified by call convertUTF8ToUTF16(). - - * API/JSStringRef.cpp: - (JSStringCreateWithUTF8CString): - -2012-10-24 Filip Pizlo <fpizlo@apple.com> - - DFG NewArrayBuffer node should keep its data in a structure on the side to free up one of the opInfos - https://bugs.webkit.org/show_bug.cgi?id=100328 - - Reviewed by Oliver Hunt. - - * dfg/DFGByteCodeParser.cpp: - (JSC::DFG::ByteCodeParser::parseBlock): - * dfg/DFGGraph.h: - (Graph): - * dfg/DFGNode.h: - (NewArrayBufferData): - (DFG): - (JSC::DFG::Node::newArrayBufferData): - (Node): - (JSC::DFG::Node::startConstant): - (JSC::DFG::Node::numConstants): - -2012-10-25 Mark Lam <mark.lam@apple.com> - - Update the C++ llint to work with the latest op_resolve... changes. - https://bugs.webkit.org/show_bug.cgi?id=100345. - - Reviewed by Oliver Hunt. - - * llint/LowLevelInterpreter.cpp: - (JSC::CLoop::execute): - - emit opcode name as label when not using COMPUTED_GOTOs. The new op_resolve - opcodes have jumps to these labels. - - declare all opcode labels as UNUSED_LABEL()s to keep the compiler happy - for opcodes that are not referenced by anyone. - * offlineasm/asm.rb: - - strip llint_ prefix from opcode names used as labels. - -2012-10-24 Yuqiang Xian <yuqiang.xian@intel.com> - - Refactor LLInt64 to distinguish the pointer operations from the 64-bit integer operations - https://bugs.webkit.org/show_bug.cgi?id=100321 - - Reviewed by Filip Pizlo. - - We have refactored the MacroAssembler and JIT compilers to distinguish - the pointer operations from the 64-bit integer operations (see bug #99154). - Now we want to do the similar work for LLInt, and the goal is same as - the one mentioned in 99154. - - This is the first part of the modification: in the offline assembler, - adding the support of the "<foo>q" instructions which will be used for - 64-bit integer operations. - - * llint/LowLevelInterpreter.cpp: - (JSC::CLoop::execute): - * offlineasm/cloop.rb: - * offlineasm/instructions.rb: - * offlineasm/x86.rb: - -2012-10-24 Filip Pizlo <fpizlo@apple.com> - - DFG compileBlahBlahByVal methods for Contiguous and ArrayStorage have only one caller and should be removed - https://bugs.webkit.org/show_bug.cgi?id=100311 - - Reviewed by Mark Hahnenberg. - - Just trying to simplify things before I make them more complicated again. - - * dfg/DFGSpeculativeJIT.h: - (SpeculativeJIT): - (JSC::DFG::SpeculativeJIT::temporaryRegisterForPutByVal): - * dfg/DFGSpeculativeJIT32_64.cpp: - (DFG): - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (DFG): - (JSC::DFG::SpeculativeJIT::compile): - -2012-10-23 Andreas Kling <kling@webkit.org> - - CodeBlock: Give m_putToBaseOperations an inline capacity. - <http://webkit.org/b/100190> - <rdar://problem/12562466> - - Reviewed by Oliver Hunt. - - Since the CodeBlock constructor always inserts a single PutToBaseOperation, but there's no - guarantee that more will follow, give the m_putToBaseOperations vector an inline capacity of 1. - There are 4009 of these Vectors on Membuster3, and only 126 of them have more than a single entry. - - This change yields a 1.90MB reduction in memory usage. - - * bytecode/CodeBlock.h: - (CodeBlock): - -2012-10-23 Christophe Dumez <christophe.dumez@intel.com> - - Regression(r132143): Assertion hit in JSC::Interpreter::StackPolicy::StackPolicy(JSC::Interpreter&, const WTF::StackBounds&) - https://bugs.webkit.org/show_bug.cgi?id=100109 - - Reviewed by Oliver Hunt. - - Fix possible integer overflow in StackPolicy constructor by - using size_t type instead of int for stack sizes. The value - returned by StackBounds::size() is of type size_t but was - assigned to an int, which may overflow. - - * interpreter/Interpreter.cpp: - (JSC): - (JSC::Interpreter::StackPolicy::StackPolicy): - -2012-10-23 Carlos Garcia Campos <cgarcia@igalia.com> - - Unreviewed. Fix make distcheck. - - * GNUmakefile.list.am: Add missing header file. - -2012-10-23 Mark Lam <mark.lam@apple.com> - - Make topCallFrame reliable. - https://bugs.webkit.org/show_bug.cgi?id=98928. - - Reviewed by Geoffrey Garen. - - - VM entry points and the GC now uses topCallFrame. - - The callerFrame value in CallFrames are now always the previous - frame on the stack, except for the first frame which has a - callerFrame of 0 (not counting the HostCallFrameFlag). - Hence, we can now traverse every frame on the stack all the way - back to the first frame. - - GlobalExec's will no longer be used as the callerFrame values in - call frames. - - Added fences and traps for debugging the JSStack in debug builds. - - * bytecode/SamplingTool.h: - (SamplingTool): - (JSC::SamplingTool::CallRecord::CallRecord): - * dfg/DFGOperations.cpp: - - Fixed 2 DFG helper functions to flush topCallFrame as expected. - * dfg/DFGSpeculativeJIT.h: - (JSC::DFG::SpeculativeJIT::prepareForExternalCall): - * interpreter/CallFrame.h: - (JSC::ExecState::callerFrameNoFlags): - (ExecState): - (JSC::ExecState::argIndexForRegister): - (JSC::ExecState::getArgumentUnsafe): - * interpreter/CallFrameClosure.h: - (CallFrameClosure): - * interpreter/Interpreter.cpp: - (JSC): - (JSC::eval): - (JSC::Interpreter::Interpreter): - (JSC::Interpreter::throwException): - (JSC::Interpreter::execute): - (JSC::Interpreter::executeCall): - (JSC::Interpreter::executeConstruct): - (JSC::Interpreter::prepareForRepeatCall): - (JSC::Interpreter::endRepeatCall): - * interpreter/Interpreter.h: - (JSC): - (Interpreter): - * interpreter/JSStack.cpp: - (JSC::JSStack::JSStack): - (JSC::JSStack::gatherConservativeRoots): - (JSC::JSStack::disableErrorStackReserve): - * interpreter/JSStack.h: - (JSC): - (JSStack): - (JSC::JSStack::installFence): - (JSC::JSStack::validateFence): - (JSC::JSStack::installTrapsAfterFrame): - * interpreter/JSStackInlines.h: Added. - (JSC): - (JSC::JSStack::getTopOfFrame): - (JSC::JSStack::getTopOfStack): - (JSC::JSStack::getStartOfFrame): - (JSC::JSStack::pushFrame): - (JSC::JSStack::popFrame): - (JSC::JSStack::generateFenceValue): - (JSC::JSStack::installFence): - (JSC::JSStack::validateFence): - (JSC::JSStack::installTrapsAfterFrame): - * jit/JITStubs.cpp: - (JSC::jitCompileFor): - (JSC::lazyLinkFor): - - Set frame->codeBlock to 0 for both the above because they are called - with partially intitialized frames (cb uninitialized), but may - trigger a GC. - (JSC::DEFINE_STUB_FUNCTION): - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - -2012-10-22 Filip Pizlo <fpizlo@apple.com> - - DFG::Array::Undecided should be called DFG::Array::SelectUsingPredictions - https://bugs.webkit.org/show_bug.cgi?id=100052 - - Reviewed by Oliver Hunt. - - No functional change, just renaming. It's a clearer name that more accurately - reflects the meaning, and it eliminates the namespace confusion that will happen - with the Undecided indexing type in https://bugs.webkit.org/show_bug.cgi?id=98606 - - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::execute): - * dfg/DFGArrayMode.cpp: - (JSC::DFG::fromObserved): - (JSC::DFG::refineArrayMode): - (JSC::DFG::modeAlreadyChecked): - (JSC::DFG::modeToString): - * dfg/DFGArrayMode.h: - (JSC::DFG::canCSEStorage): - (JSC::DFG::modeIsSpecific): - (JSC::DFG::modeSupportsLength): - (JSC::DFG::benefitsFromStructureCheck): - * dfg/DFGFixupPhase.cpp: - (JSC::DFG::FixupPhase::fixupNode): - (JSC::DFG::FixupPhase::blessArrayOperation): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::arrayify): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - -2012-10-22 Mark Lam <mark.lam@apple.com> - - Change stack recursion checks to be based on stack availability. - https://bugs.webkit.org/show_bug.cgi?id=99872. - - Reviewed by Filip Pizlo and Geoffrey Garen. - - - Remove m_reentryDepth, ThreadStackType which are now obsolete. - - Replaced the reentryDepth checks with a StackBounds check. - - Added the Interpreter::StackPolicy class to compute a reasonable - stack capacity requirement given the native stack that the - interpreter is executing on at that time. - - Reserved an amount of JSStack space for the use of error handling - and enable its use (using Interpreter::ErrorHandlingMode) when - we're about to throw or report an exception. - - Interpreter::StackPolicy also allows more native stack space - to be used when in ErrorHandlingMode. This is needed in the case - of native stack overflows. - - Fixed the parser so that it throws a StackOverflowError instead of - a SyntaxError when it encounters a stack overflow. - - * API/JSContextRef.cpp: - (JSContextGroupCreate): - (JSGlobalContextCreateInGroup): - * JavaScriptCore.order: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * interpreter/Interpreter.cpp: - (JSC::Interpreter::ErrorHandlingMode::ErrorHandlingMode): - (JSC): - (JSC::Interpreter::ErrorHandlingMode::~ErrorHandlingMode): - (JSC::Interpreter::StackPolicy::StackPolicy): - (JSC::Interpreter::Interpreter): - (JSC::Interpreter::execute): - (JSC::Interpreter::executeCall): - (JSC::Interpreter::executeConstruct): - (JSC::Interpreter::prepareForRepeatCall): - * interpreter/Interpreter.h: - (JSC): - (Interpreter): - (ErrorHandlingMode): - (StackPolicy): - (JSC::Interpreter::StackPolicy::requiredCapacity): - * interpreter/JSStack.cpp: - (JSC): - (JSC::JSStack::JSStack): - (JSC::JSStack::growSlowCase): - (JSC::JSStack::enableErrorStackReserve): - (JSC::JSStack::disableErrorStackReserve): - * interpreter/JSStack.h: - (JSStack): - (JSC::JSStack::reservationEnd): - (JSC): - * jsc.cpp: - (jscmain): - * parser/Parser.cpp: - (JSC::::Parser): - * parser/Parser.h: - (Parser): - (JSC::::parse): - * runtime/ExceptionHelpers.cpp: - (JSC::throwStackOverflowError): - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - (JSC::JSGlobalData::createContextGroup): - (JSC::JSGlobalData::create): - (JSC::JSGlobalData::createLeaked): - (JSC::JSGlobalData::sharedInstance): - * runtime/JSGlobalData.h: - (JSC): - (JSGlobalData): - * runtime/StringRecursionChecker.h: - (JSC::StringRecursionChecker::performCheck): - * testRegExp.cpp: - (realMain): - -2012-10-20 Martin Robinson <mrobinson@igalia.com> - - Fix 'make dist' for the GTK+ port - - * GNUmakefile.list.am: Add missing files to the source list. - -2012-10-21 Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com> - - [CMake][JSC] Depend on risc.rb to decide when to run the LLInt scripts. - https://bugs.webkit.org/show_bug.cgi?id=99917 - - Reviewed by Geoffrey Garen. - - Depend on the newly-added risc.rb to make sure we always run the - LLInt scripts when one of them changes. - - * CMakeLists.txt: - -2012-10-20 Filip Pizlo <fpizlo@apple.com> - - LLInt backends of non-ARM RISC platforms should be able to share code with the existing ARMv7 backend - https://bugs.webkit.org/show_bug.cgi?id=99745 - - Reviewed by Geoffrey Garen. - - This moves all of the things in armv7.rb that I thought are generally useful out - into risc.rb. It also separates some phases (branch ops is separated into one - phase that does sensible things, and another that does things that are painfully - ARM-specific), and removes ARM assumptions from others by using a callback to - drive exactly what lowering must happen. The goal here is to minimize the future - maintenance burden of LLInt by ensuring that the various platforms share as much - lowering code as possible. - - * offlineasm/armv7.rb: - * offlineasm/risc.rb: Added. - -2012-10-19 Filip Pizlo <fpizlo@apple.com> - - DFG should have some facility for recognizing redundant CheckArrays and Arrayifies - https://bugs.webkit.org/show_bug.cgi?id=99287 - - Reviewed by Mark Hahnenberg. - - Adds reasoning about indexing type sets (i.e. ArrayModes) to AbstractValue, which - then enables us to fold away CheckArray's and Arrayify's that are redundant. - - * bytecode/ArrayProfile.cpp: - (JSC::arrayModesToString): - (JSC): - * bytecode/ArrayProfile.h: - (JSC): - (JSC::mergeArrayModes): - (JSC::arrayModesAlreadyChecked): - * bytecode/StructureSet.h: - (JSC::StructureSet::arrayModesFromStructures): - (StructureSet): - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::execute): - * dfg/DFGAbstractValue.h: - (JSC::DFG::AbstractValue::AbstractValue): - (JSC::DFG::AbstractValue::clear): - (JSC::DFG::AbstractValue::isClear): - (JSC::DFG::AbstractValue::makeTop): - (JSC::DFG::AbstractValue::clobberStructures): - (AbstractValue): - (JSC::DFG::AbstractValue::setMostSpecific): - (JSC::DFG::AbstractValue::set): - (JSC::DFG::AbstractValue::operator==): - (JSC::DFG::AbstractValue::merge): - (JSC::DFG::AbstractValue::filter): - (JSC::DFG::AbstractValue::filterArrayModes): - (JSC::DFG::AbstractValue::validate): - (JSC::DFG::AbstractValue::checkConsistency): - (JSC::DFG::AbstractValue::dump): - (JSC::DFG::AbstractValue::clobberArrayModes): - (JSC::DFG::AbstractValue::clobberArrayModesSlow): - (JSC::DFG::AbstractValue::setFuturePossibleStructure): - (JSC::DFG::AbstractValue::filterFuturePossibleStructure): - * dfg/DFGArrayMode.cpp: - (JSC::DFG::modeAlreadyChecked): - * dfg/DFGArrayMode.h: - (JSC::DFG::arrayModesFor): - (DFG): - * dfg/DFGConstantFoldingPhase.cpp: - (JSC::DFG::ConstantFoldingPhase::foldConstants): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::arrayify): - -2012-10-19 Filip Pizlo <fpizlo@apple.com> - - Baseline JIT should not inline array allocations, to make them easier to instrument - https://bugs.webkit.org/show_bug.cgi?id=99905 - - Reviewed by Mark Hahnenberg. - - This will make it easier to instrument array allocations for the purposes of profiling. - It also allows us to kill off a bunch of code. And, this doesn't appear to hurt - performance at all. That's expected because these days any hot allocation will end up - in the DFG JIT, which does inline these allocations. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileSlowCases): - * jit/JIT.h: - (JIT): - * jit/JITInlineMethods.h: - (JSC): - * jit/JITOpcodes.cpp: - (JSC::JIT::emit_op_new_array): - -2012-10-19 Oliver Hunt <oliver@apple.com> - - Fix some of the regression cause by the non-local variable reworking - https://bugs.webkit.org/show_bug.cgi?id=99896 - - Reviewed by Filip Pizlo. - - The non0local variable reworking led to some of the optimisations performed by - the bytecode generator being dropped. This in turn put more pressure on the DFG - optimisations. This exposed a short coming in our double speculation propogation. - Now we try to distinguish between places where we should SpecDoubleReal vs generic - SpecDouble. - - * dfg/DFGPredictionPropagationPhase.cpp: - (PredictionPropagationPhase): - (JSC::DFG::PredictionPropagationPhase::speculatedDoubleTypeForPrediction): - (JSC::DFG::PredictionPropagationPhase::speculatedDoubleTypeForPredictions): - (JSC::DFG::PredictionPropagationPhase::propagate): - -2012-10-19 Michael Saboff <msaboff@apple.com> - - Lexer should create 8 bit Identifiers for RegularExpressions and ASCII identifiers - https://bugs.webkit.org/show_bug.cgi?id=99855 - - Reviewed by Filip Pizlo. - - Added makeIdentifier helpers that will always make an 8 bit Identifier or make an - Identifier that is the same size as the template parameter. Used the first in the fast - path when looking for a JS identifier and the second when scanning regular expressions. - - * parser/Lexer.cpp: - (JSC::::scanRegExp): - * parser/Lexer.h: - (Lexer): - (JSC::::makeIdentifierSameType): - (JSC::::makeLCharIdentifier): - (JSC::::lexExpectIdentifier): - -2012-10-19 Mark Lam <mark.lam@apple.com> - - Added WTF::StackStats mechanism. - https://bugs.webkit.org/show_bug.cgi?id=99805. - - Reviewed by Geoffrey Garen. - - Added StackStats checkpoints and probes. - - * bytecompiler/BytecodeGenerator.h: - (JSC::BytecodeGenerator::emitNode): - (JSC::BytecodeGenerator::emitNodeInConditionContext): - * heap/SlotVisitor.cpp: - (JSC::SlotVisitor::append): - (JSC::visitChildren): - (JSC::SlotVisitor::donateKnownParallel): - (JSC::SlotVisitor::drain): - (JSC::SlotVisitor::drainFromShared): - (JSC::SlotVisitor::mergeOpaqueRoots): - (JSC::SlotVisitor::internalAppend): - (JSC::SlotVisitor::harvestWeakReferences): - (JSC::SlotVisitor::finalizeUnconditionalFinalizers): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::execute): - (JSC::Interpreter::executeCall): - (JSC::Interpreter::executeConstruct): - (JSC::Interpreter::prepareForRepeatCall): - * parser/Parser.h: - (JSC::Parser::canRecurse): - * runtime/StringRecursionChecker.h: - (StringRecursionChecker): - -2012-10-19 Oliver Hunt <oliver@apple.com> - - REGRESSION(r131822): It made 500+ tests crash on 32 bit platforms - https://bugs.webkit.org/show_bug.cgi?id=99814 - - Reviewed by Filip Pizlo. - - Call the correct macro in 32bit. - - * llint/LowLevelInterpreter.asm: - -2012-10-19 Dongwoo Joshua Im <dw.im@samsung.com> - - Rename ENABLE_CSS3_TEXT_DECORATION to ENABLE_CSS3_TEXT - https://bugs.webkit.org/show_bug.cgi?id=99804 - - Reviewed by Julien Chaffraix. - - CSS3 text related properties will be implemented under this flag, - including text decoration, text-align-last, and text-justify. - - * Configurations/FeatureDefines.xcconfig: - -2012-10-18 Anders Carlsson <andersca@apple.com> - - Clean up RegExpKey - https://bugs.webkit.org/show_bug.cgi?id=99798 - - Reviewed by Darin Adler. - - RegExpHash doesn't need to be a class template specialization when the class template is specialized - for JSC::RegExpKey only. Make it a nested class of RegExp instead. Also, make operator== a friend function - so Hash::equal can see it. - - * runtime/RegExpKey.h: - (JSC::RegExpKey::RegExpKey): - (JSC::RegExpKey::operator==): - (RegExpKey): - (JSC::RegExpKey::Hash::hash): - (JSC::RegExpKey::Hash::equal): - (Hash): - -2012-10-19 Mark Lam <mark.lam@apple.com> - - Bot greening: Follow up to r131877 to fix the Windows build. - https://bugs.webkit.org/show_bug.cgi?id=99739. - - Not reviewed. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - -2012-10-19 Mark Lam <mark.lam@apple.com> - - Bot greening: Attempt to fix broken Window build after r131836. - https://bugs.webkit.org/show_bug.cgi?id=99739. - - Not reviewed. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - -2012-10-19 Yuqiang Xian <yuqiang.xian@intel.com> - - Unreviewed fix after r131868. - - On JSVALUE64 platforms, JSValue constants can be Imm64 instead of ImmPtr for JIT compilers. - - * dfg/DFGOSRExitCompiler64.cpp: - (JSC::DFG::OSRExitCompiler::compileExit): - -2012-10-18 Filip Pizlo <fpizlo@apple.com> - - Baseline array profiling should be less accurate, and DFG OSR exit should update array profiles on CheckArray and CheckStructure failure - https://bugs.webkit.org/show_bug.cgi?id=99261 - - Reviewed by Oliver Hunt. - - This makes array profiling stochastic, like value profiling. The point is to avoid - noticing one-off indexing types that we'll never see again, but instead to: - - Notice the big ones: We want the DFG to compile based on the things that happen with - high probability. So, this change makes array profiling do like value profiling and - only notice a random subsampling of indexing types that flowed through an array - access. Prior to this patch array profiles noticed all indexing types and weighted - them identically. - - Bias the recent: Often an array access will see awkward indexing types during the - first handful of executions because of artifacts of program startup. So, we want to - bias towards the indexing types that we saw most recently. With this change, array - profiling does like value profiling and usually tells use a random sampling that - is biased to what happened recently. - - Have a backup plan: The above two things don't work by themselves because our - randomness is not that random (nor do we care enough to make it more random), and - because some procedures will have a <1/10 probability event that we must handle - without bailing because it dominates a hot loop. So, like value profiling, this - patch makes array profiling use OSR exits to tell us why we are bailing out, so - that we don't make the same mistake again in the future. - - This change also makes the way that the 32-bit OSR exit compiler snatches scratch - registers more uniform. We don't need a scratch buffer when we can push and pop. - - * bytecode/DFGExitProfile.h: - * dfg/DFGOSRExitCompiler32_64.cpp: - (JSC::DFG::OSRExitCompiler::compileExit): - * dfg/DFGOSRExitCompiler64.cpp: - (JSC::DFG::OSRExitCompiler::compileExit): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::checkArray): - (JSC::DFG::SpeculativeJIT::arrayify): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * jit/JITInlineMethods.h: - (JSC::JIT::emitArrayProfilingSite): - * llint/LowLevelInterpreter.asm: - -2012-10-18 Yuqiang Xian <yuqiang.xian@intel.com> - - [Qt] REGRESSION(r131858): It broke the ARM build - https://bugs.webkit.org/show_bug.cgi?id=99809 - - Reviewed by Csaba Osztrogonác. - - * dfg/DFGCCallHelpers.h: - (CCallHelpers): - (JSC::DFG::CCallHelpers::setupArgumentsWithExecState): - -2012-10-18 Yuqiang Xian <yuqiang.xian@intel.com> - - Refactor MacroAssembler interfaces to differentiate the pointer operands from the 64-bit integer operands - https://bugs.webkit.org/show_bug.cgi?id=99154 - - Reviewed by Gavin Barraclough. - - In current JavaScriptCore implementation for JSVALUE64 platform (i.e., - the X64 platform), we assume that the JSValue size is same to the - pointer size, and thus EncodedJSValue is simply type defined as a - "void*". In the JIT compiler, we also take this assumption and invoke - the same macro assembler interfaces for both JSValue and pointer - operands. We need to differentiate the operations on pointers from the - operations on JSValues, and let them invoking different macro - assembler interfaces. For example, we now use the interface of - "loadPtr" to load either a pointer or a JSValue, and we need to switch - to using "loadPtr" to load a pointer and some new "load64" interface - to load a JSValue. This would help us supporting other JSVALUE64 - platforms where pointer size is not necessarily 64-bits, for example - x32 (bug #99153). - - The major modification I made is to introduce the "*64" interfaces in - the MacroAssembler for those operations on JSValues, keep the "*Ptr" - interfaces for those operations on real pointers, and go through all - the JIT compiler code to correct the usage. - - This is the second part of the work, i.e, to correct the usage of the - new MacroAssembler interfaces in the JIT compilers, which also means - that now EncodedJSValue is defined as a 64-bit integer, and the "*64" - interfaces are used for it. - - * assembler/MacroAssembler.h: JSValue immediates should be in Imm64 instead of ImmPtr. - (MacroAssembler): - (JSC::MacroAssembler::shouldBlind): - * dfg/DFGAssemblyHelpers.cpp: Correct the JIT compilers usage of the new interfaces. - (JSC::DFG::AssemblyHelpers::jitAssertIsInt32): - (JSC::DFG::AssemblyHelpers::jitAssertIsJSInt32): - (JSC::DFG::AssemblyHelpers::jitAssertIsJSNumber): - (JSC::DFG::AssemblyHelpers::jitAssertIsJSDouble): - (JSC::DFG::AssemblyHelpers::jitAssertIsCell): - * dfg/DFGAssemblyHelpers.h: - (JSC::DFG::AssemblyHelpers::emitPutToCallFrameHeader): - (JSC::DFG::AssemblyHelpers::branchIfNotCell): - (JSC::DFG::AssemblyHelpers::debugCall): - (JSC::DFG::AssemblyHelpers::boxDouble): - (JSC::DFG::AssemblyHelpers::unboxDouble): - (JSC::DFG::AssemblyHelpers::emitExceptionCheck): - * dfg/DFGCCallHelpers.h: - (JSC::DFG::CCallHelpers::setupArgumentsWithExecState): - (CCallHelpers): - * dfg/DFGOSRExitCompiler64.cpp: - (JSC::DFG::OSRExitCompiler::compileExit): - * dfg/DFGRepatch.cpp: - (JSC::DFG::generateProtoChainAccessStub): - (JSC::DFG::tryCacheGetByID): - (JSC::DFG::tryBuildGetByIDList): - (JSC::DFG::emitPutReplaceStub): - (JSC::DFG::emitPutTransitionStub): - * dfg/DFGScratchRegisterAllocator.h: - (JSC::DFG::ScratchRegisterAllocator::preserveUsedRegistersToScratchBuffer): - (JSC::DFG::ScratchRegisterAllocator::restoreUsedRegistersFromScratchBuffer): - * dfg/DFGSilentRegisterSavePlan.h: - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::checkArgumentTypes): - (JSC::DFG::SpeculativeJIT::compileValueToInt32): - (JSC::DFG::SpeculativeJIT::compileInt32ToDouble): - (JSC::DFG::SpeculativeJIT::compileInstanceOfForObject): - (JSC::DFG::SpeculativeJIT::compileInstanceOf): - (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant): - (JSC::DFG::SpeculativeJIT::compileGetByValOnArguments): - * dfg/DFGSpeculativeJIT.h: - (SpeculativeJIT): - (JSC::DFG::SpeculativeJIT::silentSavePlanForGPR): - (JSC::DFG::SpeculativeJIT::silentSpill): - (JSC::DFG::SpeculativeJIT::silentFill): - (JSC::DFG::SpeculativeJIT::spill): - (JSC::DFG::SpeculativeJIT::valueOfJSConstantAsImm64): - (JSC::DFG::SpeculativeJIT::callOperation): - (JSC::DFG::SpeculativeJIT::branch64): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::fillInteger): - (JSC::DFG::SpeculativeJIT::fillDouble): - (JSC::DFG::SpeculativeJIT::fillJSValue): - (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber): - (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32): - (JSC::DFG::SpeculativeJIT::nonSpeculativeUInt32ToNumber): - (JSC::DFG::SpeculativeJIT::cachedGetById): - (JSC::DFG::SpeculativeJIT::cachedPutById): - (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull): - (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull): - (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch): - (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare): - (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq): - (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq): - (JSC::DFG::SpeculativeJIT::emitCall): - (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): - (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): - (JSC::DFG::SpeculativeJIT::fillSpeculateCell): - (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): - (JSC::DFG::SpeculativeJIT::convertToDouble): - (JSC::DFG::SpeculativeJIT::compileObjectEquality): - (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality): - (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality): - (JSC::DFG::SpeculativeJIT::compileDoubleCompare): - (JSC::DFG::SpeculativeJIT::compileNonStringCellOrOtherLogicalNot): - (JSC::DFG::SpeculativeJIT::compileLogicalNot): - (JSC::DFG::SpeculativeJIT::emitNonStringCellOrOtherBranch): - (JSC::DFG::SpeculativeJIT::emitBranch): - (JSC::DFG::SpeculativeJIT::compileContiguousGetByVal): - (JSC::DFG::SpeculativeJIT::compileArrayStorageGetByVal): - (JSC::DFG::SpeculativeJIT::compileContiguousPutByVal): - (JSC::DFG::SpeculativeJIT::compileArrayStoragePutByVal): - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGThunks.cpp: - (JSC::DFG::osrExitGenerationThunkGenerator): - (JSC::DFG::throwExceptionFromCallSlowPathGenerator): - (JSC::DFG::slowPathFor): - (JSC::DFG::virtualForThunkGenerator): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::dumpRegisters): - * jit/JIT.cpp: - (JSC::JIT::privateCompile): - * jit/JIT.h: - (JIT): - * jit/JITArithmetic.cpp: - (JSC::JIT::emit_op_negate): - (JSC::JIT::emitSlow_op_negate): - (JSC::JIT::emit_op_rshift): - (JSC::JIT::emitSlow_op_urshift): - (JSC::JIT::emit_compareAndJumpSlow): - (JSC::JIT::emit_op_bitand): - (JSC::JIT::compileBinaryArithOpSlowCase): - (JSC::JIT::emit_op_div): - * jit/JITCall.cpp: - (JSC::JIT::compileLoadVarargs): - (JSC::JIT::compileCallEval): - (JSC::JIT::compileCallEvalSlowCase): - (JSC::JIT::compileOpCall): - * jit/JITInlineMethods.h: Have some clean-up work as well. - (JSC): - (JSC::JIT::emitPutCellToCallFrameHeader): - (JSC::JIT::emitPutIntToCallFrameHeader): - (JSC::JIT::emitPutToCallFrameHeader): - (JSC::JIT::emitGetFromCallFrameHeader32): - (JSC::JIT::emitGetFromCallFrameHeader64): - (JSC::JIT::emitAllocateJSArray): - (JSC::JIT::emitValueProfilingSite): - (JSC::JIT::emitGetJITStubArg): - (JSC::JIT::emitGetVirtualRegister): - (JSC::JIT::emitPutVirtualRegister): - (JSC::JIT::emitInitRegister): - (JSC::JIT::emitJumpIfJSCell): - (JSC::JIT::emitJumpIfBothJSCells): - (JSC::JIT::emitJumpIfNotJSCell): - (JSC::JIT::emitLoadInt32ToDouble): - (JSC::JIT::emitJumpIfImmediateInteger): - (JSC::JIT::emitJumpIfNotImmediateInteger): - (JSC::JIT::emitJumpIfNotImmediateIntegers): - (JSC::JIT::emitFastArithReTagImmediate): - (JSC::JIT::emitFastArithIntToImmNoCheck): - * jit/JITOpcodes.cpp: - (JSC::JIT::privateCompileCTINativeCall): - (JSC::JIT::emit_op_mov): - (JSC::JIT::emit_op_instanceof): - (JSC::JIT::emit_op_is_undefined): - (JSC::JIT::emit_op_is_boolean): - (JSC::JIT::emit_op_is_number): - (JSC::JIT::emit_op_tear_off_activation): - (JSC::JIT::emit_op_not): - (JSC::JIT::emit_op_jfalse): - (JSC::JIT::emit_op_jeq_null): - (JSC::JIT::emit_op_jneq_null): - (JSC::JIT::emit_op_jtrue): - (JSC::JIT::emit_op_bitxor): - (JSC::JIT::emit_op_bitor): - (JSC::JIT::emit_op_get_pnames): - (JSC::JIT::emit_op_next_pname): - (JSC::JIT::compileOpStrictEq): - (JSC::JIT::emit_op_catch): - (JSC::JIT::emit_op_throw_static_error): - (JSC::JIT::emit_op_eq_null): - (JSC::JIT::emit_op_neq_null): - (JSC::JIT::emit_op_create_activation): - (JSC::JIT::emit_op_create_arguments): - (JSC::JIT::emit_op_init_lazy_reg): - (JSC::JIT::emitSlow_op_convert_this): - (JSC::JIT::emitSlow_op_not): - (JSC::JIT::emit_op_get_argument_by_val): - (JSC::JIT::emit_op_put_to_base): - (JSC::JIT::emit_resolve_operations): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::emit_op_get_by_val): - (JSC::JIT::emitContiguousGetByVal): - (JSC::JIT::emitArrayStorageGetByVal): - (JSC::JIT::emitSlow_op_get_by_val): - (JSC::JIT::compileGetDirectOffset): - (JSC::JIT::emit_op_get_by_pname): - (JSC::JIT::emitContiguousPutByVal): - (JSC::JIT::emitArrayStoragePutByVal): - (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::emit_op_put_by_id): - (JSC::JIT::compilePutDirectOffset): - (JSC::JIT::emit_op_init_global_const): - (JSC::JIT::emit_op_init_global_const_check): - (JSC::JIT::emitIntTypedArrayGetByVal): - (JSC::JIT::emitFloatTypedArrayGetByVal): - (JSC::JIT::emitFloatTypedArrayPutByVal): - * jit/JITStubCall.h: - (JITStubCall): - (JSC::JITStubCall::JITStubCall): - (JSC::JITStubCall::addArgument): - (JSC::JITStubCall::call): - (JSC::JITStubCall::callWithValueProfiling): - * jit/JSInterfaceJIT.h: - (JSC::JSInterfaceJIT::emitJumpIfImmediateNumber): - (JSC::JSInterfaceJIT::emitJumpIfNotImmediateNumber): - (JSC::JSInterfaceJIT::emitLoadJSCell): - (JSC::JSInterfaceJIT::emitLoadInt32): - (JSC::JSInterfaceJIT::emitLoadDouble): - * jit/SpecializedThunkJIT.h: - (JSC::SpecializedThunkJIT::returnDouble): - (JSC::SpecializedThunkJIT::tagReturnAsInt32): - * runtime/JSValue.cpp: - (JSC::JSValue::description): - * runtime/JSValue.h: Define JSVALUE64 EncodedJSValue as int64_t, which is also unified with JSVALUE32_64. - (JSC): - * runtime/JSValueInlineMethods.h: New implementation of some JSValue methods to make them more conformant - with the new rule that "JSValue is a 64-bit integer rather than a pointer" for JSVALUE64 platforms. - (JSC): - (JSC::JSValue::JSValue): - (JSC::JSValue::operator bool): - (JSC::JSValue::operator==): - (JSC::JSValue::operator!=): - (JSC::reinterpretDoubleToInt64): - (JSC::reinterpretInt64ToDouble): - (JSC::JSValue::asDouble): - -2012-10-18 Michael Saboff <msaboff@apple.com> - - convertUTF8ToUTF16() Should Check for ASCII Input - ihttps://bugs.webkit.org/show_bug.cgi?id=99739 - - Reviewed by Geoffrey Garen. - - Using the updated convertUTF8ToUTF16() , we can determine if is makes more sense to - create a string using the 8 bit source. Added a new OpaqueJSString::create(LChar*, unsigned). - Had to add a cast n JSStringCreateWithCFString to differentiate which create() to call. - - * API/JSStringRef.cpp: - (JSStringCreateWithUTF8CString): - * API/JSStringRefCF.cpp: - (JSStringCreateWithCFString): - * API/OpaqueJSString.h: - (OpaqueJSString::create): - (OpaqueJSString): - (OpaqueJSString::OpaqueJSString): - -2012-10-18 Oliver Hunt <oliver@apple.com> - - Unbreak jsc tests. Last minute "clever"-ness is clearly just not - a good plan. - - * dfg/DFGByteCodeParser.cpp: - (JSC::DFG::ByteCodeParser::parseBlock): - -2012-10-18 Oliver Hunt <oliver@apple.com> - - Bytecode should not have responsibility for determining how to perform non-local resolves - https://bugs.webkit.org/show_bug.cgi?id=99349 - - Reviewed by Gavin Barraclough. - - This patch removes lexical analysis from the bytecode generation. This allows - us to delay lookup of a non-local variables until the lookup is actually necessary, - and simplifies a lot of the resolve logic in BytecodeGenerator. - - Once a lookup is performed we cache the lookup information in a set of out-of-line - buffers in CodeBlock. This allows subsequent lookups to avoid unnecessary hashing, - etc, and allows the respective JITs to recreated optimal lookup code. - - This is currently still a performance regression in LLInt, but most of the remaining - regression is caused by a lot of indirection that I'll remove in future work, as well - as some work necessary to allow LLInt to perform in line instruction repatching. - We will also want to improve the behaviour of the baseline JIT for some of the lookup - operations, however this patch was getting quite large already so I'm landing it now - that we've reached the bar of "performance-neutral". - - Basic browsing seems to work. - - * GNUmakefile.list.am: - * JavaScriptCore.xcodeproj/project.pbxproj: - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::printStructures): - (JSC::CodeBlock::dump): - (JSC::CodeBlock::CodeBlock): - (JSC::CodeBlock::visitStructures): - (JSC): - (JSC::CodeBlock::finalizeUnconditionally): - (JSC::CodeBlock::shrinkToFit): - * bytecode/CodeBlock.h: - (JSC::CodeBlock::addResolve): - (JSC::CodeBlock::addPutToBase): - (CodeBlock): - (JSC::CodeBlock::resolveOperations): - (JSC::CodeBlock::putToBaseOperation): - (JSC::CodeBlock::numberOfResolveOperations): - (JSC::CodeBlock::numberOfPutToBaseOperations): - (JSC::CodeBlock::addPropertyAccessInstruction): - (JSC::CodeBlock::globalObjectConstant): - (JSC::CodeBlock::setGlobalObjectConstant): - * bytecode/Opcode.h: - (JSC): - (JSC::padOpcodeName): - * bytecode/ResolveGlobalStatus.cpp: - (JSC::computeForStructure): - (JSC::ResolveGlobalStatus::computeFor): - * bytecode/ResolveGlobalStatus.h: - (JSC): - (ResolveGlobalStatus): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::ResolveResult::checkValidity): - (JSC): - (JSC::BytecodeGenerator::BytecodeGenerator): - (JSC::BytecodeGenerator::resolve): - (JSC::BytecodeGenerator::resolveConstDecl): - (JSC::BytecodeGenerator::shouldAvoidResolveGlobal): - (JSC::BytecodeGenerator::emitResolve): - (JSC::BytecodeGenerator::emitResolveBase): - (JSC::BytecodeGenerator::emitResolveBaseForPut): - (JSC::BytecodeGenerator::emitResolveWithBaseForPut): - (JSC::BytecodeGenerator::emitResolveWithThis): - (JSC::BytecodeGenerator::emitGetLocalVar): - (JSC::BytecodeGenerator::emitInitGlobalConst): - (JSC::BytecodeGenerator::emitPutToBase): - * bytecompiler/BytecodeGenerator.h: - (JSC::ResolveResult::registerResolve): - (JSC::ResolveResult::dynamicResolve): - (ResolveResult): - (JSC::ResolveResult::ResolveResult): - (JSC): - (NonlocalResolveInfo): - (JSC::NonlocalResolveInfo::NonlocalResolveInfo): - (JSC::NonlocalResolveInfo::~NonlocalResolveInfo): - (JSC::NonlocalResolveInfo::resolved): - (JSC::NonlocalResolveInfo::put): - (BytecodeGenerator): - (JSC::BytecodeGenerator::getResolveOperations): - (JSC::BytecodeGenerator::getResolveWithThisOperations): - (JSC::BytecodeGenerator::getResolveBaseOperations): - (JSC::BytecodeGenerator::getResolveBaseForPutOperations): - (JSC::BytecodeGenerator::getResolveWithBaseForPutOperations): - (JSC::BytecodeGenerator::getPutToBaseOperation): - * bytecompiler/NodesCodegen.cpp: - (JSC::ResolveNode::isPure): - (JSC::FunctionCallResolveNode::emitBytecode): - (JSC::PostfixNode::emitResolve): - (JSC::PrefixNode::emitResolve): - (JSC::ReadModifyResolveNode::emitBytecode): - (JSC::AssignResolveNode::emitBytecode): - (JSC::ConstDeclNode::emitCodeSingle): - (JSC::ForInNode::emitBytecode): - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::execute): - * dfg/DFGByteCodeParser.cpp: - (ByteCodeParser): - (InlineStackEntry): - (JSC::DFG::ByteCodeParser::handleGetByOffset): - (DFG): - (JSC::DFG::ByteCodeParser::parseResolveOperations): - (JSC::DFG::ByteCodeParser::parseBlock): - (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): - * dfg/DFGCapabilities.h: - (JSC::DFG::canInlineResolveOperations): - (DFG): - (JSC::DFG::canCompileOpcode): - (JSC::DFG::canInlineOpcode): - * dfg/DFGGraph.h: - (ResolveGlobalData): - (ResolveOperationData): - (DFG): - (PutToBaseOperationData): - (Graph): - * dfg/DFGNode.h: - (JSC::DFG::Node::hasIdentifier): - (JSC::DFG::Node::resolveOperationsDataIndex): - (Node): - * dfg/DFGNodeType.h: - (DFG): - * dfg/DFGOSRExit.cpp: - (JSC::DFG::OSRExit::OSRExit): - * dfg/DFGOSRExit.h: - (OSRExit): - * dfg/DFGOSRExitCompiler.cpp: - * dfg/DFGOSRExitCompiler32_64.cpp: - (JSC::DFG::OSRExitCompiler::compileExit): - * dfg/DFGOSRExitCompiler64.cpp: - (JSC::DFG::OSRExitCompiler::compileExit): - * dfg/DFGOperations.cpp: - * dfg/DFGOperations.h: - * dfg/DFGPredictionPropagationPhase.cpp: - (JSC::DFG::PredictionPropagationPhase::propagate): - * dfg/DFGRepatch.cpp: - (JSC::DFG::tryCacheGetByID): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::convertLastOSRExitToForward): - * dfg/DFGSpeculativeJIT.h: - (JSC::DFG::SpeculativeJIT::resolveOperations): - (SpeculativeJIT): - (JSC::DFG::SpeculativeJIT::putToBaseOperation): - (JSC::DFG::SpeculativeJIT::callOperation): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGStructureCheckHoistingPhase.cpp: - (JSC::DFG::StructureCheckHoistingPhase::run): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - * jit/JIT.h: - (JIT): - * jit/JITOpcodes.cpp: - (JSC::JIT::emit_op_put_to_base): - (JSC): - (JSC::JIT::emit_resolve_operations): - (JSC::JIT::emitSlow_link_resolve_operations): - (JSC::JIT::emit_op_resolve): - (JSC::JIT::emitSlow_op_resolve): - (JSC::JIT::emit_op_resolve_base): - (JSC::JIT::emitSlow_op_resolve_base): - (JSC::JIT::emit_op_resolve_with_base): - (JSC::JIT::emitSlow_op_resolve_with_base): - (JSC::JIT::emit_op_resolve_with_this): - (JSC::JIT::emitSlow_op_resolve_with_this): - (JSC::JIT::emitSlow_op_put_to_base): - * jit/JITOpcodes32_64.cpp: - (JSC::JIT::emit_op_put_to_base): - (JSC): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::emit_op_init_global_const): - (JSC::JIT::emit_op_init_global_const_check): - (JSC::JIT::emitSlow_op_init_global_const_check): - * jit/JITPropertyAccess32_64.cpp: - (JSC::JIT::emit_op_init_global_const): - (JSC::JIT::emit_op_init_global_const_check): - (JSC::JIT::emitSlow_op_init_global_const_check): - * jit/JITStubs.cpp: - (JSC::DEFINE_STUB_FUNCTION): - (JSC): - * jit/JITStubs.h: - * llint/LLIntSlowPaths.cpp: - (LLInt): - (JSC::LLInt::LLINT_SLOW_PATH_DECL): - * llint/LLIntSlowPaths.h: - (LLInt): - * llint/LowLevelInterpreter.asm: - * llint/LowLevelInterpreter32_64.asm: - * llint/LowLevelInterpreter64.asm: - * runtime/JSScope.cpp: - (JSC::LookupResult::base): - (JSC::LookupResult::value): - (JSC::LookupResult::setBase): - (JSC::LookupResult::setValue): - (LookupResult): - (JSC): - (JSC::setPutPropertyAccessOffset): - (JSC::executeResolveOperations): - (JSC::JSScope::resolveContainingScopeInternal): - (JSC::JSScope::resolveContainingScope): - (JSC::JSScope::resolve): - (JSC::JSScope::resolveBase): - (JSC::JSScope::resolveWithBase): - (JSC::JSScope::resolveWithThis): - (JSC::JSScope::resolvePut): - (JSC::JSScope::resolveGlobal): - * runtime/JSScope.h: - (JSScope): - * runtime/JSVariableObject.cpp: - (JSC): - * runtime/JSVariableObject.h: - (JSVariableObject): - * runtime/Structure.h: - (JSC::Structure::propertyAccessesAreCacheable): - (Structure): - -2012-10-18 Mark Hahnenberg <mhahnenberg@apple.com> - - Live oversize copied blocks should count toward overall heap fragmentation - https://bugs.webkit.org/show_bug.cgi?id=99548 - - Reviewed by Filip Pizlo. - - The CopiedSpace uses overall heap fragmentation to determine whether or not it should do any copying. - Currently it doesn't include live oversize CopiedBlocks in the calculation, but it should. We should - treat them as 100% utilized, since running a copying phase won't be able to free/compact any of their - memory. We can also free any dead oversize CopiedBlocks while we're iterating over them, rather than - iterating over them again at the end of the copying phase. - - * heap/CopiedSpace.cpp: - (JSC::CopiedSpace::doneFillingBlock): - (JSC::CopiedSpace::startedCopying): - (JSC::CopiedSpace::doneCopying): Also removed a branch when iterating over from-space at the end of - copying. Since we eagerly recycle blocks as soon as they're fully evacuated, we should see no - unpinned blocks in from-space at the end of copying. - * heap/CopiedSpaceInlineMethods.h: - (JSC::CopiedSpace::recycleBorrowedBlock): - * heap/CopyVisitorInlineMethods.h: - (JSC::CopyVisitor::checkIfShouldCopy): - -2012-10-18 Roger Fong <roger_fong@apple.com> - - Unreviewed. Build fix after r131701 and r131777. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - -2012-10-18 Mark Hahnenberg <mhahnenberg@apple.com> - - Race condition between GCThread and main thread during copying phase - https://bugs.webkit.org/show_bug.cgi?id=99641 - - Reviewed by Filip Pizlo. - - When a GCThread returns from copyFromShared(), it then calls doneCopying(), which returns - its borrowed CopiedBlock to the CopiedSpace. This final block allows the CopiedSpace to - continue and finish the cleanup of the copying phase. However, the GCThread can loop back - around, see that m_currentPhase is still "Copy", and try to go through the copying phase again. - This can cause all sorts of issues. To fix this, we should add a cyclic barrier to GCThread::waitForNextPhase(). - - * heap/GCThread.cpp: - (JSC::GCThread::waitForNextPhase): All GCThreads will wait when they finish one iteration until the main thread - notifies them to move down to the second while loop, where they wait for the next GCPhase to start. They also - decrement the m_numberOfActiveGCThreads counter as they begin to wait for the next phase and increment it as - they enter the next phase. This allows the main thread to wait in endCurrentPhase() until all the threads have - finished the current phase and are waiting on the next phase to begin. Without the counter, there would be - no way to ensure that every thread was available for each GCPhase. - (JSC::GCThread::gcThreadMain): We now use the m_phaseLock to synchronize with the main thread when we're being created. - * heap/GCThreadSharedData.cpp: - (JSC::GCThreadSharedData::GCThreadSharedData): As we create each GCThread, we increment the m_numberOfActiveGCThreads - counter. When we are done creating the threads, we wait until they're all waiting for the next GCPhase. This prevents - us from leaving some GCThreads behind during the first GCPhase, which could hurt us on our very short-running - benchmarks (e.g. SunSpider). - (JSC::GCThreadSharedData::~GCThreadSharedData): - (JSC::GCThreadSharedData::startNextPhase): We atomically swap the two flags, m_gcThreadsShouldWait and m_currentPhase, - so that if the threads finish very quickly, they will wait until the main thread is ready to end the current phase. - (JSC::GCThreadSharedData::endCurrentPhase): Here atomically we swap the two flags again to allow the threads to - advance to waiting on the next GCPhase. We wait until all of the GCThreads have settled into the second wait loop - before allowing the main thread to continue. This prevents us from leaving one of the GCThreads stuck in the first - wait loop if we were to call startNextPhase() before it had time to wake up and move on to the second wait loop. - (JSC): - (JSC::GCThreadSharedData::didStartMarking): We now use startNextPhase() to properly swap the flags. - (JSC::GCThreadSharedData::didFinishMarking): Ditto for endCurrentPhase(). - (JSC::GCThreadSharedData::didStartCopying): Ditto. - (JSC::GCThreadSharedData::didFinishCopying): Ditto. - * heap/GCThreadSharedData.h: - (GCThreadSharedData): - * heap/Heap.cpp: - (JSC::Heap::copyBackingStores): No reason to use the extra reference. - -2012-10-18 Pablo Flouret <pablof@motorola.com> - - Implement css3-conditional's @supports rule - https://bugs.webkit.org/show_bug.cgi?id=86146 - - Reviewed by Antti Koivisto. - - * Configurations/FeatureDefines.xcconfig: - Add an ENABLE_CSS3_CONDITIONAL_RULES flag. - -2012-10-18 Michael Saboff <msaboff@apple.com> - - Make conversion between JSStringRef and WKStringRef work without character size conversions - https://bugs.webkit.org/show_bug.cgi?id=99727 - - Reviewed by Anders Carlsson. - - Export the string() method for use in WebKit. - - * API/OpaqueJSString.h: - (OpaqueJSString::string): - -2012-10-18 Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com> - - [CMake] Avoid unnecessarily running the LLInt generation commands. - https://bugs.webkit.org/show_bug.cgi?id=99708 - - Reviewed by Rob Buis. - - As described in the comments in the change itself, in some cases - the Ruby generation scripts used when LLInt is on would each be - run twice in every build even if nothing had changed. - - Fix that by not setting the OBJECT_DEPENDS property of some source - files to depend on the generated headers; instead, they are now - just part of the final binaries/libraries which use them. - - * CMakeLists.txt: - -2012-10-17 Zoltan Horvath <zoltan@webkit.org> - - Remove the JSHeap memory measurement of the PageLoad performacetests since it creates bogus JSGlobalDatas - https://bugs.webkit.org/show_bug.cgi?id=99609 - - Reviewed by Ryosuke Niwa. - - Remove the implementation since it creates bogus JSGlobalDatas in the layout tests. - - * heap/HeapStatistics.cpp: - (JSC): - * heap/HeapStatistics.h: - (HeapStatistics): - -2012-10-17 Sam Weinig <sam@webkit.org> - - Attempt to fix the build. - - * bytecode/GlobalResolveInfo.h: Copied from bytecode/GlobalResolveInfo.h. - -2012-10-17 Filip Pizlo <fpizlo@apple.com> - - REGRESSION (r130826 or r130828): Twitter top bar is dysfunctional - https://bugs.webkit.org/show_bug.cgi?id=99577 - <rdar://problem/12518883> - - Reviewed by Mark Hahnenberg. - - It turns out that it's a good idea to maintain the invariants of your object model, such as that - elements past publicLength should have the hole value. - - * dfg/DFGGraph.cpp: - (JSC::DFG::Graph::dump): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - -2012-10-17 Anders Carlsson <andersca@apple.com> - - Clean up Vector.h - https://bugs.webkit.org/show_bug.cgi?id=99622 - - Reviewed by Benjamin Poulain. - - Fix fallout from removing std::max and std::min using declarations. - - * runtime/StringPrototype.cpp: - (JSC::jsSpliceSubstrings): - (JSC::jsSpliceSubstringsWithSeparators): - (JSC::stringProtoFuncIndexOf): - * yarr/YarrPattern.cpp: - (JSC::Yarr::YarrPatternConstructor::setupDisjunctionOffsets): - -2012-10-17 Oliver Hunt <oliver@apple.com> - - Committing new files is so overrated. - - * bytecode/ResolveOperation.h: Added. - (JSC): - (JSC::ResolveOperation::getAndReturnScopedVar): - (JSC::ResolveOperation::checkForDynamicEntriesBeforeGlobalScope): - (ResolveOperation): - (JSC::ResolveOperation::getAndReturnGlobalVar): - (JSC::ResolveOperation::getAndReturnGlobalProperty): - (JSC::ResolveOperation::resolveFail): - (JSC::ResolveOperation::skipTopScopeNode): - (JSC::ResolveOperation::skipScopes): - (JSC::ResolveOperation::returnGlobalObjectAsBase): - (JSC::ResolveOperation::setBaseToGlobal): - (JSC::ResolveOperation::setBaseToUndefined): - (JSC::ResolveOperation::setBaseToScope): - (JSC::ResolveOperation::returnScopeAsBase): - (JSC::PutToBaseOperation::PutToBaseOperation): - -2012-10-17 Michael Saboff <msaboff@apple.com> - - StringPrototype::jsSpliceSubstringsWithSeparators() doesn't optimally handle 8 bit strings - https://bugs.webkit.org/show_bug.cgi?id=99230 - - Reviewed by Geoffrey Garen. - - Added code to select characters8() or characters16() on the not all 8 bit path for both the - processing of the source and the separators. - - * runtime/StringPrototype.cpp: - (JSC::jsSpliceSubstringsWithSeparators): - -2012-10-17 Filip Pizlo <fpizlo@apple.com> - - Array and object allocations via 'new Object' or 'new Array' should be inlined in bytecode to allow allocation site profiling - https://bugs.webkit.org/show_bug.cgi?id=99557 - - Reviewed by Geoffrey Garen. - - Removed an inaccurate and misleading comment as per Geoff's review. (I forgot - to make this change as part of http://trac.webkit.org/changeset/131644). - - * bytecompiler/NodesCodegen.cpp: - (JSC::FunctionCallResolveNode::emitBytecode): - -2012-10-17 Oliver Hunt <oliver@apple.com> - - Bytecode should not have responsibility for determining how to perform non-local resolves - https://bugs.webkit.org/show_bug.cgi?id=99349 - - Reviewed by Gavin Barraclough. - - This patch removes lexical analysis from the bytecode generation. This allows - us to delay lookup of a non-local variables until the lookup is actually necessary, - and simplifies a lot of the resolve logic in BytecodeGenerator. - - Once a lookup is performed we cache the lookup information in a set of out-of-line - buffers in CodeBlock. This allows subsequent lookups to avoid unnecessary hashing, - etc, and allows the respective JITs to recreated optimal lookup code. - - This is currently still a performance regression in LLInt, but most of the remaining - regression is caused by a lot of indirection that I'll remove in future work, as well - as some work necessary to allow LLInt to perform in line instruction repatching. - We will also want to improve the behaviour of the baseline JIT for some of the lookup - operations, however this patch was getting quite large already so I'm landing it now - that we've reached the bar of "performance-neutral". - - * GNUmakefile.list.am: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::printStructures): - (JSC::CodeBlock::dump): - (JSC::CodeBlock::CodeBlock): - (JSC::CodeBlock::visitStructures): - (JSC): - (JSC::CodeBlock::finalizeUnconditionally): - (JSC::CodeBlock::shrinkToFit): - * bytecode/CodeBlock.h: - (JSC::CodeBlock::addResolve): - (JSC::CodeBlock::addPutToBase): - (CodeBlock): - (JSC::CodeBlock::resolveOperations): - (JSC::CodeBlock::putToBaseOperation): - (JSC::CodeBlock::numberOfResolveOperations): - (JSC::CodeBlock::numberOfPutToBaseOperations): - (JSC::CodeBlock::addPropertyAccessInstruction): - (JSC::CodeBlock::globalObjectConstant): - (JSC::CodeBlock::setGlobalObjectConstant): - * bytecode/GlobalResolveInfo.h: Removed. - * bytecode/Opcode.h: - (JSC): - (JSC::padOpcodeName): - * bytecode/ResolveGlobalStatus.cpp: - (JSC::computeForStructure): - (JSC::ResolveGlobalStatus::computeFor): - * bytecode/ResolveGlobalStatus.h: - (JSC): - (ResolveGlobalStatus): - * bytecode/ResolveOperation.h: Added. - The new types and logic we use to perform the cached lookups. - (JSC): - (ResolveOperation): - (JSC::ResolveOperation::getAndReturnScopedVar): - (JSC::ResolveOperation::checkForDynamicEntriesBeforeGlobalScope): - (JSC::ResolveOperation::getAndReturnGlobalVar): - (JSC::ResolveOperation::getAndReturnGlobalProperty): - (JSC::ResolveOperation::resolveFail): - (JSC::ResolveOperation::skipTopScopeNode): - (JSC::ResolveOperation::skipScopes): - (JSC::ResolveOperation::returnGlobalObjectAsBase): - (JSC::ResolveOperation::setBaseToGlobal): - (JSC::ResolveOperation::setBaseToUndefined): - (JSC::ResolveOperation::setBaseToScope): - (JSC::ResolveOperation::returnScopeAsBase): - (JSC::PutToBaseOperation::PutToBaseOperation): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::ResolveResult::checkValidity): - (JSC): - (JSC::BytecodeGenerator::BytecodeGenerator): - (JSC::BytecodeGenerator::resolve): - (JSC::BytecodeGenerator::resolveConstDecl): - (JSC::BytecodeGenerator::shouldAvoidResolveGlobal): - (JSC::BytecodeGenerator::emitResolve): - (JSC::BytecodeGenerator::emitResolveBase): - (JSC::BytecodeGenerator::emitResolveBaseForPut): - (JSC::BytecodeGenerator::emitResolveWithBaseForPut): - (JSC::BytecodeGenerator::emitResolveWithThis): - (JSC::BytecodeGenerator::emitGetLocalVar): - (JSC::BytecodeGenerator::emitInitGlobalConst): - (JSC::BytecodeGenerator::emitPutToBase): - * bytecompiler/BytecodeGenerator.h: - (JSC::ResolveResult::registerResolve): - (JSC::ResolveResult::dynamicResolve): - (ResolveResult): - (JSC::ResolveResult::ResolveResult): - (JSC): - (NonlocalResolveInfo): - (JSC::NonlocalResolveInfo::NonlocalResolveInfo): - (JSC::NonlocalResolveInfo::~NonlocalResolveInfo): - (JSC::NonlocalResolveInfo::resolved): - (JSC::NonlocalResolveInfo::put): - (BytecodeGenerator): - (JSC::BytecodeGenerator::getResolveOperations): - (JSC::BytecodeGenerator::getResolveWithThisOperations): - (JSC::BytecodeGenerator::getResolveBaseOperations): - (JSC::BytecodeGenerator::getResolveBaseForPutOperations): - (JSC::BytecodeGenerator::getResolveWithBaseForPutOperations): - (JSC::BytecodeGenerator::getPutToBaseOperation): - * bytecompiler/NodesCodegen.cpp: - (JSC::ResolveNode::isPure): - (JSC::FunctionCallResolveNode::emitBytecode): - (JSC::PostfixNode::emitResolve): - (JSC::PrefixNode::emitResolve): - (JSC::ReadModifyResolveNode::emitBytecode): - (JSC::AssignResolveNode::emitBytecode): - (JSC::ConstDeclNode::emitCodeSingle): - (JSC::ForInNode::emitBytecode): - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::execute): - * dfg/DFGByteCodeParser.cpp: - (ByteCodeParser): - (InlineStackEntry): - (JSC::DFG::ByteCodeParser::handleGetByOffset): - (DFG): - (JSC::DFG::ByteCodeParser::parseResolveOperations): - (JSC::DFG::ByteCodeParser::parseBlock): - (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): - * dfg/DFGCapabilities.h: - (JSC::DFG::canCompileResolveOperations): - (DFG): - (JSC::DFG::canCompilePutToBaseOperation): - (JSC::DFG::canCompileOpcode): - (JSC::DFG::canInlineOpcode): - * dfg/DFGGraph.h: - (ResolveGlobalData): - (ResolveOperationData): - (DFG): - (PutToBaseOperationData): - (Graph): - * dfg/DFGNode.h: - (JSC::DFG::Node::hasIdentifier): - (JSC::DFG::Node::resolveOperationsDataIndex): - (Node): - * dfg/DFGNodeType.h: - (DFG): - * dfg/DFGOSRExit.cpp: - (JSC::DFG::OSRExit::OSRExit): - * dfg/DFGOSRExit.h: - (OSRExit): - * dfg/DFGOSRExitCompiler.cpp: - * dfg/DFGOSRExitCompiler32_64.cpp: - (JSC::DFG::OSRExitCompiler::compileExit): - * dfg/DFGOSRExitCompiler64.cpp: - (JSC::DFG::OSRExitCompiler::compileExit): - * dfg/DFGOperations.cpp: - * dfg/DFGOperations.h: - * dfg/DFGPredictionPropagationPhase.cpp: - (JSC::DFG::PredictionPropagationPhase::propagate): - * dfg/DFGRepatch.cpp: - (JSC::DFG::tryCacheGetByID): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::convertLastOSRExitToForward): - * dfg/DFGSpeculativeJIT.h: - (JSC::DFG::SpeculativeJIT::resolveOperations): - (SpeculativeJIT): - (JSC::DFG::SpeculativeJIT::putToBaseOperation): - (JSC::DFG::SpeculativeJIT::callOperation): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGStructureCheckHoistingPhase.cpp: - (JSC::DFG::StructureCheckHoistingPhase::run): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - * jit/JIT.h: - (JIT): - * jit/JITOpcodes.cpp: - (JSC::JIT::emit_op_put_to_base): - (JSC): - (JSC::JIT::emit_resolve_operations): - (JSC::JIT::emitSlow_link_resolve_operations): - (JSC::JIT::emit_op_resolve): - (JSC::JIT::emitSlow_op_resolve): - (JSC::JIT::emit_op_resolve_base): - (JSC::JIT::emitSlow_op_resolve_base): - (JSC::JIT::emit_op_resolve_with_base): - (JSC::JIT::emitSlow_op_resolve_with_base): - (JSC::JIT::emit_op_resolve_with_this): - (JSC::JIT::emitSlow_op_resolve_with_this): - (JSC::JIT::emitSlow_op_put_to_base): - * jit/JITOpcodes32_64.cpp: - (JSC::JIT::emit_op_put_to_base): - (JSC): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::emit_op_init_global_const): - (JSC::JIT::emit_op_init_global_const_check): - (JSC::JIT::emitSlow_op_init_global_const_check): - * jit/JITPropertyAccess32_64.cpp: - (JSC::JIT::emit_op_init_global_const): - (JSC::JIT::emit_op_init_global_const_check): - (JSC::JIT::emitSlow_op_init_global_const_check): - * jit/JITStubs.cpp: - (JSC::DEFINE_STUB_FUNCTION): - (JSC): - * jit/JITStubs.h: - * llint/LLIntSlowPaths.cpp: - (LLInt): - (JSC::LLInt::LLINT_SLOW_PATH_DECL): - * llint/LLIntSlowPaths.h: - (LLInt): - * llint/LowLevelInterpreter.asm: - * llint/LowLevelInterpreter32_64.asm: - * llint/LowLevelInterpreter64.asm: - * runtime/JSScope.cpp: - (JSC::LookupResult::base): - (JSC::LookupResult::value): - (JSC::LookupResult::setBase): - (JSC::LookupResult::setValue): - (LookupResult): - (JSC): - (JSC::setPutPropertyAccessOffset): - (JSC::executeResolveOperations): - (JSC::JSScope::resolveContainingScopeInternal): - (JSC::JSScope::resolveContainingScope): - (JSC::JSScope::resolve): - (JSC::JSScope::resolveBase): - (JSC::JSScope::resolveWithBase): - (JSC::JSScope::resolveWithThis): - (JSC::JSScope::resolvePut): - (JSC::JSScope::resolveGlobal): - * runtime/JSScope.h: - (JSScope): - * runtime/JSVariableObject.cpp: - (JSC): - * runtime/JSVariableObject.h: - (JSVariableObject): - * runtime/Structure.h: - (JSC::Structure::propertyAccessesAreCacheable): - (Structure): - -2012-10-17 Filip Pizlo <fpizlo@apple.com> - - Array and object allocations via 'new Object' or 'new Array' should be inlined in bytecode to allow allocation site profiling - https://bugs.webkit.org/show_bug.cgi?id=99557 - - Reviewed by Geoffrey Garen. - - This uses the old jneq_ptr trick to allow for the bytecode to "see" that the - operation in question is what we almost certainly know it to be. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * bytecode/Opcode.h: - (JSC): - (JSC::padOpcodeName): - * bytecode/SpecialPointer.h: - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitCall): - (JSC::BytecodeGenerator::emitCallEval): - (JSC::BytecodeGenerator::expectedFunctionForIdentifier): - (JSC): - (JSC::BytecodeGenerator::emitExpectedFunctionSnippet): - (JSC::BytecodeGenerator::emitConstruct): - * bytecompiler/BytecodeGenerator.h: - (BytecodeGenerator): - * bytecompiler/NodesCodegen.cpp: - (JSC::NewExprNode::emitBytecode): - (JSC::FunctionCallValueNode::emitBytecode): - (JSC::FunctionCallResolveNode::emitBytecode): - (JSC::FunctionCallBracketNode::emitBytecode): - (JSC::FunctionCallDotNode::emitBytecode): - (JSC::CallFunctionCallDotNode::emitBytecode): - (JSC::ApplyFunctionCallDotNode::emitBytecode): - * dfg/DFGByteCodeParser.cpp: - (JSC::DFG::ByteCodeParser::parseBlock): - * dfg/DFGCapabilities.h: - (JSC::DFG::canCompileOpcode): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - * jit/JIT.h: - (JIT): - * jit/JITOpcodes.cpp: - (JSC::JIT::emit_op_new_array_with_size): - (JSC): - * jit/JITStubs.cpp: - (JSC::DEFINE_STUB_FUNCTION): - (JSC): - * jit/JITStubs.h: - * llint/LLIntSlowPaths.cpp: - (JSC::LLInt::LLINT_SLOW_PATH_DECL): - (LLInt): - * llint/LLIntSlowPaths.h: - (LLInt): - * llint/LowLevelInterpreter.asm: - * runtime/ArrayConstructor.cpp: - (JSC::constructArrayWithSizeQuirk): - (JSC): - * runtime/ArrayConstructor.h: - (JSC): - * runtime/CommonIdentifiers.h: - * runtime/JSGlobalObject.cpp: - (JSC::JSGlobalObject::reset): - (JSC): - -2012-10-17 Filip Pizlo <fpizlo@apple.com> - - JIT op_get_by_pname should call cti_get_by_val_generic and not cti_get_by_val - https://bugs.webkit.org/show_bug.cgi?id=99631 - <rdar://problem/12483221> - - Reviewed by Mark Hahnenberg. - - cti_get_by_val assumes that the return address has patching metadata associated with it, which won't - be true for op_get_by_pname. cti_get_by_val_generic makes no such assumptions. - - * jit/JITPropertyAccess.cpp: - (JSC::JIT::emitSlow_op_get_by_pname): - * jit/JITPropertyAccess32_64.cpp: - (JSC::JIT::emitSlow_op_get_by_pname): - -2012-10-17 Mark Hahnenberg <mhahnenberg@apple.com> - - Block freeing thread should sleep indefinitely when there's no work to do - https://bugs.webkit.org/show_bug.cgi?id=98084 - - Reviewed by Geoffrey Garen. - - r130212 didn't fully fix the problem. - - * heap/BlockAllocator.cpp: - (JSC::BlockAllocator::blockFreeingThreadMain): We would just continue to the next iteration if - we found that we had zero blocks to copy. We should move the indefinite wait up to where that - check is done so that we properly detect the "no more blocks to copy, wait for more" condition. - -2012-10-16 Csaba Osztrogonác <ossy@webkit.org> - - Unreviewed, rolling out r131516 and r131550. - http://trac.webkit.org/changeset/131516 - http://trac.webkit.org/changeset/131550 - https://bugs.webkit.org/show_bug.cgi?id=99349 - - It caused zillion different problem on different platforms - - * GNUmakefile.list.am: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * bytecode/CodeBlock.cpp: - (JSC): - (JSC::isGlobalResolve): - (JSC::instructionOffsetForNth): - (JSC::printGlobalResolveInfo): - (JSC::CodeBlock::printStructures): - (JSC::CodeBlock::dump): - (JSC::CodeBlock::CodeBlock): - (JSC::CodeBlock::visitStructures): - (JSC::CodeBlock::finalizeUnconditionally): - (JSC::CodeBlock::hasGlobalResolveInfoAtBytecodeOffset): - (JSC::CodeBlock::globalResolveInfoForBytecodeOffset): - (JSC::CodeBlock::shrinkToFit): - * bytecode/CodeBlock.h: - (CodeBlock): - (JSC::CodeBlock::addGlobalResolveInstruction): - (JSC::CodeBlock::addGlobalResolveInfo): - (JSC::CodeBlock::globalResolveInfo): - (JSC::CodeBlock::numberOfGlobalResolveInfos): - (JSC::CodeBlock::globalResolveInfoCount): - * bytecode/GlobalResolveInfo.h: Copied from Source/JavaScriptCore/bytecode/ResolveGlobalStatus.cpp. - (JSC): - (JSC::GlobalResolveInfo::GlobalResolveInfo): - (GlobalResolveInfo): - (JSC::getGlobalResolveInfoBytecodeOffset): - * bytecode/Opcode.h: - (JSC): - (JSC::padOpcodeName): - * bytecode/ResolveGlobalStatus.cpp: - (JSC): - (JSC::computeForStructure): - (JSC::computeForLLInt): - (JSC::ResolveGlobalStatus::computeFor): - * bytecode/ResolveGlobalStatus.h: - (JSC): - (ResolveGlobalStatus): - * bytecode/ResolveOperation.h: Removed. - * bytecompiler/BytecodeGenerator.cpp: - (JSC::ResolveResult::checkValidity): - (JSC::ResolveResult::registerPointer): - (JSC): - (JSC::BytecodeGenerator::BytecodeGenerator): - (JSC::BytecodeGenerator::resolve): - (JSC::BytecodeGenerator::resolveConstDecl): - (JSC::BytecodeGenerator::shouldAvoidResolveGlobal): - (JSC::BytecodeGenerator::emitResolve): - (JSC::BytecodeGenerator::emitResolveBase): - (JSC::BytecodeGenerator::emitResolveBaseForPut): - (JSC::BytecodeGenerator::emitResolveWithBase): - (JSC::BytecodeGenerator::emitResolveWithThis): - (JSC::BytecodeGenerator::emitGetStaticVar): - (JSC::BytecodeGenerator::emitInitGlobalConst): - (JSC::BytecodeGenerator::emitPutStaticVar): - * bytecompiler/BytecodeGenerator.h: - (JSC::ResolveResult::registerResolve): - (JSC::ResolveResult::dynamicResolve): - (JSC::ResolveResult::lexicalResolve): - (JSC::ResolveResult::indexedGlobalResolve): - (JSC::ResolveResult::dynamicIndexedGlobalResolve): - (JSC::ResolveResult::globalResolve): - (JSC::ResolveResult::dynamicGlobalResolve): - (JSC::ResolveResult::type): - (JSC::ResolveResult::index): - (JSC::ResolveResult::depth): - (JSC::ResolveResult::globalObject): - (ResolveResult): - (JSC::ResolveResult::isStatic): - (JSC::ResolveResult::isIndexed): - (JSC::ResolveResult::isScoped): - (JSC::ResolveResult::isGlobal): - (JSC::ResolveResult::ResolveResult): - (BytecodeGenerator): - * bytecompiler/NodesCodegen.cpp: - (JSC::ResolveNode::isPure): - (JSC::FunctionCallResolveNode::emitBytecode): - (JSC::PostfixNode::emitResolve): - (JSC::PrefixNode::emitResolve): - (JSC::ReadModifyResolveNode::emitBytecode): - (JSC::AssignResolveNode::emitBytecode): - (JSC::ConstDeclNode::emitCodeSingle): - (JSC::ForInNode::emitBytecode): - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::execute): - * dfg/DFGByteCodeParser.cpp: - (ByteCodeParser): - (InlineStackEntry): - (JSC::DFG::ByteCodeParser::handleGetByOffset): - (JSC::DFG::ByteCodeParser::parseBlock): - (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): - * dfg/DFGCapabilities.h: - (JSC::DFG::canCompileOpcode): - (JSC::DFG::canInlineOpcode): - * dfg/DFGGraph.h: - (ResolveGlobalData): - (DFG): - (Graph): - * dfg/DFGNode.h: - (JSC::DFG::Node::hasIdentifier): - * dfg/DFGNodeType.h: - (DFG): - * dfg/DFGOSRExit.cpp: - (JSC::DFG::OSRExit::OSRExit): - * dfg/DFGOSRExit.h: - (OSRExit): - * dfg/DFGOSRExitCompiler.cpp: - * dfg/DFGOSRExitCompiler32_64.cpp: - (JSC::DFG::OSRExitCompiler::compileExit): - * dfg/DFGOSRExitCompiler64.cpp: - (JSC::DFG::OSRExitCompiler::compileExit): - * dfg/DFGOperations.cpp: - * dfg/DFGOperations.h: - (JSC): - * dfg/DFGPredictionPropagationPhase.cpp: - (JSC::DFG::PredictionPropagationPhase::propagate): - * dfg/DFGRepatch.cpp: - (JSC::DFG::tryCacheGetByID): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::convertLastOSRExitToForward): - * dfg/DFGSpeculativeJIT.h: - (JSC::DFG::SpeculativeJIT::callOperation): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGStructureCheckHoistingPhase.cpp: - (JSC::DFG::StructureCheckHoistingPhase::run): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - * jit/JIT.h: - (JIT): - (JSC::JIT::emit_op_get_global_var_watchable): - * jit/JITOpcodes.cpp: - (JSC::JIT::emit_op_resolve): - (JSC): - (JSC::JIT::emit_op_resolve_base): - (JSC::JIT::emit_op_resolve_skip): - (JSC::JIT::emit_op_resolve_global): - (JSC::JIT::emitSlow_op_resolve_global): - (JSC::JIT::emit_op_resolve_with_base): - (JSC::JIT::emit_op_resolve_with_this): - (JSC::JIT::emit_op_resolve_global_dynamic): - (JSC::JIT::emitSlow_op_resolve_global_dynamic): - * jit/JITOpcodes32_64.cpp: - (JSC::JIT::emit_op_resolve): - (JSC): - (JSC::JIT::emit_op_resolve_base): - (JSC::JIT::emit_op_resolve_skip): - (JSC::JIT::emit_op_resolve_global): - (JSC::JIT::emitSlow_op_resolve_global): - (JSC::JIT::emit_op_resolve_with_base): - (JSC::JIT::emit_op_resolve_with_this): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::emit_op_get_scoped_var): - (JSC): - (JSC::JIT::emit_op_put_scoped_var): - (JSC::JIT::emit_op_get_global_var): - (JSC::JIT::emit_op_put_global_var): - (JSC::JIT::emit_op_put_global_var_check): - (JSC::JIT::emitSlow_op_put_global_var_check): - * jit/JITPropertyAccess32_64.cpp: - (JSC::JIT::emit_op_get_scoped_var): - (JSC): - (JSC::JIT::emit_op_put_scoped_var): - (JSC::JIT::emit_op_get_global_var): - (JSC::JIT::emit_op_put_global_var): - (JSC::JIT::emit_op_put_global_var_check): - (JSC::JIT::emitSlow_op_put_global_var_check): - * jit/JITStubs.cpp: - (JSC::DEFINE_STUB_FUNCTION): - (JSC): - * jit/JITStubs.h: - * llint/LLIntSlowPaths.cpp: - (LLInt): - (JSC::LLInt::LLINT_SLOW_PATH_DECL): - * llint/LLIntSlowPaths.h: - (LLInt): - * llint/LowLevelInterpreter.asm: - * llint/LowLevelInterpreter32_64.asm: - * llint/LowLevelInterpreter64.asm: - * runtime/JSScope.cpp: - (JSC::JSScope::resolve): - (JSC::JSScope::resolveSkip): - (JSC::JSScope::resolveGlobal): - (JSC::JSScope::resolveGlobalDynamic): - (JSC::JSScope::resolveBase): - (JSC::JSScope::resolveWithBase): - (JSC::JSScope::resolveWithThis): - * runtime/JSScope.h: - (JSScope): - * runtime/JSVariableObject.cpp: - * runtime/JSVariableObject.h: - * runtime/Structure.h: - -2012-10-16 Dongwoo Joshua Im <dw.im@samsung.com> - - [GTK] Fix build break - ResolveOperations.h is not in WebKit. - https://bugs.webkit.org/show_bug.cgi?id=99538 - - Unreviewed build fix. - - There are some files including ResolveOperations.h which is not exist at all. - - * GNUmakefile.list.am: s/ResolveOperations.h/ResolveOperation.h/ - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: s/ResolveOperations.h/ResolveOperation.h/ - -2012-10-16 Jian Li <jianli@chromium.org> - - Rename feature define ENABLE_WIDGET_REGION to ENABLE_DRAGGBALE_REGION - https://bugs.webkit.org/show_bug.cgi?id=98975 - - Reviewed by Adam Barth. - - Renaming is needed to better match with the draggable region code. - - * Configurations/FeatureDefines.xcconfig: - -2012-10-15 Oliver Hunt <oliver@apple.com> - - Bytecode should not have responsibility for determining how to perform non-local resolves - https://bugs.webkit.org/show_bug.cgi?id=99349 - - Reviewed by Gavin Barraclough. - - This patch removes lexical analysis from the bytecode generation. This allows - us to delay lookup of a non-local variables until the lookup is actually necessary, - and simplifies a lot of the resolve logic in BytecodeGenerator. - - Once a lookup is performed we cache the lookup information in a set of out-of-line - buffers in CodeBlock. This allows subsequent lookups to avoid unnecessary hashing, - etc, and allows the respective JITs to recreated optimal lookup code. - - This is currently still a performance regression in LLInt, but most of the remaining - regression is caused by a lot of indirection that I'll remove in future work, as well - as some work necessary to allow LLInt to perform in line instruction repatching. - We will also want to improve the behaviour of the baseline JIT for some of the lookup - operations, however this patch was getting quite large already so I'm landing it now - that we've reached the bar of "performance-neutral". - - * GNUmakefile.list.am: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::printStructures): - (JSC::CodeBlock::dump): - (JSC::CodeBlock::CodeBlock): - (JSC::CodeBlock::visitStructures): - (JSC): - (JSC::CodeBlock::finalizeUnconditionally): - (JSC::CodeBlock::shrinkToFit): - * bytecode/CodeBlock.h: - (JSC::CodeBlock::addResolve): - (JSC::CodeBlock::addPutToBase): - (CodeBlock): - (JSC::CodeBlock::resolveOperations): - (JSC::CodeBlock::putToBaseOperation): - (JSC::CodeBlock::numberOfResolveOperations): - (JSC::CodeBlock::numberOfPutToBaseOperations): - (JSC::CodeBlock::addPropertyAccessInstruction): - (JSC::CodeBlock::globalObjectConstant): - (JSC::CodeBlock::setGlobalObjectConstant): - * bytecode/GlobalResolveInfo.h: Removed. - * bytecode/Opcode.h: - (JSC): - (JSC::padOpcodeName): - * bytecode/ResolveGlobalStatus.cpp: - (JSC::computeForStructure): - (JSC::ResolveGlobalStatus::computeFor): - * bytecode/ResolveGlobalStatus.h: - (JSC): - (ResolveGlobalStatus): - * bytecode/ResolveOperation.h: Added. - The new types and logic we use to perform the cached lookups. - (JSC): - (ResolveOperation): - (JSC::ResolveOperation::getAndReturnScopedVar): - (JSC::ResolveOperation::checkForDynamicEntriesBeforeGlobalScope): - (JSC::ResolveOperation::getAndReturnGlobalVar): - (JSC::ResolveOperation::getAndReturnGlobalProperty): - (JSC::ResolveOperation::resolveFail): - (JSC::ResolveOperation::skipTopScopeNode): - (JSC::ResolveOperation::skipScopes): - (JSC::ResolveOperation::returnGlobalObjectAsBase): - (JSC::ResolveOperation::setBaseToGlobal): - (JSC::ResolveOperation::setBaseToUndefined): - (JSC::ResolveOperation::setBaseToScope): - (JSC::ResolveOperation::returnScopeAsBase): - (JSC::PutToBaseOperation::PutToBaseOperation): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::ResolveResult::checkValidity): - (JSC): - (JSC::BytecodeGenerator::BytecodeGenerator): - (JSC::BytecodeGenerator::resolve): - (JSC::BytecodeGenerator::resolveConstDecl): - (JSC::BytecodeGenerator::shouldAvoidResolveGlobal): - (JSC::BytecodeGenerator::emitResolve): - (JSC::BytecodeGenerator::emitResolveBase): - (JSC::BytecodeGenerator::emitResolveBaseForPut): - (JSC::BytecodeGenerator::emitResolveWithBaseForPut): - (JSC::BytecodeGenerator::emitResolveWithThis): - (JSC::BytecodeGenerator::emitGetLocalVar): - (JSC::BytecodeGenerator::emitInitGlobalConst): - (JSC::BytecodeGenerator::emitPutToBase): - * bytecompiler/BytecodeGenerator.h: - (JSC::ResolveResult::registerResolve): - (JSC::ResolveResult::dynamicResolve): - (ResolveResult): - (JSC::ResolveResult::ResolveResult): - (JSC): - (NonlocalResolveInfo): - (JSC::NonlocalResolveInfo::NonlocalResolveInfo): - (JSC::NonlocalResolveInfo::~NonlocalResolveInfo): - (JSC::NonlocalResolveInfo::resolved): - (JSC::NonlocalResolveInfo::put): - (BytecodeGenerator): - (JSC::BytecodeGenerator::getResolveOperations): - (JSC::BytecodeGenerator::getResolveWithThisOperations): - (JSC::BytecodeGenerator::getResolveBaseOperations): - (JSC::BytecodeGenerator::getResolveBaseForPutOperations): - (JSC::BytecodeGenerator::getResolveWithBaseForPutOperations): - (JSC::BytecodeGenerator::getPutToBaseOperation): - * bytecompiler/NodesCodegen.cpp: - (JSC::ResolveNode::isPure): - (JSC::FunctionCallResolveNode::emitBytecode): - (JSC::PostfixNode::emitResolve): - (JSC::PrefixNode::emitResolve): - (JSC::ReadModifyResolveNode::emitBytecode): - (JSC::AssignResolveNode::emitBytecode): - (JSC::ConstDeclNode::emitCodeSingle): - (JSC::ForInNode::emitBytecode): - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::execute): - * dfg/DFGByteCodeParser.cpp: - (ByteCodeParser): - (InlineStackEntry): - (JSC::DFG::ByteCodeParser::handleGetByOffset): - (DFG): - (JSC::DFG::ByteCodeParser::parseResolveOperations): - (JSC::DFG::ByteCodeParser::parseBlock): - (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): - * dfg/DFGCapabilities.h: - (JSC::DFG::canCompileResolveOperations): - (DFG): - (JSC::DFG::canCompilePutToBaseOperation): - (JSC::DFG::canCompileOpcode): - (JSC::DFG::canInlineOpcode): - * dfg/DFGGraph.h: - (ResolveGlobalData): - (ResolveOperationData): - (DFG): - (PutToBaseOperationData): - (Graph): - * dfg/DFGNode.h: - (JSC::DFG::Node::hasIdentifier): - (JSC::DFG::Node::resolveOperationsDataIndex): - (Node): - * dfg/DFGNodeType.h: - (DFG): - * dfg/DFGOSRExit.cpp: - (JSC::DFG::OSRExit::OSRExit): - * dfg/DFGOSRExit.h: - (OSRExit): - * dfg/DFGOSRExitCompiler.cpp: - * dfg/DFGOSRExitCompiler32_64.cpp: - (JSC::DFG::OSRExitCompiler::compileExit): - * dfg/DFGOSRExitCompiler64.cpp: - (JSC::DFG::OSRExitCompiler::compileExit): - * dfg/DFGOperations.cpp: - * dfg/DFGOperations.h: - * dfg/DFGPredictionPropagationPhase.cpp: - (JSC::DFG::PredictionPropagationPhase::propagate): - * dfg/DFGRepatch.cpp: - (JSC::DFG::tryCacheGetByID): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::convertLastOSRExitToForward): - * dfg/DFGSpeculativeJIT.h: - (JSC::DFG::SpeculativeJIT::resolveOperations): - (SpeculativeJIT): - (JSC::DFG::SpeculativeJIT::putToBaseOperation): - (JSC::DFG::SpeculativeJIT::callOperation): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGStructureCheckHoistingPhase.cpp: - (JSC::DFG::StructureCheckHoistingPhase::run): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - * jit/JIT.h: - (JIT): - * jit/JITOpcodes.cpp: - (JSC::JIT::emit_op_put_to_base): - (JSC): - (JSC::JIT::emit_resolve_operations): - (JSC::JIT::emitSlow_link_resolve_operations): - (JSC::JIT::emit_op_resolve): - (JSC::JIT::emitSlow_op_resolve): - (JSC::JIT::emit_op_resolve_base): - (JSC::JIT::emitSlow_op_resolve_base): - (JSC::JIT::emit_op_resolve_with_base): - (JSC::JIT::emitSlow_op_resolve_with_base): - (JSC::JIT::emit_op_resolve_with_this): - (JSC::JIT::emitSlow_op_resolve_with_this): - (JSC::JIT::emitSlow_op_put_to_base): - * jit/JITOpcodes32_64.cpp: - (JSC::JIT::emit_op_put_to_base): - (JSC): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::emit_op_init_global_const): - (JSC::JIT::emit_op_init_global_const_check): - (JSC::JIT::emitSlow_op_init_global_const_check): - * jit/JITPropertyAccess32_64.cpp: - (JSC::JIT::emit_op_init_global_const): - (JSC::JIT::emit_op_init_global_const_check): - (JSC::JIT::emitSlow_op_init_global_const_check): - * jit/JITStubs.cpp: - (JSC::DEFINE_STUB_FUNCTION): - (JSC): - * jit/JITStubs.h: - * llint/LLIntSlowPaths.cpp: - (LLInt): - (JSC::LLInt::LLINT_SLOW_PATH_DECL): - * llint/LLIntSlowPaths.h: - (LLInt): - * llint/LowLevelInterpreter.asm: - * llint/LowLevelInterpreter32_64.asm: - * llint/LowLevelInterpreter64.asm: - * runtime/JSScope.cpp: - (JSC::LookupResult::base): - (JSC::LookupResult::value): - (JSC::LookupResult::setBase): - (JSC::LookupResult::setValue): - (LookupResult): - (JSC): - (JSC::setPutPropertyAccessOffset): - (JSC::executeResolveOperations): - (JSC::JSScope::resolveContainingScopeInternal): - (JSC::JSScope::resolveContainingScope): - (JSC::JSScope::resolve): - (JSC::JSScope::resolveBase): - (JSC::JSScope::resolveWithBase): - (JSC::JSScope::resolveWithThis): - (JSC::JSScope::resolvePut): - (JSC::JSScope::resolveGlobal): - * runtime/JSScope.h: - (JSScope): - * runtime/JSVariableObject.cpp: - (JSC): - * runtime/JSVariableObject.h: - (JSVariableObject): - * runtime/Structure.h: - (JSC::Structure::propertyAccessesAreCacheable): - (Structure): - -2012-10-16 Filip Pizlo <fpizlo@apple.com> - - Accidental switch fall-through in DFG::FixupPhase - https://bugs.webkit.org/show_bug.cgi?id=96956 - <rdar://problem/12313242> - - Reviewed by Mark Hahnenberg. - - * dfg/DFGFixupPhase.cpp: - (JSC::DFG::FixupPhase::fixupNode): - -2012-10-16 Filip Pizlo <fpizlo@apple.com> - - GetScopedVar CSE matches dead GetScopedVar's leading to IR corruption - https://bugs.webkit.org/show_bug.cgi?id=99470 - <rdar://problem/12363698> - - Reviewed by Mark Hahnenberg. - - All it takes is to follow the "if (!shouldGenerate) continue" idiom and everything will be OK. - - * dfg/DFGCSEPhase.cpp: - (JSC::DFG::CSEPhase::globalVarLoadElimination): - (JSC::DFG::CSEPhase::scopedVarLoadElimination): - (JSC::DFG::CSEPhase::globalVarWatchpointElimination): - (JSC::DFG::CSEPhase::getByValLoadElimination): - (JSC::DFG::CSEPhase::checkStructureElimination): - (JSC::DFG::CSEPhase::structureTransitionWatchpointElimination): - (JSC::DFG::CSEPhase::getByOffsetLoadElimination): - -2012-10-16 Dima Gorbik <dgorbik@apple.com> - - Remove Platform.h include from the header files. - https://bugs.webkit.org/show_bug.cgi?id=98665 - - Reviewed by Eric Seidel. - - We don't want other clients that include WebKit headers to know about Platform.h. - - * API/tests/minidom.c: - * API/tests/testapi.c: - -2012-10-16 Balazs Kilvady <kilvadyb@homejinni.com> - - Add missing MIPS functions to assembler. - https://bugs.webkit.org/show_bug.cgi?id=98856 - - Reviewed by Oliver Hunt. - - Implement missing functions in MacroAssemblerMIPS and MIPSAssembler. - - * assembler/MIPSAssembler.h: - (JSC::MIPSAssembler::lb): - (MIPSAssembler): - (JSC::MIPSAssembler::lh): - (JSC::MIPSAssembler::cvtds): - (JSC::MIPSAssembler::cvtsd): - (JSC::MIPSAssembler::vmov): - * assembler/MacroAssemblerMIPS.h: - (MacroAssemblerMIPS): - (JSC::MacroAssemblerMIPS::load8Signed): - (JSC::MacroAssemblerMIPS::load16Signed): - (JSC::MacroAssemblerMIPS::moveDoubleToInts): - (JSC::MacroAssemblerMIPS::moveIntsToDouble): - (JSC::MacroAssemblerMIPS::loadFloat): - (JSC::MacroAssemblerMIPS::loadDouble): - (JSC::MacroAssemblerMIPS::storeFloat): - (JSC::MacroAssemblerMIPS::storeDouble): - (JSC::MacroAssemblerMIPS::addDouble): - (JSC::MacroAssemblerMIPS::convertFloatToDouble): - (JSC::MacroAssemblerMIPS::convertDoubleToFloat): - -2012-10-16 Balazs Kilvady <kilvadyb@homejinni.com> - - MIPS assembler coding-style fix. - https://bugs.webkit.org/show_bug.cgi?id=99359 - - Reviewed by Oliver Hunt. - - Coding style fix of existing MIPS assembler header files. - - * assembler/MIPSAssembler.h: - (JSC::MIPSAssembler::addiu): - (JSC::MIPSAssembler::addu): - (JSC::MIPSAssembler::subu): - (JSC::MIPSAssembler::mul): - (JSC::MIPSAssembler::andInsn): - (JSC::MIPSAssembler::andi): - (JSC::MIPSAssembler::nor): - (JSC::MIPSAssembler::orInsn): - (JSC::MIPSAssembler::ori): - (JSC::MIPSAssembler::xorInsn): - (JSC::MIPSAssembler::xori): - (JSC::MIPSAssembler::slt): - (JSC::MIPSAssembler::sltu): - (JSC::MIPSAssembler::sltiu): - (JSC::MIPSAssembler::sll): - (JSC::MIPSAssembler::sllv): - (JSC::MIPSAssembler::sra): - (JSC::MIPSAssembler::srav): - (JSC::MIPSAssembler::srl): - (JSC::MIPSAssembler::srlv): - (JSC::MIPSAssembler::lbu): - (JSC::MIPSAssembler::lw): - (JSC::MIPSAssembler::lwl): - (JSC::MIPSAssembler::lwr): - (JSC::MIPSAssembler::lhu): - (JSC::MIPSAssembler::sb): - (JSC::MIPSAssembler::sh): - (JSC::MIPSAssembler::sw): - (JSC::MIPSAssembler::addd): - (JSC::MIPSAssembler::subd): - (JSC::MIPSAssembler::muld): - (JSC::MIPSAssembler::divd): - (JSC::MIPSAssembler::lwc1): - (JSC::MIPSAssembler::ldc1): - (JSC::MIPSAssembler::swc1): - (JSC::MIPSAssembler::sdc1): - (MIPSAssembler): - (JSC::MIPSAssembler::relocateJumps): - (JSC::MIPSAssembler::linkWithOffset): - * assembler/MacroAssemblerMIPS.h: - (JSC::MacroAssemblerMIPS::add32): - (JSC::MacroAssemblerMIPS::and32): - (JSC::MacroAssemblerMIPS::sub32): - (MacroAssemblerMIPS): - (JSC::MacroAssemblerMIPS::load8): - (JSC::MacroAssemblerMIPS::load32): - (JSC::MacroAssemblerMIPS::load32WithUnalignedHalfWords): - (JSC::MacroAssemblerMIPS::load16): - (JSC::MacroAssemblerMIPS::store8): - (JSC::MacroAssemblerMIPS::store16): - (JSC::MacroAssemblerMIPS::store32): - (JSC::MacroAssemblerMIPS::nearCall): - (JSC::MacroAssemblerMIPS::test8): - (JSC::MacroAssemblerMIPS::test32): - -2012-10-16 Yuqiang Xian <yuqiang.xian@intel.com> - - Refactor MacroAssembler interfaces to differentiate the pointer operands from the 64-bit integer operands - https://bugs.webkit.org/show_bug.cgi?id=99154 - - Reviewed by Gavin Barraclough. - - In current JavaScriptCore implementation for JSVALUE64 platform (i.e., - the X64 platform), we assume that the JSValue size is same to the - pointer size, and thus EncodedJSValue is simply type defined as a - "void*". In the JIT compiler, we also take this assumption and invoke - the same macro assembler interfaces for both JSValue and pointer - operands. We need to differentiate the operations on pointers from the - operations on JSValues, and let them invoking different macro - assembler interfaces. For example, we now use the interface of - "loadPtr" to load either a pointer or a JSValue, and we need to switch - to using "loadPtr" to load a pointer and some new "load64" interface - to load a JSValue. This would help us supporting other JSVALUE64 - platforms where pointer size is not necessarily 64-bits, for example - x32 (bug #99153). - - The major modification I made is to introduce the "*64" interfaces in - the MacroAssembler for those operations on JSValues, keep the "*Ptr" - interfaces for those operations on real pointers, and go through all - the JIT compiler code to correct the usage. - - This is the first part of the work, i.e, to add the *64 interfaces to - the MacroAssembler. - - * assembler/AbstractMacroAssembler.h: Add the Imm64 interfaces. - (AbstractMacroAssembler): - (JSC::AbstractMacroAssembler::TrustedImm64::TrustedImm64): - (TrustedImm64): - (JSC::AbstractMacroAssembler::Imm64::Imm64): - (Imm64): - (JSC::AbstractMacroAssembler::Imm64::asTrustedImm64): - * assembler/MacroAssembler.h: map <foo>Ptr methods to <foo>64 for X86_64. - (MacroAssembler): - (JSC::MacroAssembler::peek64): - (JSC::MacroAssembler::poke): - (JSC::MacroAssembler::poke64): - (JSC::MacroAssembler::addPtr): - (JSC::MacroAssembler::andPtr): - (JSC::MacroAssembler::negPtr): - (JSC::MacroAssembler::orPtr): - (JSC::MacroAssembler::rotateRightPtr): - (JSC::MacroAssembler::subPtr): - (JSC::MacroAssembler::xorPtr): - (JSC::MacroAssembler::loadPtr): - (JSC::MacroAssembler::loadPtrWithAddressOffsetPatch): - (JSC::MacroAssembler::loadPtrWithCompactAddressOffsetPatch): - (JSC::MacroAssembler::storePtr): - (JSC::MacroAssembler::storePtrWithAddressOffsetPatch): - (JSC::MacroAssembler::movePtrToDouble): - (JSC::MacroAssembler::moveDoubleToPtr): - (JSC::MacroAssembler::comparePtr): - (JSC::MacroAssembler::testPtr): - (JSC::MacroAssembler::branchPtr): - (JSC::MacroAssembler::branchTestPtr): - (JSC::MacroAssembler::branchAddPtr): - (JSC::MacroAssembler::branchSubPtr): - (JSC::MacroAssembler::shouldBlindDouble): - (JSC::MacroAssembler::shouldBlind): - (JSC::MacroAssembler::RotatedImm64::RotatedImm64): - (RotatedImm64): - (JSC::MacroAssembler::rotationBlindConstant): - (JSC::MacroAssembler::loadRotationBlindedConstant): - (JSC::MacroAssembler::move): - (JSC::MacroAssembler::and64): - (JSC::MacroAssembler::store64): - * assembler/MacroAssemblerX86Common.h: - (JSC::MacroAssemblerX86Common::shouldBlindForSpecificArch): - (MacroAssemblerX86Common): - (JSC::MacroAssemblerX86Common::move): - * assembler/MacroAssemblerX86_64.h: Add the <foo>64 methods for X86_64. - (JSC::MacroAssemblerX86_64::branchAdd32): - (JSC::MacroAssemblerX86_64::add64): - (MacroAssemblerX86_64): - (JSC::MacroAssemblerX86_64::and64): - (JSC::MacroAssemblerX86_64::neg64): - (JSC::MacroAssemblerX86_64::or64): - (JSC::MacroAssemblerX86_64::rotateRight64): - (JSC::MacroAssemblerX86_64::sub64): - (JSC::MacroAssemblerX86_64::xor64): - (JSC::MacroAssemblerX86_64::load64): - (JSC::MacroAssemblerX86_64::load64WithAddressOffsetPatch): - (JSC::MacroAssemblerX86_64::load64WithCompactAddressOffsetPatch): - (JSC::MacroAssemblerX86_64::store64): - (JSC::MacroAssemblerX86_64::store64WithAddressOffsetPatch): - (JSC::MacroAssemblerX86_64::move64ToDouble): - (JSC::MacroAssemblerX86_64::moveDoubleTo64): - (JSC::MacroAssemblerX86_64::compare64): - (JSC::MacroAssemblerX86_64::branch64): - (JSC::MacroAssemblerX86_64::branchTest64): - (JSC::MacroAssemblerX86_64::test64): - (JSC::MacroAssemblerX86_64::branchAdd64): - (JSC::MacroAssemblerX86_64::branchSub64): - (JSC::MacroAssemblerX86_64::branchPtrWithPatch): - (JSC::MacroAssemblerX86_64::storePtrWithPatch): - -2012-10-15 Mark Hahnenberg <mhahnenberg@apple.com> - - Make CopiedSpace and MarkedSpace regions independent - https://bugs.webkit.org/show_bug.cgi?id=99222 - - Reviewed by Filip Pizlo. - - Right now CopiedSpace and MarkedSpace have the same block size and share the same regions, - but there's no reason that they can't have different block sizes while still sharing the - same underlying regions. We should factor the two "used" lists of regions apart so that - MarkedBlocks and CopiedBlocks can be different sizes. Regions will still be a uniform size - so that when they become empty they may be shared between the CopiedSpace and the MarkedSpace, - since benchmarks indicate that sharing is a boon for performance. - - * heap/BlockAllocator.cpp: - (JSC::BlockAllocator::BlockAllocator): - * heap/BlockAllocator.h: - (JSC): - (Region): - (JSC::Region::create): We now have a fixed size for Regions so that empty regions can continue to - be shared between the MarkedSpace and CopiedSpace. Once they are used for a specific type of block, - however, they can only be used for that type of block until they become empty again. - (JSC::Region::createCustomSize): - (JSC::Region::Region): - (JSC::Region::~Region): - (JSC::Region::reset): - (BlockAllocator): - (JSC::BlockAllocator::RegionSet::RegionSet): - (RegionSet): - (JSC::BlockAllocator::tryAllocateFromRegion): We change this function so that it correctly - moves blocks between empty, partial, and full lists. - (JSC::BlockAllocator::allocate): - (JSC::BlockAllocator::allocateCustomSize): - (JSC::BlockAllocator::deallocate): Ditto. - (JSC::CopiedBlock): - (JSC::MarkedBlock): - (JSC::BlockAllocator::regionSetFor): We use this so that we can use the same allocate/deallocate - functions with different RegionSets. We specialize the function for each type of block that we - want to allocate. - * heap/CopiedBlock.h: - (CopiedBlock): - * heap/CopiedSpace.h: - (CopiedSpace): - * heap/HeapBlock.h: - (HeapBlock): - * heap/MarkedBlock.cpp: - (JSC::MarkedBlock::MarkedBlock): For oversize MarkedBlocks, if the block size gets too big we can - underflow the endAtom, which will cause us to segfault when we try to sweep a block. If we're a - custom size MarkedBlock we need to calculate endAtom so it doesn't underflow. - -2012-10-14 Filip Pizlo <fpizlo@apple.com> - - JIT::JIT fails to initialize all of its fields - https://bugs.webkit.org/show_bug.cgi?id=99283 - - Reviewed by Andreas Kling. - - There were two groups of such fields, all of which are eventually initialized - prior to use inside of privateCompile(). But it's safer to make sure that they - are initialized in the constructor as well, since we may use the JIT to do a - stub compile without calling into privateCompile(). - - Unsigned index fields for dynamic repatching meta-data: this change - initializes them to UINT_MAX, so we should crash if we try to use those - indices without initializing them. - - Boolean flags for value profiling: this change initializes them to false, so - we at worst turn off value profiling. - - * jit/JIT.cpp: - (JSC::JIT::JIT): - -2012-10-15 Mark Hahnenberg <mhahnenberg@apple.com> - - We should avoid weakCompareAndSwap when parallel GC is disabled - https://bugs.webkit.org/show_bug.cgi?id=99331 - - Reviewed by Filip Pizlo. - - CopiedBlock::reportLiveBytes and didEvacuateBytes uses weakCompareAndSwap, which some platforms - don't support. For platforms that don't have parallel GC enabled, we should just use a normal store. - - * heap/CopiedBlock.h: - (JSC::CopiedBlock::reportLiveBytes): - (JSC::CopiedBlock::didEvacuateBytes): - -2012-10-15 Carlos Garcia Campos <cgarcia@igalia.com> - - Unreviewed. Fix make distcheck. - - * GNUmakefile.list.am: Add missing header file. - -2012-10-14 Filip Pizlo <fpizlo@apple.com> - - DFG should handle polymorphic array modes by eagerly transforming arrays into the most general applicable form - https://bugs.webkit.org/show_bug.cgi?id=99269 - - Reviewed by Geoffrey Garen. - - This kills off a bunch of code for "polymorphic" array modes in the DFG. It should - also be a performance win for code that uses a lot of array storage arrays. - - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::execute): - * dfg/DFGArrayMode.cpp: - (JSC::DFG::fromObserved): - (JSC::DFG::modeAlreadyChecked): - (JSC::DFG::modeToString): - * dfg/DFGArrayMode.h: - (DFG): - (JSC::DFG::modeUsesButterfly): - (JSC::DFG::modeIsJSArray): - (JSC::DFG::mayStoreToTail): - (JSC::DFG::mayStoreToHole): - (JSC::DFG::canCSEStorage): - (JSC::DFG::modeSupportsLength): - (JSC::DFG::benefitsFromStructureCheck): - * dfg/DFGFixupPhase.cpp: - (JSC::DFG::FixupPhase::checkArray): - (JSC::DFG::FixupPhase::blessArrayOperation): - * dfg/DFGGraph.h: - (JSC::DFG::Graph::byValIsPure): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode): - (JSC::DFG::SpeculativeJIT::checkArray): - (JSC::DFG::SpeculativeJIT::arrayify): - (DFG): - (JSC::DFG::SpeculativeJIT::compileGetArrayLength): - * dfg/DFGSpeculativeJIT.h: - (JSC::DFG::SpeculativeJIT::putByValWillNeedExtraRegister): - (SpeculativeJIT): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - -2012-10-14 Filip Pizlo <fpizlo@apple.com> - - REGRESSION(126886): Fat binary builds don't know how to handle architecture variants to which the LLInt is agnostic - https://bugs.webkit.org/show_bug.cgi?id=99270 - - Reviewed by Geoffrey Garen. - - The fix is to hash cons the offsets based on configuration index, not the offsets - themselves. - - * offlineasm/offsets.rb: - -2012-10-13 Filip Pizlo <fpizlo@apple.com> - - IndexingType should not have a bit for each type - https://bugs.webkit.org/show_bug.cgi?id=98997 - - Reviewed by Oliver Hunt. - - Somewhat incidentally, the introduction of butterflies led to each indexing - type being represented by a unique bit. This is superficially nice since it - allows you to test if a structure corresponds to a particular indexing type - by saying !!(structure->indexingType() & TheType). But the downside is that - given the 8 bits we have for the m_indexingType field, that leaves only a - small number of possible indexing types if we have one per bit. - - This changeset changes the indexing type to be: - - Bit #1: Tells you if you're an array. - - Bits #2 - #5: 16 possible indexing types, including the blank type for - objects that don't have indexed properties. - - Bits #6-8: Auxiliary bits that we could use for other things. Currently we - just use one of those bits, for MayHaveIndexedAccessors. - - This is performance-neutral, and is primarily intended to give us more - breathing room for introducing new inferred array modes. - - * assembler/AbstractMacroAssembler.h: - (JSC::AbstractMacroAssembler::JumpList::jumps): - * assembler/MacroAssembler.h: - (MacroAssembler): - (JSC::MacroAssembler::patchableBranch32): - * assembler/MacroAssemblerARMv7.h: - (JSC::MacroAssemblerARMv7::patchableBranch32): - (MacroAssemblerARMv7): - * dfg/DFGArrayMode.cpp: - (JSC::DFG::modeAlreadyChecked): - * dfg/DFGRepatch.cpp: - (JSC::DFG::tryCacheGetByID): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::speculationCheck): - (JSC::DFG::SpeculativeJIT::forwardSpeculationCheck): - (JSC::DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode): - (DFG): - (JSC::DFG::SpeculativeJIT::checkArray): - (JSC::DFG::SpeculativeJIT::arrayify): - * dfg/DFGSpeculativeJIT.h: - (SpeculativeJIT): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * jit/JITInlineMethods.h: - (JSC::JIT::emitAllocateJSArray): - (JSC::JIT::chooseArrayMode): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::emit_op_get_by_val): - (JSC::JIT::emitContiguousGetByVal): - (JSC::JIT::emitArrayStorageGetByVal): - (JSC::JIT::emit_op_put_by_val): - (JSC::JIT::emitContiguousPutByVal): - (JSC::JIT::emitArrayStoragePutByVal): - (JSC::JIT::privateCompilePatchGetArrayLength): - * jit/JITPropertyAccess32_64.cpp: - (JSC::JIT::emit_op_get_by_val): - (JSC::JIT::emitContiguousGetByVal): - (JSC::JIT::emitArrayStorageGetByVal): - (JSC::JIT::emit_op_put_by_val): - (JSC::JIT::emitContiguousPutByVal): - (JSC::JIT::emitArrayStoragePutByVal): - (JSC::JIT::privateCompilePatchGetArrayLength): - * llint/LowLevelInterpreter.asm: - * llint/LowLevelInterpreter32_64.asm: - * llint/LowLevelInterpreter64.asm: - * runtime/IndexingType.h: - (JSC): - (JSC::hasIndexedProperties): - (JSC::hasContiguous): - (JSC::hasFastArrayStorage): - (JSC::hasArrayStorage): - (JSC::shouldUseSlowPut): - * runtime/JSGlobalObject.cpp: - (JSC): - * runtime/StructureTransitionTable.h: - (JSC::newIndexingType): - -2012-10-14 Filip Pizlo <fpizlo@apple.com> - - DFG structure check hoisting should attempt to ignore side effects and make transformations that are sound even in their presence - https://bugs.webkit.org/show_bug.cgi?id=99262 - - Reviewed by Oliver Hunt. - - This hugely simplifies the structure check hoisting phase. It will no longer be necessary - to modify it when the effectfulness of operations changes. This also enables the hoister - to hoist effectful things in the future. - - The downside is that the hoister may end up adding strictly more checks than were present - in the original code, if the code truly has a lot of side-effects. I don't see evidence - of this happening. This patch does have some speed-ups and some slow-downs, but is - neutral in the average, and the slow-downs do not appear to have more structure checks - than ToT. - - * dfg/DFGStructureCheckHoistingPhase.cpp: - (JSC::DFG::StructureCheckHoistingPhase::run): - (JSC::DFG::StructureCheckHoistingPhase::noticeStructureCheck): - (StructureCheckHoistingPhase): - (CheckData): - (JSC::DFG::StructureCheckHoistingPhase::CheckData::CheckData): - -2012-10-14 Filip Pizlo <fpizlo@apple.com> - - Fix the build of universal binary with ARMv7s of JavaScriptCore - - * llint/LLIntOfflineAsmConfig.h: - * llint/LowLevelInterpreter.asm: - -2012-10-13 Filip Pizlo <fpizlo@apple.com> - - Array length array profiling is broken in the baseline JIT - https://bugs.webkit.org/show_bug.cgi?id=99258 - - Reviewed by Oliver Hunt. - - The code generator for array length stubs calls into - emitArrayProfilingSiteForBytecodeIndex(), which emits profiling only if - canBeOptimized() returns true. But m_canBeOptimized is only initialized during - full method compiles, so in a stub compile it may (or may not) be false, meaning - that we may, or may not, get meaningful profiling info. - - This appeared to not affect too many programs since the LLInt has good array - length array profiling. - - * jit/JIT.h: - (JSC::JIT::compilePatchGetArrayLength): - -2012-10-14 Patrick Gansterer <paroga@webkit.org> - - Build fix for WinCE after r131089. - - WinCE does not support getenv(). - - * runtime/Options.cpp: - (JSC::overrideOptionWithHeuristic): - -2012-10-12 Kangil Han <kangil.han@samsung.com> - - Fix build error on DFGSpeculativeJIT32_64.cpp - https://bugs.webkit.org/show_bug.cgi?id=99234 - - Reviewed by Anders Carlsson. - - Seems BUG 98608 causes build error on 32bit machine so fix it. - - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - -2012-10-12 Filip Pizlo <fpizlo@apple.com> - - Contiguous array allocation should always be inlined - https://bugs.webkit.org/show_bug.cgi?id=98608 - - Reviewed by Oliver Hunt and Mark Hahnenberg. - - This inlines contiguous array allocation in the most obvious way possible. - - * JavaScriptCore.xcodeproj/project.pbxproj: - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::branchSubPtr): - (MacroAssembler): - * assembler/MacroAssemblerX86_64.h: - (JSC::MacroAssemblerX86_64::branchSubPtr): - (MacroAssemblerX86_64): - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::execute): - * dfg/DFGCCallHelpers.h: - (JSC::DFG::CCallHelpers::setupArgumentsWithExecState): - (CCallHelpers): - * dfg/DFGCallArrayAllocatorSlowPathGenerator.h: Added. - (DFG): - (CallArrayAllocatorSlowPathGenerator): - (JSC::DFG::CallArrayAllocatorSlowPathGenerator::CallArrayAllocatorSlowPathGenerator): - (JSC::DFG::CallArrayAllocatorSlowPathGenerator::generateInternal): - (CallArrayAllocatorWithVariableSizeSlowPathGenerator): - (JSC::DFG::CallArrayAllocatorWithVariableSizeSlowPathGenerator::CallArrayAllocatorWithVariableSizeSlowPathGenerator): - (JSC::DFG::CallArrayAllocatorWithVariableSizeSlowPathGenerator::generateInternal): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::emitAllocateJSArray): - (DFG): - (JSC::DFG::SpeculativeJIT::compileAllocatePropertyStorage): - (JSC::DFG::SpeculativeJIT::compileReallocatePropertyStorage): - * dfg/DFGSpeculativeJIT.h: - (JSC::DFG::SpeculativeJIT::callOperation): - (SpeculativeJIT): - (JSC::DFG::SpeculativeJIT::emitAllocateBasicStorage): - (JSC::DFG::SpeculativeJIT::emitAllocateBasicJSObject): - (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - -2012-10-12 Mark Hahnenberg <mhahnenberg@apple.com> - - Race condition during CopyingPhase can lead to deadlock - https://bugs.webkit.org/show_bug.cgi?id=99226 - - Reviewed by Filip Pizlo. - - The main thread calls startCopying() for each of the GCThreads at the beginning of the copy phase. - It then proceeds to start copying. If copying completes before one of the GCThreads wakes up, the - main thread will set m_currentPhase back to NoPhase, the GCThread will wake up, see that there's - nothing to do, and then it will go back to sleep without ever calling CopyVisitor::doneCopying() - to return its borrowed block to the CopiedSpace. CopiedSpace::doneCopying() will then sleep forever - waiting on the block. - - The fix for this is to make sure we call CopiedSpace::doneCopying() on the main thread before we - call GCThreadSharedData::didFinishCopying(), which sets the m_currentPhase flag to NoPhase. This - way we will wait until all threads have woken up and given back their borrowed blocks before - clearing the flag. - - * heap/Heap.cpp: - (JSC::Heap::copyBackingStores): - -2012-10-12 Anders Carlsson <andersca@apple.com> - - Move macros from Parser.h to Parser.cpp - https://bugs.webkit.org/show_bug.cgi?id=99217 - - Reviewed by Andreas Kling. - - There are a bunch of macros in Parser.h that are only used in Parser.cpp. Move them to Parser.cpp - so they won't pollute the global namespace. - * parser/Parser.cpp: - * parser/Parser.h: - (JSC): - -2012-10-12 Mark Hahnenberg <mhahnenberg@apple.com> - - Another build fix after r131213 - - Added some symbol magic to placate the linker on some platforms. - - * JavaScriptCore.order: - -2012-10-12 Mark Hahnenberg <mhahnenberg@apple.com> - - Build fix after r131213 - - Removed an unused variable that was making compilers unhappy. - - * heap/GCThread.cpp: - (JSC::GCThread::GCThread): - * heap/GCThread.h: - (GCThread): - * heap/GCThreadSharedData.cpp: - (JSC::GCThreadSharedData::GCThreadSharedData): - -2012-10-09 Mark Hahnenberg <mhahnenberg@apple.com> - - Copying collection shouldn't require O(live bytes) memory overhead - https://bugs.webkit.org/show_bug.cgi?id=98792 - - Reviewed by Filip Pizlo. - - Currently our copying collection occurs simultaneously with the marking phase. We'd like - to be able to reuse CopiedBlocks as soon as they become fully evacuated, but this is not - currently possible because we don't know the liveness statistics of each old CopiedBlock - until marking/copying has already finished. Instead, we have to allocate additional memory - from the OS to use as our working set of CopiedBlocks while copying. We then return the - fully evacuated old CopiedBlocks back to the block allocator, thus giving our copying phase - an O(live bytes) overhead. - - To fix this, we should instead split the copying phase apart from the marking phase. This - way we have full liveness data for each CopiedBlock during the copying phase so that we - can reuse them the instant they become fully evacuated. With the additional liveness data - that each CopiedBlock accumulates, we can add some additional heuristics to the collector. - For example, we can calculate our global Heap fragmentation and only choose to do a copying - phase if that fragmentation exceeds some limit. As another example, we can skip copying - blocks that are already above a particular fragmentation limit, which allows older objects - to coalesce into blocks that are rarely copied. - - * JavaScriptCore.xcodeproj/project.pbxproj: - * heap/CopiedBlock.h: - (CopiedBlock): - (JSC::CopiedBlock::CopiedBlock): Added support for tracking live bytes in a CopiedBlock in a - thread-safe fashion. - (JSC::CopiedBlock::reportLiveBytes): Adds a number of live bytes to the block in a thread-safe - fashion using compare and swap. - (JSC): - (JSC::CopiedBlock::didSurviveGC): Called when a block survives a single GC without being - evacuated. This could be called for a couple reasons: (a) the block was pinned or (b) we - decided not to do any copying. A block can become pinned for a few reasons: (1) a pointer into - the block was found during the conservative scan. (2) the block was deemed full enough to - not warrant any copying. (3) The block is oversize and was found to be live. - (JSC::CopiedBlock::didEvacuateBytes): Called when some number of bytes are copied from this - block. If the number of live bytes ever hits zero, the block will return itself to the - BlockAllocator to be recycled. - (JSC::CopiedBlock::canBeRecycled): Indicates that a block has no live bytes and can be - immediately recycled. This is used for blocks that are found to have zero live bytes at the - beginning of the copying phase. - (JSC::CopiedBlock::shouldEvacuate): This function returns true if the current fragmentation - of the block is above our fragmentation threshold, and false otherwise. - (JSC::CopiedBlock::isPinned): Added an accessor for the pinned flag - (JSC::CopiedBlock::liveBytes): - * heap/CopiedSpace.cpp: - (JSC::CopiedSpace::CopiedSpace): - (JSC::CopiedSpace::doneFillingBlock): Changed so that we can exchange our filled block for a - fresh block. This avoids the situation where a thread returns its borrowed block, it's the last - borrowed block, so CopiedSpace thinks that copying has completed, and it starts doing all of the - copying phase cleanup. In actuality, the thread wanted another block after returning the current - block. So we allow the thread to atomically exchange its block for another block. - (JSC::CopiedSpace::startedCopying): Added the calculation of global Heap fragmentation to - determine if the copying phase should commence. We include the MarkedSpace in our fragmentation - calculation by assuming that the MarkedSpace is 0% fragmented since we can reuse any currently - free memory in it (i.e. we ignore any internal fragmentation in the MarkedSpace). While we're - calculating the fragmentation of CopiedSpace, we also return any free blocks we find along the - way (meaning liveBytes() == 0). - (JSC): - (JSC::CopiedSpace::doneCopying): We still have to iterate over all the blocks, regardless of - whether the copying phase took place or not so that we can reset all of the live bytes counters - and un-pin any pinned blocks. - * heap/CopiedSpace.h: - (CopiedSpace): - (JSC::CopiedSpace::shouldDoCopyPhase): - * heap/CopiedSpaceInlineMethods.h: - (JSC::CopiedSpace::recycleEvacuatedBlock): This function is distinct from recycling a borrowed block - because a borrowed block hasn't been added to the CopiedSpace yet, but an evacuated block is still - currently in CopiedSpace, so we have to make sure we properly remove all traces of the block from - CopiedSpace before returning it to BlockAllocator. - (JSC::CopiedSpace::recycleBorrowedBlock): Renamed to indicate the distinction mentioned above. - * heap/CopyVisitor.cpp: Added. - (JSC): - (JSC::CopyVisitor::CopyVisitor): - (JSC::CopyVisitor::copyFromShared): Main function for any thread participating in the copying phase. - Grabs chunks of MarkedBlocks from the shared list and copies the backing store of anybody who needs - it until there are no more chunks to copy. - * heap/CopyVisitor.h: Added. - (JSC): - (CopyVisitor): - * heap/CopyVisitorInlineMethods.h: Added. - (JSC): - (GCCopyPhaseFunctor): - (JSC::GCCopyPhaseFunctor::GCCopyPhaseFunctor): - (JSC::GCCopyPhaseFunctor::operator()): - (JSC::CopyVisitor::checkIfShouldCopy): We don't have to check shouldEvacuate() because all of those - checks are done during the marking phase. - (JSC::CopyVisitor::allocateNewSpace): - (JSC::CopyVisitor::allocateNewSpaceSlow): - (JSC::CopyVisitor::startCopying): Initialization function for a thread that is about to start copying. - (JSC::CopyVisitor::doneCopying): - (JSC::CopyVisitor::didCopy): This callback is called by an object that has just successfully copied its - backing store. It indicates to the CopiedBlock that somebody has just finished evacuating some number of - bytes from it, and, if the CopiedBlock now has no more live bytes, can be recycled immediately. - * heap/GCThread.cpp: Added. - (JSC): - (JSC::GCThread::GCThread): This is a new class that encapsulates a single thread responsible for participating - in a specific set of GC phases. Currently, that set of phases includes Mark, Copy, and Exit. Each thread - monitors a shared variable in its associated GCThreadSharedData. The main thread updates this m_currentPhase - variable as collection progresses through the various phases. Parallel marking still works exactly like it - has. In other words, the "run loop" for each of the GC threads sits above any individual phase, thus keeping - the separate phases of the collector orthogonal. - (JSC::GCThread::threadID): - (JSC::GCThread::initializeThreadID): - (JSC::GCThread::slotVisitor): - (JSC::GCThread::copyVisitor): - (JSC::GCThread::waitForNextPhase): - (JSC::GCThread::gcThreadMain): - (JSC::GCThread::gcThreadStartFunc): - * heap/GCThread.h: Added. - (JSC): - (GCThread): - * heap/GCThreadSharedData.cpp: The GCThreadSharedData now has a list of GCThread objects rather than raw - ThreadIdentifiers. - (JSC::GCThreadSharedData::resetChildren): - (JSC::GCThreadSharedData::childVisitCount): - (JSC::GCThreadSharedData::GCThreadSharedData): - (JSC::GCThreadSharedData::~GCThreadSharedData): - (JSC::GCThreadSharedData::reset): - (JSC::GCThreadSharedData::didStartMarking): Callback to let the GCThreadSharedData know that marking has - started and updates the m_currentPhase variable and notifies the GCThreads accordingly. - (JSC::GCThreadSharedData::didFinishMarking): Ditto for finishing marking. - (JSC::GCThreadSharedData::didStartCopying): Ditto for starting the copying phase. - (JSC::GCThreadSharedData::didFinishCopying): Ditto for finishing copying. - * heap/GCThreadSharedData.h: - (JSC): - (GCThreadSharedData): - (JSC::GCThreadSharedData::getNextBlocksToCopy): Atomically gets the next chunk of work for a copying thread. - * heap/Heap.cpp: - (JSC::Heap::Heap): - (JSC::Heap::markRoots): - (JSC): - (JSC::Heap::copyBackingStores): Responsible for setting up the copying phase, notifying the copying threads, - and doing any copying work if necessary. - (JSC::Heap::collect): - * heap/Heap.h: - (Heap): - (JSC): - (JSC::CopyFunctor::CopyFunctor): - (CopyFunctor): - (JSC::CopyFunctor::operator()): - * heap/IncrementalSweeper.cpp: Changed the incremental sweeper to have a reference to the list of MarkedBlocks - that need sweeping, since this now resides in the Heap so that it can be easily shared by the GCThreads. - (JSC::IncrementalSweeper::IncrementalSweeper): - (JSC::IncrementalSweeper::startSweeping): - * heap/IncrementalSweeper.h: - (JSC): - (IncrementalSweeper): - * heap/SlotVisitor.cpp: - (JSC::SlotVisitor::setup): - (JSC::SlotVisitor::drainFromShared): We no longer do any copying-related work here. - (JSC): - * heap/SlotVisitor.h: - (SlotVisitor): - * heap/SlotVisitorInlineMethods.h: - (JSC): - (JSC::SlotVisitor::copyLater): Notifies the CopiedBlock that there are some live bytes that may need - to be copied. - * runtime/Butterfly.h: - (JSC): - (Butterfly): - * runtime/ButterflyInlineMethods.h: - (JSC::Butterfly::createUninitializedDuringCollection): Uses the new CopyVisitor. - * runtime/ClassInfo.h: - (MethodTable): Added new "virtual" function copyBackingStore to method table. - (JSC): - * runtime/JSCell.cpp: - (JSC::JSCell::copyBackingStore): Default implementation that does nothing. - (JSC): - * runtime/JSCell.h: - (JSC): - (JSCell): - * runtime/JSObject.cpp: - (JSC::JSObject::copyButterfly): Does the actual copying of the butterfly. - (JSC): - (JSC::JSObject::visitButterfly): Calls copyLater for the butterfly. - (JSC::JSObject::copyBackingStore): - * runtime/JSObject.h: - (JSObject): - (JSC::JSCell::methodTable): - (JSC::JSCell::inherits): - * runtime/Options.h: Added two new constants, minHeapUtilization and minCopiedBlockUtilization, - to govern the amount of fragmentation we allow before doing copying. - (JSC): - -2012-10-12 Filip Pizlo <fpizlo@apple.com> - - DFG array allocation calls should not return an encoded JSValue - https://bugs.webkit.org/show_bug.cgi?id=99196 - - Reviewed by Mark Hahnenberg. - - The array allocation operations now return a pointer instead. This makes it - easier to share code between 32-bit and 64-bit. - - * dfg/DFGOperations.cpp: - * dfg/DFGOperations.h: - * dfg/DFGSpeculativeJIT.h: - (JSC::DFG::SpeculativeJIT::callOperation): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - -2012-10-01 Jer Noble <jer.noble@apple.com> - - Enable ENCRYPTED_MEDIA support on Mac. - https://bugs.webkit.org/show_bug.cgi?id=98044 - - Reviewed by Anders Carlsson. - - Enable the ENCRYPTED_MEDIA flag. - - * Configurations/FeatureDefines.xcconfig: - -2012-10-12 Filip Pizlo <fpizlo@apple.com> - - Unreviewed. It should be possible to build JSC on ARMv7. - - * assembler/MacroAssemblerARMv7.h: - (JSC::MacroAssemblerARMv7::patchableBranchPtr): - -2012-10-11 Mark Hahnenberg <mhahnenberg@apple.com> - - BlockAllocator should use regions as its VM allocation abstraction - https://bugs.webkit.org/show_bug.cgi?id=99107 - - Reviewed by Geoffrey Garen. - - Currently the BlockAllocator allocates a single block at a time directly from the OS. Our block - allocations are on the large-ish side (64 KB) to amortize across many allocations the expense of - mapping new virtual memory from the OS. These large blocks are then shared between the MarkedSpace - and the CopiedSpace. This design makes it difficult to vary the size of the blocks in different - parts of the Heap while still allowing us to amortize the VM allocation costs. - - We should redesign the BlockAllocator so that it has a layer of indirection between blocks that are - used by the allocator/collector and our primary unit of VM allocation from the OS. In particular, - the BlockAllocator should allocate Regions of virtual memory from the OS, which are then subdivided - into one or more Blocks to be used in our custom allocators. This design has the following nice properties: - - 1) We can remove the knowledge of PageAllocationAligned from HeapBlocks. Each HeapBlock will now - only know what Region it belongs to. The Region maintains all the metadata for how to allocate - and deallocate virtual memory from the OS. - - 2) We can easily allocate in larger chunks than we need to satisfy a particular request for a Block. - We can then continue to amortize our VM allocation costs while allowing for smaller block sizes, - which should increase locality in the mutator when allocating, lazy sweeping, etc. - - 3) By encapsulating the logic of where our memory comes from inside of the Region class, we can more - easily transition over to allocating VM from a specific range of pre-reserved address space. This - will be a necessary step along the way to 32-bit pointers. - - This particular patch will not change the size of MarkedBlocks or CopiedBlocks, nor will it change how - much VM we allocate per failed Block request. It only sets up the data structures that we need to make - these changes in future patches. - - Most of the changes in this patch relate to the addition of the Region class to be used by the - BlockAllocator and the threading of changes made to BlockAllocator's interface through to the call sites. - - * heap/BlockAllocator.cpp: The BlockAllocator now has three lists that track the three disjoint sets of - Regions that it cares about: empty regions, partially full regions, and completely full regions. - Empty regions have no blocks currently in use and can be freed immediately if the freeing thread - determines they should be. Partial regions have some blocks used, but aren't completely in use yet. - These regions are preferred for recycling before empty regions to mitigate fragmentation within regions. - Completely full regions are no longer able to be used for allocations. Regions move between these - three lists as they are created and their constituent blocks are allocated and deallocated. - (JSC::BlockAllocator::BlockAllocator): - (JSC::BlockAllocator::~BlockAllocator): - (JSC::BlockAllocator::releaseFreeRegions): - (JSC::BlockAllocator::waitForRelativeTimeWhileHoldingLock): - (JSC::BlockAllocator::waitForRelativeTime): - (JSC::BlockAllocator::blockFreeingThreadMain): - * heap/BlockAllocator.h: - (JSC): - (DeadBlock): - (JSC::DeadBlock::DeadBlock): - (Region): - (JSC::Region::blockSize): - (JSC::Region::isFull): - (JSC::Region::isEmpty): - (JSC::Region::create): This function is responsible for doing the actual VM allocation. This should be the - only function in the entire JSC object runtime that calls out the OS for virtual memory allocation. - (JSC::Region::Region): - (JSC::Region::~Region): - (JSC::Region::allocate): - (JSC::Region::deallocate): - (BlockAllocator): - (JSC::BlockAllocator::tryAllocateFromRegion): Helper function that encapsulates checking a particular list - of regions for a free block. - (JSC::BlockAllocator::allocate): - (JSC::BlockAllocator::allocateCustomSize): This function is responsible for allocating one-off custom size - regions for use in oversize allocations in both the MarkedSpace and the CopiedSpace. These regions are not - tracked by the BlockAllocator. The only pointer to them is in the HeapBlock that is returned. These regions - contain exactly one block. - (JSC::BlockAllocator::deallocate): - (JSC::BlockAllocator::deallocateCustomSize): This function is responsible for deallocating one-off custom size - regions. The regions are deallocated back to the OS eagerly. - * heap/CopiedBlock.h: Re-worked CopiedBlocks to use Regions instead of PageAllocationAligned. - (CopiedBlock): - (JSC::CopiedBlock::createNoZeroFill): - (JSC::CopiedBlock::create): - (JSC::CopiedBlock::CopiedBlock): - (JSC::CopiedBlock::payloadEnd): - (JSC::CopiedBlock::capacity): - * heap/CopiedSpace.cpp: - (JSC::CopiedSpace::~CopiedSpace): - (JSC::CopiedSpace::tryAllocateOversize): - (JSC::CopiedSpace::tryReallocateOversize): - (JSC::CopiedSpace::doneCopying): - * heap/CopiedSpaceInlineMethods.h: - (JSC::CopiedSpace::allocateBlockForCopyingPhase): - (JSC::CopiedSpace::allocateBlock): - * heap/HeapBlock.h: - (JSC::HeapBlock::destroy): - (JSC::HeapBlock::HeapBlock): - (JSC::HeapBlock::region): - (HeapBlock): - * heap/MarkedAllocator.cpp: - (JSC::MarkedAllocator::allocateBlock): - * heap/MarkedBlock.cpp: - (JSC::MarkedBlock::create): - (JSC::MarkedBlock::MarkedBlock): - * heap/MarkedBlock.h: - (JSC::MarkedBlock::capacity): - * heap/MarkedSpace.cpp: - (JSC::MarkedSpace::freeBlock): - -2012-10-11 Filip Pizlo <fpizlo@apple.com> - - UInt32ToNumber and OSR exit should be aware of copy propagation and correctly recover both versions of a variable that was subject to a UInt32ToNumber cast - https://bugs.webkit.org/show_bug.cgi?id=99100 - <rdar://problem/12480955> - - Reviewed by Michael Saboff and Mark Hahnenberg. - - Fixed by forcing UInt32ToNumber to use a different register. This "undoes" the copy propagation that we - would have been doing, since it has no performance effect in this case and has the benefit of making the - OSR exit compiler a lot simpler. - - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::compileUInt32ToNumber): - -2012-10-11 Geoffrey Garen <ggaren@apple.com> - - Removed some more static assumptions about inline object capacity - https://bugs.webkit.org/show_bug.cgi?id=98603 - - Reviewed by Filip Pizlo. - - * dfg/DFGSpeculativeJIT.h: - (JSC::DFG::SpeculativeJIT::emitAllocateBasicJSObject): Use JSObject::allocationSize() - for a little more flexibility. We still pass it a constant inline capacity - because the JIT doesn't have a strategy for selecting a size class based - on non-constant capacity yet. "INLINE_STORAGE_CAPACITY" is a marker for - code that makes static assumptions about object size. - - * jit/JITInlineMethods.h: - (JSC::JIT::emitAllocateBasicJSObject): - * llint/LLIntData.cpp: - (JSC::LLInt::Data::performAssertions): - * llint/LowLevelInterpreter32_64.asm: - * llint/LowLevelInterpreter64.asm: Ditto for the rest of our many execution engines. - - * runtime/JSObject.h: - (JSC::JSObject::allocationSize): - (JSC::JSFinalObject::finishCreation): - (JSC::JSFinalObject::create): New helper function for computing object - size dynamically, since we plan to have objects of different sizes. - - (JSC::JSFinalObject::JSFinalObject): Note that our m_inlineStorage used - to auto-generate an implicit C++ constructor with default null initialization. - This memory is not observed in its uninitialized state, and our LLInt and - JIT allocators do not initialize it, so I did not add any explicit code - to do so, now that the implicit code is gone. - - (JSC::JSObject::offsetOfInlineStorage): Changed the math here to match - inlineStorageUnsafe(), since we can rely on an explicit data member anymore. - -2012-10-11 Geoffrey Garen <ggaren@apple.com> - - Enable RUNTIME_HEURISTICS all the time, for easier testing - https://bugs.webkit.org/show_bug.cgi?id=99090 - - Reviewed by Filip Pizlo. - - I find myself using this a lot, and there doesn't seem to be an obvious - reason to compile it out, since it only runs once at startup. - - * runtime/Options.cpp: - (JSC::overrideOptionWithHeuristic): - (JSC::Options::initialize): - * runtime/Options.h: Removed the #ifdef. - -2012-10-11 Geoffrey Garen <ggaren@apple.com> - - Removed ASSERT_CLASS_FITS_IN_CELL - https://bugs.webkit.org/show_bug.cgi?id=97634 - - Reviewed by Mark Hahnenberg. - - Our collector now supports arbitrarily sized objects, so the ASSERT is not needed. - - * API/JSCallbackFunction.cpp: - * API/JSCallbackObject.cpp: - * heap/MarkedSpace.h: - * jsc.cpp: - * runtime/Arguments.cpp: - * runtime/ArrayConstructor.cpp: - * runtime/ArrayPrototype.cpp: - * runtime/BooleanConstructor.cpp: - * runtime/BooleanObject.cpp: - * runtime/BooleanPrototype.cpp: - * runtime/DateConstructor.cpp: - * runtime/DatePrototype.cpp: - * runtime/Error.cpp: - * runtime/ErrorConstructor.cpp: - * runtime/ErrorPrototype.cpp: - * runtime/FunctionConstructor.cpp: - * runtime/FunctionPrototype.cpp: - * runtime/InternalFunction.cpp: - * runtime/JSActivation.cpp: - * runtime/JSArray.cpp: - * runtime/JSBoundFunction.cpp: - * runtime/JSFunction.cpp: - * runtime/JSGlobalObject.cpp: - * runtime/JSGlobalThis.cpp: - * runtime/JSNameScope.cpp: - * runtime/JSNotAnObject.cpp: - * runtime/JSONObject.cpp: - * runtime/JSObject.cpp: - * runtime/JSPropertyNameIterator.cpp: - * runtime/JSScope.cpp: - * runtime/JSWithScope.cpp: - * runtime/JSWrapperObject.cpp: - * runtime/MathObject.cpp: - * runtime/NameConstructor.cpp: - * runtime/NamePrototype.cpp: - * runtime/NativeErrorConstructor.cpp: - * runtime/NativeErrorPrototype.cpp: - * runtime/NumberConstructor.cpp: - * runtime/NumberObject.cpp: - * runtime/NumberPrototype.cpp: - * runtime/ObjectConstructor.cpp: - * runtime/ObjectPrototype.cpp: - * runtime/RegExpConstructor.cpp: - * runtime/RegExpMatchesArray.cpp: - * runtime/RegExpObject.cpp: - * runtime/RegExpPrototype.cpp: - * runtime/StringConstructor.cpp: - * runtime/StringObject.cpp: - * runtime/StringPrototype.cpp: - * testRegExp.cpp: Removed the ASSERT. - -2012-10-11 Filip Pizlo <fpizlo@apple.com> - - DFG should inline code blocks that use new_array_buffer - https://bugs.webkit.org/show_bug.cgi?id=98996 - - Reviewed by Geoffrey Garen. - - This adds plumbing to drop in constant buffers from the inlinees to the inliner. - It's smart about not duplicating buffers needlessly but doesn't try to completely - hash-cons them, either. - - * bytecode/CodeBlock.h: - (JSC::CodeBlock::numberOfConstantBuffers): - (JSC::CodeBlock::addConstantBuffer): - (JSC::CodeBlock::constantBufferAsVector): - (JSC::CodeBlock::constantBuffer): - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::execute): - * dfg/DFGByteCodeParser.cpp: - (ConstantBufferKey): - (JSC::DFG::ConstantBufferKey::ConstantBufferKey): - (JSC::DFG::ConstantBufferKey::operator==): - (JSC::DFG::ConstantBufferKey::hash): - (JSC::DFG::ConstantBufferKey::isHashTableDeletedValue): - (JSC::DFG::ConstantBufferKey::codeBlock): - (JSC::DFG::ConstantBufferKey::index): - (DFG): - (JSC::DFG::ConstantBufferKeyHash::hash): - (JSC::DFG::ConstantBufferKeyHash::equal): - (ConstantBufferKeyHash): - (WTF): - (ByteCodeParser): - (InlineStackEntry): - (JSC::DFG::ByteCodeParser::parseBlock): - (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): - * dfg/DFGCapabilities.h: - (JSC::DFG::canInlineOpcode): - * dfg/DFGOperations.cpp: - * dfg/DFGOperations.h: - * dfg/DFGSpeculativeJIT.h: - (JSC::DFG::SpeculativeJIT::callOperation): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - -2012-10-10 Zoltan Horvath <zoltan@webkit.org> - - Pageload tests should measure memory usage - https://bugs.webkit.org/show_bug.cgi?id=93958 - - Reviewed by Ryosuke Niwa. - - Add JS Heap and Heap memory measurement to PageLoad tests. - - * heap/HeapStatistics.cpp: - (JSC::HeapStatistics::usedJSHeap): Add new private function to expose the used JS Heap size. - (JSC): - * heap/HeapStatistics.h: - (HeapStatistics): Add new private function to expose the used JS Heap size. - -2012-10-10 Balazs Kilvady <kilvadyb@homejinni.com> - - RegisterFile to JSStack rename fix for a struct member. - - Compilation problem in debug build on MIPS - https://bugs.webkit.org/show_bug.cgi?id=98808 - - Reviewed by Alexey Proskuryakov. - - In ASSERT conditions structure field name "registerFile" was replaced - with type name "JSStack" and it should be "stack". - - * jit/JITStubs.cpp: - (JSC::JITThunks::JITThunks): structure member name fix. - -2012-10-10 Michael Saboff <msaboff@apple.com> - - After r130344, OpaqueJSString::string() shouldn't directly return the wrapped String - https://bugs.webkit.org/show_bug.cgi?id=98801 - - Reviewed by Geoffrey Garen. - - Return a copy of the wrapped String so that the wrapped string cannot be turned into - an Identifier. - - * API/OpaqueJSString.cpp: - (OpaqueJSString::string): - * API/OpaqueJSString.h: - (OpaqueJSString): - -2012-10-10 Peter Gal <galpeter@inf.u-szeged.hu> - - Add moveDoubleToInts and moveIntsToDouble to MacroAssemblerARM - https://bugs.webkit.org/show_bug.cgi?id=98855 - - Reviewed by Filip Pizlo. - - Implement the missing moveDoubleToInts and moveIntsToDouble - methods in the MacroAssemblerARM after r130839. - - * assembler/MacroAssemblerARM.h: - (JSC::MacroAssemblerARM::moveDoubleToInts): - (MacroAssemblerARM): - (JSC::MacroAssemblerARM::moveIntsToDouble): - -2012-10-09 Filip Pizlo <fpizlo@apple.com> - - Typed arrays should not be 20x slower in the baseline JIT than in the DFG JIT - https://bugs.webkit.org/show_bug.cgi?id=98605 - - Reviewed by Oliver Hunt and Gavin Barraclough. - - This adds typed array get_by_val/put_by_val patching to the baseline JIT. It's - a big (~40%) win on benchmarks that have trouble staying in the DFG JIT. Even - if we fix those benchmarks, this functionality gives us the insurance that we - typically desire with all speculative optimizations: even if we bail to - baseline, we're still reasonably performant. - - * CMakeLists.txt: - * GNUmakefile.list.am: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * Target.pri: - * assembler/MacroAssembler.cpp: Added. - (JSC): - * assembler/MacroAssembler.h: - (MacroAssembler): - (JSC::MacroAssembler::patchableBranchPtr): - * assembler/MacroAssemblerARMv7.h: - (MacroAssemblerARMv7): - (JSC::MacroAssemblerARMv7::moveDoubleToInts): - (JSC::MacroAssemblerARMv7::moveIntsToDouble): - (JSC::MacroAssemblerARMv7::patchableBranchPtr): - * assembler/MacroAssemblerX86.h: - (MacroAssemblerX86): - (JSC::MacroAssemblerX86::moveDoubleToInts): - (JSC::MacroAssemblerX86::moveIntsToDouble): - * bytecode/ByValInfo.h: - (JSC::hasOptimizableIndexingForClassInfo): - (JSC): - (JSC::hasOptimizableIndexing): - (JSC::jitArrayModeForClassInfo): - (JSC::jitArrayModeForStructure): - (JSC::ByValInfo::ByValInfo): - (ByValInfo): - * dfg/DFGAssemblyHelpers.cpp: - (DFG): - * dfg/DFGAssemblyHelpers.h: - (AssemblyHelpers): - (JSC::DFG::AssemblyHelpers::boxDouble): - (JSC::DFG::AssemblyHelpers::unboxDouble): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray): - (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray): - * dfg/DFGSpeculativeJIT.h: - (SpeculativeJIT): - * jit/JIT.h: - (JIT): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::emit_op_get_by_val): - (JSC::JIT::emit_op_put_by_val): - (JSC::JIT::privateCompileGetByVal): - (JSC::JIT::privateCompilePutByVal): - (JSC::JIT::emitIntTypedArrayGetByVal): - (JSC): - (JSC::JIT::emitFloatTypedArrayGetByVal): - (JSC::JIT::emitIntTypedArrayPutByVal): - (JSC::JIT::emitFloatTypedArrayPutByVal): - * jit/JITPropertyAccess32_64.cpp: - (JSC::JIT::emit_op_get_by_val): - (JSC::JIT::emit_op_put_by_val): - * jit/JITStubs.cpp: - (JSC::DEFINE_STUB_FUNCTION): - * runtime/JSCell.h: - * runtime/JSGlobalData.h: - (JSGlobalData): - (JSC::JSGlobalData::typedArrayDescriptor): - * runtime/TypedArrayDescriptor.h: Added. - (JSC): - (JSC::TypedArrayDescriptor::TypedArrayDescriptor): - (TypedArrayDescriptor): - -2012-10-09 Michael Saboff <msaboff@apple.com> - - Add tests to testapi for null OpaqueJSStrings - https://bugs.webkit.org/show_bug.cgi?id=98805 - - Reviewed by Geoffrey Garen. - - Added tests that check that OpaqueJSString, which is wrapped via JSStringRef, properly returns - null strings and that a null string in a JSStringRef will return a NULL JSChar* and 0 length - via the JSStringGetCharactersPtr() and JSStringGetLength() APIs respectively. Added a check that - JSValueMakeFromJSONString() properly handles a null string as well. - - * API/tests/testapi.c: - (main): - -2012-10-09 Jian Li <jianli@chromium.org> - - Update the CSS property used to support draggable regions. - https://bugs.webkit.org/show_bug.cgi?id=97156 - - Reviewed by Adam Barth. - - The CSS property to support draggable regions, guarded under - WIDGET_REGION is now disabled from Mac WebKit, in order not to cause - confusion with DASHBOARD_SUPPORT feature. - - * Configurations/FeatureDefines.xcconfig: Disable WIDGET_REGION feature. - -2012-10-09 Filip Pizlo <fpizlo@apple.com> - - Unreviewed, adding forgotten files. - - * bytecode/ByValInfo.h: Added. - (JSC): - (JSC::isOptimizableIndexingType): - (JSC::jitArrayModeForIndexingType): - (JSC::ByValInfo::ByValInfo): - (ByValInfo): - (JSC::getByValInfoBytecodeIndex): - * runtime/IndexingType.cpp: Added. - (JSC): - (JSC::indexingTypeToString): - -2012-10-08 Filip Pizlo <fpizlo@apple.com> - - JSC should infer when indexed storage is contiguous, and optimize for it - https://bugs.webkit.org/show_bug.cgi?id=97288 - - Reviewed by Mark Hahnenberg. - - This introduces a new kind of indexed property storage called Contiguous, - which has the following properties: - - - No header bits beyond IndexedHeader. This results in a 16 byte reduction - in memory usage per array versus an ArrayStorage array. It also means - that the total memory usage for an empty array is now just 3 * 8 on both - 32-bit and 64-bit. Of that, only 8 bytes are array-specific; the rest is - our standard object header overhead. - - - No need for hole checks on store. This results in a ~4% speed-up on - Kraken and a ~1% speed-up on V8v7. - - - publicLength <= vectorLength. This means that doing new Array(blah) - immediately allocates room for blah elements. - - - No sparse map or index bias. - - If you ever do things to an array that would require publicLength > - vectorLength, a sparse map, or index bias, then we switch to ArrayStorage - mode. This seems to never happen in any benchmark we track, and is unlikely - to happen very frequently on any website. - - * CMakeLists.txt: - * GNUmakefile.list.am: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * Target.pri: - * assembler/AbstractMacroAssembler.h: - (JSC::AbstractMacroAssembler::JumpList::append): - * assembler/MacroAssembler.h: - (MacroAssembler): - (JSC::MacroAssembler::patchableBranchTest32): - * bytecode/ByValInfo.h: Added. - (JSC): - (JSC::isOptimizableIndexingType): - (JSC::jitArrayModeForIndexingType): - (JSC::ByValInfo::ByValInfo): - (ByValInfo): - (JSC::getByValInfoBytecodeIndex): - * bytecode/CodeBlock.h: - (CodeBlock): - (JSC::CodeBlock::getByValInfo): - (JSC::CodeBlock::setNumberOfByValInfos): - (JSC::CodeBlock::numberOfByValInfos): - (JSC::CodeBlock::byValInfo): - * bytecode/SamplingTool.h: - * dfg/DFGAbstractState.cpp: - (JSC::DFG::AbstractState::execute): - * dfg/DFGArrayMode.cpp: - (JSC::DFG::fromObserved): - (JSC::DFG::modeAlreadyChecked): - (JSC::DFG::modeToString): - * dfg/DFGArrayMode.h: - (DFG): - (JSC::DFG::modeUsesButterfly): - (JSC::DFG::modeIsJSArray): - (JSC::DFG::isInBoundsAccess): - (JSC::DFG::mayStoreToTail): - (JSC::DFG::mayStoreToHole): - (JSC::DFG::modeIsPolymorphic): - (JSC::DFG::polymorphicIncludesContiguous): - (JSC::DFG::polymorphicIncludesArrayStorage): - (JSC::DFG::canCSEStorage): - (JSC::DFG::modeSupportsLength): - (JSC::DFG::benefitsFromStructureCheck): - (JSC::DFG::isEffectful): - * dfg/DFGByteCodeParser.cpp: - (JSC::DFG::ByteCodeParser::handleIntrinsic): - * dfg/DFGCSEPhase.cpp: - (JSC::DFG::CSEPhase::getArrayLengthElimination): - (JSC::DFG::CSEPhase::getByValLoadElimination): - (JSC::DFG::CSEPhase::performNodeCSE): - * dfg/DFGFixupPhase.cpp: - (JSC::DFG::FixupPhase::fixupNode): - (JSC::DFG::FixupPhase::checkArray): - (JSC::DFG::FixupPhase::blessArrayOperation): - * dfg/DFGGraph.h: - (JSC::DFG::Graph::byValIsPure): - * dfg/DFGOperations.cpp: - * dfg/DFGOperations.h: - * dfg/DFGRepatch.cpp: - (JSC::DFG::tryCacheGetByID): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::checkArray): - (JSC::DFG::SpeculativeJIT::arrayify): - (JSC::DFG::SpeculativeJIT::compileGetArrayLength): - (JSC::DFG::SpeculativeJIT::temporaryRegisterForPutByVal): - (DFG): - * dfg/DFGSpeculativeJIT.h: - (DFG): - (JSC::DFG::SpeculativeJIT::callOperation): - (SpeculativeJIT): - (JSC::DFG::SpeculativeJIT::putByValWillNeedExtraRegister): - (JSC::DFG::SpeculativeJIT::temporaryRegisterForPutByVal): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::compileContiguousGetByVal): - (DFG): - (JSC::DFG::SpeculativeJIT::compileArrayStorageGetByVal): - (JSC::DFG::SpeculativeJIT::compileContiguousPutByVal): - (JSC::DFG::SpeculativeJIT::compileArrayStoragePutByVal): - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::compileContiguousGetByVal): - (DFG): - (JSC::DFG::SpeculativeJIT::compileArrayStorageGetByVal): - (JSC::DFG::SpeculativeJIT::compileContiguousPutByVal): - (JSC::DFG::SpeculativeJIT::compileArrayStoragePutByVal): - (JSC::DFG::SpeculativeJIT::compile): - * interpreter/Interpreter.cpp: - (SamplingScope): - (JSC::SamplingScope::SamplingScope): - (JSC::SamplingScope::~SamplingScope): - (JSC): - (JSC::Interpreter::execute): - * jit/JIT.cpp: - (JSC::JIT::privateCompileSlowCases): - (JSC::JIT::privateCompile): - * jit/JIT.h: - (JSC::ByValCompilationInfo::ByValCompilationInfo): - (ByValCompilationInfo): - (JSC): - (JIT): - (JSC::JIT::compileGetByVal): - (JSC::JIT::compilePutByVal): - * jit/JITInlineMethods.h: - (JSC::JIT::emitAllocateJSArray): - (JSC::JIT::emitArrayProfileStoreToHoleSpecialCase): - (JSC): - (JSC::arrayProfileSaw): - (JSC::JIT::chooseArrayMode): - * jit/JITOpcodes.cpp: - (JSC::JIT::emitSlow_op_get_argument_by_val): - (JSC::JIT::emit_op_new_array): - (JSC::JIT::emitSlow_op_new_array): - * jit/JITOpcodes32_64.cpp: - (JSC::JIT::emitSlow_op_get_argument_by_val): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::emit_op_get_by_val): - (JSC): - (JSC::JIT::emitContiguousGetByVal): - (JSC::JIT::emitArrayStorageGetByVal): - (JSC::JIT::emitSlow_op_get_by_val): - (JSC::JIT::emit_op_put_by_val): - (JSC::JIT::emitContiguousPutByVal): - (JSC::JIT::emitArrayStoragePutByVal): - (JSC::JIT::emitSlow_op_put_by_val): - (JSC::JIT::privateCompilePatchGetArrayLength): - (JSC::JIT::privateCompileGetByVal): - (JSC::JIT::privateCompilePutByVal): - * jit/JITPropertyAccess32_64.cpp: - (JSC::JIT::emit_op_get_by_val): - (JSC): - (JSC::JIT::emitContiguousGetByVal): - (JSC::JIT::emitArrayStorageGetByVal): - (JSC::JIT::emitSlow_op_get_by_val): - (JSC::JIT::emit_op_put_by_val): - (JSC::JIT::emitContiguousPutByVal): - (JSC::JIT::emitArrayStoragePutByVal): - (JSC::JIT::emitSlow_op_put_by_val): - * jit/JITStubs.cpp: - (JSC::getByVal): - (JSC): - (JSC::DEFINE_STUB_FUNCTION): - (JSC::putByVal): - * jit/JITStubs.h: - * llint/LowLevelInterpreter.asm: - * llint/LowLevelInterpreter32_64.asm: - * llint/LowLevelInterpreter64.asm: - * runtime/ArrayConventions.h: - (JSC::isDenseEnoughForVector): - * runtime/ArrayPrototype.cpp: - (JSC): - (JSC::shift): - (JSC::unshift): - (JSC::arrayProtoFuncPush): - (JSC::arrayProtoFuncShift): - (JSC::arrayProtoFuncSplice): - (JSC::arrayProtoFuncUnShift): - * runtime/Butterfly.h: - (Butterfly): - (JSC::Butterfly::fromPointer): - (JSC::Butterfly::pointer): - (JSC::Butterfly::publicLength): - (JSC::Butterfly::vectorLength): - (JSC::Butterfly::setPublicLength): - (JSC::Butterfly::setVectorLength): - (JSC::Butterfly::contiguous): - (JSC::Butterfly::fromContiguous): - * runtime/ButterflyInlineMethods.h: - (JSC::Butterfly::unshift): - (JSC::Butterfly::shift): - * runtime/IndexingHeaderInlineMethods.h: - (JSC::IndexingHeader::indexingPayloadSizeInBytes): - * runtime/IndexingType.cpp: Added. - (JSC): - (JSC::indexingTypeToString): - * runtime/IndexingType.h: - (JSC): - (JSC::hasContiguous): - * runtime/JSArray.cpp: - (JSC::JSArray::setLengthWithArrayStorage): - (JSC::JSArray::setLength): - (JSC): - (JSC::JSArray::pop): - (JSC::JSArray::push): - (JSC::JSArray::shiftCountWithArrayStorage): - (JSC::JSArray::shiftCountWithAnyIndexingType): - (JSC::JSArray::unshiftCountWithArrayStorage): - (JSC::JSArray::unshiftCountWithAnyIndexingType): - (JSC::JSArray::sortNumericVector): - (JSC::JSArray::sortNumeric): - (JSC::JSArray::sortCompactedVector): - (JSC::JSArray::sort): - (JSC::JSArray::sortVector): - (JSC::JSArray::fillArgList): - (JSC::JSArray::copyToArguments): - (JSC::JSArray::compactForSorting): - * runtime/JSArray.h: - (JSC::JSArray::shiftCountForShift): - (JSC::JSArray::shiftCountForSplice): - (JSArray): - (JSC::JSArray::shiftCount): - (JSC::JSArray::unshiftCountForShift): - (JSC::JSArray::unshiftCountForSplice): - (JSC::JSArray::unshiftCount): - (JSC::JSArray::isLengthWritable): - (JSC::createContiguousArrayButterfly): - (JSC): - (JSC::JSArray::create): - (JSC::JSArray::tryCreateUninitialized): - * runtime/JSGlobalObject.cpp: - (JSC::JSGlobalObject::reset): - (JSC): - (JSC::JSGlobalObject::haveABadTime): - (JSC::JSGlobalObject::visitChildren): - * runtime/JSGlobalObject.h: - (JSGlobalObject): - (JSC::JSGlobalObject::arrayStructureWithArrayStorage): - (JSC::JSGlobalObject::addressOfArrayStructureWithArrayStorage): - (JSC::constructEmptyArray): - * runtime/JSObject.cpp: - (JSC::JSObject::visitButterfly): - (JSC::JSObject::getOwnPropertySlotByIndex): - (JSC::JSObject::putByIndex): - (JSC::JSObject::enterDictionaryIndexingMode): - (JSC::JSObject::createInitialContiguous): - (JSC): - (JSC::JSObject::createArrayStorage): - (JSC::JSObject::convertContiguousToArrayStorage): - (JSC::JSObject::ensureContiguousSlow): - (JSC::JSObject::ensureArrayStorageSlow): - (JSC::JSObject::ensureIndexedStorageSlow): - (JSC::JSObject::ensureArrayStorageExistsAndEnterDictionaryIndexingMode): - (JSC::JSObject::switchToSlowPutArrayStorage): - (JSC::JSObject::setPrototype): - (JSC::JSObject::deletePropertyByIndex): - (JSC::JSObject::getOwnPropertyNames): - (JSC::JSObject::defineOwnIndexedProperty): - (JSC::JSObject::putByIndexBeyondVectorLengthContiguousWithoutAttributes): - (JSC::JSObject::putByIndexBeyondVectorLength): - (JSC::JSObject::putDirectIndexBeyondVectorLengthWithArrayStorage): - (JSC::JSObject::putDirectIndexBeyondVectorLength): - (JSC::JSObject::getNewVectorLength): - (JSC::JSObject::countElementsInContiguous): - (JSC::JSObject::increaseVectorLength): - (JSC::JSObject::ensureContiguousLengthSlow): - (JSC::JSObject::getOwnPropertyDescriptor): - * runtime/JSObject.h: - (JSC::JSObject::getArrayLength): - (JSC::JSObject::getVectorLength): - (JSC::JSObject::canGetIndexQuickly): - (JSC::JSObject::getIndexQuickly): - (JSC::JSObject::tryGetIndexQuickly): - (JSC::JSObject::canSetIndexQuickly): - (JSC::JSObject::canSetIndexQuicklyForPutDirect): - (JSC::JSObject::setIndexQuickly): - (JSC::JSObject::initializeIndex): - (JSC::JSObject::hasSparseMap): - (JSC::JSObject::inSparseIndexingMode): - (JSObject): - (JSC::JSObject::ensureContiguous): - (JSC::JSObject::ensureIndexedStorage): - (JSC::JSObject::ensureContiguousLength): - (JSC::JSObject::indexingData): - (JSC::JSObject::relevantLength): - * runtime/JSValue.cpp: - (JSC::JSValue::description): - * runtime/Options.cpp: - (JSC::Options::initialize): - * runtime/Structure.cpp: - (JSC::Structure::needsSlowPutIndexing): - (JSC): - (JSC::Structure::suggestedArrayStorageTransition): - * runtime/Structure.h: - (Structure): - * runtime/StructureTransitionTable.h: - (JSC::newIndexingType): - -2012-10-09 Michael Saboff <msaboff@apple.com> - - After r130344, OpaqueJSString::identifier() adds wrapped String to identifier table - https://bugs.webkit.org/show_bug.cgi?id=98693 - REGRESSION (r130344): Install failed in Install Environment - <rdar://problem/12450118> - - Reviewed by Mark Rowe. - - Use Identifier(LChar*, length) or Identifier(UChar*, length) constructors so that we don't - add the String instance in the OpaqueJSString to any identifier tables. - - * API/OpaqueJSString.cpp: - (OpaqueJSString::identifier): - -2012-10-08 Mark Lam <mark.lam@apple.com> - - Renamed RegisterFile to JSStack, and removed prototype of the - previously deleted Interpreter::privateExecute(). - https://bugs.webkit.org/show_bug.cgi?id=98717. - - Reviewed by Filip Pizlo. - - * CMakeLists.txt: - * GNUmakefile.list.am: - * JavaScriptCore.order: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * Target.pri: - * bytecode/BytecodeConventions.h: - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::nameForRegister): - * bytecode/CodeBlock.h: - (CodeBlock): - * bytecode/ValueRecovery.h: - (JSC::ValueRecovery::alreadyInJSStack): - (JSC::ValueRecovery::alreadyInJSStackAsUnboxedInt32): - (JSC::ValueRecovery::alreadyInJSStackAsUnboxedCell): - (JSC::ValueRecovery::alreadyInJSStackAsUnboxedBoolean): - (JSC::ValueRecovery::alreadyInJSStackAsUnboxedDouble): - (JSC::ValueRecovery::displacedInJSStack): - (JSC::ValueRecovery::isAlreadyInJSStack): - (JSC::ValueRecovery::virtualRegister): - (JSC::ValueRecovery::dump): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::resolveCallee): - (JSC::BytecodeGenerator::emitCall): - (JSC::BytecodeGenerator::emitConstruct): - * bytecompiler/BytecodeGenerator.h: - (JSC::BytecodeGenerator::registerFor): - * dfg/DFGAbstractState.h: - (AbstractState): - * dfg/DFGAssemblyHelpers.h: - (JSC::DFG::AssemblyHelpers::emitGetFromCallFrameHeaderPtr): - (JSC::DFG::AssemblyHelpers::emitPutToCallFrameHeader): - (JSC::DFG::AssemblyHelpers::emitPutImmediateToCallFrameHeader): - * dfg/DFGByteCodeParser.cpp: - (JSC::DFG::ByteCodeParser::getDirect): - (JSC::DFG::ByteCodeParser::findArgumentPositionForLocal): - (JSC::DFG::ByteCodeParser::addCall): - (JSC::DFG::ByteCodeParser::InlineStackEntry::remapOperand): - (JSC::DFG::ByteCodeParser::handleInlining): - (JSC::DFG::ByteCodeParser::parseBlock): - (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): - * dfg/DFGGenerationInfo.h: - (GenerationInfo): - (JSC::DFG::GenerationInfo::needsSpill): - * dfg/DFGGraph.h: - * dfg/DFGJITCompiler.cpp: - (JSC::DFG::JITCompiler::compileEntry): - (JSC::DFG::JITCompiler::compileFunction): - * dfg/DFGJITCompiler.h: - (JSC::DFG::JITCompiler::beginCall): - * dfg/DFGOSREntry.cpp: - (JSC::DFG::prepareOSREntry): - * dfg/DFGOSRExitCompiler32_64.cpp: - (JSC::DFG::OSRExitCompiler::compileExit): - * dfg/DFGOSRExitCompiler64.cpp: - (JSC::DFG::OSRExitCompiler::compileExit): - * dfg/DFGRepatch.cpp: - (JSC::DFG::tryBuildGetByIDList): - * dfg/DFGSpeculativeJIT.cpp: - (JSC::DFG::SpeculativeJIT::compile): - (JSC::DFG::SpeculativeJIT::checkArgumentTypes): - (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor): - * dfg/DFGSpeculativeJIT.h: - (SpeculativeJIT): - (JSC::DFG::SpeculativeJIT::spill): - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::emitCall): - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::fillInteger): - (JSC::DFG::SpeculativeJIT::emitCall): - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGThunks.cpp: - (JSC::DFG::throwExceptionFromCallSlowPathGenerator): - (JSC::DFG::slowPathFor): - (JSC::DFG::virtualForThunkGenerator): - * dfg/DFGValueSource.cpp: - (JSC::DFG::ValueSource::dump): - * dfg/DFGValueSource.h: - (JSC::DFG::dataFormatToValueSourceKind): - (JSC::DFG::valueSourceKindToDataFormat): - (JSC::DFG::isInJSStack): - (JSC::DFG::ValueSource::forSpeculation): - (JSC::DFG::ValueSource::isInJSStack): - (JSC::DFG::ValueSource::valueRecovery): - * dfg/DFGVariableEventStream.cpp: - (JSC::DFG::VariableEventStream::reconstruct): - * heap/Heap.cpp: - (JSC::Heap::stack): - (JSC::Heap::getConservativeRegisterRoots): - (JSC::Heap::markRoots): - * heap/Heap.h: - (JSC): - (Heap): - * interpreter/CallFrame.cpp: - (JSC::CallFrame::stack): - * interpreter/CallFrame.h: - (JSC::ExecState::calleeAsValue): - (JSC::ExecState::callee): - (JSC::ExecState::codeBlock): - (JSC::ExecState::scope): - (JSC::ExecState::callerFrame): - (JSC::ExecState::returnPC): - (JSC::ExecState::hasReturnPC): - (JSC::ExecState::clearReturnPC): - (JSC::ExecState::bytecodeOffsetForNonDFGCode): - (JSC::ExecState::setBytecodeOffsetForNonDFGCode): - (JSC::ExecState::inlineCallFrame): - (JSC::ExecState::codeOriginIndexForDFG): - (JSC::ExecState::currentVPC): - (JSC::ExecState::setCurrentVPC): - (JSC::ExecState::setCallerFrame): - (JSC::ExecState::setScope): - (JSC::ExecState::init): - (JSC::ExecState::argumentCountIncludingThis): - (JSC::ExecState::offsetFor): - (JSC::ExecState::setArgumentCountIncludingThis): - (JSC::ExecState::setCallee): - (JSC::ExecState::setCodeBlock): - (JSC::ExecState::setReturnPC): - (JSC::ExecState::setInlineCallFrame): - (ExecState): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::slideRegisterWindowForCall): - (JSC::eval): - (JSC::loadVarargs): - (JSC::Interpreter::dumpRegisters): - (JSC::Interpreter::throwException): - (JSC::Interpreter::execute): - (JSC::Interpreter::executeCall): - (JSC::Interpreter::executeConstruct): - (JSC::Interpreter::prepareForRepeatCall): - (JSC::Interpreter::endRepeatCall): - * interpreter/Interpreter.h: - (JSC::Interpreter::stack): - (Interpreter): - (JSC::Interpreter::execute): - (JSC): - * interpreter/JSStack.cpp: Copied from Source/JavaScriptCore/interpreter/RegisterFile.cpp. - (JSC::stackStatisticsMutex): - (JSC::JSStack::~JSStack): - (JSC::JSStack::growSlowCase): - (JSC::JSStack::gatherConservativeRoots): - (JSC::JSStack::releaseExcessCapacity): - (JSC::JSStack::initializeThreading): - (JSC::JSStack::committedByteCount): - (JSC::JSStack::addToCommittedByteCount): - * interpreter/JSStack.h: Copied from Source/JavaScriptCore/interpreter/RegisterFile.h. - (JSStack): - (JSC::JSStack::JSStack): - (JSC::JSStack::shrink): - (JSC::JSStack::grow): - * interpreter/RegisterFile.cpp: Removed. - * interpreter/RegisterFile.h: Removed. - * interpreter/VMInspector.cpp: - (JSC::VMInspector::dumpFrame): - * jit/JIT.cpp: - (JSC::JIT::JIT): - (JSC::JIT::privateCompile): - * jit/JIT.h: - (JSC): - (JIT): - * jit/JITCall.cpp: - (JSC::JIT::compileLoadVarargs): - (JSC::JIT::compileCallEval): - (JSC::JIT::compileCallEvalSlowCase): - (JSC::JIT::compileOpCall): - * jit/JITCall32_64.cpp: - (JSC::JIT::emit_op_ret): - (JSC::JIT::emit_op_ret_object_or_this): - (JSC::JIT::compileLoadVarargs): - (JSC::JIT::compileCallEval): - (JSC::JIT::compileCallEvalSlowCase): - (JSC::JIT::compileOpCall): - * jit/JITCode.h: - (JSC): - (JSC::JITCode::execute): - * jit/JITInlineMethods.h: - (JSC::JIT::emitPutToCallFrameHeader): - (JSC::JIT::emitPutCellToCallFrameHeader): - (JSC::JIT::emitPutIntToCallFrameHeader): - (JSC::JIT::emitPutImmediateToCallFrameHeader): - (JSC::JIT::emitGetFromCallFrameHeaderPtr): - (JSC::JIT::emitGetFromCallFrameHeader32): - (JSC::JIT::updateTopCallFrame): - (JSC::JIT::unmap): - * jit/JITOpcodes.cpp: - (JSC::JIT::privateCompileCTIMachineTrampolines): - (JSC::JIT::privateCompileCTINativeCall): - (JSC::JIT::emit_op_end): - (JSC::JIT::emit_op_ret): - (JSC::JIT::emit_op_ret_object_or_this): - (JSC::JIT::emit_op_create_this): - (JSC::JIT::emit_op_get_arguments_length): - (JSC::JIT::emit_op_get_argument_by_val): - (JSC::JIT::emit_op_resolve_global_dynamic): - * jit/JITOpcodes32_64.cpp: - (JSC::JIT::privateCompileCTIMachineTrampolines): - (JSC::JIT::privateCompileCTINativeCall): - (JSC::JIT::emit_op_end): - (JSC::JIT::emit_op_create_this): - (JSC::JIT::emit_op_get_arguments_length): - (JSC::JIT::emit_op_get_argument_by_val): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::emit_op_get_scoped_var): - (JSC::JIT::emit_op_put_scoped_var): - * jit/JITPropertyAccess32_64.cpp: - (JSC::JIT::emit_op_get_scoped_var): - (JSC::JIT::emit_op_put_scoped_var): - * jit/JITStubs.cpp: - (JSC::ctiTrampoline): - (JSC::JITThunks::JITThunks): - (JSC): - (JSC::DEFINE_STUB_FUNCTION): - * jit/JITStubs.h: - (JSC): - (JITStackFrame): - * jit/JSInterfaceJIT.h: - * jit/SpecializedThunkJIT.h: - (JSC::SpecializedThunkJIT::SpecializedThunkJIT): - (JSC::SpecializedThunkJIT::returnJSValue): - (JSC::SpecializedThunkJIT::returnDouble): - (JSC::SpecializedThunkJIT::returnInt32): - (JSC::SpecializedThunkJIT::returnJSCell): - * llint/LLIntData.cpp: - (JSC::LLInt::Data::performAssertions): - * llint/LLIntOffsetsExtractor.cpp: - * llint/LLIntSlowPaths.cpp: - (JSC::LLInt::LLINT_SLOW_PATH_DECL): - (JSC::LLInt::genericCall): - * llint/LLIntSlowPaths.h: - (LLInt): - * llint/LowLevelInterpreter.asm: - * runtime/Arguments.cpp: - (JSC::Arguments::tearOffForInlineCallFrame): - * runtime/CommonSlowPaths.h: - (JSC::CommonSlowPaths::arityCheckFor): - * runtime/InitializeThreading.cpp: - (JSC::initializeThreadingOnce): - * runtime/JSActivation.cpp: - (JSC::JSActivation::visitChildren): - * runtime/JSGlobalObject.cpp: - (JSC::JSGlobalObject::globalExec): - * runtime/JSGlobalObject.h: - (JSC): - (JSGlobalObject): - * runtime/JSLock.cpp: - (JSC): - * runtime/JSVariableObject.h: - (JSVariableObject): - * runtime/MemoryStatistics.cpp: - (JSC::globalMemoryStatistics): - -2012-10-08 Kiran Muppala <cmuppala@apple.com> - - Throttle DOM timers on hidden pages. - https://bugs.webkit.org/show_bug.cgi?id=98474 - - Reviewed by Maciej Stachowiak. - - Add HIDDEN_PAGE_DOM_TIMER_THROTTLING feature define. - - * Configurations/FeatureDefines.xcconfig: - -2012-10-08 Michael Saboff <msaboff@apple.com> - - After r130344, OpaqueJSString() creates an empty string which should be a null string - https://bugs.webkit.org/show_bug.cgi?id=98417 - - Reviewed by Sam Weinig. - - Changed create() of a null string to return 0. This is the same behavior as before r130344. - - * API/OpaqueJSString.cpp: - (OpaqueJSString::create): - -2012-10-07 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org> - - Rename first/second to key/value in HashMap iterators - https://bugs.webkit.org/show_bug.cgi?id=82784 - - Reviewed by Eric Seidel. - - * API/JSCallbackObject.h: - (JSC::JSCallbackObjectData::JSPrivatePropertyMap::getPrivateProperty): - (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty): - (JSC::JSCallbackObjectData::JSPrivatePropertyMap::visitChildren): - * API/JSCallbackObjectFunctions.h: - (JSC::::getOwnNonIndexPropertyNames): - * API/JSClassRef.cpp: - (OpaqueJSClass::~OpaqueJSClass): - (OpaqueJSClassContextData::OpaqueJSClassContextData): - (OpaqueJSClass::contextData): - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - (JSC::EvalCodeCache::visitAggregate): - (JSC::CodeBlock::nameForRegister): - * bytecode/JumpTable.h: - (JSC::StringJumpTable::offsetForValue): - (JSC::StringJumpTable::ctiForValue): - * bytecode/LazyOperandValueProfile.cpp: - (JSC::LazyOperandValueProfileParser::getIfPresent): - * bytecode/SamplingTool.cpp: - (JSC::SamplingTool::dump): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::addVar): - (JSC::BytecodeGenerator::addGlobalVar): - (JSC::BytecodeGenerator::addConstant): - (JSC::BytecodeGenerator::addConstantValue): - (JSC::BytecodeGenerator::emitLoad): - (JSC::BytecodeGenerator::addStringConstant): - (JSC::BytecodeGenerator::emitLazyNewFunction): - * bytecompiler/NodesCodegen.cpp: - (JSC::PropertyListNode::emitBytecode): - * debugger/Debugger.cpp: - * dfg/DFGArgumentsSimplificationPhase.cpp: - (JSC::DFG::ArgumentsSimplificationPhase::run): - (JSC::DFG::ArgumentsSimplificationPhase::observeBadArgumentsUse): - (JSC::DFG::ArgumentsSimplificationPhase::observeProperArgumentsUse): - (JSC::DFG::ArgumentsSimplificationPhase::isOKToOptimize): - (JSC::DFG::ArgumentsSimplificationPhase::removeArgumentsReferencingPhantomChild): - * dfg/DFGAssemblyHelpers.cpp: - (JSC::DFG::AssemblyHelpers::decodedCodeMapFor): - * dfg/DFGByteCodeCache.h: - (JSC::DFG::ByteCodeCache::~ByteCodeCache): - (JSC::DFG::ByteCodeCache::get): - * dfg/DFGByteCodeParser.cpp: - (JSC::DFG::ByteCodeParser::cellConstant): - (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): - * dfg/DFGStructureCheckHoistingPhase.cpp: - (JSC::DFG::StructureCheckHoistingPhase::run): - (JSC::DFG::StructureCheckHoistingPhase::noticeStructureCheck): - (JSC::DFG::StructureCheckHoistingPhase::noticeClobber): - * heap/Heap.cpp: - (JSC::Heap::markProtectedObjects): - * heap/Heap.h: - (JSC::Heap::forEachProtectedCell): - * heap/JITStubRoutineSet.cpp: - (JSC::JITStubRoutineSet::markSlow): - (JSC::JITStubRoutineSet::deleteUnmarkedJettisonedStubRoutines): - * heap/SlotVisitor.cpp: - (JSC::SlotVisitor::internalAppend): - * heap/Weak.h: - (JSC::weakRemove): - * jit/JIT.cpp: - (JSC::JIT::privateCompile): - * jit/JITStubs.cpp: - (JSC::JITThunks::ctiStub): - * parser/Parser.cpp: - (JSC::::parseStrictObjectLiteral): - * profiler/Profile.cpp: - (JSC::functionNameCountPairComparator): - (JSC::Profile::debugPrintDataSampleStyle): - * runtime/Identifier.cpp: - (JSC::Identifier::add): - * runtime/JSActivation.cpp: - (JSC::JSActivation::getOwnNonIndexPropertyNames): - (JSC::JSActivation::symbolTablePutWithAttributes): - * runtime/JSArray.cpp: - (JSC::JSArray::setLength): - * runtime/JSObject.cpp: - (JSC::JSObject::getOwnPropertySlotByIndex): - (JSC::JSObject::enterDictionaryIndexingModeWhenArrayStorageAlreadyExists): - (JSC::JSObject::deletePropertyByIndex): - (JSC::JSObject::getOwnPropertyNames): - (JSC::JSObject::defineOwnIndexedProperty): - (JSC::JSObject::attemptToInterceptPutByIndexOnHoleForPrototype): - (JSC::JSObject::putByIndexBeyondVectorLengthWithArrayStorage): - (JSC::JSObject::putDirectIndexBeyondVectorLengthWithArrayStorage): - (JSC::JSObject::getOwnPropertyDescriptor): - * runtime/JSSymbolTableObject.cpp: - (JSC::JSSymbolTableObject::getOwnNonIndexPropertyNames): - * runtime/JSSymbolTableObject.h: - (JSC::symbolTableGet): - (JSC::symbolTablePut): - (JSC::symbolTablePutWithAttributes): - * runtime/RegExpCache.cpp: - (JSC::RegExpCache::invalidateCode): - * runtime/SparseArrayValueMap.cpp: - (JSC::SparseArrayValueMap::putEntry): - (JSC::SparseArrayValueMap::putDirect): - (JSC::SparseArrayValueMap::visitChildren): - * runtime/WeakGCMap.h: - (JSC::WeakGCMap::clear): - (JSC::WeakGCMap::set): - * tools/ProfileTreeNode.h: - (JSC::ProfileTreeNode::sampleChild): - (JSC::ProfileTreeNode::childCount): - (JSC::ProfileTreeNode::dumpInternal): - (JSC::ProfileTreeNode::compareEntries): - -2012-10-05 Mark Hahnenberg <mhahnenberg@apple.com> - - JSC should have a way to gather and log Heap memory use and pause times - https://bugs.webkit.org/show_bug.cgi?id=98431 - - Reviewed by Geoffrey Garen. - - In order to improve our infrastructure for benchmark-driven development, we should - have a centralized method of gathering and logging various statistics about the state - of the JS heap. This would allow us to create and to use other tools to analyze the - output of the VM after running various workloads. - - The first two statistics that might be interesting is memory use by JSC and GC pause - times. We can control whether this recording happens through the use of the Options - class, allowing us to either use environment variables or command line flags. - - * JavaScriptCore.xcodeproj/project.pbxproj: - * heap/Heap.cpp: - (JSC::Heap::collect): If we finish a collection and are still over our set GC heap size, - we end the program immediately and report an error. Also added recording of pause times. - * heap/Heap.h: - (Heap): - (JSC::Heap::shouldCollect): When we set a specific GC heap size through Options, we - ignore all other heuristics on when we should collect and instead only ask if we're - greater than the amount specified in the Option value. This allows us to view time/memory - tradeoffs more clearly. - * heap/HeapStatistics.cpp: Added. - (JSC): - (JSC::HeapStatistics::initialize): - (JSC::HeapStatistics::recordGCPauseTime): - (JSC::HeapStatistics::logStatistics): - (JSC::HeapStatistics::exitWithFailure): - (JSC::HeapStatistics::reportSuccess): - (JSC::HeapStatistics::parseMemoryAmount): - (StorageStatistics): - (JSC::StorageStatistics::StorageStatistics): - (JSC::StorageStatistics::operator()): - (JSC::StorageStatistics::objectWithOutOfLineStorageCount): - (JSC::StorageStatistics::objectCount): - (JSC::StorageStatistics::storageSize): - (JSC::StorageStatistics::storageCapacity): - (JSC::HeapStatistics::showObjectStatistics): Moved the old showHeapStatistics (renamed to showObjectStatistics) - to try to start collecting our various memory statistics gathering/reporting mechanisms scattered throughout the - codebase into one place. - * heap/HeapStatistics.h: Added. - (JSC): - (HeapStatistics): - * jsc.cpp: - (main): - * runtime/InitializeThreading.cpp: - (JSC::initializeThreadingOnce): We need to initialize our data structures for recording - statistics if necessary. - * runtime/Options.cpp: Add new Options for the various types of statistics we'll be gathering. - (JSC::parse): - (JSC): - (JSC::Options::initialize): Initialize the various new options using environment variables. - (JSC::Options::dumpOption): - * runtime/Options.h: - (JSC): - -2012-10-04 Rik Cabanier <cabanier@adobe.com> - - Turn Compositing on by default in WebKit build - https://bugs.webkit.org/show_bug.cgi?id=98315 - - Reviewed by Simon Fraser. - - enable -webkit-blend-mode on trunk. - - * Configurations/FeatureDefines.xcconfig: - -2012-10-04 Michael Saboff <msaboff@apple.com> - - Crash in Safari at com.apple.JavaScriptCore: WTF::StringImpl::is8Bit const + 12 - https://bugs.webkit.org/show_bug.cgi?id=98433 - - Reviewed by Jessie Berlin. - - The problem is due to a String with a null StringImpl (i.e. a null string). - Added a length check before the is8Bit() check since length() checks for a null StringImpl. Changed the - characters16() call to characters() since it can handle a null StringImpl as well. - - * API/JSValueRef.cpp: - (JSValueMakeFromJSONString): - -2012-10-04 Benjamin Poulain <bpoulain@apple.com> - - Use copyLCharsFromUCharSource() for IdentifierLCharFromUCharTranslator translation - https://bugs.webkit.org/show_bug.cgi?id=98335 - - Reviewed by Michael Saboff. - - Michael Saboff added an optimized version of UChar->LChar conversion in r125846. - Use this function in JSC::Identifier. - - * runtime/Identifier.cpp: - (JSC::IdentifierLCharFromUCharTranslator::translate): - -2012-10-04 Michael Saboff <msaboff@apple.com> - - After r130344, OpaqueJSString() creates a empty string which should be a null string - https://bugs.webkit.org/show_bug.cgi?id=98417 - - Reviewed by Alexey Proskuryakov. - - Removed the setting of enclosed string to an empty string from default constructor. - Before changeset r130344, the semantic was the default constructor produced a null - string. - - * API/OpaqueJSString.h: - (OpaqueJSString::OpaqueJSString): - -2012-10-04 Csaba Osztrogonác <ossy@webkit.org> - - [Qt] Add missing LLInt dependencies to the build system - https://bugs.webkit.org/show_bug.cgi?id=98394 - - Reviewed by Geoffrey Garen. - - * DerivedSources.pri: - * LLIntOffsetsExtractor.pro: - -2012-10-03 Geoffrey Garen <ggaren@apple.com> - - Next step toward fixing Windows: add new symbol. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - -2012-10-03 Geoffrey Garen <ggaren@apple.com> - - First step toward fixing Windows: remove old symbol. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - -2012-10-03 Geoffrey Garen <ggaren@apple.com> - - Removed the assumption that "final" objects have a fixed number of inline slots - https://bugs.webkit.org/show_bug.cgi?id=98332 - - Reviewed by Filip Pizlo. - - This is a step toward object size inference. - - I replaced the inline storage capacity constant with a data member per - structure, set the the maximum supported value for the constant to 100, - then fixed what broke. (Note that even though this patch increases the - theoretical maximum inline capacity, it doesn't change any actual inline - capacity.) - - * dfg/DFGSpeculativeJIT32_64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * dfg/DFGSpeculativeJIT64.cpp: - (JSC::DFG::SpeculativeJIT::compile): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compileGetDirectOffset): These functions just get a rename: - the constant they need is the first out of line offset along the offset - number line, which is not necessarily the same thing (and is, in this - patch, never the same thing) as the inline capacity of any given object. - - (JSC::JIT::emit_op_get_by_pname): - * jit/JITPropertyAccess32_64.cpp: This function changes functionality, - since it needs to convert from the abstract offset number line to an - actual offset in memory, and it can't assume that inline and out-of-line - offsets are contiguous on the number line. - - (JSC::JIT::compileGetDirectOffset): Updated for rename. - - (JSC::JIT::emit_op_get_by_pname): Same as emit_op_get_by_pname above. - - * llint/LowLevelInterpreter.asm: Updated to mirror changes in PropertyOffset.h, - since we duplicate values from there. - - * llint/LowLevelInterpreter32_64.asm: - * llint/LowLevelInterpreter64.asm: Just like the JIT, most things are just - renames, and get_by_pname changes to do more math. I also standardized - offset calculations to use a hard-coded "-2", to match the JIT. This - isn't really better, but it makes global search and replace easier, - should we choose to refactor this code not to hard-code constants. - - I also renamed loadPropertyAtVariableOffsetKnownNotFinal to - loadPropertyAtVariableOffsetKnownNotInline in order to sever the assumption - that inline capacity is tied to object type, and I changed the 64bit LLInt - to use this -- not using this previously seems to have been an oversight. - - * runtime/JSObject.cpp: - (JSC::JSObject::visitChildren): - (JSC::JSFinalObject::visitChildren): - * runtime/JSObject.h: - (JSC::JSObject::offsetForLocation): - (JSNonFinalObject): - (JSC::JSFinalObject::createStructure): - (JSFinalObject): - (JSC::JSFinalObject::finishCreation): Updated for above changes. - - * runtime/JSPropertyNameIterator.h: - (JSPropertyNameIterator): - (JSC::JSPropertyNameIterator::finishCreation): Store the inline capacity - of our object, since it's not a constant. - - (JSC::JSPropertyNameIterator::getOffset): Removed. This function was - wrong. Luckily, it was also unused, since the C++ interpreter is gone. - - * runtime/PropertyMapHashTable.h: - (PropertyTable): Use a helper function instead of hard-coding assumptions - about object types. - - (JSC::PropertyTable::nextOffset): - * runtime/PropertyOffset.h: - (JSC): - (JSC::checkOffset): - (JSC::validateOffset): - (JSC::isInlineOffset): - (JSC::numberOfSlotsForLastOffset): - (JSC::propertyOffsetFor): Refactored these functions to take inline capacity - as an argument, since it's not fixed at compile time anymore. - - * runtime/Structure.cpp: - (JSC::Structure::Structure): - (JSC::Structure::flattenDictionaryStructure): - (JSC::Structure::putSpecificValue): - * runtime/Structure.h: - (Structure): - (JSC::Structure::outOfLineCapacity): - (JSC::Structure::hasInlineStorage): - (JSC::Structure::inlineCapacity): - (JSC::Structure::inlineSize): - (JSC::Structure::firstValidOffset): - (JSC::Structure::lastValidOffset): - (JSC::Structure::create): Removed some hard-coded assumptions about inline - capacity and object type, and replaced with more liberal use of helper functions. - -2012-10-03 Michael Saboff <msaboff@apple.com> - - OpaqueJSString doesn't optimally handle 8 bit strings - https://bugs.webkit.org/show_bug.cgi?id=98300 - - Reviewed by Geoffrey Garen. - - Change OpaqueJSString to store and manage a String instead of a UChar buffer. - The member string is a copy of any string used during creation. - - * API/OpaqueJSString.cpp: - (OpaqueJSString::create): - (OpaqueJSString::identifier): - * API/OpaqueJSString.h: - (OpaqueJSString::characters): - (OpaqueJSString::length): - (OpaqueJSString::string): - (OpaqueJSString::OpaqueJSString): - (OpaqueJSString): - -2012-10-03 Filip Pizlo <fpizlo@apple.com> - - Array.splice should be fast when it is used to remove elements other than the very first - https://bugs.webkit.org/show_bug.cgi?id=98236 - - Reviewed by Michael Saboff. - - Applied the same technique that was used to optimize the unshift case of splice in - http://trac.webkit.org/changeset/129676. This is a >20x speed-up on programs that - use splice for element removal. - - * runtime/ArrayPrototype.cpp: - (JSC::shift): - * runtime/JSArray.cpp: - (JSC::JSArray::shiftCount): - * runtime/JSArray.h: - (JSArray): - -2012-09-16 Mark Hahnenberg <mhahnenberg@apple.com> - - Delayed structure sweep can leak structures without bound - https://bugs.webkit.org/show_bug.cgi?id=96546 - - Reviewed by Geoffrey Garen. - - This patch gets rid of the separate Structure allocator in the MarkedSpace and adds two new destructor-only - allocators. We now have separate allocators for our three types of objects: those objects with no destructors, - those objects with destructors and with immortal structures, and those objects with destructors that don't have - immortal structures. All of the objects of the third type (destructors without immortal structures) now - inherit from a new class named JSDestructibleObject (which in turn is a subclass of JSNonFinalObject), which stores - the ClassInfo for these classes at a fixed offset for safe retrieval during sweeping/destruction. - - * API/JSCallbackConstructor.cpp: Use JSDestructibleObject for JSCallbackConstructor. - (JSC): - (JSC::JSCallbackConstructor::JSCallbackConstructor): - * API/JSCallbackConstructor.h: - (JSCallbackConstructor): - * API/JSCallbackObject.cpp: Inherit from JSDestructibleObject for normal JSCallbackObjects and use a finalizer for - JSCallbackObject<JSGlobalObject>, since JSGlobalObject also uses a finalizer. - (JSC): - (JSC::::create): We need to move the create function for JSCallbackObject<JSGlobalObject> out of line so we can add - the finalizer for it. We don't want to add the finalizer is something like finishCreation in case somebody decides - to subclass this. We use this same technique for many other subclasses of JSGlobalObject. - (JSC::::createStructure): - * API/JSCallbackObject.h: - (JSCallbackObject): - (JSC): - * API/JSClassRef.cpp: Change all the JSCallbackObject<JSNonFinalObject> to use JSDestructibleObject instead. - (OpaqueJSClass::prototype): - * API/JSObjectRef.cpp: Ditto. - (JSObjectMake): - (JSObjectGetPrivate): - (JSObjectSetPrivate): - (JSObjectGetPrivateProperty): - (JSObjectSetPrivateProperty): - (JSObjectDeletePrivateProperty): - * API/JSValueRef.cpp: Ditto. - (JSValueIsObjectOfClass): - * API/JSWeakObjectMapRefPrivate.cpp: Ditto. - * JSCTypedArrayStubs.h: - (JSC): - * JavaScriptCore.xcodeproj/project.pbxproj: - * dfg/DFGSpeculativeJIT.h: Use the proper allocator type when doing inline allocation in the DFG. - (JSC::DFG::SpeculativeJIT::emitAllocateBasicJSObject): - (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject): - * heap/Heap.cpp: - (JSC): - * heap/Heap.h: Add accessors for the various types of allocators now. Also remove the isSafeToSweepStructures function - since it's always safe to sweep Structures now. - (JSC::Heap::allocatorForObjectWithNormalDestructor): - (JSC::Heap::allocatorForObjectWithImmortalStructureDestructor): - (Heap): - (JSC::Heap::allocateWithNormalDestructor): - (JSC): - (JSC::Heap::allocateWithImmortalStructureDestructor): - * heap/IncrementalSweeper.cpp: Remove all the logic to detect when it's safe to sweep Structures from the - IncrementalSweeper since it's always safe to sweep Structures now. - (JSC::IncrementalSweeper::IncrementalSweeper): - (JSC::IncrementalSweeper::sweepNextBlock): - (JSC::IncrementalSweeper::startSweeping): - (JSC::IncrementalSweeper::willFinishSweeping): - (JSC): - * heap/IncrementalSweeper.h: - (IncrementalSweeper): - * heap/MarkedAllocator.cpp: Remove the logic that was preventing us from sweeping Structures if it wasn't safe. Add - tracking of the specific destructor type of allocator. - (JSC::MarkedAllocator::tryAllocateHelper): - (JSC::MarkedAllocator::allocateBlock): - * heap/MarkedAllocator.h: - (JSC::MarkedAllocator::destructorType): - (MarkedAllocator): - (JSC::MarkedAllocator::MarkedAllocator): - (JSC::MarkedAllocator::init): - * heap/MarkedBlock.cpp: Add all the destructor type stuff to MarkedBlocks so that we do the right thing when sweeping. - We also use the stored destructor type to determine the right thing to do in all JSCell::classInfo() calls. - (JSC::MarkedBlock::create): - (JSC::MarkedBlock::MarkedBlock): - (JSC): - (JSC::MarkedBlock::specializedSweep): - (JSC::MarkedBlock::sweep): - (JSC::MarkedBlock::sweepHelper): - * heap/MarkedBlock.h: - (JSC): - (JSC::MarkedBlock::allocator): - (JSC::MarkedBlock::destructorType): - * heap/MarkedSpace.cpp: Add the new destructor allocators to MarkedSpace. - (JSC::MarkedSpace::MarkedSpace): - (JSC::MarkedSpace::resetAllocators): - (JSC::MarkedSpace::canonicalizeCellLivenessData): - (JSC::MarkedSpace::isPagedOut): - (JSC::MarkedSpace::freeBlock): - * heap/MarkedSpace.h: - (MarkedSpace): - (JSC::MarkedSpace::immortalStructureDestructorAllocatorFor): - (JSC::MarkedSpace::normalDestructorAllocatorFor): - (JSC::MarkedSpace::allocateWithImmortalStructureDestructor): - (JSC::MarkedSpace::allocateWithNormalDestructor): - (JSC::MarkedSpace::forEachBlock): - * heap/SlotVisitor.cpp: Add include because the symbol was needed in an inlined function. - * jit/JIT.h: Make sure we use the correct allocator when doing inline allocations in the baseline JIT. - * jit/JITInlineMethods.h: - (JSC::JIT::emitAllocateBasicJSObject): - (JSC::JIT::emitAllocateJSFinalObject): - (JSC::JIT::emitAllocateJSArray): - * jsc.cpp: - (GlobalObject::create): Add finalizer here since JSGlobalObject needs to use a finalizer instead of inheriting from - JSDestructibleObject. - * runtime/Arguments.cpp: Inherit from JSDestructibleObject. - (JSC): - * runtime/Arguments.h: - (Arguments): - (JSC::Arguments::Arguments): - * runtime/ErrorPrototype.cpp: Added an assert to make sure we have a trivial destructor. - (JSC): - * runtime/Executable.h: Indicate that all of the Executable* classes have immortal Structures. - (JSC): - * runtime/InternalFunction.cpp: Inherit from JSDestructibleObject. - (JSC): - (JSC::InternalFunction::InternalFunction): - * runtime/InternalFunction.h: - (InternalFunction): - * runtime/JSCell.h: Added two static bools, needsDestruction and hasImmortalStructure, that classes can override - to indicate at compile time which part of the heap they should be allocated in. - (JSC::allocateCell): Use the appropriate allocator depending on the destructor type. - * runtime/JSDestructibleObject.h: Added. New class that stores the ClassInfo of any subclass so that it can be - accessed safely when the object is being destroyed. - (JSC): - (JSDestructibleObject): - (JSC::JSDestructibleObject::classInfo): - (JSC::JSDestructibleObject::JSDestructibleObject): - (JSC::JSCell::classInfo): Checks the current MarkedBlock to see where it should get the ClassInfo from so that it's always safe. - * runtime/JSGlobalObject.cpp: JSGlobalObject now uses a finalizer instead of a destructor so that it can avoid forcing all - of its relatives in the inheritance hierarchy (e.g. JSScope) to use destructors as well. - (JSC::JSGlobalObject::reset): - * runtime/JSGlobalObject.h: - (JSGlobalObject): - (JSC::JSGlobalObject::createRareDataIfNeeded): Since we always create a finalizer now, we don't have to worry about adding one - for the m_rareData field when it's created. - (JSC::JSGlobalObject::create): - (JSC): - * runtime/JSGlobalThis.h: Inherit from JSDestructibleObject. - (JSGlobalThis): - (JSC::JSGlobalThis::JSGlobalThis): - * runtime/JSPropertyNameIterator.h: Has an immortal Structure. - (JSC): - * runtime/JSScope.cpp: - (JSC): - * runtime/JSString.h: Has an immortal Structure. - (JSC): - * runtime/JSWrapperObject.h: Inherit from JSDestructibleObject. - (JSWrapperObject): - (JSC::JSWrapperObject::JSWrapperObject): - * runtime/MathObject.cpp: Cleaning up some of the inheritance stuff. - (JSC): - * runtime/NameInstance.h: Inherit from JSDestructibleObject. - (NameInstance): - * runtime/RegExp.h: Has immortal Structure. - (JSC): - * runtime/RegExpObject.cpp: Inheritance cleanup. - (JSC): - * runtime/SparseArrayValueMap.h: Has immortal Structure. - (JSC): - * runtime/Structure.h: Has immortal Structure. - (JSC): - * runtime/StructureChain.h: Ditto. - (JSC): - * runtime/SymbolTable.h: Ditto. - (SharedSymbolTable): - (JSC): - -== Rolled over to ChangeLog-2012-10-02 == |