Change a couple of HashMap value types from OwnPtr to std::unique_ptr
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2013-09-26  Anders Carlsson  <andersca@apple.com>
2
3         Change a couple of HashMap value types from OwnPtr to std::unique_ptr
4         https://bugs.webkit.org/show_bug.cgi?id=121973
5
6         Reviewed by Andreas Kling.
7
8         * API/JSClassRef.cpp:
9         (OpaqueJSClassContextData::OpaqueJSClassContextData):
10         (OpaqueJSClass::contextData):
11         * API/JSClassRef.h:
12         * bytecode/SamplingTool.h:
13         * ftl/FTLAbstractHeap.h:
14         * parser/Parser.cpp:
15         (JSC::::parseFunctionInfo):
16         * parser/SourceProviderCache.cpp:
17         (JSC::SourceProviderCache::add):
18         * parser/SourceProviderCache.h:
19         * parser/SourceProviderCacheItem.h:
20         (JSC::SourceProviderCacheItem::create):
21         * profiler/ProfilerCompilation.cpp:
22         (JSC::Profiler::Compilation::executionCounterFor):
23         (JSC::Profiler::Compilation::toJS):
24         * profiler/ProfilerCompilation.h:
25         * runtime/JSGlobalObject.h:
26
27 2013-09-26  Mark Lam  <mark.lam@apple.com>
28
29         Move DFG inline caching logic into jit/.
30         https://bugs.webkit.org/show_bug.cgi?id=121749.
31
32         Reviewed by Geoffrey Garen.
33
34         Relanding http://trac.webkit.org/changeset/156235 after rebasing to latest
35         revision and fixing build breakages on Windows.
36
37         * CMakeLists.txt:
38         * GNUmakefile.list.am:
39         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
40         * JavaScriptCore.xcodeproj/project.pbxproj:
41         * Target.pri:
42         * bytecode/CallLinkInfo.cpp:
43         (JSC::CallLinkInfo::unlink):
44         * bytecode/CodeBlock.cpp:
45         (JSC::CodeBlock::resetStubInternal):
46         * bytecode/StructureStubInfo.h:
47         * dfg/DFGCallArrayAllocatorSlowPathGenerator.h:
48         (JSC::DFG::CallArrayAllocatorSlowPathGenerator::CallArrayAllocatorSlowPathGenerator):
49         (JSC::DFG::CallArrayAllocatorWithVariableSizeSlowPathGenerator::CallArrayAllocatorWithVariableSizeSlowPathGenerator):
50         * dfg/DFGJITCompiler.h:
51         * dfg/DFGOSRExitCompiler.h:
52         * dfg/DFGOperations.cpp:
53         (JSC::DFG::operationPutByValInternal):
54         * dfg/DFGOperations.h:
55         (JSC::DFG::operationNewTypedArrayWithSizeForType):
56         (JSC::DFG::operationNewTypedArrayWithOneArgumentForType):
57         * dfg/DFGRegisterSet.h: Removed.
58         * dfg/DFGRepatch.cpp: Removed.
59         * dfg/DFGRepatch.h: Removed.
60         * dfg/DFGScratchRegisterAllocator.h: Removed.
61         * dfg/DFGSpeculativeJIT.cpp:
62         (JSC::DFG::SpeculativeJIT::nonSpeculativeCompare):
63         (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
64         (JSC::DFG::SpeculativeJIT::compare):
65         * dfg/DFGSpeculativeJIT.h:
66         (JSC::DFG::SpeculativeJIT::callOperation):
67         * dfg/DFGSpeculativeJIT32_64.cpp:
68         (JSC::DFG::SpeculativeJIT::cachedPutById):
69         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
70         (JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::CompareAndBoxBooleanSlowPathGenerator):
71         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
72         (JSC::DFG::SpeculativeJIT::compile):
73         * dfg/DFGSpeculativeJIT64.cpp:
74         (JSC::DFG::SpeculativeJIT::cachedPutById):
75         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
76         (JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::CompareAndBoxBooleanSlowPathGenerator):
77         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
78         (JSC::DFG::SpeculativeJIT::compile):
79         * dfg/DFGThunks.cpp:
80         * dfg/DFGThunks.h:
81         * ftl/FTLIntrinsicRepository.h:
82         * ftl/FTLLowerDFGToLLVM.cpp:
83         (JSC::FTL::LowerDFGToLLVM::compileCallOrConstruct):
84         * ftl/FTLOSRExitCompiler.h:
85         * jit/AssemblyHelpers.h:
86         (JSC::AssemblyHelpers::writeBarrier):
87         * jit/JIT.cpp:
88         (JSC::JIT::linkFor):
89         (JSC::JIT::linkSlowCall):
90         * jit/JITCall.cpp:
91         (JSC::JIT::compileCallEvalSlowCase):
92         (JSC::JIT::compileOpCallSlowCase):
93         (JSC::JIT::privateCompileClosureCall):
94         * jit/JITCall32_64.cpp:
95         (JSC::JIT::compileCallEvalSlowCase):
96         (JSC::JIT::compileOpCallSlowCase):
97         (JSC::JIT::privateCompileClosureCall):
98         * jit/JITOperationWrappers.h: Copied from Source/JavaScriptCore/jit/JITOperationWrappers.h.
99         * jit/JITOperations.cpp: Copied from Source/JavaScriptCore/jit/JITOperations.cpp.
100         (JSC::getHostCallReturnValueWithExecState):
101         * jit/JITOperations.h: Copied from Source/JavaScriptCore/jit/JITOperations.h.
102         * jit/RegisterSet.h: Copied from Source/JavaScriptCore/jit/RegisterSet.h.
103         * jit/Repatch.cpp: Copied from Source/JavaScriptCore/jit/Repatch.cpp.
104         (JSC::tryBuildGetByIDList):
105         * jit/Repatch.h: Copied from Source/JavaScriptCore/jit/Repatch.h.
106         * jit/ScratchRegisterAllocator.h: Copied from Source/JavaScriptCore/jit/ScratchRegisterAllocator.h.
107         * jit/ThunkGenerators.cpp:
108         (JSC::oldStyleGenerateSlowCaseFor):
109         (JSC::oldStyleLinkForGenerator):
110         (JSC::oldStyleLinkCallGenerator):
111         (JSC::oldStyleLinkConstructGenerator):
112         (JSC::oldStyleLinkClosureCallGenerator):
113         (JSC::oldStyleVirtualForGenerator):
114         (JSC::oldStyleVirtualCallGenerator):
115         (JSC::oldStyleVirtualConstructGenerator):
116         (JSC::emitPointerValidation):
117         (JSC::throwExceptionFromCallSlowPathGenerator):
118         (JSC::slowPathFor):
119         (JSC::linkForThunkGenerator):
120         (JSC::linkCallThunkGenerator):
121         (JSC::linkConstructThunkGenerator):
122         (JSC::linkClosureCallThunkGenerator):
123         (JSC::virtualForThunkGenerator):
124         (JSC::virtualCallThunkGenerator):
125         (JSC::virtualConstructThunkGenerator):
126         * jit/ThunkGenerators.h:
127
128 2013-09-26  Anders Carlsson  <andersca@apple.com>
129
130         Remove PassWeak.h
131         https://bugs.webkit.org/show_bug.cgi?id=121971
132
133         Reviewed by Geoffrey Garen.
134
135         * GNUmakefile.list.am:
136         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
137         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
138         * JavaScriptCore.xcodeproj/project.pbxproj:
139         * heap/PassWeak.h: Removed.
140         * heap/WeakInlines.h:
141
142 2013-09-26  Anders Carlsson  <andersca@apple.com>
143
144         Stop using PassWeak
145         https://bugs.webkit.org/show_bug.cgi?id=121968
146
147         Reviewed by Sam Weinig.
148
149         * heap/Weak.h:
150         Remove all knowledge of PassWeak.
151
152         (JSC::Weak::Weak):
153         These constructors don't need to be explicit.
154
155         * heap/WeakInlines.h:
156         (JSC::weakAdd):
157         Change Value to be an rvalue reference and use std::forward.
158
159         * jit/JITThunks.cpp:
160         (JSC::JITThunks::hostFunctionStub):
161         Remove PassWeak.
162
163         * runtime/RegExpCache.cpp:
164         (JSC::RegExpCache::lookupOrCreate):
165         Use Weak instead of PassWeak.
166
167         * runtime/SimpleTypedArrayController.cpp:
168         Change add and set to take Weak by value and std::move into place.
169
170         * runtime/WeakGCMap.h:
171         (JSC::WeakGCMap::get):
172         (JSC::WeakGCMap::set):
173         (JSC::WeakGCMap::add):
174
175 2013-09-26  Commit Queue  <commit-queue@webkit.org>
176
177         Unreviewed, rolling out r156474.
178         http://trac.webkit.org/changeset/156474
179         https://bugs.webkit.org/show_bug.cgi?id=121966
180
181         Broke the builds. (Requested by xenon on #webkit).
182
183         * bytecode/CodeBlock.cpp:
184         (JSC::CodeBlock::registerName):
185         (JSC::CodeBlock::dumpBytecode):
186         (JSC::CodeBlock::CodeBlock):
187         (JSC::CodeBlock::createActivation):
188         (JSC::CodeBlock::nameForRegister):
189         * bytecode/CodeBlock.h:
190         (JSC::unmodifiedArgumentsRegister):
191         (JSC::CodeBlock::isKnownNotImmediate):
192         (JSC::CodeBlock::setThisRegister):
193         (JSC::CodeBlock::thisRegister):
194         (JSC::CodeBlock::setArgumentsRegister):
195         (JSC::CodeBlock::argumentsRegister):
196         (JSC::CodeBlock::uncheckedArgumentsRegister):
197         (JSC::CodeBlock::setActivationRegister):
198         (JSC::CodeBlock::activationRegister):
199         (JSC::CodeBlock::uncheckedActivationRegister):
200         (JSC::CodeBlock::usesArguments):
201         (JSC::CodeBlock::isCaptured):
202         * bytecode/Instruction.h:
203         * bytecode/LazyOperandValueProfile.h:
204         (JSC::LazyOperandValueProfileKey::LazyOperandValueProfileKey):
205         (JSC::LazyOperandValueProfileKey::operator!):
206         (JSC::LazyOperandValueProfileKey::hash):
207         (JSC::LazyOperandValueProfileKey::operand):
208         (JSC::LazyOperandValueProfileKey::isHashTableDeletedValue):
209         (JSC::LazyOperandValueProfile::LazyOperandValueProfile):
210         * bytecode/MethodOfGettingAValueProfile.cpp:
211         (JSC::MethodOfGettingAValueProfile::fromLazyOperand):
212         (JSC::MethodOfGettingAValueProfile::getSpecFailBucket):
213         * bytecode/Operands.h:
214         (JSC::localToOperand):
215         (JSC::operandIsLocal):
216         (JSC::operandToLocal):
217         (JSC::operandIsArgument):
218         (JSC::operandToArgument):
219         (JSC::argumentToOperand):
220         (JSC::Operands::operand):
221         (JSC::Operands::hasOperand):
222         (JSC::Operands::setOperand):
223         (JSC::Operands::operandForIndex):
224         (JSC::Operands::setOperandFirstTime):
225         * bytecode/UnlinkedCodeBlock.cpp:
226         (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
227         * bytecode/UnlinkedCodeBlock.h:
228         (JSC::UnlinkedCodeBlock::setThisRegister):
229         (JSC::UnlinkedCodeBlock::setActivationRegister):
230         (JSC::UnlinkedCodeBlock::setArgumentsRegister):
231         (JSC::UnlinkedCodeBlock::usesArguments):
232         (JSC::UnlinkedCodeBlock::argumentsRegister):
233         (JSC::UnlinkedCodeBlock::usesGlobalObject):
234         (JSC::UnlinkedCodeBlock::setGlobalObjectRegister):
235         (JSC::UnlinkedCodeBlock::globalObjectRegister):
236         (JSC::UnlinkedCodeBlock::thisRegister):
237         (JSC::UnlinkedCodeBlock::activationRegister):
238         * bytecode/ValueRecovery.h:
239         (JSC::ValueRecovery::displacedInJSStack):
240         (JSC::ValueRecovery::virtualRegister):
241         (JSC::ValueRecovery::dumpInContext):
242         * bytecode/VirtualRegister.h:
243         (WTF::printInternal):
244         * bytecompiler/BytecodeGenerator.cpp:
245         (JSC::BytecodeGenerator::generate):
246         (JSC::BytecodeGenerator::addVar):
247         (JSC::BytecodeGenerator::BytecodeGenerator):
248         (JSC::BytecodeGenerator::createLazyRegisterIfNecessary):
249         (JSC::BytecodeGenerator::newRegister):
250         (JSC::BytecodeGenerator::emitLoadGlobalObject):
251         (JSC::BytecodeGenerator::emitGetArgumentsLength):
252         (JSC::BytecodeGenerator::emitGetArgumentByVal):
253         (JSC::BytecodeGenerator::createArgumentsIfNecessary):
254         (JSC::BytecodeGenerator::emitReturn):
255         * bytecompiler/BytecodeGenerator.h:
256         (JSC::BytecodeGenerator::registerFor):
257         * bytecompiler/RegisterID.h:
258         (JSC::RegisterID::RegisterID):
259         (JSC::RegisterID::setIndex):
260         (JSC::RegisterID::index):
261         * debugger/DebuggerCallFrame.cpp:
262         (JSC::DebuggerCallFrame::thisObject):
263         * dfg/DFGAbstractHeap.h:
264         (JSC::DFG::AbstractHeap::Payload::Payload):
265         * dfg/DFGAbstractInterpreterInlines.h:
266         (JSC::DFG::::executeEffects):
267         (JSC::DFG::::clobberCapturedVars):
268         * dfg/DFGArgumentPosition.h:
269         (JSC::DFG::ArgumentPosition::dump):
270         * dfg/DFGArgumentsSimplificationPhase.cpp:
271         (JSC::DFG::ArgumentsSimplificationPhase::run):
272         (JSC::DFG::ArgumentsSimplificationPhase::observeBadArgumentsUse):
273         (JSC::DFG::ArgumentsSimplificationPhase::isOKToOptimize):
274         * dfg/DFGByteCodeParser.cpp:
275         (JSC::DFG::ByteCodeParser::newVariableAccessData):
276         (JSC::DFG::ByteCodeParser::getDirect):
277         (JSC::DFG::ByteCodeParser::get):
278         (JSC::DFG::ByteCodeParser::setDirect):
279         (JSC::DFG::ByteCodeParser::set):
280         (JSC::DFG::ByteCodeParser::getLocal):
281         (JSC::DFG::ByteCodeParser::setLocal):
282         (JSC::DFG::ByteCodeParser::getArgument):
283         (JSC::DFG::ByteCodeParser::setArgument):
284         (JSC::DFG::ByteCodeParser::findArgumentPositionForLocal):
285         (JSC::DFG::ByteCodeParser::findArgumentPosition):
286         (JSC::DFG::ByteCodeParser::flush):
287         (JSC::DFG::ByteCodeParser::flushDirect):
288         (JSC::DFG::ByteCodeParser::getToInt32):
289         (JSC::DFG::ByteCodeParser::getThis):
290         (JSC::DFG::ByteCodeParser::addCall):
291         (JSC::DFG::ByteCodeParser::InlineStackEntry::remapOperand):
292         (JSC::DFG::ByteCodeParser::handleCall):
293         (JSC::DFG::ByteCodeParser::emitFunctionChecks):
294         (JSC::DFG::ByteCodeParser::emitArgumentPhantoms):
295         (JSC::DFG::ByteCodeParser::handleInlining):
296         (JSC::DFG::ByteCodeParser::handleMinMax):
297         (JSC::DFG::ByteCodeParser::handleIntrinsic):
298         (JSC::DFG::ByteCodeParser::handleTypedArrayConstructor):
299         (JSC::DFG::ByteCodeParser::handleConstantInternalFunction):
300         (JSC::DFG::ByteCodeParser::handleGetByOffset):
301         (JSC::DFG::ByteCodeParser::handleGetById):
302         (JSC::DFG::ByteCodeParser::parseBlock):
303         (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
304         (JSC::DFG::ByteCodeParser::parse):
305         * dfg/DFGCFGSimplificationPhase.cpp:
306         * dfg/DFGCPSRethreadingPhase.cpp:
307         (JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocal):
308         (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocal):
309         (JSC::DFG::CPSRethreadingPhase::canonicalizeSetArgument):
310         * dfg/DFGCapabilities.cpp:
311         (JSC::DFG::capabilityLevel):
312         * dfg/DFGConstantFoldingPhase.cpp:
313         (JSC::DFG::ConstantFoldingPhase::isCapturedAtOrAfter):
314         * dfg/DFGFlushLivenessAnalysisPhase.cpp:
315         (JSC::DFG::FlushLivenessAnalysisPhase::setForNode):
316         * dfg/DFGGraph.cpp:
317         (JSC::DFG::Graph::dump):
318         * dfg/DFGGraph.h:
319         (JSC::DFG::Graph::argumentsRegisterFor):
320         (JSC::DFG::Graph::uncheckedArgumentsRegisterFor):
321         (JSC::DFG::Graph::uncheckedActivationRegisterFor):
322         (JSC::DFG::Graph::valueProfileFor):
323         * dfg/DFGJITCode.cpp:
324         (JSC::DFG::JITCode::reconstruct):
325         * dfg/DFGNode.h:
326         (JSC::DFG::Node::Node):
327         (JSC::DFG::Node::convertToGetLocalUnlinked):
328         (JSC::DFG::Node::hasVirtualRegister):
329         (JSC::DFG::Node::virtualRegister):
330         (JSC::DFG::Node::setVirtualRegister):
331         * dfg/DFGOSREntry.cpp:
332         (JSC::DFG::prepareOSREntry):
333         * dfg/DFGOSREntrypointCreationPhase.cpp:
334         (JSC::DFG::OSREntrypointCreationPhase::run):
335         * dfg/DFGOSRExit.h:
336         * dfg/DFGOSRExitCompiler32_64.cpp:
337         (JSC::DFG::OSRExitCompiler::compileExit):
338         * dfg/DFGOSRExitCompiler64.cpp:
339         (JSC::DFG::OSRExitCompiler::compileExit):
340         * dfg/DFGRegisterBank.h:
341         (JSC::DFG::RegisterBank::tryAllocate):
342         (JSC::DFG::RegisterBank::allocateSpecific):
343         (JSC::DFG::RegisterBank::retain):
344         (JSC::DFG::RegisterBank::isInUse):
345         (JSC::DFG::RegisterBank::dump):
346         (JSC::DFG::RegisterBank::releaseAtIndex):
347         (JSC::DFG::RegisterBank::allocateInternal):
348         (JSC::DFG::RegisterBank::MapEntry::MapEntry):
349         * dfg/DFGScoreBoard.h:
350         (JSC::DFG::ScoreBoard::allocate):
351         (JSC::DFG::ScoreBoard::use):
352         * dfg/DFGSpeculativeJIT.cpp:
353         (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
354         (JSC::DFG::SpeculativeJIT::checkConsistency):
355         (JSC::DFG::SpeculativeJIT::compileMovHint):
356         (JSC::DFG::SpeculativeJIT::compileInlineStart):
357         (JSC::DFG::SpeculativeJIT::compileCurrentBlock):
358         * dfg/DFGSpeculativeJIT.h:
359         (JSC::DFG::SpeculativeJIT::allocate):
360         (JSC::DFG::SpeculativeJIT::fprAllocate):
361         (JSC::DFG::SpeculativeJIT::silentSpillAllRegistersImpl):
362         (JSC::DFG::SpeculativeJIT::flushRegisters):
363         (JSC::DFG::SpeculativeJIT::isFlushed):
364         (JSC::DFG::SpeculativeJIT::argumentSlot):
365         (JSC::DFG::SpeculativeJIT::argumentTagSlot):
366         (JSC::DFG::SpeculativeJIT::argumentPayloadSlot):
367         (JSC::DFG::SpeculativeJIT::valueSourceForOperand):
368         (JSC::DFG::SpeculativeJIT::setNodeForOperand):
369         (JSC::DFG::SpeculativeJIT::valueSourceReferenceForOperand):
370         (JSC::DFG::SpeculativeJIT::recordSetLocal):
371         (JSC::DFG::SpeculativeJIT::generationInfoFromVirtualRegister):
372         (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
373         * dfg/DFGSpeculativeJIT64.cpp:
374         (JSC::DFG::SpeculativeJIT::compile):
375         * dfg/DFGValidate.cpp:
376         (JSC::DFG::Validate::validate):
377         (JSC::DFG::Validate::validateCPS):
378         (JSC::DFG::Validate::checkOperand):
379         (JSC::DFG::Validate::reportValidationContext):
380         * dfg/DFGValueRecoveryOverride.h:
381         (JSC::DFG::ValueRecoveryOverride::ValueRecoveryOverride):
382         * dfg/DFGVariableAccessData.h:
383         (JSC::DFG::VariableAccessData::operand):
384         (JSC::DFG::VariableAccessData::shouldUseDoubleFormatAccordingToVote):
385         (JSC::DFG::VariableAccessData::tallyVotesForShouldUseDoubleFormat):
386         (JSC::DFG::VariableAccessData::flushFormat):
387         * dfg/DFGVariableEvent.h:
388         (JSC::DFG::VariableEvent::spill):
389         (JSC::DFG::VariableEvent::setLocal):
390         * dfg/DFGVariableEventStream.cpp:
391         (JSC::DFG::VariableEventStream::reconstruct):
392         * dfg/DFGVirtualRegisterAllocationPhase.cpp:
393         (JSC::DFG::VirtualRegisterAllocationPhase::run):
394         * ftl/FTLExitArgumentForOperand.h:
395         (JSC::FTL::ExitArgumentForOperand::ExitArgumentForOperand):
396         (JSC::FTL::ExitArgumentForOperand::operand):
397         * ftl/FTLLink.cpp:
398         (JSC::FTL::link):
399         * ftl/FTLLowerDFGToLLVM.cpp:
400         (JSC::FTL::LowerDFGToLLVM::LowerDFGToLLVM):
401         (JSC::FTL::LowerDFGToLLVM::compileGetArgument):
402         (JSC::FTL::LowerDFGToLLVM::compileExtractOSREntryLocal):
403         (JSC::FTL::LowerDFGToLLVM::compileCallOrConstruct):
404         (JSC::FTL::LowerDFGToLLVM::appendOSRExit):
405         (JSC::FTL::LowerDFGToLLVM::observeMovHint):
406         (JSC::FTL::LowerDFGToLLVM::addressFor):
407         (JSC::FTL::LowerDFGToLLVM::payloadFor):
408         (JSC::FTL::LowerDFGToLLVM::tagFor):
409         * ftl/FTLOSREntry.cpp:
410         (JSC::FTL::prepareOSREntry):
411         * ftl/FTLOSRExit.cpp:
412         (JSC::FTL::OSRExit::convertToForward):
413         * ftl/FTLOSRExit.h:
414         * ftl/FTLOSRExitCompiler.cpp:
415         (JSC::FTL::compileStub):
416         * interpreter/CallFrame.h:
417         * interpreter/Interpreter.cpp:
418         (JSC::Interpreter::dumpRegisters):
419         (JSC::unwindCallFrame):
420         (JSC::Interpreter::unwind):
421         * jit/AssemblyHelpers.h:
422         (JSC::AssemblyHelpers::addressFor):
423         (JSC::AssemblyHelpers::tagFor):
424         (JSC::AssemblyHelpers::payloadFor):
425         (JSC::AssemblyHelpers::argumentsRegisterFor):
426         * jit/JIT.h:
427         * jit/JITCall.cpp:
428         (JSC::JIT::compileLoadVarargs):
429         * jit/JITInlines.h:
430         (JSC::JIT::emitGetVirtualRegister):
431         * jit/JITOpcodes.cpp:
432         (JSC::JIT::emit_op_tear_off_arguments):
433         (JSC::JIT::emit_op_get_pnames):
434         (JSC::JIT::emit_op_enter):
435         (JSC::JIT::emit_op_create_arguments):
436         (JSC::JIT::emitSlow_op_get_argument_by_val):
437         * jit/JITOpcodes32_64.cpp:
438         (JSC::JIT::emit_op_enter):
439         * jit/JITStubs.cpp:
440         (JSC::DEFINE_STUB_FUNCTION):
441         * llint/LLIntSlowPaths.cpp:
442         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
443         * profiler/ProfilerBytecodeSequence.cpp:
444         (JSC::Profiler::BytecodeSequence::BytecodeSequence):
445         * runtime/CommonSlowPaths.cpp:
446         (JSC::SLOW_PATH_DECL):
447         * runtime/JSActivation.cpp:
448         (JSC::JSActivation::argumentsGetter):
449
450 2013-09-26  Oliver Hunt  <oliver@apple.com>
451
452         Attempt to fix MSVC build
453
454         * parser/Parser.cpp:
455         (JSC::::createBindingPattern):
456         (JSC::::parseDeconstructionPattern):
457         * parser/Parser.h:
458
459 2013-09-26  Julien Brianceau  <jbriance@cisco.com>
460
461         [sh4] JSValue* exception is unused since r70703 in JITStackFrame.
462         https://bugs.webkit.org/show_bug.cgi?id=121962
463
464         This is a cosmetic change, but it could avoid people reading sh4 part to
465         waste time to understand why there is a JSValue* here.
466
467         Reviewed by Darin Adler.
468
469         * jit/JITStubs.h:
470
471 2013-09-26  Anders Carlsson  <andersca@apple.com>
472
473         WeakGCMap should not inherit from HashMap
474         https://bugs.webkit.org/show_bug.cgi?id=121964
475
476         Reviewed by Geoffrey Garen.
477
478         Add the HashMap as a member variable instead and implement the missing member functions.
479
480         * runtime/WeakGCMap.h:
481
482 2013-09-25  Michael Saboff  <msaboff@apple.com>
483
484         VirtualRegister should be a class
485         https://bugs.webkit.org/show_bug.cgi?id=121732
486
487         Reviewed by Geoffrey Garen.
488
489         This is a refactoring change.  Changed VirtualRegister from an enum to a class.
490         Moved Operands::operandIsArgument(), operandToArgument(), argumentToOperand()
491         and the similar functions for locals to VirtualRegister class.
492
493         This is in preparation for changing the offset for the first local register from
494         0 to -1.  This is needed since most native calling conventions have the architected
495         frame pointer (e.g. %rbp for X86) point at the slot that stores the previous frame
496         pointer.  Local values start below that address.
497
498         * bytecode/CodeBlock.cpp:
499         * bytecode/CodeBlock.h:
500         * bytecode/Instruction.h:
501         * bytecode/LazyOperandValueProfile.h:
502         * bytecode/MethodOfGettingAValueProfile.cpp:
503         * bytecode/Operands.h:
504         * bytecode/UnlinkedCodeBlock.cpp:
505         * bytecode/UnlinkedCodeBlock.h:
506         * bytecode/ValueRecovery.h:
507         * bytecode/VirtualRegister.h:
508         * bytecompiler/BytecodeGenerator.cpp:
509         * bytecompiler/BytecodeGenerator.h:
510         * bytecompiler/RegisterID.h:
511         * debugger/DebuggerCallFrame.cpp:
512         * dfg/DFGAbstractHeap.h:
513         * dfg/DFGAbstractInterpreterInlines.h:
514         * dfg/DFGArgumentPosition.h:
515         * dfg/DFGArgumentsSimplificationPhase.cpp:
516         * dfg/DFGByteCodeParser.cpp:
517         * dfg/DFGCFGSimplificationPhase.cpp:
518         * dfg/DFGCPSRethreadingPhase.cpp:
519         * dfg/DFGCapabilities.cpp:
520         * dfg/DFGConstantFoldingPhase.cpp:
521         * dfg/DFGFlushLivenessAnalysisPhase.cpp:
522         * dfg/DFGGraph.cpp:
523         * dfg/DFGGraph.h:
524         * dfg/DFGJITCode.cpp:
525         * dfg/DFGNode.h:
526         * dfg/DFGOSREntry.cpp:
527         * dfg/DFGOSREntrypointCreationPhase.cpp:
528         * dfg/DFGOSRExit.h:
529         * dfg/DFGOSRExitCompiler32_64.cpp:
530         * dfg/DFGOSRExitCompiler64.cpp:
531         * dfg/DFGRegisterBank.h:
532         * dfg/DFGScoreBoard.h:
533         * dfg/DFGSpeculativeJIT.cpp:
534         * dfg/DFGSpeculativeJIT.h:
535         * dfg/DFGSpeculativeJIT64.cpp:
536         * dfg/DFGValidate.cpp:
537         * dfg/DFGValueRecoveryOverride.h:
538         * dfg/DFGVariableAccessData.h:
539         * dfg/DFGVariableEvent.h:
540         * dfg/DFGVariableEventStream.cpp:
541         * dfg/DFGVirtualRegisterAllocationPhase.cpp:
542         * ftl/FTLExitArgumentForOperand.h:
543         * ftl/FTLLink.cpp:
544         * ftl/FTLLowerDFGToLLVM.cpp:
545         * ftl/FTLOSREntry.cpp:
546         * ftl/FTLOSRExit.cpp:
547         * ftl/FTLOSRExit.h:
548         * ftl/FTLOSRExitCompiler.cpp:
549         * interpreter/CallFrame.h:
550         * interpreter/Interpreter.cpp:
551         * jit/AssemblyHelpers.h:
552         * jit/JIT.h:
553         * jit/JITCall.cpp:
554         * jit/JITInlines.h:
555         * jit/JITOpcodes.cpp:
556         * jit/JITOpcodes32_64.cpp:
557         * jit/JITStubs.cpp:
558         * llint/LLIntSlowPaths.cpp:
559         * profiler/ProfilerBytecodeSequence.cpp:
560         * runtime/CommonSlowPaths.cpp:
561         * runtime/JSActivation.cpp:
562
563 2013-09-26  Anders Carlsson  <andersca@apple.com>
564
565         Weak should have a move constructor and move assignment operator
566         https://bugs.webkit.org/show_bug.cgi?id=121963
567
568         Reviewed by Oliver Hunt.
569
570         This is the first step towards getting rid of PassWeak.
571
572         * API/JSClassRef.cpp:
573         (OpaqueJSClass::prototype):
574         * heap/Weak.h:
575         * heap/WeakInlines.h:
576         (JSC::::Weak):
577         (JSC::::leakImpl):
578         * runtime/SimpleTypedArrayController.cpp:
579         (JSC::SimpleTypedArrayController::toJS):
580
581 2013-09-26  Mark Hahnenberg  <mhahnenberg@apple.com>
582
583         op_to_this shouldn't use value profiling
584         https://bugs.webkit.org/show_bug.cgi?id=121920
585
586         Reviewed by Geoffrey Garen.
587
588         Currently it's the only opcode that uses m_singletonValue, which is unnecessary. Our current plan is 
589         to remove m_singletonValue so that GenGC can have a simpler story for handling CodeBlocks/FunctionExecutables 
590         during nursery collections.
591
592         This patch adds an inline cache for the Structure of to_this so it no longer depends on the ValueProfile's
593         m_singletonValue. Since nobody uses m_singletonValue now, this patch also removes m_singletonValue from
594         ValueProfile.
595
596         * bytecode/CodeBlock.cpp:
597         (JSC::CodeBlock::CodeBlock):
598         (JSC::CodeBlock::finalizeUnconditionally):
599         (JSC::CodeBlock::stronglyVisitStrongReferences):
600         (JSC::CodeBlock::updateAllPredictionsAndCountLiveness):
601         (JSC::CodeBlock::updateAllValueProfilePredictions):
602         (JSC::CodeBlock::updateAllPredictions):
603         (JSC::CodeBlock::shouldOptimizeNow):
604         * bytecode/CodeBlock.h:
605         (JSC::CodeBlock::updateAllValueProfilePredictions):
606         (JSC::CodeBlock::updateAllPredictions):
607         * bytecode/LazyOperandValueProfile.cpp:
608         (JSC::CompressedLazyOperandValueProfileHolder::computeUpdatedPredictions):
609         * bytecode/LazyOperandValueProfile.h:
610         * bytecode/ValueProfile.h:
611         (JSC::ValueProfileBase::ValueProfileBase):
612         (JSC::ValueProfileBase::briefDescription):
613         (JSC::ValueProfileBase::dump):
614         (JSC::ValueProfileBase::computeUpdatedPrediction):
615         * bytecompiler/BytecodeGenerator.cpp:
616         (JSC::BytecodeGenerator::BytecodeGenerator):
617         * dfg/DFGByteCodeParser.cpp:
618         (JSC::DFG::ByteCodeParser::parseBlock):
619         * jit/JITOpcodes.cpp:
620         (JSC::JIT::emit_op_to_this):
621         (JSC::JIT::emitSlow_op_to_this):
622         * jit/JITOpcodes32_64.cpp:
623         (JSC::JIT::emit_op_to_this):
624         (JSC::JIT::emitSlow_op_to_this):
625         * llint/LowLevelInterpreter32_64.asm:
626         * llint/LowLevelInterpreter64.asm:
627         * runtime/CommonSlowPaths.cpp:
628         (JSC::SLOW_PATH_DECL):
629
630 2013-09-25  Oliver Hunt  <oliver@apple.com>
631
632         Implement prefixed-destructuring assignment
633         https://bugs.webkit.org/show_bug.cgi?id=121930
634
635         Reviewed by Mark Hahnenberg.
636
637         This is mostly simple - the semantics of deconstruction are already
638         present in the language, so most of the complexity (if you call it
639         that) is addition of new AST nodes, and parsing the syntax.
640
641         In order to get correct semantics for the parameter lists, FunctionParameters
642         now needs to store refcounted references to the parameter patterns.
643         There's also a little work to ensure that variable creation and assignment
644         occurs in the correct order while the BytecodeGenerator is being constructed. 
645
646         * bytecode/UnlinkedCodeBlock.cpp:
647         (JSC::UnlinkedFunctionExecutable::paramString):
648         * bytecompiler/BytecodeGenerator.cpp:
649         (JSC::BytecodeGenerator::BytecodeGenerator):
650         * bytecompiler/BytecodeGenerator.h:
651         (JSC::BytecodeGenerator::emitExpressionInfo):
652         * bytecompiler/NodesCodegen.cpp:
653         (JSC::ForInNode::emitBytecode):
654         (JSC::DeconstructingAssignmentNode::emitBytecode):
655         (JSC::DeconstructionPatternNode::~DeconstructionPatternNode):
656         (JSC::ArrayPatternNode::emitBytecode):
657         (JSC::ArrayPatternNode::emitDirectBinding):
658         (JSC::ArrayPatternNode::toString):
659         (JSC::ArrayPatternNode::collectBoundIdentifiers):
660         (JSC::ObjectPatternNode::toString):
661         (JSC::ObjectPatternNode::emitBytecode):
662         (JSC::ObjectPatternNode::collectBoundIdentifiers):
663         (JSC::BindingNode::emitBytecode):
664         (JSC::BindingNode::toString):
665         (JSC::BindingNode::collectBoundIdentifiers):
666         * parser/ASTBuilder.h:
667         (JSC::ASTBuilder::createFormalParameterList):
668         (JSC::ASTBuilder::createForInLoop):
669         (JSC::ASTBuilder::addVar):
670         (JSC::ASTBuilder::createDeconstructingAssignment):
671         (JSC::ASTBuilder::createArrayPattern):
672         (JSC::ASTBuilder::appendArrayPatternSkipEntry):
673         (JSC::ASTBuilder::appendArrayPatternEntry):
674         (JSC::ASTBuilder::createObjectPattern):
675         (JSC::ASTBuilder::appendObjectPatternEntry):
676         (JSC::ASTBuilder::createBindingLocation):
677         * parser/NodeConstructors.h:
678         (JSC::CommaNode::CommaNode):
679         (JSC::ParameterNode::ParameterNode):
680         (JSC::ForInNode::ForInNode):
681         (JSC::DeconstructionPatternNode::DeconstructionPatternNode):
682         (JSC::ArrayPatternNode::ArrayPatternNode):
683         (JSC::ArrayPatternNode::create):
684         (JSC::ObjectPatternNode::ObjectPatternNode):
685         (JSC::ObjectPatternNode::create):
686         (JSC::BindingNode::create):
687         (JSC::BindingNode::BindingNode):
688         (JSC::DeconstructingAssignmentNode::DeconstructingAssignmentNode):
689         * parser/Nodes.cpp:
690         (JSC::FunctionParameters::create):
691         (JSC::FunctionParameters::FunctionParameters):
692         (JSC::FunctionParameters::~FunctionParameters):
693         * parser/Nodes.h:
694         (JSC::ExpressionNode::isDeconstructionNode):
695         (JSC::ArrayNode::elements):
696         (JSC::CommaNode::append):
697         (JSC::ParameterNode::pattern):
698         (JSC::FunctionParameters::at):
699         (JSC::FunctionParameters::patterns):
700         (JSC::DeconstructionPatternNode::isBindingNode):
701         (JSC::DeconstructionPatternNode::emitDirectBinding):
702         (JSC::ArrayPatternNode::appendIndex):
703         (JSC::ObjectPatternNode::appendEntry):
704         (JSC::ObjectPatternNode::Entry::Entry):
705         (JSC::BindingNode::boundProperty):
706         (JSC::BindingNode::isBindingNode):
707         (JSC::DeconstructingAssignmentNode::bindings):
708         (JSC::DeconstructingAssignmentNode::isLocation):
709         (JSC::DeconstructingAssignmentNode::isDeconstructionNode):
710         * parser/Parser.cpp:
711         (JSC::::Parser):
712         (JSC::::parseVarDeclaration):
713         (JSC::::parseVarDeclarationList):
714         (JSC::::createBindingPattern):
715         (JSC::::parseDeconstructionPattern):
716         (JSC::::parseForStatement):
717         (JSC::::parseFormalParameters):
718         (JSC::::parseAssignmentExpression):
719         * parser/Parser.h:
720         (JSC::Scope::declareBoundParameter):
721         (JSC::Parser::declareBoundParameter):
722         * parser/SyntaxChecker.h:
723         (JSC::SyntaxChecker::createFormalParameterList):
724         (JSC::SyntaxChecker::addVar):
725         (JSC::SyntaxChecker::operatorStackPop):
726         * runtime/JSONObject.cpp:
727         (JSC::escapeStringToBuilder):
728         * runtime/JSONObject.h:
729
730 2013-09-25  Brady Eidson  <beidson@apple.com>
731
732         Enable the IndexedDB build on Mac, but leave the feature non-functional
733         https://bugs.webkit.org/show_bug.cgi?id=121918
734
735         Reviewed by Alexey Proskuryakov.
736
737         * Configurations/FeatureDefines.xcconfig:
738
739 2013-09-25  Commit Queue  <commit-queue@webkit.org>
740
741         Unreviewed, rolling out r156432.
742         http://trac.webkit.org/changeset/156432
743         https://bugs.webkit.org/show_bug.cgi?id=121932
744
745         some integer conversion things that need brady to fix
746         (Requested by thorton on #webkit).
747
748         * Configurations/FeatureDefines.xcconfig:
749
750 2013-09-25  Anders Carlsson  <andersca@apple.com>
751
752         Move KeyValuePairTraits inside HashMap
753         https://bugs.webkit.org/show_bug.cgi?id=121931
754
755         Reviewed by Sam Weinig.
756
757         * tools/ProfileTreeNode.h:
758
759 2013-09-25  Brady Eidson  <beidson@apple.com>
760
761         Enable the IndexedDB build on Mac, but leave the feature non-functional
762         https://bugs.webkit.org/show_bug.cgi?id=121918
763
764         Reviewed by Alexey Proskuryakov.
765
766         * Configurations/FeatureDefines.xcconfig:
767
768 2013-09-25  Brady Eidson  <beidson@apple.com>
769
770         FeatureDefine.xcconfig cleanup (They should all be identical).
771         https://bugs.webkit.org/show_bug.cgi?id=121921
772
773         Reviewed by Mark Rowe.
774
775         * Configurations/FeatureDefines.xcconfig:
776
777 2013-09-25  Patrick Gansterer  <paroga@webkit.org>
778
779         Build fix for WinCE after r155098.
780
781         Windows CE does not support getenv().
782
783         * jsc.cpp:
784         (main):
785
786 2013-09-24  Mark Hahnenberg  <mhahnenberg@apple.com>
787
788         op_get_callee shouldn't use value profiling
789         https://bugs.webkit.org/show_bug.cgi?id=121821
790
791         Reviewed by Filip Pizlo.
792
793         Currently it's one of the two opcodes that uses m_singletonValue, which is unnecessary. 
794         Our current plan is to remove m_singletonValue so that GenGC can have a simpler story 
795         for handling CodeBlocks/FunctionExecutables during nursery collections.
796
797         Instead of using a ValueProfile op_get_callee now has a simple inline cache of the most 
798         recent JSFunction that we saw.
799
800         * bytecode/CodeBlock.cpp:
801         (JSC::CodeBlock::CodeBlock):
802         (JSC::CodeBlock::finalizeUnconditionally):
803         * bytecompiler/BytecodeGenerator.cpp:
804         (JSC::BytecodeGenerator::emitCreateThis):
805         * dfg/DFGByteCodeParser.cpp:
806         (JSC::DFG::ByteCodeParser::parseBlock):
807         * jit/JIT.cpp:
808         (JSC::JIT::privateCompileSlowCases):
809         * jit/JIT.h:
810         * jit/JITOpcodes.cpp:
811         (JSC::JIT::emit_op_get_callee):
812         (JSC::JIT::emitSlow_op_get_callee):
813         * jit/JITOpcodes32_64.cpp:
814         (JSC::JIT::emit_op_get_callee):
815         (JSC::JIT::emitSlow_op_get_callee):
816         * llint/LowLevelInterpreter32_64.asm:
817         * llint/LowLevelInterpreter64.asm:
818         * runtime/CommonSlowPaths.cpp:
819         (JSC::SLOW_PATH_DECL):
820         * runtime/CommonSlowPaths.h:
821
822 2013-09-24  Mark Lam  <mark.lam@apple.com>
823
824         Change JSC debug hooks to pass a CallFrame* instead of a DebuggerCallFrame.
825         https://bugs.webkit.org/show_bug.cgi?id=121867.
826
827         Reviewed by Geoffrey Garen.
828
829         1. Removed the need for passing the line and column info to the debug hook
830            callbacks. We now get the line and column info from the CallFrame.
831
832         2. Simplify BytecodeGenerator::emitDebugHook() to only take 1 line number
833            argument. The caller can determine whether to pass in the first or last
834            line number of the block of source code as appropriate.
835            Note: we still need to pass in the line and column info to emitDebugHook()
836            because it uses this info to emit expression info which is later used by
837            the StackVisitor to determine the line and column info for its "pc".
838
839         3. Pass the exceptionValue explicitly to the exception() debug hook
840            callback. It should not be embedded in the CallFrame / DebuggerCallFrame.
841
842         4. Change the op_debug opcode size to 2 (from 5) since we've removing 3 arg
843            values. Update the LLINT and JIT code to handle this.
844
845         * bytecode/CodeBlock.cpp:
846         (JSC::CodeBlock::dumpBytecode):
847         (JSC::CodeBlock::CodeBlock):
848         * bytecode/Opcode.h:
849         (JSC::padOpcodeName):
850         * bytecompiler/BytecodeGenerator.cpp:
851         (JSC::BytecodeGenerator::emitDebugHook):
852         * bytecompiler/BytecodeGenerator.h:
853         * bytecompiler/NodesCodegen.cpp:
854         (JSC::ConstStatementNode::emitBytecode):
855         (JSC::EmptyStatementNode::emitBytecode):
856         (JSC::DebuggerStatementNode::emitBytecode):
857         (JSC::ExprStatementNode::emitBytecode):
858         (JSC::VarStatementNode::emitBytecode):
859         (JSC::IfElseNode::emitBytecode):
860         (JSC::DoWhileNode::emitBytecode):
861         (JSC::WhileNode::emitBytecode):
862         (JSC::ForNode::emitBytecode):
863         (JSC::ForInNode::emitBytecode):
864         (JSC::ContinueNode::emitBytecode):
865         (JSC::BreakNode::emitBytecode):
866         (JSC::ReturnNode::emitBytecode):
867         (JSC::WithNode::emitBytecode):
868         (JSC::SwitchNode::emitBytecode):
869         (JSC::LabelNode::emitBytecode):
870         (JSC::ThrowNode::emitBytecode):
871         (JSC::TryNode::emitBytecode):
872         (JSC::ProgramNode::emitBytecode):
873         (JSC::EvalNode::emitBytecode):
874         (JSC::FunctionBodyNode::emitBytecode):
875         * debugger/Debugger.h:
876         * debugger/DebuggerCallFrame.cpp:
877         (JSC::LineAndColumnFunctor::operator()):
878         (JSC::LineAndColumnFunctor::line):
879         (JSC::LineAndColumnFunctor::column):
880         (JSC::DebuggerCallFrame::DebuggerCallFrame):
881         (JSC::DebuggerCallFrame::clear):
882         * debugger/DebuggerCallFrame.h:
883         (JSC::DebuggerCallFrame::line):
884         (JSC::DebuggerCallFrame::column):
885         * interpreter/Interpreter.cpp:
886         (JSC::unwindCallFrame):
887         (JSC::UnwindFunctor::UnwindFunctor):
888         (JSC::UnwindFunctor::operator()):
889         (JSC::Interpreter::unwind):
890         (JSC::Interpreter::debug):
891         * interpreter/Interpreter.h:
892         * jit/JITOpcodes.cpp:
893         (JSC::JIT::emit_op_debug):
894         * jit/JITOpcodes32_64.cpp:
895         (JSC::JIT::emit_op_debug):
896         * jit/JITStubs.cpp:
897         (JSC::DEFINE_STUB_FUNCTION):
898         * llint/LLIntSlowPaths.cpp:
899         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
900         * llint/LowLevelInterpreter.asm:
901
902 2013-09-24  Filip Pizlo  <fpizlo@apple.com>
903
904         Crashing under JSC::DFG::SpeculativeJIT::spill visiting citicards.com
905         https://bugs.webkit.org/show_bug.cgi?id=121844
906
907         Reviewed by Mark Hahnenberg.
908         
909         Fix some int52 bugs that caused this.
910
911         * bytecode/ValueRecovery.h:
912         (JSC::ValueRecovery::dumpInContext): There's no such thing as int53.
913         * dfg/DFGSpeculativeJIT.h:
914         (JSC::DFG::SpeculativeJIT::spill): Actually spill int52's, instead of hitting an assert and crashing.
915         * dfg/DFGSpeculativeJIT64.cpp:
916         (JSC::DFG::SpeculativeJIT::fillSpeculateInt32Internal): Use the right format (from before when we clobber it).
917
918 2013-09-24  Mark Rowe  <mrowe@apple.com>
919
920         <rdar://problem/14971518> WebKit should build against the Xcode default toolchain when targeting OS X 10.8
921
922         Reviewed by Dan Bernstein.
923
924         * Configurations/Base.xcconfig:
925
926 2013-09-23  Patrick Gansterer  <paroga@webkit.org>
927
928         use NOMINMAX instead of #define min min
929         https://bugs.webkit.org/show_bug.cgi?id=73563
930
931         Reviewed by Brent Fulgham.
932
933         Use NOMINMAX instead of #define min/max as a cleaner
934         way of ensuring that Windows system header files don't
935         define min/max as macro in the first place.
936
937         * config.h:
938
939 2013-09-23  Filip Pizlo  <fpizlo@apple.com>
940
941         Never use ReturnPC for exception handling and quit using exception check indices as a lame replica of the CodeOrigin index
942         https://bugs.webkit.org/show_bug.cgi?id=121734
943
944         Reviewed by Mark Hahnenberg.
945         
946         Exception handling can deduce where the exception was thrown from by looking at the
947         code origin that was stored into the call frame header. There is no need to pass any
948         additional meta-data into the exception throwing logic. But the DFG was still doing it
949         anyway.
950         
951         This removes all of the logic to pass extra meta-data into lookupExceptionHandler()
952         and friends. It simplifies a lot of code.
953
954         * CMakeLists.txt:
955         * GNUmakefile.list.am:
956         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
957         * JavaScriptCore.xcodeproj/project.pbxproj:
958         * Target.pri:
959         * bytecode/CodeBlock.cpp:
960         (JSC::CodeBlock::shrinkToFit):
961         * bytecode/CodeBlock.h:
962         (JSC::CodeBlock::codeOrigins):
963         (JSC::CodeBlock::hasCodeOrigins):
964         (JSC::CodeBlock::canGetCodeOrigin):
965         (JSC::CodeBlock::codeOrigin):
966         * bytecode/CodeOrigin.h:
967         (JSC::InlineCallFrame::InlineCallFrame):
968         * bytecode/InlineCallFrameSet.cpp: Added.
969         (JSC::InlineCallFrameSet::InlineCallFrameSet):
970         (JSC::InlineCallFrameSet::~InlineCallFrameSet):
971         (JSC::InlineCallFrameSet::add):
972         (JSC::InlineCallFrameSet::shrinkToFit):
973         * bytecode/InlineCallFrameSet.h: Added.
974         (JSC::InlineCallFrameSet::isEmpty):
975         (JSC::InlineCallFrameSet::size):
976         (JSC::InlineCallFrameSet::at):
977         * dfg/DFGArgumentsSimplificationPhase.cpp:
978         (JSC::DFG::ArgumentsSimplificationPhase::run):
979         * dfg/DFGByteCodeParser.cpp:
980         (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
981         * dfg/DFGCommonData.cpp:
982         (JSC::DFG::CommonData::addCodeOrigin):
983         (JSC::DFG::CommonData::shrinkToFit):
984         * dfg/DFGCommonData.h:
985         * dfg/DFGDesiredWriteBarriers.cpp:
986         (JSC::DFG::DesiredWriteBarrier::DesiredWriteBarrier):
987         (JSC::DFG::DesiredWriteBarrier::trigger):
988         * dfg/DFGDesiredWriteBarriers.h:
989         (JSC::DFG::DesiredWriteBarriers::add):
990         (JSC::DFG::initializeLazyWriteBarrierForInlineCallFrameExecutable):
991         (JSC::DFG::initializeLazyWriteBarrierForInlineCallFrameCallee):
992         * dfg/DFGGraph.cpp:
993         (JSC::DFG::Graph::Graph):
994         * dfg/DFGGraph.h:
995         * dfg/DFGJITCompiler.cpp:
996         (JSC::DFG::JITCompiler::JITCompiler):
997         (JSC::DFG::JITCompiler::compileExceptionHandlers):
998         (JSC::DFG::JITCompiler::link):
999         (JSC::DFG::JITCompiler::compileFunction):
1000         * dfg/DFGJITCompiler.h:
1001         (JSC::DFG::JITCompiler::emitStoreCodeOrigin):
1002         (JSC::DFG::JITCompiler::exceptionCheck):
1003         (JSC::DFG::JITCompiler::fastExceptionCheck):
1004         * dfg/DFGOperations.cpp:
1005         * dfg/DFGOperations.h:
1006         * dfg/DFGRepatch.cpp:
1007         (JSC::DFG::tryBuildGetByIDList):
1008         * dfg/DFGSpeculativeJIT.h:
1009         (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheck):
1010         (JSC::DFG::SpeculativeJIT::appendCallSetResult):
1011         (JSC::DFG::SpeculativeJIT::appendCall):
1012         * dfg/DFGSpeculativeJIT32_64.cpp:
1013         (JSC::DFG::SpeculativeJIT::emitCall):
1014         * dfg/DFGSpeculativeJIT64.cpp:
1015         (JSC::DFG::SpeculativeJIT::emitCall):
1016         * dfg/DFGVirtualRegisterAllocationPhase.cpp:
1017         (JSC::DFG::VirtualRegisterAllocationPhase::run):
1018         * ftl/FTLLowerDFGToLLVM.cpp:
1019         (JSC::FTL::LowerDFGToLLVM::callPreflight):
1020         * jit/AssemblyHelpers.h:
1021         (JSC::AssemblyHelpers::emitExceptionCheck):
1022
1023 2013-09-23  Oliver Hunt  <oliver@apple.com>
1024
1025         CodeLoad performance regression
1026
1027         Reviewed by Filip Pizlo.
1028
1029         Temporarily remove the ExpressionInfo compression until we can
1030         work out how to make it not clobber performance.
1031
1032         * bytecode/UnlinkedCodeBlock.cpp:
1033         (JSC::UnlinkedCodeBlock::expressionRangeForBytecodeOffset):
1034         (JSC::UnlinkedCodeBlock::addExpressionInfo):
1035         * bytecode/UnlinkedCodeBlock.h:
1036
1037 2013-09-23  Patrick Gansterer  <paroga@webkit.org>
1038
1039         Cleanup CMake files in JavaScriptCore
1040         https://bugs.webkit.org/show_bug.cgi?id=121762
1041
1042         Reviewed by Gyuyoung Kim.
1043
1044         Sort files and unify style.
1045
1046         * CMakeLists.txt:
1047         * shell/CMakeLists.txt:
1048         * shell/PlatformBlackBerry.cmake:
1049         * shell/PlatformEfl.cmake:
1050
1051 2013-09-22  Filip Pizlo  <fpizlo@apple.com>
1052
1053         Get rid of CodeBlock::RareData::callReturnIndexVector and most of the evil that it introduced
1054         https://bugs.webkit.org/show_bug.cgi?id=121766
1055
1056         Reviewed by Andreas Kling.
1057
1058         * bytecode/CodeBlock.cpp:
1059         (JSC::CodeBlock::shrinkToFit):
1060         * bytecode/CodeBlock.h:
1061         * dfg/DFGJITCompiler.cpp:
1062         (JSC::DFG::JITCompiler::compileExceptionHandlers):
1063         (JSC::DFG::JITCompiler::link):
1064         * jit/JIT.cpp:
1065         (JSC::JIT::privateCompile):
1066
1067 2013-09-21  Filip Pizlo  <fpizlo@apple.com>
1068
1069         Interpreter::unwind() has no need for the bytecodeOffset
1070         https://bugs.webkit.org/show_bug.cgi?id=121755
1071
1072         Reviewed by Oliver Hunt.
1073         
1074         It was only using the bytecodeOffset for some debugger stuff, but the debugger could
1075         just get the bytecodeOffset the same way the rest of the machinery does: by using the
1076         CallFrame's location.
1077         
1078         It turns out that a lot of really ugly code was in place just to supply this
1079         bytecodeOffset. This patch kills most of that code, and allows us to kill even more
1080         code in a future patch - though most likely that killage will involve further
1081         refactorings as well, see https://bugs.webkit.org/show_bug.cgi?id=121734.
1082
1083         * dfg/DFGOperations.cpp:
1084         * interpreter/CallFrame.cpp:
1085         (JSC::CallFrame::bytecodeOffset):
1086         (JSC::CallFrame::codeOrigin):
1087         * interpreter/CallFrame.h:
1088         * interpreter/Interpreter.cpp:
1089         (JSC::Interpreter::unwind):
1090         * interpreter/Interpreter.h:
1091         * jit/JITExceptions.cpp:
1092         (JSC::genericUnwind):
1093         * jit/JITExceptions.h:
1094         * jit/JITStubs.cpp:
1095         (JSC::DEFINE_STUB_FUNCTION):
1096         (JSC::cti_vm_handle_exception):
1097         * llint/LLIntExceptions.cpp:
1098         (JSC::LLInt::doThrow):
1099         (JSC::LLInt::returnToThrow):
1100         (JSC::LLInt::callToThrow):
1101         * llint/LLIntExceptions.h:
1102         * llint/LLIntSlowPaths.cpp:
1103         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
1104         * runtime/CommonSlowPaths.cpp:
1105         (JSC::SLOW_PATH_DECL):
1106         * runtime/CommonSlowPathsExceptions.cpp:
1107         (JSC::CommonSlowPaths::interpreterThrowInCaller):
1108         * runtime/CommonSlowPathsExceptions.h:
1109
1110 2013-09-21  Darin Adler  <darin@apple.com>
1111
1112         Add ExecState::uncheckedArgument and use where possible to shrink a bit
1113         https://bugs.webkit.org/show_bug.cgi?id=121750
1114
1115         Reviewed by Andreas Kling.
1116
1117         * interpreter/CallFrame.h:
1118         (JSC::ExecState::uncheckedArgument): Added. Like argument, but with an
1119         assertion rather than a runtime check.
1120
1121         * API/APICallbackFunction.h:
1122         (JSC::APICallbackFunction::call): Use uncheckedArgument because we are
1123         already in a loop over arguments, so don't need a range check.
1124         * API/JSCallbackConstructor.cpp:
1125         (JSC::constructJSCallback): Ditto.
1126         * API/JSCallbackObjectFunctions.h:
1127         (JSC::JSCallbackObject::construct): Ditto.
1128         (JSC::JSCallbackObject::call): Ditto.
1129         * jsc.cpp:
1130         (functionPrint): Ditto.
1131         (functionRun): Ditto.
1132         (functionSetSamplingFlags): Ditto.
1133         (functionClearSamplingFlags): Ditto.
1134         * runtime/ArrayPrototype.cpp:
1135         (JSC::arrayProtoFuncConcat): Ditto.
1136         (JSC::arrayProtoFuncPush): Use uncheckedArgument because there is already
1137         code that explicitly checks argumentCount.
1138         (JSC::arrayProtoFuncSplice): Ditto.
1139         (JSC::arrayProtoFuncUnShift): Ditto.
1140         (JSC::arrayProtoFuncReduce): Ditto.
1141         (JSC::arrayProtoFuncReduceRight): Ditto.
1142         (JSC::arrayProtoFuncLastIndexOf): Ditto.
1143         * runtime/DatePrototype.cpp:
1144         (JSC::fillStructuresUsingTimeArgs): Ditto.
1145         (JSC::fillStructuresUsingDateArgs): Ditto.
1146         * runtime/JSArrayBufferConstructor.cpp:
1147         (JSC::constructArrayBuffer): Ditto.
1148         * runtime/JSArrayBufferPrototype.cpp:
1149         (JSC::arrayBufferProtoFuncSlice): Ditto.
1150         * runtime/JSBoundFunction.cpp:
1151         (JSC::boundFunctionCall): Ditto.
1152         (JSC::boundFunctionConstruct): Ditto.
1153         * runtime/JSDataViewPrototype.cpp:
1154         (JSC::getData): Ditto.
1155         (JSC::setData): Ditto.
1156         * runtime/JSGenericTypedArrayViewConstructorInlines.h:
1157         (JSC::constructGenericTypedArrayView): Ditto.
1158         * runtime/JSGenericTypedArrayViewPrototypeInlines.h:
1159         (JSC::genericTypedArrayViewProtoFuncSet): Ditto.
1160         (JSC::genericTypedArrayViewProtoFuncSubarray): Ditto.
1161         * runtime/JSONObject.cpp:
1162         (JSC::JSONProtoFuncParse): Ditto.
1163         (JSC::JSONProtoFuncStringify): Ditto.
1164         * runtime/JSPromiseConstructor.cpp:
1165         (JSC::constructPromise): Ditto.
1166         (JSC::JSPromiseConstructorFuncFulfill): Ditto.
1167         (JSC::JSPromiseConstructorFuncResolve): Ditto.
1168         (JSC::JSPromiseConstructorFuncReject): Ditto.
1169         * runtime/MathObject.cpp:
1170         (JSC::mathProtoFuncMax): Ditto.
1171         (JSC::mathProtoFuncMin): Ditto.
1172
1173         * runtime/NameConstructor.cpp:
1174         (JSC::constructPrivateName): Removed unneeded check of argumentCout
1175         that simply repeats what argument already does.
1176         * runtime/NativeErrorConstructor.cpp:
1177         (JSC::Interpreter::constructWithNativeErrorConstructor): Ditto.
1178         (JSC::Interpreter::callNativeErrorConstructor): Ditto.
1179
1180         * runtime/NumberConstructor.cpp:
1181         (JSC::constructWithNumberConstructor): Use uncheckedArgument since
1182         there is already code that explicitly checks argument count.
1183         (JSC::callNumberConstructor): Ditto.
1184
1185         * runtime/ObjectConstructor.cpp:
1186         (JSC::objectConstructorCreate): Small refactoring to not call argument(0)
1187         three times.
1188
1189         * runtime/SetConstructor.cpp:
1190         (JSC::constructSet): Use uncheckedArgument since we are already in a loop
1191         over arguments.
1192
1193         * runtime/StringConstructor.cpp:
1194         (JSC::stringFromCharCodeSlowCase): In a loop.
1195         (JSC::stringFromCharCode): Already checked count.
1196         (JSC::constructWithStringConstructor): Ditto.
1197         (JSC::callStringConstructor): Ditto.
1198         * runtime/StringPrototype.cpp:
1199         (JSC::stringProtoFuncConcat): Already checked count.
1200         * runtime/TestRunnerUtils.cpp:
1201         (JSC::numberOfDFGCompiles): Ditto.
1202         (JSC::setNeverInline): Ditto.
1203
1204 2013-09-21  Filip Pizlo  <fpizlo@apple.com>
1205
1206         Remove the notion that a CallFrame can have a pointer to an InlineCallFrame, since that doesn't happen anymore
1207         https://bugs.webkit.org/show_bug.cgi?id=121753
1208
1209         Reviewed by Darin Adler.
1210
1211         * interpreter/CallFrame.cpp:
1212         (JSC::CallFrame::bytecodeOffsetFromCodeOriginIndex):
1213         * interpreter/CallFrame.h:
1214         * interpreter/Register.h:
1215
1216 2013-09-21  Filip Pizlo  <fpizlo@apple.com>
1217
1218         Unreviewed, fix the revert.
1219
1220         * dfg/DFGRepatch.cpp:
1221
1222 2013-09-21  Filip Pizlo  <fpizlo@apple.com>
1223
1224         Unreviewed, revert http://trac.webkit.org/changeset/156235. It won't work on Windows.
1225
1226         * CMakeLists.txt:
1227         * GNUmakefile.list.am:
1228         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1229         * JavaScriptCore.xcodeproj/project.pbxproj:
1230         * Target.pri:
1231         * bytecode/CallLinkInfo.cpp:
1232         (JSC::CallLinkInfo::unlink):
1233         * bytecode/CodeBlock.cpp:
1234         (JSC::CodeBlock::resetStubInternal):
1235         * bytecode/StructureStubInfo.h:
1236         * dfg/DFGCallArrayAllocatorSlowPathGenerator.h:
1237         (JSC::DFG::CallArrayAllocatorSlowPathGenerator::CallArrayAllocatorSlowPathGenerator):
1238         (JSC::DFG::CallArrayAllocatorWithVariableSizeSlowPathGenerator::CallArrayAllocatorWithVariableSizeSlowPathGenerator):
1239         * dfg/DFGJITCompiler.h:
1240         * dfg/DFGOSRExitCompiler.h:
1241         * dfg/DFGOperations.cpp:
1242         (JSC::DFG::operationPutByValInternal):
1243         * dfg/DFGOperations.h:
1244         (JSC::DFG::operationNewTypedArrayWithSizeForType):
1245         (JSC::DFG::operationNewTypedArrayWithOneArgumentForType):
1246         * dfg/DFGRegisterSet.h: Added.
1247         (JSC::DFG::RegisterSet::RegisterSet):
1248         (JSC::DFG::RegisterSet::asPOD):
1249         (JSC::DFG::RegisterSet::copyInfo):
1250         (JSC::DFG::RegisterSet::set):
1251         (JSC::DFG::RegisterSet::setGPRByIndex):
1252         (JSC::DFG::RegisterSet::clear):
1253         (JSC::DFG::RegisterSet::get):
1254         (JSC::DFG::RegisterSet::getGPRByIndex):
1255         (JSC::DFG::RegisterSet::getFreeGPR):
1256         (JSC::DFG::RegisterSet::setFPRByIndex):
1257         (JSC::DFG::RegisterSet::getFPRByIndex):
1258         (JSC::DFG::RegisterSet::setByIndex):
1259         (JSC::DFG::RegisterSet::getByIndex):
1260         (JSC::DFG::RegisterSet::numberOfSetGPRs):
1261         (JSC::DFG::RegisterSet::numberOfSetFPRs):
1262         (JSC::DFG::RegisterSet::numberOfSetRegisters):
1263         (JSC::DFG::RegisterSet::setBit):
1264         (JSC::DFG::RegisterSet::clearBit):
1265         (JSC::DFG::RegisterSet::getBit):
1266         * dfg/DFGRepatch.cpp: Added.
1267         (JSC::DFG::repatchCall):
1268         (JSC::DFG::repatchByIdSelfAccess):
1269         (JSC::DFG::addStructureTransitionCheck):
1270         (JSC::DFG::replaceWithJump):
1271         (JSC::DFG::emitRestoreScratch):
1272         (JSC::DFG::linkRestoreScratch):
1273         (JSC::DFG::generateProtoChainAccessStub):
1274         (JSC::DFG::tryCacheGetByID):
1275         (JSC::DFG::repatchGetByID):
1276         (JSC::DFG::getPolymorphicStructureList):
1277         (JSC::DFG::patchJumpToGetByIdStub):
1278         (JSC::DFG::tryBuildGetByIDList):
1279         (JSC::DFG::buildGetByIDList):
1280         (JSC::DFG::appropriateGenericPutByIdFunction):
1281         (JSC::DFG::appropriateListBuildingPutByIdFunction):
1282         (JSC::DFG::emitPutReplaceStub):
1283         (JSC::DFG::emitPutTransitionStub):
1284         (JSC::DFG::tryCachePutByID):
1285         (JSC::DFG::repatchPutByID):
1286         (JSC::DFG::tryBuildPutByIdList):
1287         (JSC::DFG::buildPutByIdList):
1288         (JSC::DFG::tryRepatchIn):
1289         (JSC::DFG::repatchIn):
1290         (JSC::DFG::linkSlowFor):
1291         (JSC::DFG::linkFor):
1292         (JSC::DFG::linkClosureCall):
1293         (JSC::DFG::resetGetByID):
1294         (JSC::DFG::resetPutByID):
1295         (JSC::DFG::resetIn):
1296         * dfg/DFGRepatch.h: Added.
1297         (JSC::DFG::resetGetByID):
1298         (JSC::DFG::resetPutByID):
1299         (JSC::DFG::resetIn):
1300         * dfg/DFGScratchRegisterAllocator.h: Added.
1301         (JSC::DFG::ScratchRegisterAllocator::ScratchRegisterAllocator):
1302         (JSC::DFG::ScratchRegisterAllocator::lock):
1303         (JSC::DFG::ScratchRegisterAllocator::allocateScratch):
1304         (JSC::DFG::ScratchRegisterAllocator::allocateScratchGPR):
1305         (JSC::DFG::ScratchRegisterAllocator::allocateScratchFPR):
1306         (JSC::DFG::ScratchRegisterAllocator::didReuseRegisters):
1307         (JSC::DFG::ScratchRegisterAllocator::preserveReusedRegistersByPushing):
1308         (JSC::DFG::ScratchRegisterAllocator::restoreReusedRegistersByPopping):
1309         (JSC::DFG::ScratchRegisterAllocator::desiredScratchBufferSize):
1310         (JSC::DFG::ScratchRegisterAllocator::preserveUsedRegistersToScratchBuffer):
1311         (JSC::DFG::ScratchRegisterAllocator::restoreUsedRegistersFromScratchBuffer):
1312         * dfg/DFGSpeculativeJIT.cpp:
1313         (JSC::DFG::SpeculativeJIT::writeBarrier):
1314         (JSC::DFG::SpeculativeJIT::nonSpeculativeCompare):
1315         (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
1316         (JSC::DFG::SpeculativeJIT::compare):
1317         * dfg/DFGSpeculativeJIT.h:
1318         (JSC::DFG::SpeculativeJIT::callOperation):
1319         * dfg/DFGSpeculativeJIT32_64.cpp:
1320         (JSC::DFG::SpeculativeJIT::cachedPutById):
1321         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
1322         (JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::CompareAndBoxBooleanSlowPathGenerator):
1323         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
1324         (JSC::DFG::SpeculativeJIT::compile):
1325         * dfg/DFGSpeculativeJIT64.cpp:
1326         (JSC::DFG::SpeculativeJIT::cachedPutById):
1327         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
1328         (JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::CompareAndBoxBooleanSlowPathGenerator):
1329         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
1330         (JSC::DFG::SpeculativeJIT::compile):
1331         * dfg/DFGThunks.cpp:
1332         (JSC::DFG::emitPointerValidation):
1333         (JSC::DFG::throwExceptionFromCallSlowPathGenerator):
1334         (JSC::DFG::slowPathFor):
1335         (JSC::DFG::linkForThunkGenerator):
1336         (JSC::DFG::linkCallThunkGenerator):
1337         (JSC::DFG::linkConstructThunkGenerator):
1338         (JSC::DFG::linkClosureCallThunkGenerator):
1339         (JSC::DFG::virtualForThunkGenerator):
1340         (JSC::DFG::virtualCallThunkGenerator):
1341         (JSC::DFG::virtualConstructThunkGenerator):
1342         * dfg/DFGThunks.h:
1343         * ftl/FTLIntrinsicRepository.h:
1344         * ftl/FTLLowerDFGToLLVM.cpp:
1345         (JSC::FTL::LowerDFGToLLVM::compileCallOrConstruct):
1346         * ftl/FTLOSRExitCompiler.h:
1347         * jit/AssemblyHelpers.h:
1348         * jit/JIT.cpp:
1349         (JSC::JIT::linkFor):
1350         (JSC::JIT::linkSlowCall):
1351         * jit/JITCall.cpp:
1352         (JSC::JIT::compileCallEvalSlowCase):
1353         (JSC::JIT::compileOpCallSlowCase):
1354         (JSC::JIT::privateCompileClosureCall):
1355         * jit/JITCall32_64.cpp:
1356         (JSC::JIT::compileCallEvalSlowCase):
1357         (JSC::JIT::compileOpCallSlowCase):
1358         (JSC::JIT::privateCompileClosureCall):
1359         * jit/JITOperationWrappers.h: Removed.
1360         * jit/JITOperations.cpp: Removed.
1361         * jit/JITOperations.h: Removed.
1362         * jit/RegisterSet.h: Removed.
1363         * jit/Repatch.cpp: Removed.
1364         * jit/Repatch.h: Removed.
1365         * jit/ScratchRegisterAllocator.h: Removed.
1366         * jit/ThunkGenerators.cpp:
1367         (JSC::generateSlowCaseFor):
1368         (JSC::linkForGenerator):
1369         (JSC::linkCallGenerator):
1370         (JSC::linkConstructGenerator):
1371         (JSC::linkClosureCallGenerator):
1372         (JSC::virtualForGenerator):
1373         (JSC::virtualCallGenerator):
1374         (JSC::virtualConstructGenerator):
1375         * jit/ThunkGenerators.h:
1376
1377 2013-09-21  Filip Pizlo  <fpizlo@apple.com>
1378
1379         Move DFG inline caching logic into jit/
1380         https://bugs.webkit.org/show_bug.cgi?id=121749
1381
1382         Rubber stamped by Sam Weinig.
1383         
1384         We want to get rid of the baseline JIT's inline caching machinery and have it use the
1385         DFG's instead. But before we do that we need to move the DFG's inline caching machine
1386         out from behind its ENABLE(DFG_JIT) guards and make it available to the whole system.
1387         This patch does that:
1388         
1389         - dfg/DFGRepatch becomes jit/Repatch.
1390         
1391         - The thunks used by the DFG IC go into jit/ThunkGenerators, instead of dfg/DFGThunks.
1392         
1393         - The operations used by the DFG IC go into jit/JITOperations, instead of
1394           dfg/DFGOperations.
1395         
1396         - The old JIT's thunk generators for calls are renamed to reduce confusion. Previously
1397           it was easy to know which generators belong to which JIT because the old JIT used
1398           JSC::virtualCallBlah and the DFG used JSC::DFG::virtualCallBlah, but that's not the
1399           case anymore. Note that the old JIT's thunk generators will die in a future patch.
1400         
1401         No functional changes beyond those moves.
1402
1403         * CMakeLists.txt:
1404         * GNUmakefile.list.am:
1405         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1406         * JavaScriptCore.xcodeproj/project.pbxproj:
1407         * Target.pri:
1408         * bytecode/CallLinkInfo.cpp:
1409         (JSC::CallLinkInfo::unlink):
1410         * bytecode/CodeBlock.cpp:
1411         (JSC::CodeBlock::resetStubInternal):
1412         * bytecode/StructureStubInfo.h:
1413         * dfg/DFGCallArrayAllocatorSlowPathGenerator.h:
1414         (JSC::DFG::CallArrayAllocatorSlowPathGenerator::CallArrayAllocatorSlowPathGenerator):
1415         (JSC::DFG::CallArrayAllocatorWithVariableSizeSlowPathGenerator::CallArrayAllocatorWithVariableSizeSlowPathGenerator):
1416         * dfg/DFGJITCompiler.h:
1417         * dfg/DFGOSRExitCompiler.h:
1418         * dfg/DFGOperations.cpp:
1419         (JSC::DFG::operationPutByValInternal):
1420         * dfg/DFGOperations.h:
1421         (JSC::DFG::operationNewTypedArrayWithSizeForType):
1422         (JSC::DFG::operationNewTypedArrayWithOneArgumentForType):
1423         * dfg/DFGRegisterSet.h: Removed.
1424         * dfg/DFGRepatch.cpp: Removed.
1425         * dfg/DFGRepatch.h: Removed.
1426         * dfg/DFGScratchRegisterAllocator.h: Removed.
1427         * dfg/DFGSpeculativeJIT.cpp:
1428         (JSC::DFG::SpeculativeJIT::nonSpeculativeCompare):
1429         (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
1430         (JSC::DFG::SpeculativeJIT::compare):
1431         * dfg/DFGSpeculativeJIT.h:
1432         (JSC::DFG::SpeculativeJIT::callOperation):
1433         * dfg/DFGSpeculativeJIT32_64.cpp:
1434         (JSC::DFG::SpeculativeJIT::cachedPutById):
1435         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
1436         (JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::CompareAndBoxBooleanSlowPathGenerator):
1437         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
1438         (JSC::DFG::SpeculativeJIT::compile):
1439         * dfg/DFGSpeculativeJIT64.cpp:
1440         (JSC::DFG::SpeculativeJIT::cachedPutById):
1441         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
1442         (JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::CompareAndBoxBooleanSlowPathGenerator):
1443         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
1444         (JSC::DFG::SpeculativeJIT::compile):
1445         * dfg/DFGThunks.cpp:
1446         * dfg/DFGThunks.h:
1447         * ftl/FTLIntrinsicRepository.h:
1448         * ftl/FTLLowerDFGToLLVM.cpp:
1449         (JSC::FTL::LowerDFGToLLVM::compileCallOrConstruct):
1450         * jit/AssemblyHelpers.h:
1451         (JSC::AssemblyHelpers::writeBarrier):
1452         * jit/JIT.cpp:
1453         (JSC::JIT::linkFor):
1454         (JSC::JIT::linkSlowCall):
1455         * jit/JITCall.cpp:
1456         (JSC::JIT::compileCallEval):
1457         (JSC::JIT::compileCallEvalSlowCase):
1458         (JSC::JIT::compileOpCallSlowCase):
1459         (JSC::JIT::privateCompileClosureCall):
1460         * jit/JITCall32_64.cpp:
1461         (JSC::JIT::compileCallEvalSlowCase):
1462         (JSC::JIT::compileOpCallSlowCase):
1463         (JSC::JIT::privateCompileClosureCall):
1464         * jit/JITOperationWrappers.h: Added.
1465         * jit/JITOperations.cpp: Added.
1466         * jit/JITOperations.h: Added.
1467         * jit/RegisterSet.h: Added.
1468         (JSC::RegisterSet::RegisterSet):
1469         (JSC::RegisterSet::asPOD):
1470         (JSC::RegisterSet::copyInfo):
1471         (JSC::RegisterSet::set):
1472         (JSC::RegisterSet::setGPRByIndex):
1473         (JSC::RegisterSet::clear):
1474         (JSC::RegisterSet::get):
1475         (JSC::RegisterSet::getGPRByIndex):
1476         (JSC::RegisterSet::getFreeGPR):
1477         (JSC::RegisterSet::setFPRByIndex):
1478         (JSC::RegisterSet::getFPRByIndex):
1479         (JSC::RegisterSet::setByIndex):
1480         (JSC::RegisterSet::getByIndex):
1481         (JSC::RegisterSet::numberOfSetGPRs):
1482         (JSC::RegisterSet::numberOfSetFPRs):
1483         (JSC::RegisterSet::numberOfSetRegisters):
1484         (JSC::RegisterSet::setBit):
1485         (JSC::RegisterSet::clearBit):
1486         (JSC::RegisterSet::getBit):
1487         * jit/Repatch.cpp: Added.
1488         (JSC::repatchCall):
1489         (JSC::repatchByIdSelfAccess):
1490         (JSC::addStructureTransitionCheck):
1491         (JSC::replaceWithJump):
1492         (JSC::emitRestoreScratch):
1493         (JSC::linkRestoreScratch):
1494         (JSC::generateProtoChainAccessStub):
1495         (JSC::tryCacheGetByID):
1496         (JSC::repatchGetByID):
1497         (JSC::getPolymorphicStructureList):
1498         (JSC::patchJumpToGetByIdStub):
1499         (JSC::tryBuildGetByIDList):
1500         (JSC::buildGetByIDList):
1501         (JSC::appropriateGenericPutByIdFunction):
1502         (JSC::appropriateListBuildingPutByIdFunction):
1503         (JSC::emitPutReplaceStub):
1504         (JSC::emitPutTransitionStub):
1505         (JSC::tryCachePutByID):
1506         (JSC::repatchPutByID):
1507         (JSC::tryBuildPutByIdList):
1508         (JSC::buildPutByIdList):
1509         (JSC::tryRepatchIn):
1510         (JSC::repatchIn):
1511         (JSC::linkSlowFor):
1512         (JSC::linkFor):
1513         (JSC::linkClosureCall):
1514         (JSC::resetGetByID):
1515         (JSC::resetPutByID):
1516         (JSC::resetIn):
1517         * jit/Repatch.h: Added.
1518         (JSC::resetGetByID):
1519         (JSC::resetPutByID):
1520         (JSC::resetIn):
1521         * jit/ScratchRegisterAllocator.h: Added.
1522         (JSC::ScratchRegisterAllocator::ScratchRegisterAllocator):
1523         (JSC::ScratchRegisterAllocator::lock):
1524         (JSC::ScratchRegisterAllocator::allocateScratch):
1525         (JSC::ScratchRegisterAllocator::allocateScratchGPR):
1526         (JSC::ScratchRegisterAllocator::allocateScratchFPR):
1527         (JSC::ScratchRegisterAllocator::didReuseRegisters):
1528         (JSC::ScratchRegisterAllocator::preserveReusedRegistersByPushing):
1529         (JSC::ScratchRegisterAllocator::restoreReusedRegistersByPopping):
1530         (JSC::ScratchRegisterAllocator::desiredScratchBufferSize):
1531         (JSC::ScratchRegisterAllocator::preserveUsedRegistersToScratchBuffer):
1532         (JSC::ScratchRegisterAllocator::restoreUsedRegistersFromScratchBuffer):
1533         * jit/ThunkGenerators.cpp:
1534         (JSC::oldStyleGenerateSlowCaseFor):
1535         (JSC::oldStyleLinkForGenerator):
1536         (JSC::oldStyleLinkCallGenerator):
1537         (JSC::oldStyleLinkConstructGenerator):
1538         (JSC::oldStyleLinkClosureCallGenerator):
1539         (JSC::oldStyleVirtualForGenerator):
1540         (JSC::oldStyleVirtualCallGenerator):
1541         (JSC::oldStyleVirtualConstructGenerator):
1542         (JSC::emitPointerValidation):
1543         (JSC::throwExceptionFromCallSlowPathGenerator):
1544         (JSC::slowPathFor):
1545         (JSC::linkForThunkGenerator):
1546         (JSC::linkCallThunkGenerator):
1547         (JSC::linkConstructThunkGenerator):
1548         (JSC::linkClosureCallThunkGenerator):
1549         (JSC::virtualForThunkGenerator):
1550         (JSC::virtualCallThunkGenerator):
1551         (JSC::virtualConstructThunkGenerator):
1552         * jit/ThunkGenerators.h:
1553
1554 2013-09-21  Anders Carlsson  <andersca@apple.com>
1555
1556         Fix the non-DFG build.
1557
1558         * interpreter/Interpreter.cpp:
1559         (JSC::unwindCallFrame):
1560         * interpreter/StackVisitor.cpp:
1561         (JSC::StackVisitor::Frame::r):
1562
1563 2013-09-21  Filip Pizlo  <fpizlo@apple.com>
1564
1565         Get rid of IsInlinedCodeTag and its associated methods since it's unused
1566         https://bugs.webkit.org/show_bug.cgi?id=121737
1567
1568         Reviewed by Sam Weinig.
1569         
1570         This was meant to be easy, but I kept wondering if it was safe to remove the
1571         inline call frame check in Arguments::tearOff(). The check was clearly dead
1572         since the bit wasn't being set anywhere.
1573         
1574         It turns out that the unwindCallFrame() function was relying on tearOff()
1575         doing the right thing for inlined code, but it wasn't even passing it an
1576         inline call frame. I fixed this by having unwindCallFrame() inlining check,
1577         while also making sure that the code uses the right operand index for the
1578         arguments register.
1579
1580         * interpreter/CallFrame.h:
1581         * interpreter/CallFrameInlines.h:
1582         * interpreter/Interpreter.cpp:
1583         (JSC::unwindCallFrame):
1584         * interpreter/StackVisitor.cpp:
1585         (JSC::StackVisitor::Frame::r):
1586         * interpreter/StackVisitor.h:
1587         * runtime/Arguments.cpp:
1588         (JSC::Arguments::tearOff):
1589
1590 2013-09-20  Mark Hahnenberg  <mhahnenberg@apple.com>
1591
1592         (un)shiftCountWithAnyIndexingType will start over in the middle of copying if it sees a hole
1593         https://bugs.webkit.org/show_bug.cgi?id=121717
1594
1595         Reviewed by Oliver Hunt.
1596
1597         This bug caused the array to become corrupted. We now check for holes before we start moving things, 
1598         and start moving things only once we've determined that there are none.
1599
1600         * runtime/JSArray.cpp:
1601         (JSC::JSArray::shiftCountWithAnyIndexingType):
1602         (JSC::JSArray::unshiftCountWithAnyIndexingType):
1603
1604 2013-09-20  Filip Pizlo  <fpizlo@apple.com>
1605
1606         REGRESSION(r156047): WebCore hangs inside JSC::toInt32(double)
1607         https://bugs.webkit.org/show_bug.cgi?id=121648
1608
1609         Reviewed by Mark Hahnenberg.
1610         
1611         The Int52<->StrictInt52 conversion did the opposite fill() than what it was
1612         supposed to. For example when converting a Int52 to a StrictInt52 it would fill
1613         as Int52, and vice-versa.
1614
1615         * dfg/DFGSpeculativeJIT64.cpp:
1616         (JSC::DFG::SpeculativeJIT::fillSpeculateInt52):
1617
1618 2013-09-20  Oliver Hunt  <oliver@apple.com>
1619
1620         REGRESSION(r153215): New iCloud site crashes
1621         https://bugs.webkit.org/show_bug.cgi?id=121710
1622
1623         Reviewed by Filip Pizlo.
1624
1625         Don't claim to be able to rely on the arguments structure, use the Arguments
1626         speculation type
1627
1628         * dfg/DFGAbstractInterpreterInlines.h:
1629         (JSC::DFG::::executeEffects):
1630
1631 2013-09-20  Mark Hahnenberg  <mhahnenberg@apple.com>
1632
1633         Clobberize phase forgets to indicate that it writes GCState for several node types
1634         https://bugs.webkit.org/show_bug.cgi?id=121702
1635
1636         Reviewed by Oliver Hunt.
1637
1638         Added read and write for GCState to the nodes that could end up allocating (and thereby
1639         cause a garbage collection).
1640
1641         * dfg/DFGClobberize.h:
1642         (JSC::DFG::clobberize):
1643
1644 2013-09-19  Filip Pizlo  <fpizlo@apple.com>
1645
1646         Move CCallHelpers and AssemblyHelpers into jit/ and have JSInterfaceJIT use them
1647         https://bugs.webkit.org/show_bug.cgi?id=121637
1648
1649         Rubber stamped by Michael Saboff.
1650         
1651         Also moved GPRInfo/FPRInfo into jit/. Rolling back in after fixing JIT-only build
1652         and tests.
1653
1654         * CMakeLists.txt:
1655         * GNUmakefile.list.am:
1656         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1657         * JavaScriptCore.xcodeproj/project.pbxproj:
1658         * Target.pri:
1659         * bytecode/ValueRecovery.h:
1660         (JSC::ValueRecovery::dumpInContext):
1661         * dfg/DFGAssemblyHelpers.cpp: Removed.
1662         * dfg/DFGAssemblyHelpers.h: Removed.
1663         * dfg/DFGBinarySwitch.h:
1664         * dfg/DFGByteCodeParser.cpp:
1665         * dfg/DFGCCallHelpers.h: Removed.
1666         * dfg/DFGDisassembler.cpp:
1667         * dfg/DFGFPRInfo.h: Removed.
1668         * dfg/DFGGPRInfo.h: Removed.
1669         * dfg/DFGGraph.cpp:
1670         * dfg/DFGGraph.h:
1671         * dfg/DFGJITCompiler.h:
1672         * dfg/DFGOSRExit.cpp:
1673         * dfg/DFGOSRExit.h:
1674         * dfg/DFGOSRExitCompiler.h:
1675         * dfg/DFGOSRExitCompilerCommon.h:
1676         * dfg/DFGRegisterBank.h:
1677         * dfg/DFGRegisterSet.h:
1678         * dfg/DFGRepatch.cpp:
1679         * dfg/DFGSilentRegisterSavePlan.h:
1680         * dfg/DFGThunks.cpp:
1681         * dfg/DFGVariableEvent.cpp:
1682         * ftl/FTLCArgumentGetter.h:
1683         (JSC::FTL::CArgumentGetter::CArgumentGetter):
1684         (JSC::FTL::CArgumentGetter::loadNext8):
1685         (JSC::FTL::CArgumentGetter::loadNext32):
1686         (JSC::FTL::CArgumentGetter::loadNext64):
1687         (JSC::FTL::CArgumentGetter::loadNextPtr):
1688         (JSC::FTL::CArgumentGetter::loadNextDouble):
1689         * ftl/FTLCompile.cpp:
1690         * ftl/FTLExitThunkGenerator.h:
1691         * ftl/FTLLink.cpp:
1692         * ftl/FTLThunks.cpp:
1693         * jit/AssemblyHelpers.cpp: Copied from Source/JavaScriptCore/dfg/DFGAssemblyHelpers.cpp.
1694         * jit/AssemblyHelpers.h: Copied from Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h.
1695         (JSC::AssemblyHelpers::AssemblyHelpers):
1696         (JSC::AssemblyHelpers::debugCall):
1697         * jit/CCallHelpers.h: Copied from Source/JavaScriptCore/dfg/DFGCCallHelpers.h.
1698         * jit/FPRInfo.h: Copied from Source/JavaScriptCore/dfg/DFGFPRInfo.h.
1699         (WTF::printInternal):
1700         * jit/GPRInfo.h: Copied from Source/JavaScriptCore/dfg/DFGGPRInfo.h.
1701         (WTF::printInternal):
1702         * jit/JIT.cpp:
1703         (JSC::JIT::JIT):
1704         * jit/JIT.h:
1705         * jit/JITPropertyAccess.cpp:
1706         (JSC::JIT::stringGetByValStubGenerator):
1707         * jit/JITPropertyAccess32_64.cpp:
1708         (JSC::JIT::stringGetByValStubGenerator):
1709         * jit/JSInterfaceJIT.h:
1710         (JSC::JSInterfaceJIT::JSInterfaceJIT):
1711         * jit/SpecializedThunkJIT.h:
1712         (JSC::SpecializedThunkJIT::SpecializedThunkJIT):
1713         (JSC::SpecializedThunkJIT::finalize):
1714         * jit/ThunkGenerators.cpp:
1715         (JSC::linkForGenerator):
1716         (JSC::virtualForGenerator):
1717         (JSC::stringLengthTrampolineGenerator):
1718         (JSC::nativeForGenerator):
1719         (JSC::arityFixup):
1720         (JSC::charCodeAtThunkGenerator):
1721         (JSC::charAtThunkGenerator):
1722         (JSC::fromCharCodeThunkGenerator):
1723         (JSC::sqrtThunkGenerator):
1724         (JSC::floorThunkGenerator):
1725         (JSC::ceilThunkGenerator):
1726         (JSC::roundThunkGenerator):
1727         (JSC::expThunkGenerator):
1728         (JSC::logThunkGenerator):
1729         (JSC::absThunkGenerator):
1730         (JSC::powThunkGenerator):
1731         (JSC::imulThunkGenerator):
1732         * llint/LLIntThunks.cpp:
1733         (JSC::LLInt::generateThunkWithJumpTo):
1734         * runtime/JSCJSValue.h:
1735
1736 2013-09-20  Allan Sandfeld Jensen  <allan.jensen@digia.com>
1737
1738         Inline method exported
1739         https://bugs.webkit.org/show_bug.cgi?id=121664
1740
1741         Reviewed by Darin Adler.
1742
1743         WatchDog::didFire() is marked as an exported symbol eventhough it is
1744         defined inline. This breaks the build on MinGW since it results in dllimport
1745         being declared on a definition.
1746
1747         * runtime/Watchdog.h:
1748         (JSC::Watchdog::didFire):
1749
1750 2013-09-20  Patrick Gansterer  <paroga@webkit.org>
1751
1752         [CMake] Use COMPILE_DEFINITIONS target property for setting BUILDING_* defines
1753         https://bugs.webkit.org/show_bug.cgi?id=121672
1754
1755         Reviewed by Gyuyoung Kim.
1756
1757         Since the scope of add_definitions() is always a whole file, we need to use
1758         target properties instead to set definitions only for specific targets.
1759
1760         * CMakeLists.txt:
1761
1762 2013-09-19  Commit Queue  <commit-queue@webkit.org>
1763
1764         Unreviewed, rolling out r156120.
1765         http://trac.webkit.org/changeset/156120
1766         https://bugs.webkit.org/show_bug.cgi?id=121651
1767
1768         Broke windows runtime and all tests (Requested by bfulgham on
1769         #webkit).
1770
1771         * CMakeLists.txt:
1772         * GNUmakefile.list.am:
1773         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1774         * JavaScriptCore.xcodeproj/project.pbxproj:
1775         * Target.pri:
1776         * bytecode/ValueRecovery.h:
1777         (JSC::ValueRecovery::dumpInContext):
1778         * dfg/DFGAssemblyHelpers.cpp: Renamed from Source/JavaScriptCore/jit/AssemblyHelpers.cpp.
1779         (JSC::DFG::AssemblyHelpers::executableFor):
1780         (JSC::DFG::AssemblyHelpers::decodedCodeMapFor):
1781         (JSC::DFG::AssemblyHelpers::setSamplingFlag):
1782         (JSC::DFG::AssemblyHelpers::clearSamplingFlag):
1783         (JSC::DFG::AssemblyHelpers::jitAssertIsInt32):
1784         (JSC::DFG::AssemblyHelpers::jitAssertIsJSInt32):
1785         (JSC::DFG::AssemblyHelpers::jitAssertIsJSNumber):
1786         (JSC::DFG::AssemblyHelpers::jitAssertIsJSDouble):
1787         (JSC::DFG::AssemblyHelpers::jitAssertIsCell):
1788         (JSC::DFG::AssemblyHelpers::jitAssertHasValidCallFrame):
1789         * dfg/DFGAssemblyHelpers.h: Renamed from Source/JavaScriptCore/jit/AssemblyHelpers.h.
1790         (JSC::DFG::AssemblyHelpers::AssemblyHelpers):
1791         (JSC::DFG::AssemblyHelpers::codeBlock):
1792         (JSC::DFG::AssemblyHelpers::vm):
1793         (JSC::DFG::AssemblyHelpers::assembler):
1794         (JSC::DFG::AssemblyHelpers::preserveReturnAddressAfterCall):
1795         (JSC::DFG::AssemblyHelpers::restoreReturnAddressBeforeReturn):
1796         (JSC::DFG::AssemblyHelpers::emitGetFromCallFrameHeaderPtr):
1797         (JSC::DFG::AssemblyHelpers::emitPutToCallFrameHeader):
1798         (JSC::DFG::AssemblyHelpers::emitPutImmediateToCallFrameHeader):
1799         (JSC::DFG::AssemblyHelpers::branchIfNotCell):
1800         (JSC::DFG::AssemblyHelpers::addressFor):
1801         (JSC::DFG::AssemblyHelpers::tagFor):
1802         (JSC::DFG::AssemblyHelpers::payloadFor):
1803         (JSC::DFG::AssemblyHelpers::branchIfNotObject):
1804         (JSC::DFG::AssemblyHelpers::selectScratchGPR):
1805         (JSC::DFG::AssemblyHelpers::debugCall):
1806         (JSC::DFG::AssemblyHelpers::jitAssertIsInt32):
1807         (JSC::DFG::AssemblyHelpers::jitAssertIsJSInt32):
1808         (JSC::DFG::AssemblyHelpers::jitAssertIsJSNumber):
1809         (JSC::DFG::AssemblyHelpers::jitAssertIsJSDouble):
1810         (JSC::DFG::AssemblyHelpers::jitAssertIsCell):
1811         (JSC::DFG::AssemblyHelpers::jitAssertHasValidCallFrame):
1812         (JSC::DFG::AssemblyHelpers::boxDouble):
1813         (JSC::DFG::AssemblyHelpers::unboxDouble):
1814         (JSC::DFG::AssemblyHelpers::boxInt52):
1815         (JSC::DFG::AssemblyHelpers::emitExceptionCheck):
1816         (JSC::DFG::AssemblyHelpers::emitCount):
1817         (JSC::DFG::AssemblyHelpers::globalObjectFor):
1818         (JSC::DFG::AssemblyHelpers::strictModeFor):
1819         (JSC::DFG::AssemblyHelpers::baselineCodeBlockFor):
1820         (JSC::DFG::AssemblyHelpers::baselineCodeBlock):
1821         (JSC::DFG::AssemblyHelpers::argumentsRegisterFor):
1822         (JSC::DFG::AssemblyHelpers::symbolTableFor):
1823         (JSC::DFG::AssemblyHelpers::offsetOfLocals):
1824         (JSC::DFG::AssemblyHelpers::offsetOfArgumentsIncludingThis):
1825         * dfg/DFGBinarySwitch.h:
1826         * dfg/DFGByteCodeParser.cpp:
1827         * dfg/DFGCCallHelpers.h: Renamed from Source/JavaScriptCore/jit/CCallHelpers.h.
1828         (JSC::DFG::CCallHelpers::CCallHelpers):
1829         (JSC::DFG::CCallHelpers::resetCallArguments):
1830         (JSC::DFG::CCallHelpers::addCallArgument):
1831         (JSC::DFG::CCallHelpers::setupArguments):
1832         (JSC::DFG::CCallHelpers::setupArgumentsExecState):
1833         (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
1834         (JSC::DFG::CCallHelpers::setupTwoStubArgs):
1835         (JSC::DFG::CCallHelpers::setupStubArguments):
1836         (JSC::DFG::CCallHelpers::setupResults):
1837         * dfg/DFGDisassembler.cpp:
1838         * dfg/DFGFPRInfo.h: Renamed from Source/JavaScriptCore/jit/FPRInfo.h.
1839         (JSC::DFG::FPRInfo::toRegister):
1840         (JSC::DFG::FPRInfo::toIndex):
1841         (JSC::DFG::FPRInfo::toArgumentRegister):
1842         (JSC::DFG::FPRInfo::debugName):
1843         * dfg/DFGGPRInfo.h: Renamed from Source/JavaScriptCore/jit/GPRInfo.h.
1844         (JSC::DFG::JSValueRegs::JSValueRegs):
1845         (JSC::DFG::JSValueRegs::payloadOnly):
1846         (JSC::DFG::JSValueRegs::operator!):
1847         (JSC::DFG::JSValueRegs::gpr):
1848         (JSC::DFG::JSValueRegs::payloadGPR):
1849         (JSC::DFG::JSValueSource::JSValueSource):
1850         (JSC::DFG::JSValueSource::unboxedCell):
1851         (JSC::DFG::JSValueSource::operator!):
1852         (JSC::DFG::JSValueSource::isAddress):
1853         (JSC::DFG::JSValueSource::offset):
1854         (JSC::DFG::JSValueSource::base):
1855         (JSC::DFG::JSValueSource::gpr):
1856         (JSC::DFG::JSValueSource::asAddress):
1857         (JSC::DFG::JSValueSource::notAddress):
1858         (JSC::DFG::JSValueRegs::tagGPR):
1859         (JSC::DFG::JSValueSource::tagGPR):
1860         (JSC::DFG::JSValueSource::payloadGPR):
1861         (JSC::DFG::JSValueSource::hasKnownTag):
1862         (JSC::DFG::JSValueSource::tag):
1863         (JSC::DFG::GPRInfo::toRegister):
1864         (JSC::DFG::GPRInfo::toIndex):
1865         (JSC::DFG::GPRInfo::debugName):
1866         (JSC::DFG::GPRInfo::toArgumentRegister):
1867         * dfg/DFGGraph.cpp:
1868         * dfg/DFGGraph.h:
1869         * dfg/DFGJITCompiler.h:
1870         * dfg/DFGOSRExit.cpp:
1871         * dfg/DFGOSRExit.h:
1872         * dfg/DFGOSRExitCompiler.h:
1873         * dfg/DFGOSRExitCompilerCommon.h:
1874         * dfg/DFGRegisterBank.h:
1875         * dfg/DFGRegisterSet.h:
1876         * dfg/DFGRepatch.cpp:
1877         * dfg/DFGSilentRegisterSavePlan.h:
1878         * dfg/DFGThunks.cpp:
1879         * dfg/DFGVariableEvent.cpp:
1880         * ftl/FTLCArgumentGetter.h:
1881         (JSC::FTL::CArgumentGetter::CArgumentGetter):
1882         (JSC::FTL::CArgumentGetter::loadNext8):
1883         (JSC::FTL::CArgumentGetter::loadNext32):
1884         (JSC::FTL::CArgumentGetter::loadNext64):
1885         (JSC::FTL::CArgumentGetter::loadNextPtr):
1886         (JSC::FTL::CArgumentGetter::loadNextDouble):
1887         * ftl/FTLCompile.cpp:
1888         * ftl/FTLExitThunkGenerator.h:
1889         * ftl/FTLLink.cpp:
1890         * ftl/FTLThunks.cpp:
1891         * jit/JIT.cpp:
1892         (JSC::JIT::JIT):
1893         * jit/JIT.h:
1894         * jit/JITPropertyAccess.cpp:
1895         (JSC::JIT::stringGetByValStubGenerator):
1896         * jit/JITPropertyAccess32_64.cpp:
1897         (JSC::JIT::stringGetByValStubGenerator):
1898         * jit/JSInterfaceJIT.h:
1899         (JSC::JSInterfaceJIT::preserveReturnAddressAfterCall):
1900         (JSC::JSInterfaceJIT::restoreReturnAddressBeforeReturn):
1901         * jit/SpecializedThunkJIT.h:
1902         (JSC::SpecializedThunkJIT::SpecializedThunkJIT):
1903         (JSC::SpecializedThunkJIT::finalize):
1904         * jit/ThunkGenerators.cpp:
1905         (JSC::linkForGenerator):
1906         (JSC::virtualForGenerator):
1907         (JSC::stringLengthTrampolineGenerator):
1908         (JSC::nativeForGenerator):
1909         (JSC::arityFixup):
1910         (JSC::charCodeAtThunkGenerator):
1911         (JSC::charAtThunkGenerator):
1912         (JSC::fromCharCodeThunkGenerator):
1913         (JSC::sqrtThunkGenerator):
1914         (JSC::floorThunkGenerator):
1915         (JSC::ceilThunkGenerator):
1916         (JSC::roundThunkGenerator):
1917         (JSC::expThunkGenerator):
1918         (JSC::logThunkGenerator):
1919         (JSC::absThunkGenerator):
1920         (JSC::powThunkGenerator):
1921         (JSC::imulThunkGenerator):
1922         * llint/LLIntThunks.cpp:
1923         (JSC::LLInt::generateThunkWithJumpTo):
1924         * runtime/JSCJSValue.h:
1925
1926 2013-09-19  Filip Pizlo  <fpizlo@apple.com>
1927
1928         Unreviewed, fix Windows build part 2. m_jitCodeMap should always be there.
1929
1930         * bytecode/CodeBlock.h:
1931         (JSC::CodeBlock::jitCodeMap):
1932
1933 2013-09-19  Filip Pizlo  <fpizlo@apple.com>
1934
1935         Remove some of the tautologies in DFGRepatch function naming.
1936
1937         Rubber stamped by Mark Hahnenberg.
1938         
1939         For example change DFG::dfgLinkFor() to be DFG::linkFor().
1940
1941         * bytecode/CodeBlock.cpp:
1942         (JSC::CodeBlock::resetStubInternal):
1943         * dfg/DFGOperations.cpp:
1944         * dfg/DFGRepatch.cpp:
1945         (JSC::DFG::repatchCall):
1946         (JSC::DFG::repatchByIdSelfAccess):
1947         (JSC::DFG::tryCacheGetByID):
1948         (JSC::DFG::repatchGetByID):
1949         (JSC::DFG::buildGetByIDList):
1950         (JSC::DFG::tryCachePutByID):
1951         (JSC::DFG::repatchPutByID):
1952         (JSC::DFG::buildPutByIdList):
1953         (JSC::DFG::repatchIn):
1954         (JSC::DFG::linkFor):
1955         (JSC::DFG::linkSlowFor):
1956         (JSC::DFG::linkClosureCall):
1957         (JSC::DFG::resetGetByID):
1958         (JSC::DFG::resetPutByID):
1959         (JSC::DFG::resetIn):
1960         * dfg/DFGRepatch.h:
1961         (JSC::DFG::resetGetByID):
1962         (JSC::DFG::resetPutByID):
1963         (JSC::DFG::resetIn):
1964
1965 2013-09-19  Filip Pizlo  <fpizlo@apple.com>
1966
1967         Unreviewed, fix Windows build. ScratchBuffer should always be available regardless of
1968         ENABLE_DFG_JIT.
1969
1970         * runtime/VM.h:
1971
1972 2013-09-19  Daniel Bates  <dabates@apple.com>
1973
1974         [iOS] Add more iOS logic to the JavaScriptCore build configuration files
1975         https://bugs.webkit.org/show_bug.cgi?id=121635
1976
1977         Reviewed by Geoffrey Garen.
1978
1979         Towards building JavaScriptCore for both OS X and iOS using the same
1980         set of configuration files, add more iOS logic.
1981
1982         * Configurations/Base.xcconfig:
1983         * Configurations/JSC.xcconfig:
1984         * Configurations/JavaScriptCore.xcconfig:
1985         * Configurations/ToolExecutable.xcconfig:
1986
1987 2013-09-19  Filip Pizlo  <fpizlo@apple.com>
1988
1989         Move CCallHelpers and AssemblyHelpers into jit/ and have JSInterfaceJIT use them
1990         https://bugs.webkit.org/show_bug.cgi?id=121637
1991
1992         Rubber stamped by Michael Saboff.
1993         
1994         Also moved GPRInfo/FPRInfo into jit/.
1995
1996         * CMakeLists.txt:
1997         * GNUmakefile.list.am:
1998         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1999         * JavaScriptCore.xcodeproj/project.pbxproj:
2000         * Target.pri:
2001         * bytecode/ValueRecovery.h:
2002         (JSC::ValueRecovery::dumpInContext):
2003         * dfg/DFGAssemblyHelpers.cpp: Removed.
2004         * dfg/DFGAssemblyHelpers.h: Removed.
2005         * dfg/DFGBinarySwitch.h:
2006         * dfg/DFGByteCodeParser.cpp:
2007         * dfg/DFGCCallHelpers.h: Removed.
2008         * dfg/DFGDisassembler.cpp:
2009         * dfg/DFGFPRInfo.h: Removed.
2010         * dfg/DFGGPRInfo.h: Removed.
2011         * dfg/DFGGraph.cpp:
2012         * dfg/DFGGraph.h:
2013         * dfg/DFGJITCompiler.h:
2014         * dfg/DFGOSRExit.cpp:
2015         * dfg/DFGOSRExit.h:
2016         * dfg/DFGOSRExitCompiler.h:
2017         * dfg/DFGOSRExitCompilerCommon.h:
2018         * dfg/DFGRegisterBank.h:
2019         * dfg/DFGRegisterSet.h:
2020         * dfg/DFGRepatch.cpp:
2021         * dfg/DFGSilentRegisterSavePlan.h:
2022         * dfg/DFGThunks.cpp:
2023         * dfg/DFGVariableEvent.cpp:
2024         * ftl/FTLCArgumentGetter.h:
2025         (JSC::FTL::CArgumentGetter::CArgumentGetter):
2026         (JSC::FTL::CArgumentGetter::loadNext8):
2027         (JSC::FTL::CArgumentGetter::loadNext32):
2028         (JSC::FTL::CArgumentGetter::loadNext64):
2029         (JSC::FTL::CArgumentGetter::loadNextPtr):
2030         (JSC::FTL::CArgumentGetter::loadNextDouble):
2031         * ftl/FTLCompile.cpp:
2032         * ftl/FTLExitThunkGenerator.h:
2033         * ftl/FTLLink.cpp:
2034         * ftl/FTLThunks.cpp:
2035         * jit/AssemblyHelpers.cpp: Copied from Source/JavaScriptCore/dfg/DFGAssemblyHelpers.cpp.
2036         * jit/AssemblyHelpers.h: Copied from Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h.
2037         (JSC::AssemblyHelpers::AssemblyHelpers):
2038         (JSC::AssemblyHelpers::debugCall):
2039         * jit/CCallHelpers.h: Copied from Source/JavaScriptCore/dfg/DFGCCallHelpers.h.
2040         * jit/FPRInfo.h: Copied from Source/JavaScriptCore/dfg/DFGFPRInfo.h.
2041         (WTF::printInternal):
2042         * jit/GPRInfo.h: Copied from Source/JavaScriptCore/dfg/DFGGPRInfo.h.
2043         (WTF::printInternal):
2044         * jit/JIT.cpp:
2045         (JSC::JIT::JIT):
2046         * jit/JIT.h:
2047         * jit/JITPropertyAccess.cpp:
2048         (JSC::JIT::stringGetByValStubGenerator):
2049         * jit/JITPropertyAccess32_64.cpp:
2050         (JSC::JIT::stringGetByValStubGenerator):
2051         * jit/JSInterfaceJIT.h:
2052         (JSC::JSInterfaceJIT::JSInterfaceJIT):
2053         * jit/SpecializedThunkJIT.h:
2054         (JSC::SpecializedThunkJIT::SpecializedThunkJIT):
2055         (JSC::SpecializedThunkJIT::finalize):
2056         * jit/ThunkGenerators.cpp:
2057         (JSC::linkForGenerator):
2058         (JSC::virtualForGenerator):
2059         (JSC::stringLengthTrampolineGenerator):
2060         (JSC::nativeForGenerator):
2061         (JSC::arityFixup):
2062         (JSC::charCodeAtThunkGenerator):
2063         (JSC::charAtThunkGenerator):
2064         (JSC::fromCharCodeThunkGenerator):
2065         (JSC::sqrtThunkGenerator):
2066         (JSC::floorThunkGenerator):
2067         (JSC::ceilThunkGenerator):
2068         (JSC::roundThunkGenerator):
2069         (JSC::expThunkGenerator):
2070         (JSC::logThunkGenerator):
2071         (JSC::absThunkGenerator):
2072         (JSC::powThunkGenerator):
2073         (JSC::imulThunkGenerator):
2074         * llint/LLIntThunks.cpp:
2075         (JSC::LLInt::generateThunkWithJumpTo):
2076         * runtime/JSCJSValue.h:
2077
2078 2013-09-19  Daniel Bates  <dabates@apple.com>
2079
2080         [iOS] Substitute UNREACHABLE_FOR_PLATFORM() for RELEASE_ASSERT_NOT_REACHED()
2081
2082         Rubber-stamped by Joseph Pecoraro.
2083
2084         Use UNREACHABLE_FOR_PLATFORM() instead of RELEASE_ASSERT_NOT_REACHED() in
2085         the non-x86/x86-64 variant of JIT::emitSlow_op_mod() so as to avoid a missing
2086         noreturn warning in Clang while simultaneously asserting unreachable code.
2087
2088         * jit/JITArithmetic.cpp:
2089         (JSC::JIT::emitSlow_op_mod):
2090
2091 2013-09-19  Michael Saboff  <msaboff@apple.com>
2092
2093         JSC: X86 disassembler shows 16, 32 and 64 bit displacements as unsigned
2094         https://bugs.webkit.org/show_bug.cgi?id=121625
2095
2096         Rubber-stamped by Filip Pizlo.
2097
2098         Chenged 16, 32 and 64 bit offsets to be signed.  Kept the original tab indented
2099         spacing to match the rest of the file.
2100
2101         * disassembler/udis86/udis86_syn-att.c:
2102         (gen_operand):
2103
2104 2013-09-19  Daniel Bates  <dabates@apple.com>
2105
2106         Remove names of unused arguments from the non-x86/x86-64 function prototype
2107         for JIT::emitSlow_op_mod()
2108
2109         Rubber-stamped by Ryosuke Niwa.
2110
2111         * jit/JITArithmetic.cpp:
2112         (JSC::JIT::emitSlow_op_mod):
2113
2114 2013-09-18  Sam Weinig  <sam@webkit.org>
2115
2116         Replace use of OwnArrayPtr<Foo> with std::unique_ptr<Foo[]> in JavaScriptCore
2117         https://bugs.webkit.org/show_bug.cgi?id=121583
2118
2119         Reviewed by Anders Carlsson.
2120
2121         * API/JSStringRefCF.cpp:
2122         (JSStringCreateWithCFString):
2123         * API/JSStringRefQt.cpp:
2124         * bytecompiler/BytecodeGenerator.cpp:
2125         (JSC::BytecodeGenerator::BytecodeGenerator):
2126         * dfg/DFGByteCodeParser.cpp:
2127         (JSC::DFG::ByteCodeParser::parseBlock):
2128         * dfg/DFGDisassembler.cpp:
2129         (JSC::DFG::Disassembler::dumpDisassembly):
2130         * runtime/Arguments.cpp:
2131         (JSC::Arguments::tearOff):
2132         * runtime/Arguments.h:
2133         (JSC::Arguments::isTornOff):
2134         (JSC::Arguments::allocateSlowArguments):
2135         * runtime/JSPropertyNameIterator.cpp:
2136         (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
2137         * runtime/JSPropertyNameIterator.h:
2138         * runtime/JSSegmentedVariableObject.h:
2139         * runtime/JSVariableObject.h:
2140         * runtime/PropertyNameArray.h:
2141         * runtime/RegExp.cpp:
2142         * runtime/StructureChain.h:
2143         (JSC::StructureChain::finishCreation):
2144         * runtime/SymbolTable.h:
2145         (JSC::SharedSymbolTable::setSlowArguments):
2146
2147 2013-09-18  Brent Fulgham  <bfulgham@apple.com>
2148
2149         [Windows] Unreviewed build fix after r156064.
2150
2151         * jsc.cpp:
2152         (jscmain): Need a temporary to perform '&' in VS2010.
2153
2154 2013-09-18  Filip Pizlo  <fpizlo@apple.com>
2155
2156         Give 'jsc' commandline an option to disable deleting the VM.
2157
2158         Reviewed by Mark Hahnenberg.
2159
2160         * jsc.cpp:
2161         (jscmain):
2162         * runtime/Options.h:
2163
2164 2013-09-18  Anders Carlsson  <andersca@apple.com>
2165
2166         RefPtrHashMap should work with move only types
2167         https://bugs.webkit.org/show_bug.cgi?id=121564
2168
2169         Reviewed by Andreas Kling.
2170
2171         * runtime/VM.cpp:
2172         (JSC::VM::addSourceProviderCache):
2173
2174 2013-09-17  Mark Hahnenberg  <mhahnenberg@apple.com>
2175
2176         Rename OperationInProgress to HeapOperation and move it out of Heap.h into its own header
2177         https://bugs.webkit.org/show_bug.cgi?id=121534
2178
2179         Reviewed by Geoffrey Garen.
2180
2181         OperationInProgress is a silly name. 
2182
2183         Many parts of the Heap would like to know what HeapOperation is currently underway, but 
2184         since they are included in Heap.h they can't directly reference HeapOperation if it also 
2185         lives in Heap.h. The simplest thing to do is to give HeapOperation its own header. While 
2186         a bit overkill, it simplifies including it wherever its needed.
2187
2188         * JavaScriptCore.xcodeproj/project.pbxproj:
2189         * bytecode/CodeBlock.cpp:
2190         (JSC::CodeBlock::updateAllPredictionsAndCountLiveness):
2191         (JSC::CodeBlock::updateAllValueProfilePredictions):
2192         (JSC::CodeBlock::updateAllPredictions):
2193         * bytecode/CodeBlock.h:
2194         (JSC::CodeBlock::updateAllValueProfilePredictions):
2195         (JSC::CodeBlock::updateAllPredictions):
2196         * bytecode/LazyOperandValueProfile.cpp:
2197         (JSC::CompressedLazyOperandValueProfileHolder::computeUpdatedPredictions):
2198         * bytecode/LazyOperandValueProfile.h:
2199         * bytecode/ValueProfile.h:
2200         (JSC::ValueProfileBase::computeUpdatedPrediction):
2201         * heap/Heap.h:
2202         * heap/HeapOperation.h: Added.
2203
2204 2013-09-18  Filip Pizlo  <fpizlo@apple.com>
2205
2206         DFG should support Int52 for local variables
2207         https://bugs.webkit.org/show_bug.cgi?id=121064
2208
2209         Reviewed by Oliver Hunt.
2210         
2211         This adds Int52 support for local variables to the DFG and FTL. It's a speed-up on
2212         programs that have local int32 overflows but where a larger int representation can
2213         prevent us from having to convert all the way up to double.
2214         
2215         It's a small speed-up for now. But we're just supporting Int52 for a handful of
2216         operations (add, sub, mul, neg, compare, bitops, typed array access) and this lays
2217         the groundwork for adding Int52 to JSValue, which will probably be a bigger
2218         speed-up.
2219         
2220         The basic approach is:
2221         
2222         - We have a notion of Int52 in our typesystem. Int52 doesn't belong to BytecodeTop
2223           or HeapTop - i.e. it doesn't arise from JSValues.
2224         
2225         - DFG treats Int52 as being part of its FullTop and will treat it as being a
2226           subtype of double unless instructed otherwise.
2227         
2228         - Prediction propagator creates Int52s whenever we have a node going doubly but due
2229           to large values rather than fractional values, and that node is known to be able
2230           to produce Int52 natively in the DFG backend.
2231         
2232         - Fixup phase converts edges to MachineIntUses in nodes that are known to be able
2233           to deal with Int52, and where we have a subtype of Int32|Int52 as the predicted
2234           input.
2235         
2236         - The DFG backend and FTL LLVM IR lowering have two notions of Int52s - ones that
2237           are left-shifted by 16 (great for overflow checks) and ones that are
2238           sign-extended. Both backends know how to convert between Int52s and the other
2239           representations.
2240
2241         * assembler/MacroAssemblerX86_64.h:
2242         (JSC::MacroAssemblerX86_64::rshift64):
2243         (JSC::MacroAssemblerX86_64::mul64):
2244         (JSC::MacroAssemblerX86_64::branchMul64):
2245         (JSC::MacroAssemblerX86_64::branchNeg64):
2246         (JSC::MacroAssemblerX86_64::convertInt64ToDouble):
2247         * assembler/X86Assembler.h:
2248         (JSC::X86Assembler::imulq_rr):
2249         (JSC::X86Assembler::cvtsi2sdq_rr):
2250         * bytecode/DataFormat.h:
2251         (JSC::dataFormatToString):
2252         * bytecode/ExitKind.cpp:
2253         (JSC::exitKindToString):
2254         * bytecode/ExitKind.h:
2255         * bytecode/OperandsInlines.h:
2256         (JSC::::dumpInContext):
2257         * bytecode/SpeculatedType.cpp:
2258         (JSC::dumpSpeculation):
2259         (JSC::speculationToAbbreviatedString):
2260         (JSC::speculationFromValue):
2261         * bytecode/SpeculatedType.h:
2262         (JSC::isInt32SpeculationForArithmetic):
2263         (JSC::isInt52Speculation):
2264         (JSC::isMachineIntSpeculationForArithmetic):
2265         (JSC::isInt52AsDoubleSpeculation):
2266         (JSC::isBytecodeRealNumberSpeculation):
2267         (JSC::isFullRealNumberSpeculation):
2268         (JSC::isBytecodeNumberSpeculation):
2269         (JSC::isFullNumberSpeculation):
2270         (JSC::isBytecodeNumberSpeculationExpectingDefined):
2271         (JSC::isFullNumberSpeculationExpectingDefined):
2272         * bytecode/ValueRecovery.h:
2273         (JSC::ValueRecovery::alreadyInJSStackAsUnboxedInt52):
2274         (JSC::ValueRecovery::inGPR):
2275         (JSC::ValueRecovery::displacedInJSStack):
2276         (JSC::ValueRecovery::isAlreadyInJSStack):
2277         (JSC::ValueRecovery::gpr):
2278         (JSC::ValueRecovery::virtualRegister):
2279         (JSC::ValueRecovery::dumpInContext):
2280         * dfg/DFGAbstractInterpreter.h:
2281         (JSC::DFG::AbstractInterpreter::needsTypeCheck):
2282         (JSC::DFG::AbstractInterpreter::filterByType):
2283         * dfg/DFGAbstractInterpreterInlines.h:
2284         (JSC::DFG::::executeEffects):
2285         * dfg/DFGAbstractValue.cpp:
2286         (JSC::DFG::AbstractValue::set):
2287         (JSC::DFG::AbstractValue::checkConsistency):
2288         * dfg/DFGAbstractValue.h:
2289         (JSC::DFG::AbstractValue::couldBeType):
2290         (JSC::DFG::AbstractValue::isType):
2291         (JSC::DFG::AbstractValue::checkConsistency):
2292         (JSC::DFG::AbstractValue::validateType):
2293         * dfg/DFGArrayMode.cpp:
2294         (JSC::DFG::ArrayMode::refine):
2295         * dfg/DFGAssemblyHelpers.h:
2296         (JSC::DFG::AssemblyHelpers::boxInt52):
2297         * dfg/DFGByteCodeParser.cpp:
2298         (JSC::DFG::ByteCodeParser::makeSafe):
2299         * dfg/DFGCSEPhase.cpp:
2300         (JSC::DFG::CSEPhase::pureCSE):
2301         (JSC::DFG::CSEPhase::getByValLoadElimination):
2302         (JSC::DFG::CSEPhase::performNodeCSE):
2303         * dfg/DFGClobberize.h:
2304         (JSC::DFG::clobberize):
2305         * dfg/DFGCommon.h:
2306         (JSC::DFG::enableInt52):
2307         * dfg/DFGDCEPhase.cpp:
2308         (JSC::DFG::DCEPhase::fixupBlock):
2309         * dfg/DFGFixupPhase.cpp:
2310         (JSC::DFG::FixupPhase::run):
2311         (JSC::DFG::FixupPhase::fixupNode):
2312         (JSC::DFG::FixupPhase::fixupSetLocalsInBlock):
2313         (JSC::DFG::FixupPhase::fixupUntypedSetLocalsInBlock):
2314         (JSC::DFG::FixupPhase::observeUseKindOnNode):
2315         (JSC::DFG::FixupPhase::fixEdge):
2316         (JSC::DFG::FixupPhase::injectInt32ToDoubleNode):
2317         (JSC::DFG::FixupPhase::attemptToMakeIntegerAdd):
2318         * dfg/DFGFlushFormat.cpp:
2319         (WTF::printInternal):
2320         * dfg/DFGFlushFormat.h:
2321         (JSC::DFG::resultFor):
2322         (JSC::DFG::useKindFor):
2323         * dfg/DFGGenerationInfo.h:
2324         (JSC::DFG::GenerationInfo::initInt52):
2325         (JSC::DFG::GenerationInfo::initStrictInt52):
2326         (JSC::DFG::GenerationInfo::isFormat):
2327         (JSC::DFG::GenerationInfo::isInt52):
2328         (JSC::DFG::GenerationInfo::isStrictInt52):
2329         (JSC::DFG::GenerationInfo::fillInt52):
2330         (JSC::DFG::GenerationInfo::fillStrictInt52):
2331         * dfg/DFGGraph.cpp:
2332         (JSC::DFG::Graph::dump):
2333         * dfg/DFGGraph.h:
2334         (JSC::DFG::Graph::addShouldSpeculateMachineInt):
2335         (JSC::DFG::Graph::mulShouldSpeculateMachineInt):
2336         (JSC::DFG::Graph::negateShouldSpeculateMachineInt):
2337         * dfg/DFGInPlaceAbstractState.cpp:
2338         (JSC::DFG::InPlaceAbstractState::mergeStateAtTail):
2339         * dfg/DFGJITCode.cpp:
2340         (JSC::DFG::JITCode::reconstruct):
2341         * dfg/DFGJITCompiler.h:
2342         (JSC::DFG::JITCompiler::noticeOSREntry):
2343         * dfg/DFGMinifiedNode.h:
2344         (JSC::DFG::belongsInMinifiedGraph):
2345         (JSC::DFG::MinifiedNode::hasChild):
2346         * dfg/DFGNode.h:
2347         (JSC::DFG::Node::shouldSpeculateNumber):
2348         (JSC::DFG::Node::shouldSpeculateNumberExpectingDefined):
2349         (JSC::DFG::Node::canSpeculateInt52):
2350         * dfg/DFGNodeFlags.h:
2351         (JSC::DFG::nodeCanSpeculateInt52):
2352         * dfg/DFGNodeType.h:
2353         (JSC::DFG::permitsOSRBackwardRewiring):
2354         (JSC::DFG::forwardRewiringSelectionScore):
2355         * dfg/DFGOSREntry.cpp:
2356         (JSC::DFG::prepareOSREntry):
2357         * dfg/DFGOSREntry.h:
2358         * dfg/DFGOSRExitCompiler.cpp:
2359         * dfg/DFGOSRExitCompiler64.cpp:
2360         (JSC::DFG::OSRExitCompiler::compileExit):
2361         * dfg/DFGPredictionPropagationPhase.cpp:
2362         (JSC::DFG::PredictionPropagationPhase::speculatedDoubleTypeForPrediction):
2363         (JSC::DFG::PredictionPropagationPhase::propagate):
2364         (JSC::DFG::PredictionPropagationPhase::doDoubleVoting):
2365         * dfg/DFGSafeToExecute.h:
2366         (JSC::DFG::SafeToExecuteEdge::operator()):
2367         (JSC::DFG::safeToExecute):
2368         * dfg/DFGSilentRegisterSavePlan.h:
2369         * dfg/DFGSpeculativeJIT.cpp:
2370         (JSC::DFG::SpeculativeJIT::silentSavePlanForGPR):
2371         (JSC::DFG::SpeculativeJIT::silentFill):
2372         (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
2373         (JSC::DFG::SpeculativeJIT::compileInlineStart):
2374         (JSC::DFG::SpeculativeJIT::compileDoublePutByVal):
2375         (JSC::DFG::SpeculativeJIT::compileValueToInt32):
2376         (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
2377         (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
2378         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
2379         (JSC::DFG::SpeculativeJIT::compileAdd):
2380         (JSC::DFG::SpeculativeJIT::compileArithSub):
2381         (JSC::DFG::SpeculativeJIT::compileArithNegate):
2382         (JSC::DFG::SpeculativeJIT::compileArithMul):
2383         (JSC::DFG::SpeculativeJIT::compare):
2384         (JSC::DFG::SpeculativeJIT::compileStrictEq):
2385         (JSC::DFG::SpeculativeJIT::speculateMachineInt):
2386         (JSC::DFG::SpeculativeJIT::speculateNumber):
2387         (JSC::DFG::SpeculativeJIT::speculateRealNumber):
2388         (JSC::DFG::SpeculativeJIT::speculate):
2389         * dfg/DFGSpeculativeJIT.h:
2390         (JSC::DFG::SpeculativeJIT::canReuse):
2391         (JSC::DFG::SpeculativeJIT::isFilled):
2392         (JSC::DFG::SpeculativeJIT::isFilledDouble):
2393         (JSC::DFG::SpeculativeJIT::use):
2394         (JSC::DFG::SpeculativeJIT::isKnownInteger):
2395         (JSC::DFG::SpeculativeJIT::isKnownCell):
2396         (JSC::DFG::SpeculativeJIT::isKnownNotNumber):
2397         (JSC::DFG::SpeculativeJIT::int52Result):
2398         (JSC::DFG::SpeculativeJIT::strictInt52Result):
2399         (JSC::DFG::SpeculativeJIT::initConstantInfo):
2400         (JSC::DFG::SpeculativeJIT::isInteger):
2401         (JSC::DFG::SpeculativeJIT::betterUseStrictInt52):
2402         (JSC::DFG::SpeculativeJIT::generationInfo):
2403         (JSC::DFG::SpeculateInt52Operand::SpeculateInt52Operand):
2404         (JSC::DFG::SpeculateInt52Operand::~SpeculateInt52Operand):
2405         (JSC::DFG::SpeculateInt52Operand::edge):
2406         (JSC::DFG::SpeculateInt52Operand::node):
2407         (JSC::DFG::SpeculateInt52Operand::gpr):
2408         (JSC::DFG::SpeculateInt52Operand::use):
2409         (JSC::DFG::SpeculateStrictInt52Operand::SpeculateStrictInt52Operand):
2410         (JSC::DFG::SpeculateStrictInt52Operand::~SpeculateStrictInt52Operand):
2411         (JSC::DFG::SpeculateStrictInt52Operand::edge):
2412         (JSC::DFG::SpeculateStrictInt52Operand::node):
2413         (JSC::DFG::SpeculateStrictInt52Operand::gpr):
2414         (JSC::DFG::SpeculateStrictInt52Operand::use):
2415         (JSC::DFG::SpeculateWhicheverInt52Operand::SpeculateWhicheverInt52Operand):
2416         (JSC::DFG::SpeculateWhicheverInt52Operand::~SpeculateWhicheverInt52Operand):
2417         (JSC::DFG::SpeculateWhicheverInt52Operand::edge):
2418         (JSC::DFG::SpeculateWhicheverInt52Operand::node):
2419         (JSC::DFG::SpeculateWhicheverInt52Operand::gpr):
2420         (JSC::DFG::SpeculateWhicheverInt52Operand::use):
2421         (JSC::DFG::SpeculateWhicheverInt52Operand::format):
2422         * dfg/DFGSpeculativeJIT32_64.cpp:
2423         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
2424         (JSC::DFG::SpeculativeJIT::compile):
2425         * dfg/DFGSpeculativeJIT64.cpp:
2426         (JSC::DFG::SpeculativeJIT::boxInt52):
2427         (JSC::DFG::SpeculativeJIT::fillJSValue):
2428         (JSC::DFG::SpeculativeJIT::fillSpeculateInt32Internal):
2429         (JSC::DFG::SpeculativeJIT::fillSpeculateInt52):
2430         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
2431         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
2432         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
2433         (JSC::DFG::SpeculativeJIT::compileInt52Compare):
2434         (JSC::DFG::SpeculativeJIT::compilePeepHoleInt52Branch):
2435         (JSC::DFG::SpeculativeJIT::compile):
2436         * dfg/DFGUseKind.cpp:
2437         (WTF::printInternal):
2438         * dfg/DFGUseKind.h:
2439         (JSC::DFG::typeFilterFor):
2440         (JSC::DFG::isNumerical):
2441         * dfg/DFGValueSource.cpp:
2442         (JSC::DFG::ValueSource::dump):
2443         * dfg/DFGValueSource.h:
2444         (JSC::DFG::dataFormatToValueSourceKind):
2445         (JSC::DFG::valueSourceKindToDataFormat):
2446         (JSC::DFG::ValueSource::forFlushFormat):
2447         (JSC::DFG::ValueSource::valueRecovery):
2448         * dfg/DFGVariableAccessData.h:
2449         (JSC::DFG::VariableAccessData::shouldUseDoubleFormatAccordingToVote):
2450         (JSC::DFG::VariableAccessData::flushFormat):
2451         * ftl/FTLCArgumentGetter.cpp:
2452         (JSC::FTL::CArgumentGetter::loadNextAndBox):
2453         * ftl/FTLCArgumentGetter.h:
2454         * ftl/FTLCapabilities.cpp:
2455         (JSC::FTL::canCompile):
2456         * ftl/FTLExitValue.cpp:
2457         (JSC::FTL::ExitValue::dumpInContext):
2458         * ftl/FTLExitValue.h:
2459         (JSC::FTL::ExitValue::inJSStackAsInt52):
2460         * ftl/FTLIntrinsicRepository.h:
2461         * ftl/FTLLowerDFGToLLVM.cpp:
2462         (JSC::FTL::LowerDFGToLLVM::createPhiVariables):
2463         (JSC::FTL::LowerDFGToLLVM::compileNode):
2464         (JSC::FTL::LowerDFGToLLVM::compileUpsilon):
2465         (JSC::FTL::LowerDFGToLLVM::compilePhi):
2466         (JSC::FTL::LowerDFGToLLVM::compileSetLocal):
2467         (JSC::FTL::LowerDFGToLLVM::compileAdd):
2468         (JSC::FTL::LowerDFGToLLVM::compileArithSub):
2469         (JSC::FTL::LowerDFGToLLVM::compileArithMul):
2470         (JSC::FTL::LowerDFGToLLVM::compileArithNegate):
2471         (JSC::FTL::LowerDFGToLLVM::compilePutByVal):
2472         (JSC::FTL::LowerDFGToLLVM::compileCompareEq):
2473         (JSC::FTL::LowerDFGToLLVM::compileCompareStrictEq):
2474         (JSC::FTL::LowerDFGToLLVM::compileCompareLess):
2475         (JSC::FTL::LowerDFGToLLVM::compileCompareLessEq):
2476         (JSC::FTL::LowerDFGToLLVM::compileCompareGreater):
2477         (JSC::FTL::LowerDFGToLLVM::compileCompareGreaterEq):
2478         (JSC::FTL::LowerDFGToLLVM::lowInt32):
2479         (JSC::FTL::LowerDFGToLLVM::lowInt52):
2480         (JSC::FTL::LowerDFGToLLVM::lowStrictInt52):
2481         (JSC::FTL::LowerDFGToLLVM::betterUseStrictInt52):
2482         (JSC::FTL::LowerDFGToLLVM::bestInt52Kind):
2483         (JSC::FTL::LowerDFGToLLVM::opposite):
2484         (JSC::FTL::LowerDFGToLLVM::lowWhicheverInt52):
2485         (JSC::FTL::LowerDFGToLLVM::lowCell):
2486         (JSC::FTL::LowerDFGToLLVM::lowBoolean):
2487         (JSC::FTL::LowerDFGToLLVM::lowDouble):
2488         (JSC::FTL::LowerDFGToLLVM::lowJSValue):
2489         (JSC::FTL::LowerDFGToLLVM::strictInt52ToInt32):
2490         (JSC::FTL::LowerDFGToLLVM::strictInt52ToDouble):
2491         (JSC::FTL::LowerDFGToLLVM::strictInt52ToJSValue):
2492         (JSC::FTL::LowerDFGToLLVM::setInt52WithStrictValue):
2493         (JSC::FTL::LowerDFGToLLVM::strictInt52ToInt52):
2494         (JSC::FTL::LowerDFGToLLVM::int52ToStrictInt52):
2495         (JSC::FTL::LowerDFGToLLVM::speculateRealNumber):
2496         (JSC::FTL::LowerDFGToLLVM::initializeOSRExitStateForBlock):
2497         (JSC::FTL::LowerDFGToLLVM::emitOSRExitCall):
2498         (JSC::FTL::LowerDFGToLLVM::addExitArgumentForNode):
2499         (JSC::FTL::LowerDFGToLLVM::setInt52):
2500         (JSC::FTL::LowerDFGToLLVM::setStrictInt52):
2501         * ftl/FTLOSRExitCompiler.cpp:
2502         (JSC::FTL::compileStub):
2503         * ftl/FTLOutput.h:
2504         (JSC::FTL::Output::addWithOverflow64):
2505         (JSC::FTL::Output::subWithOverflow64):
2506         (JSC::FTL::Output::mulWithOverflow64):
2507         * ftl/FTLValueFormat.cpp:
2508         (WTF::printInternal):
2509         * ftl/FTLValueFormat.h:
2510         * ftl/FTLValueSource.cpp:
2511         (JSC::FTL::ValueSource::dump):
2512         * ftl/FTLValueSource.h:
2513         * interpreter/Register.h:
2514         (JSC::Register::unboxedInt52):
2515         * runtime/Arguments.cpp:
2516         (JSC::Arguments::tearOffForInlineCallFrame):
2517         * runtime/IndexingType.cpp:
2518         (JSC::leastUpperBoundOfIndexingTypeAndType):
2519         * runtime/JSCJSValue.h:
2520         * runtime/JSCJSValueInlines.h:
2521         (JSC::JSValue::isMachineInt):
2522         (JSC::JSValue::asMachineInt):
2523
2524 2013-09-17  Michael Saboff  <msaboff@apple.com>
2525
2526         REGRESSION(r155771): js/stack-overflow-arrity-catch.html is crashing on non-Mac platforms
2527         https://bugs.webkit.org/show_bug.cgi?id=121376
2528
2529         Reviewed by Oliver Hunt.
2530
2531         Fix stack grow() call for stack growing down.  This should catch running out of stack space before
2532         we try to move the frame down due to arity mismatch.
2533
2534         * runtime/CommonSlowPaths.h:
2535         (JSC::CommonSlowPaths::arityCheckFor):
2536
2537 2013-09-18  Andreas Kling  <akling@apple.com>
2538
2539         YARR: Put UCS2 canonicalization tables in read-only memory.
2540         <https://webkit.org/b/121547>
2541
2542         Reviewed by Sam Weinig.
2543
2544         These tables never mutate so mark them const.
2545
2546 2013-09-18  Commit Queue  <commit-queue@webkit.org>
2547
2548         Unreviewed, rolling out r156019 and r156020.
2549         http://trac.webkit.org/changeset/156019
2550         http://trac.webkit.org/changeset/156020
2551         https://bugs.webkit.org/show_bug.cgi?id=121540
2552
2553         Broke tests (Requested by ap on #webkit).
2554
2555         * assembler/MacroAssemblerX86_64.h:
2556         * assembler/X86Assembler.h:
2557         * bytecode/DataFormat.h:
2558         (JSC::dataFormatToString):
2559         * bytecode/ExitKind.cpp:
2560         (JSC::exitKindToString):
2561         * bytecode/ExitKind.h:
2562         * bytecode/OperandsInlines.h:
2563         (JSC::::dumpInContext):
2564         * bytecode/SpeculatedType.cpp:
2565         (JSC::dumpSpeculation):
2566         (JSC::speculationToAbbreviatedString):
2567         (JSC::speculationFromValue):
2568         * bytecode/SpeculatedType.h:
2569         (JSC::isInt32SpeculationForArithmetic):
2570         (JSC::isInt48Speculation):
2571         (JSC::isMachineIntSpeculationForArithmetic):
2572         (JSC::isInt48AsDoubleSpeculation):
2573         (JSC::isRealNumberSpeculation):
2574         (JSC::isNumberSpeculation):
2575         (JSC::isNumberSpeculationExpectingDefined):
2576         * bytecode/ValueRecovery.h:
2577         (JSC::ValueRecovery::inGPR):
2578         (JSC::ValueRecovery::displacedInJSStack):
2579         (JSC::ValueRecovery::isAlreadyInJSStack):
2580         (JSC::ValueRecovery::gpr):
2581         (JSC::ValueRecovery::virtualRegister):
2582         (JSC::ValueRecovery::dumpInContext):
2583         * dfg/DFGAbstractInterpreter.h:
2584         (JSC::DFG::AbstractInterpreter::needsTypeCheck):
2585         (JSC::DFG::AbstractInterpreter::filterByType):
2586         * dfg/DFGAbstractInterpreterInlines.h:
2587         (JSC::DFG::::executeEffects):
2588         * dfg/DFGAbstractValue.cpp:
2589         (JSC::DFG::AbstractValue::set):
2590         (JSC::DFG::AbstractValue::checkConsistency):
2591         * dfg/DFGAbstractValue.h:
2592         (JSC::DFG::AbstractValue::validateType):
2593         * dfg/DFGArrayMode.cpp:
2594         (JSC::DFG::ArrayMode::refine):
2595         * dfg/DFGAssemblyHelpers.h:
2596         (JSC::DFG::AssemblyHelpers::unboxDouble):
2597         * dfg/DFGByteCodeParser.cpp:
2598         (JSC::DFG::ByteCodeParser::makeSafe):
2599         * dfg/DFGCSEPhase.cpp:
2600         (JSC::DFG::CSEPhase::canonicalize):
2601         (JSC::DFG::CSEPhase::pureCSE):
2602         (JSC::DFG::CSEPhase::getByValLoadElimination):
2603         (JSC::DFG::CSEPhase::performNodeCSE):
2604         * dfg/DFGClobberize.h:
2605         (JSC::DFG::clobberize):
2606         * dfg/DFGCommon.h:
2607         * dfg/DFGFixupPhase.cpp:
2608         (JSC::DFG::FixupPhase::run):
2609         (JSC::DFG::FixupPhase::fixupNode):
2610         (JSC::DFG::FixupPhase::fixupSetLocalsInBlock):
2611         (JSC::DFG::FixupPhase::observeUseKindOnNode):
2612         (JSC::DFG::FixupPhase::fixEdge):
2613         (JSC::DFG::FixupPhase::injectInt32ToDoubleNode):
2614         (JSC::DFG::FixupPhase::attemptToMakeIntegerAdd):
2615         * dfg/DFGFlushFormat.cpp:
2616         (WTF::printInternal):
2617         * dfg/DFGFlushFormat.h:
2618         (JSC::DFG::resultFor):
2619         (JSC::DFG::useKindFor):
2620         * dfg/DFGGenerationInfo.h:
2621         (JSC::DFG::GenerationInfo::initInt32):
2622         (JSC::DFG::GenerationInfo::fillInt32):
2623         * dfg/DFGGraph.cpp:
2624         (JSC::DFG::Graph::dump):
2625         * dfg/DFGGraph.h:
2626         (JSC::DFG::Graph::addShouldSpeculateMachineInt):
2627         (JSC::DFG::Graph::mulShouldSpeculateMachineInt):
2628         (JSC::DFG::Graph::negateShouldSpeculateMachineInt):
2629         * dfg/DFGInPlaceAbstractState.cpp:
2630         (JSC::DFG::InPlaceAbstractState::mergeStateAtTail):
2631         * dfg/DFGJITCode.cpp:
2632         (JSC::DFG::JITCode::reconstruct):
2633         * dfg/DFGMinifiedNode.h:
2634         (JSC::DFG::belongsInMinifiedGraph):
2635         (JSC::DFG::MinifiedNode::hasChild):
2636         * dfg/DFGNode.h:
2637         (JSC::DFG::Node::shouldSpeculateNumber):
2638         (JSC::DFG::Node::shouldSpeculateNumberExpectingDefined):
2639         (JSC::DFG::Node::canSpeculateInt48):
2640         * dfg/DFGNodeFlags.h:
2641         (JSC::DFG::nodeCanSpeculateInt48):
2642         * dfg/DFGNodeType.h:
2643         (JSC::DFG::forwardRewiringSelectionScore):
2644         * dfg/DFGOSRExitCompiler.cpp:
2645         (JSC::DFG::shortOperandsDump):
2646         * dfg/DFGOSRExitCompiler64.cpp:
2647         (JSC::DFG::OSRExitCompiler::compileExit):
2648         * dfg/DFGPredictionPropagationPhase.cpp:
2649         (JSC::DFG::PredictionPropagationPhase::speculatedDoubleTypeForPrediction):
2650         (JSC::DFG::PredictionPropagationPhase::propagate):
2651         (JSC::DFG::PredictionPropagationPhase::doDoubleVoting):
2652         * dfg/DFGSafeToExecute.h:
2653         (JSC::DFG::SafeToExecuteEdge::operator()):
2654         (JSC::DFG::safeToExecute):
2655         * dfg/DFGSilentRegisterSavePlan.h:
2656         * dfg/DFGSpeculativeJIT.cpp:
2657         (JSC::DFG::SpeculativeJIT::silentSavePlanForGPR):
2658         (JSC::DFG::SpeculativeJIT::silentFill):
2659         (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
2660         (JSC::DFG::SpeculativeJIT::compileInlineStart):
2661         (JSC::DFG::SpeculativeJIT::compileDoublePutByVal):
2662         (JSC::DFG::SpeculativeJIT::compileValueToInt32):
2663         (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
2664         (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
2665         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
2666         (JSC::DFG::SpeculativeJIT::compileAdd):
2667         (JSC::DFG::SpeculativeJIT::compileArithSub):
2668         (JSC::DFG::SpeculativeJIT::compileArithNegate):
2669         (JSC::DFG::SpeculativeJIT::compileArithMul):
2670         (JSC::DFG::SpeculativeJIT::compare):
2671         (JSC::DFG::SpeculativeJIT::compileStrictEq):
2672         (JSC::DFG::SpeculativeJIT::speculateNumber):
2673         (JSC::DFG::SpeculativeJIT::speculateRealNumber):
2674         (JSC::DFG::SpeculativeJIT::speculate):
2675         * dfg/DFGSpeculativeJIT.h:
2676         (JSC::DFG::SpeculativeJIT::canReuse):
2677         (JSC::DFG::SpeculativeJIT::isFilled):
2678         (JSC::DFG::SpeculativeJIT::isFilledDouble):
2679         (JSC::DFG::SpeculativeJIT::use):
2680         (JSC::DFG::SpeculativeJIT::boxDouble):
2681         (JSC::DFG::SpeculativeJIT::isKnownInteger):
2682         (JSC::DFG::SpeculativeJIT::isKnownCell):
2683         (JSC::DFG::SpeculativeJIT::isKnownNotNumber):
2684         (JSC::DFG::SpeculativeJIT::int32Result):
2685         (JSC::DFG::SpeculativeJIT::initConstantInfo):
2686         (JSC::DFG::SpeculativeJIT::isInteger):
2687         (JSC::DFG::SpeculativeJIT::generationInfoFromVirtualRegister):
2688         * dfg/DFGSpeculativeJIT32_64.cpp:
2689         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
2690         (JSC::DFG::SpeculativeJIT::compile):
2691         * dfg/DFGSpeculativeJIT64.cpp:
2692         (JSC::DFG::SpeculativeJIT::fillJSValue):
2693         (JSC::DFG::SpeculativeJIT::fillSpeculateInt32Internal):
2694         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
2695         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
2696         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
2697         (JSC::DFG::SpeculativeJIT::compile):
2698         * dfg/DFGUseKind.cpp:
2699         (WTF::printInternal):
2700         * dfg/DFGUseKind.h:
2701         (JSC::DFG::typeFilterFor):
2702         (JSC::DFG::isNumerical):
2703         * dfg/DFGValueSource.cpp:
2704         (JSC::DFG::ValueSource::dump):
2705         * dfg/DFGValueSource.h:
2706         (JSC::DFG::dataFormatToValueSourceKind):
2707         (JSC::DFG::valueSourceKindToDataFormat):
2708         (JSC::DFG::ValueSource::forFlushFormat):
2709         (JSC::DFG::ValueSource::valueRecovery):
2710         * dfg/DFGVariableAccessData.h:
2711         (JSC::DFG::VariableAccessData::shouldUseDoubleFormatAccordingToVote):
2712         (JSC::DFG::VariableAccessData::flushFormat):
2713         * ftl/FTLCArgumentGetter.cpp:
2714         (JSC::FTL::CArgumentGetter::loadNextAndBox):
2715         * ftl/FTLCArgumentGetter.h:
2716         * ftl/FTLCapabilities.cpp:
2717         (JSC::FTL::canCompile):
2718         * ftl/FTLExitValue.cpp:
2719         (JSC::FTL::ExitValue::dumpInContext):
2720         * ftl/FTLExitValue.h:
2721         * ftl/FTLIntrinsicRepository.h:
2722         * ftl/FTLLowerDFGToLLVM.cpp:
2723         (JSC::FTL::LowerDFGToLLVM::createPhiVariables):
2724         (JSC::FTL::LowerDFGToLLVM::compileNode):
2725         (JSC::FTL::LowerDFGToLLVM::compileUpsilon):
2726         (JSC::FTL::LowerDFGToLLVM::compilePhi):
2727         (JSC::FTL::LowerDFGToLLVM::compileSetLocal):
2728         (JSC::FTL::LowerDFGToLLVM::compileAdd):
2729         (JSC::FTL::LowerDFGToLLVM::compileArithSub):
2730         (JSC::FTL::LowerDFGToLLVM::compileArithMul):
2731         (JSC::FTL::LowerDFGToLLVM::compileArithNegate):
2732         (JSC::FTL::LowerDFGToLLVM::compilePutByVal):
2733         (JSC::FTL::LowerDFGToLLVM::compileCompareEq):
2734         (JSC::FTL::LowerDFGToLLVM::compileCompareStrictEq):
2735         (JSC::FTL::LowerDFGToLLVM::compileCompareLess):
2736         (JSC::FTL::LowerDFGToLLVM::compileCompareLessEq):
2737         (JSC::FTL::LowerDFGToLLVM::compileCompareGreater):
2738         (JSC::FTL::LowerDFGToLLVM::compileCompareGreaterEq):
2739         (JSC::FTL::LowerDFGToLLVM::lowInt32):
2740         (JSC::FTL::LowerDFGToLLVM::lowCell):
2741         (JSC::FTL::LowerDFGToLLVM::lowBoolean):
2742         (JSC::FTL::LowerDFGToLLVM::lowDouble):
2743         (JSC::FTL::LowerDFGToLLVM::lowJSValue):
2744         (JSC::FTL::LowerDFGToLLVM::speculateRealNumber):
2745         (JSC::FTL::LowerDFGToLLVM::initializeOSRExitStateForBlock):
2746         (JSC::FTL::LowerDFGToLLVM::emitOSRExitCall):
2747         (JSC::FTL::LowerDFGToLLVM::addExitArgumentForNode):
2748         (JSC::FTL::LowerDFGToLLVM::setInt32):
2749         * ftl/FTLOSRExitCompiler.cpp:
2750         (JSC::FTL::compileStub):
2751         * ftl/FTLOutput.h:
2752         (JSC::FTL::Output::mulWithOverflow32):
2753         * ftl/FTLValueFormat.cpp:
2754         (WTF::printInternal):
2755         * ftl/FTLValueFormat.h:
2756         * ftl/FTLValueSource.cpp:
2757         (JSC::FTL::ValueSource::dump):
2758         * ftl/FTLValueSource.h:
2759         * interpreter/Register.h:
2760         * runtime/Arguments.cpp:
2761         (JSC::Arguments::tearOffForInlineCallFrame):
2762         * runtime/IndexingType.cpp:
2763         (JSC::leastUpperBoundOfIndexingTypeAndType):
2764         * runtime/JSCJSValue.h:
2765         * runtime/JSCJSValueInlines.h:
2766
2767 2013-09-17  Filip Pizlo  <fpizlo@apple.com>
2768
2769         Unreviewed, fix 32-bit build.
2770
2771         * runtime/JSCJSValue.h:
2772
2773 2013-09-16  Filip Pizlo  <fpizlo@apple.com>
2774
2775         DFG should support Int52 for local variables
2776         https://bugs.webkit.org/show_bug.cgi?id=121064
2777
2778         Reviewed by Oliver Hunt.
2779         
2780         This adds Int52 support for local variables to the DFG and FTL. It's a speed-up on
2781         programs that have local int32 overflows but where a larger int representation can
2782         prevent us from having to convert all the way up to double.
2783         
2784         It's a small speed-up for now. But we're just supporting Int52 for a handful of
2785         operations (add, sub, mul, neg, compare, bitops, typed array access) and this lays
2786         the groundwork for adding Int52 to JSValue, which will probably be a bigger
2787         speed-up.
2788         
2789         The basic approach is:
2790         
2791         - We have a notion of Int52 in our typesystem. Int52 doesn't belong to BytecodeTop
2792           or HeapTop - i.e. it doesn't arise from JSValues.
2793         
2794         - DFG treats Int52 as being part of its FullTop and will treat it as being a
2795           subtype of double unless instructed otherwise.
2796         
2797         - Prediction propagator creates Int52s whenever we have a node going doubly but due
2798           to large values rather than fractional values, and that node is known to be able
2799           to produce Int52 natively in the DFG backend.
2800         
2801         - Fixup phase converts edges to MachineIntUses in nodes that are known to be able
2802           to deal with Int52, and where we have a subtype of Int32|Int52 as the predicted
2803           input.
2804         
2805         - The DFG backend and FTL LLVM IR lowering have two notions of Int52s - ones that
2806           are left-shifted by 16 (great for overflow checks) and ones that are
2807           sign-extended. Both backends know how to convert between Int52s and the other
2808           representations.
2809
2810         * assembler/MacroAssemblerX86_64.h:
2811         (JSC::MacroAssemblerX86_64::rshift64):
2812         (JSC::MacroAssemblerX86_64::mul64):
2813         (JSC::MacroAssemblerX86_64::branchMul64):
2814         (JSC::MacroAssemblerX86_64::branchNeg64):
2815         (JSC::MacroAssemblerX86_64::convertInt64ToDouble):
2816         * assembler/X86Assembler.h:
2817         (JSC::X86Assembler::imulq_rr):
2818         (JSC::X86Assembler::cvtsi2sdq_rr):
2819         * bytecode/DataFormat.h:
2820         (JSC::dataFormatToString):
2821         * bytecode/OperandsInlines.h:
2822         (JSC::::dumpInContext):
2823         * bytecode/SpeculatedType.cpp:
2824         (JSC::dumpSpeculation):
2825         (JSC::speculationToAbbreviatedString):
2826         (JSC::speculationFromValue):
2827         * bytecode/SpeculatedType.h:
2828         (JSC::isInt32SpeculationForArithmetic):
2829         (JSC::isMachineIntSpeculationForArithmetic):
2830         (JSC::isBytecodeRealNumberSpeculation):
2831         (JSC::isFullRealNumberSpeculation):
2832         (JSC::isBytecodeNumberSpeculation):
2833         (JSC::isFullNumberSpeculation):
2834         (JSC::isBytecodeNumberSpeculationExpectingDefined):
2835         (JSC::isFullNumberSpeculationExpectingDefined):
2836         * bytecode/ValueRecovery.h:
2837         (JSC::ValueRecovery::alreadyInJSStackAsUnboxedInt52):
2838         (JSC::ValueRecovery::inGPR):
2839         (JSC::ValueRecovery::displacedInJSStack):
2840         (JSC::ValueRecovery::isAlreadyInJSStack):
2841         (JSC::ValueRecovery::gpr):
2842         (JSC::ValueRecovery::virtualRegister):
2843         (JSC::ValueRecovery::dumpInContext):
2844         * dfg/DFGAbstractInterpreter.h:
2845         (JSC::DFG::AbstractInterpreter::needsTypeCheck):
2846         (JSC::DFG::AbstractInterpreter::filterByType):
2847         * dfg/DFGAbstractInterpreterInlines.h:
2848         (JSC::DFG::::executeEffects):
2849         * dfg/DFGAbstractValue.cpp:
2850         (JSC::DFG::AbstractValue::set):
2851         (JSC::DFG::AbstractValue::checkConsistency):
2852         * dfg/DFGAbstractValue.h:
2853         (JSC::DFG::AbstractValue::couldBeType):
2854         (JSC::DFG::AbstractValue::isType):
2855         (JSC::DFG::AbstractValue::checkConsistency):
2856         (JSC::DFG::AbstractValue::validateType):
2857         * dfg/DFGArrayMode.cpp:
2858         (JSC::DFG::ArrayMode::refine):
2859         * dfg/DFGAssemblyHelpers.h:
2860         (JSC::DFG::AssemblyHelpers::boxInt52):
2861         * dfg/DFGCSEPhase.cpp:
2862         (JSC::DFG::CSEPhase::pureCSE):
2863         (JSC::DFG::CSEPhase::getByValLoadElimination):
2864         (JSC::DFG::CSEPhase::performNodeCSE):
2865         * dfg/DFGClobberize.h:
2866         (JSC::DFG::clobberize):
2867         * dfg/DFGCommon.h:
2868         (JSC::DFG::enableInt52):
2869         * dfg/DFGFixupPhase.cpp:
2870         (JSC::DFG::FixupPhase::run):
2871         (JSC::DFG::FixupPhase::fixupNode):
2872         (JSC::DFG::FixupPhase::fixupSetLocalsInBlock):
2873         (JSC::DFG::FixupPhase::fixupUntypedSetLocalsInBlock):
2874         (JSC::DFG::FixupPhase::observeUseKindOnNode):
2875         (JSC::DFG::FixupPhase::fixEdge):
2876         (JSC::DFG::FixupPhase::injectInt32ToDoubleNode):
2877         (JSC::DFG::FixupPhase::attemptToMakeIntegerAdd):
2878         * dfg/DFGFlushFormat.cpp:
2879         (WTF::printInternal):
2880         * dfg/DFGFlushFormat.h:
2881         (JSC::DFG::resultFor):
2882         (JSC::DFG::useKindFor):
2883         * dfg/DFGGenerationInfo.h:
2884         (JSC::DFG::GenerationInfo::initInt52):
2885         (JSC::DFG::GenerationInfo::initStrictInt52):
2886         (JSC::DFG::GenerationInfo::isFormat):
2887         (JSC::DFG::GenerationInfo::isInt52):
2888         (JSC::DFG::GenerationInfo::isStrictInt52):
2889         (JSC::DFG::GenerationInfo::fillInt52):
2890         (JSC::DFG::GenerationInfo::fillStrictInt52):
2891         * dfg/DFGGraph.cpp:
2892         (JSC::DFG::Graph::dump):
2893         * dfg/DFGGraph.h:
2894         (JSC::DFG::Graph::addShouldSpeculateMachineInt):
2895         (JSC::DFG::Graph::mulShouldSpeculateMachineInt):
2896         (JSC::DFG::Graph::negateShouldSpeculateMachineInt):
2897         * dfg/DFGInPlaceAbstractState.cpp:
2898         (JSC::DFG::InPlaceAbstractState::mergeStateAtTail):
2899         * dfg/DFGJITCode.cpp:
2900         (JSC::DFG::JITCode::reconstruct):
2901         * dfg/DFGMinifiedNode.h:
2902         (JSC::DFG::belongsInMinifiedGraph):
2903         (JSC::DFG::MinifiedNode::hasChild):
2904         * dfg/DFGNode.h:
2905         (JSC::DFG::Node::shouldSpeculateNumber):
2906         (JSC::DFG::Node::shouldSpeculateNumberExpectingDefined):
2907         * dfg/DFGNodeFlags.h:
2908         * dfg/DFGNodeType.h:
2909         (JSC::DFG::forwardRewiringSelectionScore):
2910         * dfg/DFGOSRExitCompiler.cpp:
2911         * dfg/DFGOSRExitCompiler64.cpp:
2912         (JSC::DFG::OSRExitCompiler::compileExit):
2913         * dfg/DFGPredictionPropagationPhase.cpp:
2914         (JSC::DFG::PredictionPropagationPhase::speculatedDoubleTypeForPrediction):
2915         (JSC::DFG::PredictionPropagationPhase::propagate):
2916         (JSC::DFG::PredictionPropagationPhase::doDoubleVoting):
2917         * dfg/DFGSafeToExecute.h:
2918         (JSC::DFG::SafeToExecuteEdge::operator()):
2919         (JSC::DFG::safeToExecute):
2920         * dfg/DFGSilentRegisterSavePlan.h:
2921         * dfg/DFGSpeculativeJIT.cpp:
2922         (JSC::DFG::SpeculativeJIT::silentSavePlanForGPR):
2923         (JSC::DFG::SpeculativeJIT::silentFill):
2924         (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
2925         (JSC::DFG::SpeculativeJIT::compileInlineStart):
2926         (JSC::DFG::SpeculativeJIT::compileDoublePutByVal):
2927         (JSC::DFG::SpeculativeJIT::compileValueToInt32):
2928         (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
2929         (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
2930         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
2931         (JSC::DFG::SpeculativeJIT::compileAdd):
2932         (JSC::DFG::SpeculativeJIT::compileArithSub):
2933         (JSC::DFG::SpeculativeJIT::compileArithNegate):
2934         (JSC::DFG::SpeculativeJIT::compileArithMul):
2935         (JSC::DFG::SpeculativeJIT::compare):
2936         (JSC::DFG::SpeculativeJIT::compileStrictEq):
2937         (JSC::DFG::SpeculativeJIT::speculateMachineInt):
2938         (JSC::DFG::SpeculativeJIT::speculateNumber):
2939         (JSC::DFG::SpeculativeJIT::speculateRealNumber):
2940         (JSC::DFG::SpeculativeJIT::speculate):
2941         * dfg/DFGSpeculativeJIT.h:
2942         (JSC::DFG::SpeculativeJIT::canReuse):
2943         (JSC::DFG::SpeculativeJIT::isFilled):
2944         (JSC::DFG::SpeculativeJIT::isFilledDouble):
2945         (JSC::DFG::SpeculativeJIT::use):
2946         (JSC::DFG::SpeculativeJIT::isKnownInteger):
2947         (JSC::DFG::SpeculativeJIT::isKnownCell):
2948         (JSC::DFG::SpeculativeJIT::isKnownNotNumber):
2949         (JSC::DFG::SpeculativeJIT::int52Result):
2950         (JSC::DFG::SpeculativeJIT::strictInt52Result):
2951         (JSC::DFG::SpeculativeJIT::initConstantInfo):
2952         (JSC::DFG::SpeculativeJIT::isInteger):
2953         (JSC::DFG::SpeculativeJIT::betterUseStrictInt52):
2954         (JSC::DFG::SpeculativeJIT::generationInfo):
2955         (JSC::DFG::SpeculateInt52Operand::SpeculateInt52Operand):
2956         (JSC::DFG::SpeculateInt52Operand::~SpeculateInt52Operand):
2957         (JSC::DFG::SpeculateInt52Operand::edge):
2958         (JSC::DFG::SpeculateInt52Operand::node):
2959         (JSC::DFG::SpeculateInt52Operand::gpr):
2960         (JSC::DFG::SpeculateInt52Operand::use):
2961         (JSC::DFG::SpeculateStrictInt52Operand::SpeculateStrictInt52Operand):
2962         (JSC::DFG::SpeculateStrictInt52Operand::~SpeculateStrictInt52Operand):
2963         (JSC::DFG::SpeculateStrictInt52Operand::edge):
2964         (JSC::DFG::SpeculateStrictInt52Operand::node):
2965         (JSC::DFG::SpeculateStrictInt52Operand::gpr):
2966         (JSC::DFG::SpeculateStrictInt52Operand::use):
2967         (JSC::DFG::SpeculateWhicheverInt52Operand::SpeculateWhicheverInt52Operand):
2968         (JSC::DFG::SpeculateWhicheverInt52Operand::~SpeculateWhicheverInt52Operand):
2969         (JSC::DFG::SpeculateWhicheverInt52Operand::edge):
2970         (JSC::DFG::SpeculateWhicheverInt52Operand::node):
2971         (JSC::DFG::SpeculateWhicheverInt52Operand::gpr):
2972         (JSC::DFG::SpeculateWhicheverInt52Operand::use):
2973         (JSC::DFG::SpeculateWhicheverInt52Operand::format):
2974         * dfg/DFGSpeculativeJIT32_64.cpp:
2975         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
2976         (JSC::DFG::SpeculativeJIT::compile):
2977         * dfg/DFGSpeculativeJIT64.cpp:
2978         (JSC::DFG::SpeculativeJIT::boxInt52):
2979         (JSC::DFG::SpeculativeJIT::fillJSValue):
2980         (JSC::DFG::SpeculativeJIT::fillSpeculateInt32Internal):
2981         (JSC::DFG::SpeculativeJIT::fillSpeculateInt52):
2982         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
2983         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
2984         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
2985         (JSC::DFG::SpeculativeJIT::compileInt52Compare):
2986         (JSC::DFG::SpeculativeJIT::compilePeepHoleInt52Branch):
2987         (JSC::DFG::SpeculativeJIT::compile):
2988         * dfg/DFGUseKind.cpp:
2989         (WTF::printInternal):
2990         * dfg/DFGUseKind.h:
2991         (JSC::DFG::typeFilterFor):
2992         (JSC::DFG::isNumerical):
2993         * dfg/DFGValueSource.cpp:
2994         (JSC::DFG::ValueSource::dump):
2995         * dfg/DFGValueSource.h:
2996         (JSC::DFG::dataFormatToValueSourceKind):
2997         (JSC::DFG::valueSourceKindToDataFormat):
2998         (JSC::DFG::ValueSource::forFlushFormat):
2999         (JSC::DFG::ValueSource::valueRecovery):
3000         * dfg/DFGVariableAccessData.h:
3001         (JSC::DFG::VariableAccessData::shouldUseDoubleFormatAccordingToVote):
3002         (JSC::DFG::VariableAccessData::flushFormat):
3003         * ftl/FTLCArgumentGetter.cpp:
3004         (JSC::FTL::CArgumentGetter::loadNextAndBox):
3005         * ftl/FTLCArgumentGetter.h:
3006         * ftl/FTLCapabilities.cpp:
3007         (JSC::FTL::canCompile):
3008         * ftl/FTLExitValue.cpp:
3009         (JSC::FTL::ExitValue::dumpInContext):
3010         * ftl/FTLExitValue.h:
3011         (JSC::FTL::ExitValue::inJSStackAsInt52):
3012         * ftl/FTLIntrinsicRepository.h:
3013         * ftl/FTLLowerDFGToLLVM.cpp:
3014         (JSC::FTL::LowerDFGToLLVM::createPhiVariables):
3015         (JSC::FTL::LowerDFGToLLVM::compileNode):
3016         (JSC::FTL::LowerDFGToLLVM::compileUpsilon):
3017         (JSC::FTL::LowerDFGToLLVM::compilePhi):
3018         (JSC::FTL::LowerDFGToLLVM::compileSetLocal):
3019         (JSC::FTL::LowerDFGToLLVM::compileAdd):
3020         (JSC::FTL::LowerDFGToLLVM::compileArithSub):
3021         (JSC::FTL::LowerDFGToLLVM::compileArithMul):
3022         (JSC::FTL::LowerDFGToLLVM::compileArithNegate):
3023         (JSC::FTL::LowerDFGToLLVM::compilePutByVal):
3024         (JSC::FTL::LowerDFGToLLVM::compileCompareEq):
3025         (JSC::FTL::LowerDFGToLLVM::compileCompareStrictEq):
3026         (JSC::FTL::LowerDFGToLLVM::compileCompareLess):
3027         (JSC::FTL::LowerDFGToLLVM::compileCompareLessEq):
3028         (JSC::FTL::LowerDFGToLLVM::compileCompareGreater):
3029         (JSC::FTL::LowerDFGToLLVM::compileCompareGreaterEq):
3030         (JSC::FTL::LowerDFGToLLVM::lowInt32):
3031         (JSC::FTL::LowerDFGToLLVM::lowInt52):
3032         (JSC::FTL::LowerDFGToLLVM::lowStrictInt52):
3033         (JSC::FTL::LowerDFGToLLVM::betterUseStrictInt52):
3034         (JSC::FTL::LowerDFGToLLVM::bestInt52Kind):
3035         (JSC::FTL::LowerDFGToLLVM::opposite):
3036         (JSC::FTL::LowerDFGToLLVM::Int52s::operator[]):
3037         (JSC::FTL::LowerDFGToLLVM::lowWhicheverInt52):
3038         (JSC::FTL::LowerDFGToLLVM::lowWhicheverInt52s):
3039         (JSC::FTL::LowerDFGToLLVM::lowOpposingInt52s):
3040         (JSC::FTL::LowerDFGToLLVM::lowCell):
3041         (JSC::FTL::LowerDFGToLLVM::lowBoolean):
3042         (JSC::FTL::LowerDFGToLLVM::lowDouble):
3043         (JSC::FTL::LowerDFGToLLVM::lowJSValue):
3044         (JSC::FTL::LowerDFGToLLVM::strictInt52ToInt32):
3045         (JSC::FTL::LowerDFGToLLVM::strictInt52ToDouble):
3046         (JSC::FTL::LowerDFGToLLVM::strictInt52ToJSValue):
3047         (JSC::FTL::LowerDFGToLLVM::setInt52WithStrictValue):
3048         (JSC::FTL::LowerDFGToLLVM::strictInt52ToInt52):
3049         (JSC::FTL::LowerDFGToLLVM::int52ToStrictInt52):
3050         (JSC::FTL::LowerDFGToLLVM::speculateRealNumber):
3051         (JSC::FTL::LowerDFGToLLVM::initializeOSRExitStateForBlock):
3052         (JSC::FTL::LowerDFGToLLVM::emitOSRExitCall):
3053         (JSC::FTL::LowerDFGToLLVM::addExitArgumentForNode):
3054         (JSC::FTL::LowerDFGToLLVM::setInt52):
3055         (JSC::FTL::LowerDFGToLLVM::setStrictInt52):
3056         * ftl/FTLOSRExitCompiler.cpp:
3057         (JSC::FTL::compileStub):
3058         * ftl/FTLOutput.h:
3059         (JSC::FTL::Output::addWithOverflow64):
3060         (JSC::FTL::Output::subWithOverflow64):
3061         (JSC::FTL::Output::mulWithOverflow64):
3062         * ftl/FTLValueFormat.cpp:
3063         (WTF::printInternal):
3064         * ftl/FTLValueFormat.h:
3065         * ftl/FTLValueSource.cpp:
3066         (JSC::FTL::ValueSource::dump):
3067         * ftl/FTLValueSource.h:
3068         * interpreter/Register.h:
3069         (JSC::Register::unboxedInt52):
3070         * runtime/Arguments.cpp:
3071         (JSC::Arguments::tearOffForInlineCallFrame):
3072         * runtime/IndexingType.cpp:
3073         (JSC::leastUpperBoundOfIndexingTypeAndType):
3074         * runtime/JSCJSValue.h:
3075         * runtime/JSCJSValueInlines.h:
3076         (JSC::JSValue::isMachineInt):
3077         (JSC::JSValue::asMachineInt):
3078
3079 2013-09-17  Filip Pizlo  <fpizlo@apple.com>
3080
3081         Use CheckStructure for checking the types of typed arrays whenever possible
3082         https://bugs.webkit.org/show_bug.cgi?id=121514
3083
3084         Reviewed by Oliver Hunt.
3085
3086         * bytecode/ArrayProfile.cpp:
3087         (JSC::ArrayProfile::computeUpdatedPrediction):
3088         * dfg/DFGArrayMode.cpp:
3089         (JSC::DFG::ArrayMode::fromObserved):
3090         (JSC::DFG::ArrayMode::refine):
3091         (JSC::DFG::ArrayMode::originalArrayStructure):
3092         (JSC::DFG::arrayClassToString):
3093         * dfg/DFGArrayMode.h:
3094         (JSC::DFG::ArrayMode::ArrayMode):
3095         (JSC::DFG::ArrayMode::arrayModesWithIndexingShape):
3096         * runtime/JSGlobalObject.h:
3097         (JSC::JSGlobalObject::isOriginalTypedArrayStructure):
3098
3099 2013-09-17  Filip Pizlo  <fpizlo@apple.com>
3100
3101         DFG should use the (x & 0x7fffffff) trick for doing overflow and neg-zero checks on negation in one go
3102         https://bugs.webkit.org/show_bug.cgi?id=121520
3103
3104         Reviewed by Oliver Hunt.
3105
3106         * dfg/DFGSpeculativeJIT.cpp:
3107         (JSC::DFG::SpeculativeJIT::compileArithNegate):
3108         * ftl/FTLLowerDFGToLLVM.cpp:
3109         (JSC::FTL::LowerDFGToLLVM::compileArithNegate):
3110
3111 2013-09-17  Andreas Kling  <akling@apple.com>
3112
3113         Pack create_hash_table tables better.
3114         <https://webkit.org/b/121517>
3115
3116         Reviewed by Sam Weinig.
3117
3118         Reduces JavaScriptCore binary size by 4648 bytes.
3119
3120         * create_hash_table:
3121         * runtime/Lookup.h:
3122
3123             Reorder HashTableValue members to avoid unnecessary padding.
3124
3125 2013-09-17  Mark Hahnenberg  <mhahnenberg@apple.com>
3126
3127         DFG doesn't properly keep scope alive for op_put_to_scope
3128         https://bugs.webkit.org/show_bug.cgi?id=121519
3129
3130         Reviewed by Michael Saboff.
3131
3132         This was a latent bug that can't actually occur in ToT. It was uncovered by causing slow 
3133         path calls in the baseline JIT for op_put_to_scope in places where we couldn't before (but 
3134         which were necessary for gen GC).
3135
3136         * dfg/DFGByteCodeParser.cpp:
3137         (JSC::DFG::ByteCodeParser::parseBlock):
3138
3139 2013-09-17  Filip Pizlo  <fpizlo@apple.com>
3140
3141         Don't GC while OSR compiling
3142         https://bugs.webkit.org/show_bug.cgi?id=121513
3143
3144         Reviewed by Mark Hahnenberg.
3145         
3146         Fixes some rare crashes that I see in ConservativeRoots, while in a GC from OSR exit
3147         compilation.
3148
3149         * dfg/DFGOSRExitCompiler.cpp:
3150         * ftl/FTLOSRExitCompiler.cpp:
3151         (JSC::FTL::compileFTLOSRExit):
3152
3153 2013-09-17  Alberto Garcia  <berto@igalia.com>
3154
3155         Unreviewed make distcheck fix.
3156
3157         * GNUmakefile.list.am:
3158
3159 2013-09-13  Mark Hahnenberg  <mhahnenberg@apple.com>
3160
3161         MarkedBlocks shouldn't be put in Allocated state if they didn't produce a FreeList
3162         https://bugs.webkit.org/show_bug.cgi?id=121236
3163
3164         Reviewed by Geoffrey Garen.
3165
3166         Right now, after a collection all MarkedBlocks are in the Marked block state. When lazy sweeping 
3167         happens, if a block returns an empty free list after being swept, we call didConsumeFreeList(), 
3168         which moves the block into the Allocated block state. This happens to both the block that was 
3169         just being allocated out of (i.e. m_currentBlock) as well as any blocks who are completely full. 
3170         We should distinguish between these two cases: m_currentBlock should transition to 
3171         Allocated (because we were just allocating out of it) and any subsequent block that returns an 
3172         empty free list should transition back to the Marked state. This will make the block state more 
3173         consistent with the actual state the block is in, and it will also allow us to speed up moving 
3174         all blocks the the Marked state during generational collection.
3175
3176         Added new RAII-style HeapIterationScope class that notifies the Heap when it is about to be 
3177         iterated and when iteration has finished. Any clients that need accurate liveness data when 
3178         iterating over the Heap now need to use a HeapIterationScope so that the state of Heap can 
3179         be properly restored after they are done iterating. No new GC-allocated objects can be created 
3180         until this object goes out of scope.
3181
3182         * JavaScriptCore.xcodeproj/project.pbxproj:
3183         * debugger/Debugger.cpp: 
3184         (JSC::Debugger::recompileAllJSFunctions): Added HeapIterationScope for the Recompiler iteration.
3185         * heap/Heap.cpp:
3186         (JSC::Heap::willStartIterating): Callback used by HeapIterationScope to indicate that iteration of 
3187         the Heap is about to begin. This will cause cell liveness data to be canonicalized by calling stopAllocating.
3188         (JSC::Heap::didFinishIterating): Same, but indicates that iteration has finished.
3189         (JSC::Heap::globalObjectCount): Used HeapIterationScope.
3190         (JSC::Heap::objectTypeCounts): Ditto.
3191         (JSC::Heap::markDeadObjects): Ditto.
3192         (JSC::Heap::zombifyDeadObjects): Ditto.
3193         * heap/Heap.h:
3194         * heap/HeapIterationScope.h: Added. New RAII-style object for indicating to the Heap that it's about
3195         to be iterated or that iteration has finished.
3196         (JSC::HeapIterationScope::HeapIterationScope):
3197         (JSC::HeapIterationScope::~HeapIterationScope):
3198         * heap/HeapStatistics.cpp:
3199         (JSC::HeapStatistics::showObjectStatistics): Used new HeapIterationScope.
3200         * heap/MarkedAllocator.cpp:
3201         (JSC::MarkedAllocator::tryAllocateHelper): We now treat the case where we have just finished 
3202         allocating out of the current block differently from the case where we sweep a block and it 
3203         returns an empty free list. This was the primary point of this patch.
3204         (JSC::MarkedAllocator::allocateSlowCase): ASSERT that nobody is currently iterating the Heap 
3205         when allocating.
3206         * heap/MarkedAllocator.h:
3207         (JSC::MarkedAllocator::reset): All allocators are reset after every collection. We need to make 
3208         sure that the m_lastActiveBlock gets cleared, which it might not always because we don't call 
3209         takeCanonicalizedBlock on blocks in the large allocators.
3210         (JSC::MarkedAllocator::stopAllocating): We shouldn't already have a last active block,
3211         so ASSERT as much.
3212         (JSC::MarkedAllocator::resumeAllocating): Do the opposite of what stopAllocating
3213         does. So, if we don't have a m_lastActiveBlock then we don't have to worry about undoing anything
3214         done by stopAllocating. If we do, then we call resumeAllocating on the block, which returns the FreeList
3215         as it was prior to stopping allocation. We then set the current block to the last active block and 
3216         clear the last active block. 
3217         * heap/MarkedBlock.cpp:
3218         (JSC::MarkedBlock::resumeAllocating): Any block resuming allocation should be in 
3219         the Marked state, so ASSERT as much. We always allocate a m_newlyAllocated Bitmap if we're
3220         FreeListed, so if we didn't allocate one then we know we were Marked when allocation was stopped,
3221         so just return early with an empty FreeList. If we do have a non-null m_newlyAllocated Bitmap
3222         then we need to be swept in order to rebuild our FreeList.
3223         * heap/MarkedBlock.h:
3224         (JSC::MarkedBlock::didConsumeEmptyFreeList): This is called if we ever sweep a block and get back
3225         an empty free list. Instead of transitioning to the Allocated state, we now go straight back to the 
3226         Marked state. This makes sense because we weren't actually allocated out of, so we shouldn't be in 
3227         the allocated state. Also added some ASSERTs to make sure that we're in the state that we expect: all of
3228         our mark bits should be set and we should not have a m_newlyAllocated Bitmap.
3229         * heap/MarkedSpace.cpp:
3230         (JSC::MarkedSpace::MarkedSpace):
3231         (JSC::MarkedSpace::forEachAllocator): Added a new functor-style iteration method so that we can 
3232         easily iterate over each allocator for, e.g., stopping and resuming allocators without
3233         duplicating code. 
3234         (JSC::StopAllocatingFunctor::operator()): New functors for use with forEachAllocator.
3235         (JSC::MarkedSpace::stopAllocating): Ditto.
3236         (JSC::ResumeAllocatingFunctor::operator()): Ditto.
3237         (JSC::MarkedSpace::resumeAllocating): Ditto.
3238         (JSC::MarkedSpace::willStartIterating): Callback that notifies MarkedSpace that it is being iterated.
3239         Does some ASSERTs, sets a flag, canonicalizes cell liveness data by calling stopAllocating.
3240         (JSC::MarkedSpace::didFinishIterating): Ditto, but to signal that iteration has completed.
3241         * heap/MarkedSpace.h:
3242         (JSC::MarkedSpace::iterationInProgress): Returns true if a HeapIterationScope is currently active.
3243         (JSC::MarkedSpace::forEachLiveCell): Accepts a HeapIterationScope to enforce the rule that you have to 
3244         create one prior to iterating over the Heap.
3245         (JSC::MarkedSpace::forEachDeadCell): Ditto.
3246         * runtime/JSGlobalObject.cpp:
3247         (JSC::JSGlobalObject::haveABadTime): Changed to use new HeapIterationScope.
3248         * runtime/VM.cpp:
3249         (JSC::VM::releaseExecutableMemory): Ditto.
3250
3251 2013-09-16  Filip Pizlo  <fpizlo@apple.com>
3252
3253         Inlining should work in debug mode (i.e. Executable::newCodeBlock() should call recordParse())
3254         https://bugs.webkit.org/show_bug.cgi?id=121444
3255
3256         Reviewed by Mark Hahnenberg.
3257
3258         * dfg/DFGArgumentPosition.h: Fix a bug discovered by reenabling inlining. ArgumentPosition may point to the non-canonical VariableAccessData but users of someVariable() want the canonical one.
3259         (JSC::DFG::ArgumentPosition::someVariable):
3260         * runtime/Executable.cpp: Call recordParse() so that the Executable knows things about itself (like if it has captured variables). Otherwise those fields are uninitialized.
3261         (JSC::ScriptExecutable::newCodeBlockFor):
3262
3263 2013-09-16  Balazs Kilvady  <kilvadyb@homejinni.com>
3264
3265         Aligned argument signatures of setupArgumentsWithExecState are missing on MIPS.
3266         https://bugs.webkit.org/show_bug.cgi?id=121439
3267
3268         Reviewed by Geoffrey Garen.
3269
3270         Missing implementations of setupArgumentsWithExecState added.
3271
3272         * dfg/DFGCCallHelpers.h:
3273         (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
3274
3275 2013-09-16  Julien Brianceau  <jbriance@cisco.com>
3276
3277         [sh4] Fix typo in subp implementation in LLINT.
3278         https://bugs.webkit.org/show_bug.cgi?id=121438
3279
3280         Reviewed by Andreas Kling.
3281
3282         * offlineasm/sh4.rb:
3283
3284 2013-09-16  Julien Brianceau  <jbriance@cisco.com>
3285
3286         [sh4] Handle subp opcode with 3 operands and bpbeq opcode in LLINT.
3287         https://bugs.webkit.org/show_bug.cgi?id=121412
3288
3289         Reviewed by Andreas Kling.
3290
3291         * offlineasm/sh4.rb:
3292
3293 2013-09-15  Gustavo Noronha Silva  <gns@gnome.org>
3294
3295         Unreviewed make distcheck fix.
3296
3297         * GNUmakefile.list.am:
3298
3299 2013-09-15  Filip Pizlo  <fpizlo@apple.com>
3300
3301         Deoptimize deoptimization: make DFGOSRExitCompiler64.cpp more hackable
3302         https://bugs.webkit.org/show_bug.cgi?id=121374
3303
3304         Reviewed by Geoffrey Garen.
3305         
3306         This reduces the size of DFGOSRExitCompiler64.cpp by almost 50%, and makes it
3307         super easy to add new recovery kinds. For recoveries that involve reboxing, it
3308         allows you to keep most of the code common between the on-stack and in-reg
3309         cases: they all get funneled through the "load from scratch buffer, convert,
3310         and then store to stack" logic.
3311         
3312         This opens up a bunch of possibilities. It'll make adding Int48 much easier,
3313         and it probably will come in handy as we do various DFG stack layout changes in
3314         support of the FTL.
3315
3316         * bytecode/ValueRecovery.h:
3317         (JSC::ValueRecovery::dumpInContext):
3318         (JSC::ValueRecovery::dump):
3319         * dfg/DFGOSRExitCompiler.cpp:
3320         (JSC::DFG::shortOperandsDump):
3321         * dfg/DFGOSRExitCompiler64.cpp:
3322         (JSC::DFG::OSRExitCompiler::compileExit):
3323
3324 2013-09-14  Filip Pizlo  <fpizlo@apple.com>
3325
3326         It should be easy to add new nodes that do OSR forward rewiring in both DFG and FTL
3327         https://bugs.webkit.org/show_bug.cgi?id=121371
3328
3329         Reviewed by Sam Weinig.
3330         
3331         Forward rewiring is a tricky part of OSR that handles the following:
3332         
3333             a: Something(...)
3334                SetLocal(@a, locX)
3335             b: Int32ToDouble(@a)
3336             c: SomethingThatExits(@b)
3337                <no further uses of @a or @b>
3338
3339         Note that at @c, OSR will think that locX->@a, but @a will be dead. So it must be
3340         smart enough to find @b, which contains an equivalent value. It must do this for
3341         any identity functions we support. Currently we support four such functions.
3342         
3343         Currently the code for doing this is basically duplicated between the DFG and the
3344         FTL. Also both versions of the code have some really weirdly written logic for
3345         picking the "best" identity function to use.
3346         
3347         We should fix this by simply having a way to ask "is this node an identity
3348         function, and if so, then how good is it?"  Then both the DFG and FTL could use
3349         this and have no hard-wired knowledge of those identity functions.
3350         
3351         While we're at it, this also changes some terminology because I found the use of
3352         the word "needs" confusing. Note that this retains the somewhat confusing behavior
3353         that we don't search all possible forward/backward uses. We only search one step
3354         in each direction. This is because we only need to handle cases that FixupPhase
3355         and the parser insert. All other code that tries to insert intermediate conversion
3356         nodes should ensure to Phantom the original node. For example, the following
3357         transformation is illegal:
3358         
3359         Before:
3360             x: SomethingThatExits(@a)
3361         
3362         After:
3363             w: Conversion(@a)
3364             x: SomethingThatExits(@w)
3365         
3366         The correct form of that transformation is one of these:
3367         
3368         Correct #1:
3369         
3370             v: DoAllChecks(@a) // exit here
3371             w: Conversion(@a)
3372             x: Something(@w) // no exit
3373         
3374         Correct #2:
3375         
3376             w: Conversion(@a)
3377             x: SomethingThatExits(@w)
3378             y: Phantom(@a)
3379         
3380         Correct #3:
3381         
3382             w: Conversion(@a)
3383             x: SomethingThatExits(@w, @a)
3384         
3385         Note that we use #3 for some heap accesses, but of course it requires that the
3386         node you're using has an extra slot for a "dummy" use child.
3387         
3388         Broadly speaking though, such transformations should be relegated to something
3389         below&