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