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