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