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