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