[armv7][arm64] Speculative build fix after r159545.
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2013-11-20  Julien Brianceau  <jbriance@cisco.com>
2
3         [armv7][arm64] Speculative build fix after r159545.
4         https://bugs.webkit.org/show_bug.cgi?id=124646
5
6         Reviewed by Filip Pizlo.
7
8         * assembler/ARMv7Assembler.h:
9         * assembler/MacroAssemblerARM64.h:
10         (JSC::MacroAssemblerARM64::memoryFence):
11         * assembler/MacroAssemblerARMv7.h:
12         (JSC::MacroAssemblerARMv7::memoryFence):
13
14 2013-11-19  Ryosuke Niwa  <rniwa@webkit.org>
15
16         Enable HTMLTemplateElement on Mac port
17         https://bugs.webkit.org/show_bug.cgi?id=124637
18
19         Reviewed by Tim Horton.
20
21         * Configurations/FeatureDefines.xcconfig:
22
23 2013-11-19  Filip Pizlo  <fpizlo@apple.com>
24
25         Unreviewed, remove completely bogus assertion.
26
27         * runtime/JSGlobalObject.cpp:
28         (JSC::JSGlobalObject::addFunction):
29
30 2013-11-19  Filip Pizlo  <fpizlo@apple.com>
31
32         Unreviewed, debug build fix.
33
34         * runtime/JSGlobalObject.cpp:
35         (JSC::JSGlobalObject::addFunction):
36
37 2013-11-19  Filip Pizlo  <fpizlo@apple.com>
38
39         Infer constant global variables
40         https://bugs.webkit.org/show_bug.cgi?id=124464
41
42         Reviewed by Sam Weinig.
43         
44         All global variables that are candidates for watchpoint-based constant inference (i.e.
45         not 'const' variables) will now have WatchpointSet's associated with them and those
46         are used to drive the inference by tracking three states of each variable:
47         
48         Uninitialized: the variable's value is Undefined and the WatchpointSet state is
49             ClearWatchpoint.
50         
51         Initialized: the variable's value was set to something (could even be explicitly set
52             to Undefined) and the WatchpointSet state is IsWatching.
53         
54         Invalidated: the variable's value was set to something else (could even be the same
55             thing as before but the point is that a put operation did execute again) and the
56             WatchpointSet is IsInvalidated.
57         
58         If the compiler tries to compile a GetGlobalVar and the WatchpointSet state is
59         IsWatching, then the current value of the variable can be folded in place of the get,
60         and a watchpoint on the variable can be registered.
61         
62         We handle race conditions between the mutator and compiler by mandating that:
63         
64         - The mutator changes the WatchpointSet state after executing the put.
65         
66         - There is no opportunity to install code or call functions between when the mutator
67           executes a put and changes the WatchpointSet state.
68         
69         - The compiler checks the WatchpointSet state prior to reading the value.
70         
71         The concrete algorithm used by the mutator is:
72         
73             1. Store the new value into the variable.
74             --- Execute a store-store fence.
75             2. Bump the state (ClearWatchpoing becomes IsWatching, IsWatching becomes
76                IsInvalidated); the IsWatching->IsInvalidated transition may end up firing
77                watchpoints.
78         
79         The concrete algorithm that the compiler uses is:
80         
81             1. Load the state. If it's *not* IsWatching, then give up on constant inference.
82             --- Execute a load-load fence.
83             2. Load the value of the variable and use that for folding, while also registering
84                a DesiredWatchpoint. The various parts of this step can be done in any order.
85         
86         The desired watchpoint registration will fail if the watchpoint set is already
87         invalidated. Now consider the following interesting interleavings:
88         
89         Uninitialized->M1->M2->C1->C2: Compiler sees IsWatching because of the mutator's store
90             operation, and the variable is folded. The fencing ensures that C2 sees the value
91             stored in M1 - i.e. we fold on the value that will actually be watchpointed. If
92             before the compilation is installed the mutator executes another store then we
93             will be sure that it will be a complete sequence of M1+M2 since compilations get
94             installed at safepoints and never "in the middle" of a put_to_scope. Hence that
95             compilation installation will be invalidated. If the M1+M2 sequence happens after
96             the code is installed, then the code will be invalidated by triggering a jettison.
97         
98         Uninitialized->M1->C1->C2->M2: Compiler sees Uninitialized and will not fold. This is
99             a sensible outcome since if the compiler read the variable's value, it would have
100             seen Undefined.
101         
102         Uninitialized->C1->C2->M1->M2: Compiler sees Uninitialized and will not fold.
103         Uninitialized->C1->M1->C2->M2: Compiler sees Uninitialized and will not fold.
104         Uninitialized->C1->M1->M2->C2: Compiler sees Uninitialized and will not fold.
105         Uninitialized->M1->C1->M2->C2: Compiler sees Uninitialized and will not fold.
106         
107         IsWatched->M1->M2->C1->C2: Compiler sees IsInvalidated and will not fold.
108         
109         IsWatched->M1->C1->C2->M2: Compiler will fold, but will also register a desired
110             watchpoint, and that watchpoint will get invalidated before the code is installed.
111         
112         IsWatched->M1->C1->M2->C2: As above, will fold but the code will get invalidated.
113         IsWatched->C1->C2->M1->M2: As above, will fold but the code will get invalidated.
114         IsWatched->C1->M1->C2->M2: As above, will fold but the code will get invalidated.
115         IsWatched->C1->M1->M2->C2: As above, will fold but the code will get invalidated.
116         
117         Note that this kind of reasoning shows why having the mutator first bump the state and
118         then store the new value would be wrong. If we had done that (M1 = bump state, M2 =
119         execute put) then we could have the following deadly interleavings:
120         
121         Uninitialized->M1->C1->C2->M2:
122         Uninitialized->M1->C1->M2->C2: Mutator bumps the state to IsWatched and then the
123             compiler folds Undefined, since M2 hasn't executed yet. Although C2 will set the
124             watchpoint, M1 didn't notify it - it mearly initiated watching. M2 then stores a
125             value other than Undefined, and you're toast.
126         
127         You could fix this sort of thing by making the Desired Watchpoints machinery more
128         sophisticated, for example having it track the value that was folded; if the global
129         variable's value was later found to be different then we could invalidate the
130         compilation. You could also fix it by having the compiler also check that the value of
131         the variable is not Undefined before folding. While those all sound great, I decided
132         to instead just use the right interleaving since that results in less code and feels
133         more intuitive.
134         
135         This is a 0.5% speed-up on SunSpider, mostly due to a 20% speed-up on math-cordic.
136         It's a 0.6% slow-down on LongSpider, mostly due to a 25% slow-down on 3d-cube. This is
137         because 3d-cube takes global variable assignment slow paths very often. Note that this
138         3d-cube slow-down doesn't manifest as much in SunSpider (only 6% there). This patch is
139         also a 1.5% speed-up on V8v7 and a 2.8% speed-up on Octane v1, mostly due to deltablue
140         (3.7%), richards (4%), and mandreel (26%). This is a 2% speed-up on Kraken, mostly due
141         to a 17.5% speed-up on imaging-gaussian-blur. Something that really illustrates the
142         slam-dunk-itude of this patch is the wide range of speed-ups on JSRegress. Casual JS
143         programming often leads to global-var-based idioms and those variables tend to be
144         assigned once, leading to excellent constant folding opportunities in an optimizing
145         JIT. This is very evident in the speed-ups on JSRegress.
146
147         * assembler/ARM64Assembler.h:
148         (JSC::ARM64Assembler::dmbSY):
149         * assembler/ARMv7Assembler.h:
150         (JSC::ARMv7Assembler::dmbSY):
151         * assembler/MacroAssemblerARM64.h:
152         (JSC::MacroAssemblerARM64::memfence):
153         * assembler/MacroAssemblerARMv7.h:
154         (JSC::MacroAssemblerARMv7::load8):
155         (JSC::MacroAssemblerARMv7::memfence):
156         * assembler/MacroAssemblerX86.h:
157         (JSC::MacroAssemblerX86::load8):
158         (JSC::MacroAssemblerX86::store8):
159         * assembler/MacroAssemblerX86Common.h:
160         (JSC::MacroAssemblerX86Common::getUnusedRegister):
161         (JSC::MacroAssemblerX86Common::store8):
162         (JSC::MacroAssemblerX86Common::memoryFence):
163         * assembler/MacroAssemblerX86_64.h:
164         (JSC::MacroAssemblerX86_64::load8):
165         (JSC::MacroAssemblerX86_64::store8):
166         * assembler/X86Assembler.h:
167         (JSC::X86Assembler::movb_rm):
168         (JSC::X86Assembler::movzbl_mr):
169         (JSC::X86Assembler::mfence):
170         (JSC::X86Assembler::X86InstructionFormatter::threeByteOp):
171         (JSC::X86Assembler::X86InstructionFormatter::oneByteOp8):
172         * bytecode/CodeBlock.cpp:
173         (JSC::CodeBlock::CodeBlock):
174         * bytecode/Watchpoint.cpp:
175         (JSC::WatchpointSet::WatchpointSet):
176         (JSC::WatchpointSet::add):
177         (JSC::WatchpointSet::notifyWriteSlow):
178         * bytecode/Watchpoint.h:
179         (JSC::WatchpointSet::state):
180         (JSC::WatchpointSet::isStillValid):
181         (JSC::WatchpointSet::addressOfSetIsNotEmpty):
182         * dfg/DFGAbstractInterpreterInlines.h:
183         (JSC::DFG::::executeEffects):
184         * dfg/DFGByteCodeParser.cpp:
185         (JSC::DFG::ByteCodeParser::getJSConstantForValue):
186         (JSC::DFG::ByteCodeParser::getJSConstant):
187         (JSC::DFG::ByteCodeParser::parseBlock):
188         * dfg/DFGClobberize.h:
189         (JSC::DFG::clobberize):
190         * dfg/DFGFixupPhase.cpp:
191         (JSC::DFG::FixupPhase::fixupNode):
192         * dfg/DFGNode.h:
193         (JSC::DFG::Node::isStronglyProvedConstantIn):
194         (JSC::DFG::Node::hasIdentifierNumberForCheck):
195         (JSC::DFG::Node::hasRegisterPointer):
196         * dfg/DFGNodeFlags.h:
197         * dfg/DFGNodeType.h:
198         * dfg/DFGOperations.cpp:
199         * dfg/DFGOperations.h:
200         * dfg/DFGPredictionPropagationPhase.cpp:
201         (JSC::DFG::PredictionPropagationPhase::propagate):
202         * dfg/DFGSafeToExecute.h:
203         (JSC::DFG::safeToExecute):
204         * dfg/DFGSpeculativeJIT.cpp:
205         (JSC::DFG::SpeculativeJIT::compileNotifyPutGlobalVar):
206         * dfg/DFGSpeculativeJIT.h:
207         (JSC::DFG::SpeculativeJIT::callOperation):
208         * dfg/DFGSpeculativeJIT32_64.cpp:
209         (JSC::DFG::SpeculativeJIT::compile):
210         * dfg/DFGSpeculativeJIT64.cpp:
211         (JSC::DFG::SpeculativeJIT::compile):
212         * ftl/FTLAbbreviatedTypes.h:
213         * ftl/FTLAbbreviations.h:
214         (JSC::FTL::buildFence):
215         * ftl/FTLCapabilities.cpp:
216         (JSC::FTL::canCompile):
217         * ftl/FTLIntrinsicRepository.h:
218         * ftl/FTLLowerDFGToLLVM.cpp:
219         (JSC::FTL::LowerDFGToLLVM::compileNode):
220         (JSC::FTL::LowerDFGToLLVM::compileNotifyPutGlobalVar):
221         * ftl/FTLOutput.h:
222         (JSC::FTL::Output::fence):
223         * jit/JIT.h:
224         * jit/JITOperations.h:
225         * jit/JITPropertyAccess.cpp:
226         (JSC::JIT::emitPutGlobalVar):
227         (JSC::JIT::emit_op_put_to_scope):
228         (JSC::JIT::emitSlow_op_put_to_scope):
229         * jit/JITPropertyAccess32_64.cpp:
230         (JSC::JIT::emitPutGlobalVar):
231         (JSC::JIT::emit_op_put_to_scope):
232         (JSC::JIT::emitSlow_op_put_to_scope):
233         * llint/LowLevelInterpreter32_64.asm:
234         * llint/LowLevelInterpreter64.asm:
235         * llvm/LLVMAPIFunctions.h:
236         * offlineasm/arm.rb:
237         * offlineasm/arm64.rb:
238         * offlineasm/cloop.rb:
239         * offlineasm/instructions.rb:
240         * offlineasm/x86.rb:
241         * runtime/JSGlobalObject.cpp:
242         (JSC::JSGlobalObject::addGlobalVar):
243         (JSC::JSGlobalObject::addFunction):
244         * runtime/JSGlobalObject.h:
245         (JSC::JSGlobalObject::addVar):
246         (JSC::JSGlobalObject::addConst):
247         * runtime/JSScope.cpp:
248         (JSC::abstractAccess):
249         * runtime/JSSymbolTableObject.h:
250         (JSC::symbolTablePut):
251         (JSC::symbolTablePutWithAttributes):
252         * runtime/SymbolTable.cpp:
253         (JSC::SymbolTableEntry::couldBeWatched):
254         (JSC::SymbolTableEntry::prepareToWatch):
255         (JSC::SymbolTableEntry::notifyWriteSlow):
256         * runtime/SymbolTable.h:
257
258 2013-11-19  Michael Saboff  <msaboff@apple.com>
259
260         REGRESSION(158384) ARMv7 point checks too restrictive for native calls to traditional ARM code
261         https://bugs.webkit.org/show_bug.cgi?id=124612
262
263         Reviewed by Geoffrey Garen.
264
265         Removed ASSERT checks (i.e. lower bit set) for ARM Thumb2 destination addresses related to
266         calls since we are calling native ARM traditional functions like sin() and cos().
267
268         * assembler/ARMv7Assembler.h:
269         (JSC::ARMv7Assembler::linkCall):
270         (JSC::ARMv7Assembler::relinkCall):
271         * assembler/MacroAssemblerCodeRef.h:
272
273 2013-11-19  Commit Queue  <commit-queue@webkit.org>
274
275         Unreviewed, rolling out r159459.
276         http://trac.webkit.org/changeset/159459
277         https://bugs.webkit.org/show_bug.cgi?id=124616
278
279         tons of assertions on launch (Requested by thorton on
280         #webkit).
281
282         * API/JSContext.mm:
283         (-[JSContext setException:]):
284         (-[JSContext wrapperForObjCObject:]):
285         (-[JSContext wrapperForJSObject:]):
286         * API/JSContextRef.cpp:
287         (JSContextGroupRelease):
288         (JSGlobalContextRelease):
289         * API/JSManagedValue.mm:
290         (-[JSManagedValue initWithValue:]):
291         (-[JSManagedValue value]):
292         * API/JSObjectRef.cpp:
293         (JSObjectIsFunction):
294         (JSObjectCopyPropertyNames):
295         * API/JSValue.mm:
296         (containerValueToObject):
297         * API/JSWrapperMap.mm:
298         (tryUnwrapObjcObject):
299
300 2013-11-19  Filip Pizlo  <fpizlo@apple.com>
301
302         Rename WatchpointSet::notifyWrite() should be renamed to WatchpointSet::fireAll()
303         https://bugs.webkit.org/show_bug.cgi?id=124609
304
305         Rubber stamped by Mark Lam.
306         
307         notifyWrite() is a thing that SymbolTable does. WatchpointSet uses that terminology
308         because it was original designed to match exactly SymbolTable's semantics. But now
309         it's a confusing term.
310
311         * bytecode/Watchpoint.cpp:
312         (JSC::WatchpointSet::fireAllSlow):
313         * bytecode/Watchpoint.h:
314         (JSC::WatchpointSet::fireAll):
315         (JSC::InlineWatchpointSet::fireAll):
316         * interpreter/Interpreter.cpp:
317         (JSC::Interpreter::execute):
318         * runtime/JSFunction.cpp:
319         (JSC::JSFunction::put):
320         (JSC::JSFunction::defineOwnProperty):
321         * runtime/JSGlobalObject.cpp:
322         (JSC::JSGlobalObject::haveABadTime):
323         * runtime/Structure.h:
324         (JSC::Structure::notifyTransitionFromThisStructure):
325         * runtime/SymbolTable.cpp:
326         (JSC::SymbolTableEntry::notifyWriteSlow):
327
328 2013-11-18  Michael Saboff  <msaboff@apple.com>
329
330         REGRESSION (r159395): Error compiling for ARMv7
331         https://bugs.webkit.org/show_bug.cgi?id=124552
332
333         Reviewed by Geoffrey Garen.
334
335         Fixed the implementation of branch8(RelationalCondition cond, AbsoluteAddress address, TrustedImm32 right)
336         to materialize and use address similar to other ARMv7 branchXX() functions.
337
338         * assembler/MacroAssemblerARMv7.h:
339         (JSC::MacroAssemblerARMv7::branch8):
340
341 2013-11-19  Mark Lam  <mark.lam@apple.com>
342
343         Add tracking of endColumn for Executables.
344         https://bugs.webkit.org/show_bug.cgi?id=124245.
345
346         Reviewed by Geoffrey Garen.
347
348         1. Fixed computation of columns to take into account the startColumn from
349            <script> tags. Previously, we were only computing the column relative
350            to the char after the <script> tag. Now, the column number that JSC
351            computes is always the column number you'll see when viewing the source
352            in a text editor (assuming the first column position is 1, not 0).
353
354         2. Previously, unlinkedExecutables kept the a base-1 startColumn for
355            ProgramExecutables and EvalExecutables, but uses base-0 columns for
356            FunctionExecutables. This has been fixed so that they all use base-0
357            columns. When the executable gets linked, the column is adjusted into
358            a base-1 value.
359
360         3. In the UnlinkedFunctionExecutable, renamed m_functionStartOffset to
361            m_unlinkedFunctionNameStart because it actually points to the start
362            column in the name part of the function declaration.
363
364            Similarly, renamed m_functionStartColumn to m_unlinkedBodyStartColumn
365            because it points to the first character in the function body. This is
366            usually '{' except for functions created from "global code" which
367            excludes its braces. See FunctionExecutable::fromGlobalCode().
368
369                The exclusion of braces for the global code case is needed so that
370            computed start and end columns will more readily map to what a JS
371            developer would expect them to be. Otherwise, the first column of the
372            function source will not be 1 (includes prepended characters added in
373            constructFunctionSkippingEvalEnabledCheck()).
374
375            Also, similarly, a m_unlinkedBodyEndColumn has been added to track the
376            end column of the UnlinkedFunctionExecutable.
377
378         4. For unlinked executables, end column values are either:
379            a. Relative to the start of the last line if (last line != first line).
380            b. Relative to the start column position if (last line == first line).
381
382            The second case is needed so that we can add an appropriate adjustment
383            to the end column value (just like we do for the start column) when we
384            link the executable.
385
386         5. This is not new to this patch, but it worth noting that the lineCount
387            values used through this patch has the following meaning:
388            - a lineCount of 0 means the source for this code block is on 1 line.
389            - a lineCount of N means there are N + l lines of source.
390
391            This interpretation is janky, but was present before this patch. We can
392            clean that up later in another patch.
393
394
395         * JavaScriptCore.xcodeproj/project.pbxproj:
396         - In order to implement WebCore::Internals::parserMetaData(), we need to
397           move some seemingly unrelated header files from the Project section to
398           the Private section so that they can be #include'd by the forwarding
399           CodeBlock.h from WebCore.
400         * bytecode/CodeBlock.cpp:
401         (JSC::CodeBlock::sourceCodeForTools):
402         (JSC::CodeBlock::CodeBlock):
403         * bytecode/UnlinkedCodeBlock.cpp:
404         (JSC::generateFunctionCodeBlock):
405         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
406         - m_isFromGlobalCode is needed to support the exclusion of the open brace /
407           prepended code for functions created from "global code".
408         (JSC::UnlinkedFunctionExecutable::link):
409         (JSC::UnlinkedFunctionExecutable::fromGlobalCode):
410         (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
411         * bytecode/UnlinkedCodeBlock.h:
412         (JSC::UnlinkedFunctionExecutable::create):
413         (JSC::UnlinkedFunctionExecutable::unlinkedFunctionNameStart):
414         (JSC::UnlinkedFunctionExecutable::unlinkedBodyStartColumn):
415         (JSC::UnlinkedFunctionExecutable::unlinkedBodyEndColumn):
416         (JSC::UnlinkedFunctionExecutable::recordParse):
417         (JSC::UnlinkedCodeBlock::recordParse):
418         (JSC::UnlinkedCodeBlock::endColumn):
419         * bytecompiler/NodesCodegen.cpp:
420         (JSC::FunctionBodyNode::emitBytecode):
421         * parser/ASTBuilder.h:
422         (JSC::ASTBuilder::createFunctionBody):
423         (JSC::ASTBuilder::setFunctionNameStart):
424         * parser/Lexer.cpp:
425         (JSC::::shiftLineTerminator):
426         - Removed an unused SourceCode Lexer<T>::sourceCode() function.
427         * parser/Lexer.h:
428         (JSC::Lexer::positionBeforeLastNewline):
429         (JSC::Lexer::prevTerminator):
430         - Added tracking of m_positionBeforeLastNewline in the Lexer to enable us
431           to exclude the close brace / appended code for functions created from "global
432           code".
433         * parser/Nodes.cpp:
434         (JSC::ProgramNode::ProgramNode):
435         (JSC::ProgramNode::create):
436         (JSC::EvalNode::EvalNode):
437         (JSC::EvalNode::create):
438         (JSC::FunctionBodyNode::FunctionBodyNode):
439         (JSC::FunctionBodyNode::create):
440         (JSC::FunctionBodyNode::setEndPosition):
441         - setEndPosition() is needed to fixed up the end position so that we can
442           exclude the close brace / appended code for functions created from "global
443           code".
444         * parser/Nodes.h:
445         (JSC::ProgramNode::startColumn):
446         (JSC::ProgramNode::endColumn):
447         (JSC::EvalNode::startColumn):
448         (JSC::EvalNode::endColumn):
449         (JSC::FunctionBodyNode::setFunctionNameStart):
450         (JSC::FunctionBodyNode::functionNameStart):
451         (JSC::FunctionBodyNode::endColumn):
452         * parser/Parser.cpp:
453         (JSC::::parseFunctionBody):
454         (JSC::::parseFunctionInfo):
455         * parser/Parser.h:
456         (JSC::Parser::positionBeforeLastNewline):
457         (JSC::::parse):
458         - Subtracted 1 from startColumn here to keep the node column values consistently
459           base-0. See note 2 above.
460         (JSC::parse):
461         * parser/SourceProviderCacheItem.h:
462         (JSC::SourceProviderCacheItem::SourceProviderCacheItem):
463         * parser/SyntaxChecker.h:
464         (JSC::SyntaxChecker::createFunctionBody):
465         (JSC::SyntaxChecker::setFunctionNameStart):
466         * runtime/CodeCache.cpp:
467         (JSC::CodeCache::getGlobalCodeBlock):
468         (JSC::CodeCache::getProgramCodeBlock):
469         (JSC::CodeCache::getEvalCodeBlock):
470         (JSC::CodeCache::getFunctionExecutableFromGlobalCode):
471         * runtime/CodeCache.h:
472         * runtime/Executable.cpp:
473         (JSC::ScriptExecutable::newCodeBlockFor):
474         (JSC::FunctionExecutable::FunctionExecutable):
475         (JSC::ProgramExecutable::initializeGlobalProperties):
476         (JSC::FunctionExecutable::fromGlobalCode):
477         * runtime/Executable.h:
478         (JSC::ExecutableBase::isEvalExecutable):
479         (JSC::ExecutableBase::isProgramExecutable):
480         (JSC::ScriptExecutable::ScriptExecutable):
481         (JSC::ScriptExecutable::endColumn):
482         (JSC::ScriptExecutable::recordParse):
483         (JSC::FunctionExecutable::create):
484         (JSC::FunctionExecutable::bodyIncludesBraces):
485         * runtime/FunctionConstructor.cpp:
486         (JSC::constructFunctionSkippingEvalEnabledCheck):
487         * runtime/FunctionPrototype.cpp:
488         (JSC::insertSemicolonIfNeeded):
489         (JSC::functionProtoFuncToString):
490         * runtime/JSGlobalObject.cpp:
491         (JSC::JSGlobalObject::createProgramCodeBlock):
492         (JSC::JSGlobalObject::createEvalCodeBlock):
493
494 2013-11-19  Dean Jackson  <dino@apple.com>
495
496         MarkedSpace::resumeAllocating needs to delay release
497         https://bugs.webkit.org/show_bug.cgi?id=124596
498
499         Reviewed by Geoffrey Garen.
500
501         * heap/MarkedSpace.cpp:
502         (JSC::MarkedSpace::resumeAllocating): Add DelayedReleaseScope protection.
503
504 2013-11-19  Mark Hahnenberg  <mhahnenberg@apple.com>
505
506         IncrementalSweeper needs to use DelayedReleaseScope too
507         https://bugs.webkit.org/show_bug.cgi?id=124558
508
509         Reviewed by Filip Pizlo.
510
511         It does sweeping too, so it needs to use it. Also refactored an
512         ASSERT that should have caught this sooner.
513
514         * heap/DelayedReleaseScope.h:
515         (JSC::DelayedReleaseScope::isInEffectFor):
516         * heap/IncrementalSweeper.cpp:
517         (JSC::IncrementalSweeper::doSweep):
518         * heap/MarkedBlock.cpp:
519         (JSC::MarkedBlock::sweep):
520         * heap/MarkedSpace.cpp:
521         (JSC::MarkedSpace::sweep):
522
523 2013-11-18  Michael Saboff  <msaboff@apple.com>
524
525         ARM64 CRASH: Debug builds crash in emitPointerValidation()
526         https://bugs.webkit.org/show_bug.cgi?id=124545
527
528         Reviewed by Filip Pizlo.
529
530         Changed emitPointerValidation() to use pushToSave() and popToRestore() as
531         all macro assemblers have an implementation of these functions.
532
533         * jit/ThunkGenerators.cpp:
534         (JSC::emitPointerValidation):
535
536 2013-11-18  Michael Saboff  <msaboff@apple.com>
537
538         ARM64: Update getHostCallReturnValue() to use architected frame pointer register
539         https://bugs.webkit.org/show_bug.cgi?id=124520
540
541         Reviewed by Filip Pizlo.
542
543         Changed from using the prior JSC specific x25 callframe register to the ARM64
544         architected x29 (fp) register.  This change should have been done as part of
545         https://bugs.webkit.org/show_bug.cgi?id=123956.
546
547         * jit/JITOperations.cpp:
548
549 2013-11-18  Filip Pizlo  <fpizlo@apple.com>
550
551         put_to_scope[5] should not point to the structure if it's a variable access, but it should point to the WatchpointSet
552         https://bugs.webkit.org/show_bug.cgi?id=124539
553
554         Reviewed by Mark Hahnenberg.
555         
556         This is in preparation for getting put_to_scope to directly invalidate the watchpoint set
557         on stores, which will allow us to run constant inference on all globals.
558
559         * bytecode/CodeBlock.cpp:
560         (JSC::CodeBlock::CodeBlock):
561         (JSC::CodeBlock::finalizeUnconditionally):
562         * bytecode/Instruction.h:
563         * dfg/DFGByteCodeParser.cpp:
564         (JSC::DFG::ByteCodeParser::parseBlock):
565         * runtime/JSScope.cpp:
566         (JSC::abstractAccess):
567         (JSC::JSScope::abstractResolve):
568         * runtime/JSScope.h:
569         (JSC::ResolveOp::ResolveOp):
570         * runtime/SymbolTable.h:
571         (JSC::SymbolTableEntry::watchpointSet):
572
573 2013-11-18  Mark Hahnenberg  <mhahnenberg@apple.com>
574
575         APIEntryShims need some love
576         https://bugs.webkit.org/show_bug.cgi?id=124540
577
578         Reviewed by Filip Pizlo.
579
580         We were missing them in key places which some other hacking revealed. These could have manifested as
581         race conditions for VMs being used in multithreaded environments.
582
583         * API/JSContext.mm:
584         (-[JSContext setException:]):
585         (-[JSContext wrapperForObjCObject:]):
586         (-[JSContext wrapperForJSObject:]):
587         * API/JSContextRef.cpp:
588         (JSContextGroupRelease):
589         (JSGlobalContextRelease):
590         * API/JSManagedValue.mm:
591         (-[JSManagedValue initWithValue:]):
592         (-[JSManagedValue value]):
593         * API/JSObjectRef.cpp:
594         (JSObjectIsFunction):
595         (JSObjectCopyPropertyNames):
596         * API/JSValue.mm:
597         (containerValueToObject):
598         * API/JSWrapperMap.mm:
599         (tryUnwrapObjcObject):
600
601 2013-11-18  Filip Pizlo  <fpizlo@apple.com>
602
603         Allow the FTL debug dumps to include the new size field
604         https://bugs.webkit.org/show_bug.cgi?id=124479
605
606         Reviewed by Mark Hahnenberg.
607
608         * ftl/FTLStackMaps.cpp:
609         (JSC::FTL::StackMaps::Location::parse):
610         (JSC::FTL::StackMaps::Location::dump):
611         * ftl/FTLStackMaps.h:
612
613 2013-11-18  peavo@outlook.com  <peavo@outlook.com>
614
615         [Win] Link fails when DFG JIT is enabled.
616         https://bugs.webkit.org/show_bug.cgi?id=123614
617
618         Reviewed by Brent Fulgham.
619
620         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: Added new files.
621         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters: Ditto.
622
623 2013-11-18  Julien Brianceau  <jbriance@cisco.com>
624
625         [sh4] Add missing implementation in MacroAssembler to fix build (broken since r159395).
626         https://bugs.webkit.org/show_bug.cgi?id=124484
627
628         Reviewed by Michael Saboff.
629
630         * assembler/MacroAssemblerSH4.h:
631         (JSC::MacroAssemblerSH4::load8):
632         (JSC::MacroAssemblerSH4::branch8):
633
634 2013-11-18  Michael Saboff  <msaboff@apple.com>
635
636         ARM64 CRASH: Improper offset in getHostCallReturnValue() to access callerFrame in CallFrame
637         https://bugs.webkit.org/show_bug.cgi?id=124481
638
639         Reviewed by Mark Lam.
640
641         Fixed the offset to access CallerFrame in the ARM64 version of getHostCallReturnValue() to be 0
642         to correspond with the change in CallFrame layout done in r158315.
643
644         * jit/JITOperations.cpp:
645
646 2013-11-18  Michael Saboff  <msaboff@apple.com>
647
648         Crash in virtualForThunkGenerator generated code on ARM64
649         https://bugs.webkit.org/show_bug.cgi?id=124447
650
651         Reviewed by Geoffrey Garen.
652
653         The baseline JIT generates slow path call code with the caller in regT0.  The DFG
654         generates call code with the caller in nonArgGPR0.  The virtualForThunkGenerator
655         generates code with the caller in nonArgGPR0.  For X86 and X86_64, regT0 and nonArgGPR0
656         are the same CPU register, eax.  For other platforms this isn't the case.  The same
657         issue exists for JSVALUE32_64 ports as well, where there also is an issue with the callee
658         tag registers being regT1 and nonArgGPR1 in the various locations.
659
660         Changed nonArgGPR0, nonArgGPR1 and nonArgGPR2 for X86 and X86_64 to not match up with
661         regT0-2.  Changing these registers will cause a crash on all ports should we have a
662         similar problem in the future.  Changed the DFG call generating code to use regT0 and
663         regT1.  Now all slow path call code is generated using regT0 and for JSVALUE32_64 regT1.
664         Added r12 to X86_64 as a new temp register (regT9) and moved r13 down to regT10.
665         The new temp register decreases the likelihood of inadvertant register overlap.
666
667         * dfg/DFGSpeculativeJIT32_64.cpp:
668         (JSC::DFG::SpeculativeJIT::emitCall):
669         * dfg/DFGSpeculativeJIT64.cpp:
670         (JSC::DFG::SpeculativeJIT::emitCall):
671         * jit/GPRInfo.h:
672         (JSC::GPRInfo::toRegister):
673         (JSC::GPRInfo::toIndex):
674         * jit/ThunkGenerators.cpp:
675         (JSC::virtualForThunkGenerator):
676
677 2013-11-18  Balazs Kilvady  <kilvadyb@homejinni.com>
678
679         Add missing load8/branch8 with AbsoluteAddress parameter to MIPS port.
680
681         [MIPS] Build fails since r159395.
682         https://bugs.webkit.org/show_bug.cgi?id=124491
683
684         Reviewed by Michael Saboff.
685
686         * assembler/MacroAssemblerMIPS.h:
687         (JSC::MacroAssemblerMIPS::load8):
688         (JSC::MacroAssemblerMIPS::branch8):
689
690 2013-11-18  Csaba Osztrogonác  <ossy@webkit.org>
691
692         REGRESSION(r159351): It made zillion tests assert on !CF platforms
693         https://bugs.webkit.org/show_bug.cgi?id=124490
694
695         Reviewed by Mark Hahnenberg.
696
697         * heap/MarkedSpace.cpp:
698         (JSC::MarkedSpace::sweep):
699
700 2013-11-18  Julien Brianceau  <jbriance@cisco.com>
701
702         Remove architecture specific code in LowLevelInterpreter.
703         https://bugs.webkit.org/show_bug.cgi?id=124501
704
705         Reviewed by Michael Saboff.
706
707         * llint/LowLevelInterpreter.asm: Use generic path instead of sh4 specific code.
708         * llint/LowLevelInterpreter32_64.asm: Merge sh4/mips path with arm path. The
709         "move t0, a0" is not needed for arm because t0 == a0 with this architecture.
710         * offlineasm/sh4.rb: Handle move opcode with pr register.
711
712 2013-11-18  Julien Brianceau  <jbriance@cisco.com>
713
714         [arm] Add missing implementation in MacroAssembler to fix build (broken since r159395).
715         https://bugs.webkit.org/show_bug.cgi?id=124488
716
717         Reviewed by Zoltan Herczeg.
718
719         * assembler/MacroAssemblerARM.h:
720         (JSC::MacroAssemblerARM::branch8):
721
722 2013-11-17  Julien Brianceau  <jbriance@cisco.com>
723
724         [sh4] Fix revertJumpReplacementToBranchPtrWithPatch in MacroAssembler.
725         https://bugs.webkit.org/show_bug.cgi?id=124468
726
727         Reviewed by Michael Saboff.
728
729         Current implementation of revertJumpReplacementToBranchPtrWithPatch is wrong in
730         the sh4 MacroAssembler part, leading to random instabilities. This patch fixes it
731         and also renames the bad-named revertJumpToMove to revertJumpReplacementToBranchPtrWithPatch
732         in the SH4Assembler.
733
734         * assembler/MacroAssemblerSH4.h:
735         (JSC::MacroAssemblerSH4::revertJumpReplacementToBranchPtrWithPatch):
736         * assembler/SH4Assembler.h:
737         (JSC::SH4Assembler::replaceWithJump):
738         (JSC::SH4Assembler::revertJumpReplacementToBranchPtrWithPatch):
739
740 2013-11-16  Filip Pizlo  <fpizlo@apple.com>
741
742         Simplify WatchpointSet state tracking
743         https://bugs.webkit.org/show_bug.cgi?id=124465
744
745         Reviewed by Sam Weinig.
746         
747         We previously represented the state of watchpoint sets using two booleans. But that
748         makes it awkward to case over the state.
749         
750         We also previously supported a watchpoint set being both watched and invalidated. We
751         never used that capability, and its presence was just purely confusing.
752         
753         This turns the whole thing into an enum.
754
755         * assembler/MacroAssemblerARM64.h:
756         (JSC::MacroAssemblerARM64::branch8):
757         * assembler/MacroAssemblerARMv7.h:
758         (JSC::MacroAssemblerARMv7::branch8):
759         * assembler/MacroAssemblerX86.h:
760         (JSC::MacroAssemblerX86::branch8):
761         * assembler/MacroAssemblerX86_64.h:
762         (JSC::MacroAssemblerX86_64::branch8):
763         * bytecode/Watchpoint.cpp:
764         (JSC::WatchpointSet::WatchpointSet):
765         (JSC::WatchpointSet::add):
766         (JSC::WatchpointSet::notifyWriteSlow):
767         (JSC::InlineWatchpointSet::inflateSlow):
768         * bytecode/Watchpoint.h:
769         (JSC::WatchpointSet::state):
770         (JSC::WatchpointSet::isStillValid):
771         (JSC::WatchpointSet::startWatching):
772         (JSC::WatchpointSet::notifyWrite):
773         (JSC::WatchpointSet::addressOfState):
774         (JSC::InlineWatchpointSet::InlineWatchpointSet):
775         (JSC::InlineWatchpointSet::hasBeenInvalidated):
776         (JSC::InlineWatchpointSet::startWatching):
777         (JSC::InlineWatchpointSet::notifyWrite):
778         (JSC::InlineWatchpointSet::decodeState):
779         (JSC::InlineWatchpointSet::encodeState):
780         * jit/JITPropertyAccess.cpp:
781         (JSC::JIT::emitVarInjectionCheck):
782         * jit/JITPropertyAccess32_64.cpp:
783         (JSC::JIT::emitVarInjectionCheck):
784         * llint/LowLevelInterpreter.asm:
785         * llint/LowLevelInterpreter32_64.asm:
786         * llint/LowLevelInterpreter64.asm:
787         * runtime/JSFunction.cpp:
788         (JSC::JSFunction::JSFunction):
789         * runtime/JSFunctionInlines.h:
790         (JSC::JSFunction::JSFunction):
791         * runtime/JSGlobalObject.cpp:
792         (JSC::JSGlobalObject::JSGlobalObject):
793         * runtime/Structure.cpp:
794         (JSC::Structure::Structure):
795         * runtime/SymbolTable.cpp:
796         (JSC::SymbolTableEntry::attemptToWatch):
797         * runtime/SymbolTable.h:
798
799 2013-11-16  Filip Pizlo  <fpizlo@apple.com>
800
801         FTL should have an explicit notion of bytecode liveness
802         https://bugs.webkit.org/show_bug.cgi?id=124181
803
804         Reviewed by Sam Weinig.
805         
806         This makes FTL OSR exit use bytecode liveness analysis to determine which variables
807         to include values for. The decision of how to get the values of variables is based on
808         forward propagation of MovHints and SetLocals.
809         
810         This fixes a bunch of bugs (like https://bugs.webkit.org/show_bug.cgi?id=124138 but
811         also others that I noticed when I started writing more targetted tests) and allows us
812         to remove some sketchy code.
813
814         * CMakeLists.txt:
815         * GNUmakefile.list.am:
816         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
817         * JavaScriptCore.xcodeproj/project.pbxproj:
818         * bytecode/BytecodeBasicBlock.h:
819         * bytecode/BytecodeLivenessAnalysis.cpp:
820         (JSC::isValidRegisterForLiveness):
821         (JSC::setForOperand):
822         (JSC::computeUsesForBytecodeOffset):
823         (JSC::computeDefsForBytecodeOffset):
824         (JSC::stepOverInstruction):
825         (JSC::computeLocalLivenessForBytecodeOffset):
826         (JSC::BytecodeLivenessAnalysis::runLivenessFixpoint):
827         (JSC::BytecodeLivenessAnalysis::operandIsLiveAtBytecodeOffset):
828         (JSC::getLivenessInfo):
829         (JSC::BytecodeLivenessAnalysis::getLivenessInfoAtBytecodeOffset):
830         (JSC::BytecodeLivenessAnalysis::computeFullLiveness):
831         * bytecode/BytecodeLivenessAnalysis.h:
832         * bytecode/BytecodeLivenessAnalysisInlines.h: Added.
833         (JSC::operandIsAlwaysLive):
834         (JSC::operandThatIsNotAlwaysLiveIsLive):
835         (JSC::operandIsLive):
836         * bytecode/CodeBlock.h:
837         (JSC::CodeBlock::captureCount):
838         (JSC::CodeBlock::captureStart):
839         (JSC::CodeBlock::captureEnd):
840         * bytecode/CodeOrigin.cpp:
841         (JSC::InlineCallFrame::dumpInContext):
842         * bytecode/FullBytecodeLiveness.h: Added.
843         (JSC::FullBytecodeLiveness::FullBytecodeLiveness):
844         (JSC::FullBytecodeLiveness::getOut):
845         (JSC::FullBytecodeLiveness::operandIsLive):
846         (JSC::FullBytecodeLiveness::getLiveness):
847         * dfg/DFGAvailability.cpp: Added.
848         (JSC::DFG::Availability::dump):
849         (JSC::DFG::Availability::dumpInContext):
850         * dfg/DFGAvailability.h: Added.
851         (JSC::DFG::Availability::Availability):
852         (JSC::DFG::Availability::unavailable):
853         (JSC::DFG::Availability::withFlush):
854         (JSC::DFG::Availability::withNode):
855         (JSC::DFG::Availability::withUnavailableNode):
856         (JSC::DFG::Availability::nodeIsUndecided):
857         (JSC::DFG::Availability::nodeIsUnavailable):
858         (JSC::DFG::Availability::hasNode):
859         (JSC::DFG::Availability::node):
860         (JSC::DFG::Availability::flushedAt):
861         (JSC::DFG::Availability::operator!):
862         (JSC::DFG::Availability::operator==):
863         (JSC::DFG::Availability::merge):
864         (JSC::DFG::Availability::mergeNodes):
865         (JSC::DFG::Availability::unavailableMarker):
866         * dfg/DFGBasicBlock.h:
867         * dfg/DFGByteCodeParser.cpp:
868         (JSC::DFG::ByteCodeParser::parseBlock):
869         * dfg/DFGDisassembler.cpp:
870         (JSC::DFG::Disassembler::Disassembler):
871         * dfg/DFGFlushFormat.cpp:
872         (WTF::printInternal):
873         * dfg/DFGFlushFormat.h:
874         (JSC::DFG::resultFor):
875         (JSC::DFG::useKindFor):
876         (JSC::DFG::dataFormatFor):
877         * dfg/DFGFlushedAt.cpp:
878         (JSC::DFG::FlushedAt::dump):
879         * dfg/DFGFlushedAt.h:
880         (JSC::DFG::FlushedAt::FlushedAt):
881         (JSC::DFG::FlushedAt::merge):
882         * dfg/DFGGraph.cpp:
883         (JSC::DFG::Graph::dump):
884         (JSC::DFG::Graph::livenessFor):
885         (JSC::DFG::Graph::isLiveInBytecode):
886         * dfg/DFGGraph.h:
887         (JSC::DFG::Graph::baselineCodeBlockFor):
888         * dfg/DFGOSRAvailabilityAnalysisPhase.cpp:
889         (JSC::DFG::OSRAvailabilityAnalysisPhase::run):
890         * dfg/DFGOSRAvailabilityAnalysisPhase.h:
891         * dfg/DFGPlan.cpp:
892         (JSC::DFG::Plan::compileInThreadImpl):
893         * dfg/DFGResurrectionForValidationPhase.cpp: Added.
894         (JSC::DFG::ResurrectionForValidationPhase::ResurrectionForValidationPhase):
895         (JSC::DFG::ResurrectionForValidationPhase::run):
896         (JSC::DFG::performResurrectionForValidation):
897         * dfg/DFGResurrectionForValidationPhase.h: Added.
898         * dfg/DFGSSAConversionPhase.cpp:
899         (JSC::DFG::SSAConversionPhase::run):
900         * dfg/DFGValueSource.h:
901         (JSC::DFG::ValueSource::forFlushFormat):
902         * dfg/DFGVariableAccessData.h:
903         * ftl/FTLExitValue.cpp:
904         (JSC::FTL::ExitValue::dumpInContext):
905         * ftl/FTLInlineCacheSize.cpp:
906         (JSC::FTL::sizeOfGetById):
907         * ftl/FTLLocation.cpp:
908         (JSC::FTL::Location::gpr):
909         (JSC::FTL::Location::fpr):
910         (JSC::FTL::Location::directGPR):
911         * ftl/FTLLowerDFGToLLVM.cpp:
912         (JSC::FTL::LowerDFGToLLVM::LowerDFGToLLVM):
913         (JSC::FTL::LowerDFGToLLVM::compileBlock):
914         (JSC::FTL::LowerDFGToLLVM::compileNode):
915         (JSC::FTL::LowerDFGToLLVM::compileSetLocal):
916         (JSC::FTL::LowerDFGToLLVM::compileZombieHint):
917         (JSC::FTL::LowerDFGToLLVM::compilePutById):
918         (JSC::FTL::LowerDFGToLLVM::compileInvalidationPoint):
919         (JSC::FTL::LowerDFGToLLVM::initializeOSRExitStateForBlock):
920         (JSC::FTL::LowerDFGToLLVM::appendOSRExit):
921         (JSC::FTL::LowerDFGToLLVM::emitOSRExitCall):
922         (JSC::FTL::LowerDFGToLLVM::buildExitArguments):
923         (JSC::FTL::LowerDFGToLLVM::addExitArgumentForNode):
924         (JSC::FTL::LowerDFGToLLVM::observeMovHint):
925         * ftl/FTLOutput.h:
926         (JSC::FTL::Output::alloca):
927         * ftl/FTLValueSource.cpp: Removed.
928         * ftl/FTLValueSource.h: Removed.
929         * llvm/LLVMAPIFunctions.h:
930         * runtime/DumpContext.cpp:
931         (JSC::DumpContext::DumpContext):
932         * runtime/DumpContext.h:
933         * runtime/Options.h:
934         * runtime/SymbolTable.h:
935         (JSC::SharedSymbolTable::captureStart):
936         (JSC::SharedSymbolTable::captureEnd):
937         (JSC::SharedSymbolTable::captureCount):
938
939 2013-11-16  Filip Pizlo  <fpizlo@apple.com>
940
941         Fix indentation of JSActivation.h.
942
943         Rubber stamped by Mark Hahnenberg.
944
945         * runtime/JSActivation.h:
946
947 2013-11-16  Filip Pizlo  <fpizlo@apple.com>
948
949         Fix indentation of JSVariableObject.h.
950
951         Rubber stamped by Mark Hahnenberg.
952         
953         I'm about to do some damage to this file. I wanted to give it some sanity first.
954
955         * runtime/JSVariableObject.h:
956
957 2013-11-16  Julien Brianceau  <jbriance@cisco.com>
958
959         [sh4] Fix build (broken since r159346).
960         https://bugs.webkit.org/show_bug.cgi?id=124455
961
962         Reviewed by Oliver Hunt.
963
964         Fix LLINT implementation for sh4 architecture to handle properly load and store operations with pr register.
965
966         * offlineasm/sh4.rb:
967
968 2013-11-15  Alexey Proskuryakov  <ap@apple.com>
969
970         Support exporting symmetric keys as JWK
971         https://bugs.webkit.org/show_bug.cgi?id=124442
972
973         Reviewed by Sam Weinig.
974
975         * runtime/JSONObject.h: Export JSONStringify.
976
977 2013-11-15  peavo@outlook.com  <peavo@outlook.com>
978
979         [Win] JavaScript crashes on 64-bit with JIT enabled.
980         https://bugs.webkit.org/show_bug.cgi?id=124409
981
982         Reviewed by Michael Saboff.
983
984         These are issues found with JIT on 64-bit:
985         - The registers rsi and rdi in callToJavaScript needs to be saved and restored. This is required by the Windows 64-bit ABI.
986         - The getHostCallReturnValue function needs to be updated according to it's GCC counterpart.
987         - The poke argument offset needs to be 20h, because Windows 64-bit ABI requires stack space allocated for the 4 argument registers.
988
989         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: Re-added JITStubsMSVC64.asm to project.
990         * jit/CCallHelpers.h: Set poke argument offset.
991         (JSC::CCallHelpers::setupArguments): Compile fix, added needed method.
992         * jit/JITStubsMSVC64.asm: Save and restore registers rsi and rdi.
993                                   Update getHostCallReturnValue according to the GCC version.
994
995 2013-11-14  David Farler  <dfarler@apple.com>
996
997         Copy ASAN flag settings to WebCore and JavaScriptCore intermediate build tools
998         https://bugs.webkit.org/show_bug.cgi?id=124362
999
1000         Reviewed by David Kilzer.
1001
1002         * Configurations/ToolExecutable.xcconfig:
1003         Use ASAN_C*FLAGS.
1004
1005 2013-11-15  Mark Hahnenberg  <mhahnenberg@apple.com>
1006
1007         Remove JSChunk
1008         https://bugs.webkit.org/show_bug.cgi?id=124435
1009
1010         Reviewed by Geoffrey Garen.
1011
1012         It's empty and has been since it was added 3 years ago.
1013
1014         * CMakeLists.txt:
1015         * runtime/JSChunk.cpp: Removed.
1016         * runtime/JSChunk.h: Removed.
1017
1018 2013-11-15  Mark Hahnenberg  <mhahnenberg@apple.com>
1019
1020         Remove VTableSpectrum
1021         https://bugs.webkit.org/show_bug.cgi?id=124427
1022
1023         Reviewed by Filip Pizlo.
1024
1025         * CMakeLists.txt:
1026         * GNUmakefile.list.am:
1027         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1028         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
1029         * JavaScriptCore.xcodeproj/project.pbxproj:
1030         * heap/Heap.cpp:
1031         (JSC::Heap::lastChanceToFinalize):
1032         * heap/Heap.h:
1033         * heap/MarkedBlock.cpp:
1034         (JSC::MarkedBlock::callDestructor):
1035         * heap/SlotVisitor.cpp:
1036         (JSC::visitChildren):
1037         * heap/SlotVisitor.h:
1038         * heap/VTableSpectrum.cpp: Removed.
1039         * heap/VTableSpectrum.h: Removed.
1040
1041 2013-11-14  Mark Hahnenberg  <mhahnenberg@apple.com>
1042
1043         -dealloc callbacks from wrapped Objective-C objects can happen at bad times
1044         https://bugs.webkit.org/show_bug.cgi?id=123821
1045
1046         Reviewed by Darin Adler.
1047
1048         Currently with the JSC Obj-C API, JS wrappers for client Obj-C objects retain their associated Obj-C 
1049         object. When they are swept, they release their Obj-C objects which can trigger a call to that 
1050         object's -dealloc method. These -dealloc methods can then call back into the same VM, which is not 
1051         allowed during sweeping or VM shutdown.
1052
1053         We can handle this case by creating our own pool of Obj-C objects to be released when it is safe to do so.
1054         This is accomplished by using DelayedReleaseScope, an RAII-style object that will retain all objects
1055         that are unsafe to release until the end of the DelayedReleaseScope.
1056
1057         * API/APIShims.h:
1058         (JSC::APICallbackShim::APICallbackShim):
1059         (JSC::APICallbackShim::vmForDropAllLocks):
1060         (JSC::APICallbackShim::execForDropAllLocks):
1061         * API/JSAPIWrapperObject.mm:
1062         (JSAPIWrapperObjectHandleOwner::finalize):
1063         * API/ObjCCallbackFunction.mm:
1064         (JSC::ObjCCallbackFunctionImpl::destroy):
1065         (JSC::ObjCCallbackFunction::destroy):
1066         * API/tests/testapi.mm:
1067         (-[TinyDOMNode initWithVirtualMachine:]):
1068         (-[TinyDOMNode dealloc]):
1069         (-[TinyDOMNode appendChild:]):
1070         (-[TinyDOMNode removeChildAtIndex:]):
1071         (-[EvilAllocationObject initWithContext:]):
1072         (-[EvilAllocationObject dealloc]):
1073         (-[EvilAllocationObject doEvilThingsWithContext:]):
1074         * JavaScriptCore.xcodeproj/project.pbxproj:
1075         * heap/DelayedReleaseScope.h: Added.
1076         (JSC::DelayedReleaseScope::DelayedReleaseScope):
1077         (JSC::DelayedReleaseScope::~DelayedReleaseScope):
1078         (JSC::DelayedReleaseScope::releaseSoon):
1079         (JSC::MarkedSpace::releaseSoon):
1080         * heap/Heap.cpp:
1081         (JSC::Heap::collectAllGarbage):
1082         * heap/Heap.h:
1083         (JSC::Heap::releaseSoon):
1084         * heap/MarkedAllocator.cpp:
1085         (JSC::MarkedAllocator::allocateSlowCase):
1086         * heap/MarkedSpace.cpp:
1087         (JSC::MarkedSpace::MarkedSpace):
1088         (JSC::MarkedSpace::lastChanceToFinalize):
1089         (JSC::MarkedSpace::sweep):
1090         * heap/MarkedSpace.h:
1091
1092 2013-11-15  Michael Saboff  <msaboff@apple.com>
1093
1094         REGRESSION (r158586): callToJavaScript needs to save return PC to Sentinel frame
1095         https://bugs.webkit.org/show_bug.cgi?id=124420
1096
1097         Reviewed by Filip Pizlo.
1098
1099         Save the return PC into the sentinel frame.
1100
1101         * jit/JITStubsMSVC64.asm:
1102         * jit/JITStubsX86.h:
1103         * llint/LowLevelInterpreter32_64.asm:
1104         * llint/LowLevelInterpreter64.asm:
1105
1106 2013-11-14  Oliver Hunt  <oliver@apple.com>
1107
1108         Make CLoop easier to build, and make it work
1109         https://bugs.webkit.org/show_bug.cgi?id=124359
1110
1111         Reviewed by Geoffrey Garen.
1112
1113         Add --cloop to build-jsc, build-webkit and friends.
1114
1115         Also make CLoop build and work again - This meant adding a
1116         couple of missing ENABLE(DFG_JIT) blocks, and fixing a few 
1117         other references.
1118
1119         * Configurations/FeatureDefines.xcconfig:
1120         * bytecode/BytecodeLivenessAnalysis.cpp:
1121         (JSC::computeUsesForBytecodeOffset):
1122         (JSC::computeDefsForBytecodeOffset):
1123         * bytecode/DFGExitProfile.cpp:
1124         * dfg/DFGCapabilities.cpp:
1125         * dfg/DFGCompilationKey.cpp:
1126         * dfg/DFGCompilationMode.cpp:
1127         * jit/JITExceptions.cpp:
1128         (JSC::genericUnwind):
1129
1130 2013-11-14  Michael Saboff  <msaboff@apple.com>
1131
1132         REGRESSION (r159276): Fix lots of crashes for arm_traditional architecture.
1133         https://bugs.webkit.org/show_bug.cgi?id=124365
1134
1135         Reviewed by Oliver Hunt.
1136
1137         Crashes were caused by a mixup between regular registers and temporary registers in ARM_EXTRA_GPRS.
1138
1139         * llint/LowLevelInterpreter32_64.asm: Warning, t3 != a3. It's safer to use an implementation using aX
1140         registers like the MIPS one for cCallX macros.
1141         * offlineasm/arm.rb: Rearrange ARM_EXTRA_GPRS according to the new register distribution in LLINT.
1142
1143 2013-11-14  Michael Saboff  <msaboff@apple.com>
1144
1145         REGRESSION (r159276): rbp register overwritten in Win 64 version of callToJavascript stub
1146         https://bugs.webkit.org/show_bug.cgi?id=124361
1147
1148         Reviewed by Oliver Hunt.
1149
1150         Swapped operand ordering to: mov rax, rbp
1151
1152         * jit/JITStubsMSVC64.asm:
1153
1154 2013-11-14  Julien Brianceau  <jbriance@cisco.com>
1155
1156         REGRESSION (r159276): Fix lots of crashes for sh4 architecture.
1157         https://bugs.webkit.org/show_bug.cgi?id=124347
1158
1159         Reviewed by Michael Saboff.
1160
1161         Since r159276, we have (t4 == a0 == r4) and (t5 == a1 == r5) in LLINT for sh4.
1162         This leads to argument register trampling in cCallX macros, especially with cCall2
1163         macro when arg1 == t4.
1164
1165         * llint/LowLevelInterpreter32_64.asm: Use a new "setargs" pseudo-op to setup arguments for sh4.
1166         * offlineasm/instructions.rb:
1167         * offlineasm/sh4.rb: Lower "setargs" pseudo-op to setup argument registers and prevent register trampling issues.
1168
1169 2013-11-14  Julien Brianceau  <jbriance@cisco.com>
1170
1171         Fix build for sh4 architectures (broken since r159276).
1172         https://bugs.webkit.org/show_bug.cgi?id=124344
1173
1174         Reviewed by Csaba Osztrogonác.
1175
1176         * offlineasm/sh4.rb: There is no fp alias for r14 register for sh4.
1177
1178 2013-11-13  Michael Saboff  <msaboff@apple.com>
1179
1180         Change callToJavaScript thunk into an offline assembled stub
1181         https://bugs.webkit.org/show_bug.cgi?id=124251
1182
1183         Reviewed by Geoffrey Garen.
1184
1185         Changed callToJavaScript and throwNotCaught into stubs generated by the offline assembler.
1186         Added popCalleeSaves and pushCalleeSaves pseudo ops to the offline assembler to handle
1187         the saving and restoring of callee save registers.  Fixed callFrameRegister differences
1188         between arm traditional (r11) and arm Thumb2 (r7) in GPRInfo.h.  Also fixed implementation
1189         of pop & push in arm.rb.
1190
1191         Since the offline assembler and therefore the LLInt don't work on Windows, the Windows stubs
1192         are handled as inline assembly in JITStubsX86.h and JITStubsMSVC64.asm.
1193
1194         * dfg/DFGDriver.cpp:
1195         (JSC::DFG::compileImpl):
1196         * jit/GPRInfo.h:
1197         (JSC::GPRInfo::toIndex):
1198         (JSC::GPRInfo::debugName):
1199         * jit/JITCode.cpp:
1200         (JSC::JITCode::execute):
1201         * jit/JITExceptions.cpp:
1202         (JSC::genericUnwind):
1203         * jit/JITStubs.h:
1204         * jit/JITStubsMSVC64.asm:
1205         * jit/JITStubsX86.h:
1206         * jit/ThunkGenerators.cpp:
1207         * jit/ThunkGenerators.h:
1208         * llint/LLIntThunks.h:
1209         * llint/LowLevelInterpreter.asm:
1210         * llint/LowLevelInterpreter32_64.asm:
1211         * llint/LowLevelInterpreter64.asm:
1212         * offlineasm/arm.rb:
1213         * offlineasm/arm64.rb:
1214         * offlineasm/instructions.rb:
1215         * offlineasm/mips.rb:
1216         * offlineasm/registers.rb:
1217         * offlineasm/sh4.rb:
1218         * offlineasm/x86.rb:
1219         * runtime/VM.cpp:
1220         (JSC::VM::VM):
1221         * runtime/VM.h:
1222
1223 2013-11-13  Andy Estes  <aestes@apple.com>
1224
1225         Fix the ARM64 build after recent JavaScriptCore changes
1226         https://bugs.webkit.org/show_bug.cgi?id=124315
1227
1228         Reviewed by Michael Saboff.
1229
1230         Based on patches by myself, Filip Pizlo, Benjamin Poulain, and Michael Saboff.
1231
1232         * Configurations/JavaScriptCore.xcconfig: Hid the symbol for
1233         std::bad_function_call.
1234         * JavaScriptCore.xcodeproj/project.pbxproj: Marked
1235         MacroAssemblerARM64.h and ARM64Assembler.h as Private headers.
1236         * assembler/ARM64Assembler.h:
1237         (JSC::ARM64Assembler::executableOffsetFor):
1238         * assembler/MacroAssemblerARM64.h: Removed ARM64's executableCopy(),
1239         which was removed from other assembler backends in r157690.
1240         (JSC::MacroAssemblerARM64::shouldBlindForSpecificArch): Added.
1241         (JSC::MacroAssemblerARM64::lshift64): Added.
1242         (JSC::MacroAssemblerARM64::mul64): Added.
1243         (JSC::MacroAssemblerARM64::rshift64): Added.
1244         (JSC::MacroAssemblerARM64::convertInt64ToDouble): Added.
1245         (JSC::MacroAssemblerARM64::branchMul64): Added.
1246         (JSC::MacroAssemblerARM64::branchNeg64): Added.
1247         (JSC::MacroAssemblerARM64::scratchRegisterForBlinding): Added.
1248         * dfg/DFGSpeculativeJIT.cpp:
1249         (JSC::DFG::SpeculativeJIT::compileArithDiv): Changed
1250         SpeculateIntegerOperand to SpeculateInt32Operand,
1251         nodeCanIgnoreNegativeZero() to bytecodeCanIgnoreNegativeZero(), and
1252         nodeUsedAsNumber() to bytecodeUsesAsNumber().
1253         (JSC::DFG::SpeculativeJIT::compileArithMod): Changed
1254         nodeCanIgnoreNegativeZero() to bytecodeCanIgnoreNegativeZero().
1255
1256 2013-11-13  Oliver Hunt  <oliver@apple.com>
1257
1258         Fix debug build.
1259
1260         * parser/Parser.cpp:
1261
1262 2013-11-13  Tim Horton  <timothy_horton@apple.com>
1263
1264         r159210 added a period where there previously wasn't one, breaking >100 tests
1265
1266         Rubber-stamped by Oliver Hunt.
1267
1268         * parser/Parser.cpp:
1269         (JSC::::logError):
1270         Remove the extra period.
1271
1272 2013-11-13  Oliver Hunt  <oliver@apple.com>
1273
1274         REGRESSION (r158014): Many webpages throw stack overflow exceptions on iOS (because Parser::parseMemberExpression uses ~130K more stack)
1275         https://bugs.webkit.org/show_bug.cgi?id=124177
1276
1277         Reviewed by Michael Saboff.
1278
1279         This patch pushes error handling into NEVER_INLINE functions to perform
1280         the actual error message construction.  This dramatically reduces the
1281         stack usage of the Parser.  For the large functions (such as parseMemberExpression)
1282         the improvement is on the order of 2.5x reduction in stack usage.  For
1283         smaller functions the reduction is in the order of 5-6x.
1284
1285         * parser/Parser.cpp:
1286         (JSC::::logError):
1287         * parser/Parser.h:
1288
1289 2013-11-13  Julien Brianceau  <jbriance@cisco.com>
1290
1291         [sh4] Protect repatchCompact from flushConstantPool.
1292         https://bugs.webkit.org/show_bug.cgi?id=124278
1293
1294         Reviewed by Michael Saboff.
1295
1296         Random crashes may occur with sh4 architecture, when a flushConstantPool occurs in
1297         movlMemRegCompact. As in this case a branch opcode and the constant pool are put
1298         before the movlMemRegCompact, the branch itself is patched when calling repatchCompact
1299         instead of the mov instruction, which is really bad.
1300
1301         * assembler/SH4Assembler.h:
1302         (JSC::SH4Assembler::repatchCompact): Handle this specific case and add an ASSERT.
1303
1304 2013-11-12  Alexey Proskuryakov  <ap@apple.com>
1305
1306         Disable WebCrypto on Mountain Lion
1307         https://bugs.webkit.org/show_bug.cgi?id=124261
1308
1309         Rubber-stamped by Sam Weinig.
1310
1311         * Configurations/FeatureDefines.xcconfig:
1312
1313 2013-11-12  Julien Brianceau  <jbriance@cisco.com>
1314
1315         [sh4] Fix load32WithUnalignedHalfWords function in baseline JIT.
1316         https://bugs.webkit.org/show_bug.cgi?id=124233
1317
1318         Reviewed by Michael Saboff.
1319
1320         * assembler/MacroAssemblerSH4.h:
1321         (JSC::MacroAssemblerSH4::load32WithUnalignedHalfWords): Do not claim scratch register too early.
1322         Test already covered by fast/regex/pcre-test-1.
1323
1324 2013-11-12  Filip Pizlo  <fpizlo@apple.com>
1325
1326         Liveness analysis should take less memory in CodeBlock when it is unused
1327         https://bugs.webkit.org/show_bug.cgi?id=124225
1328
1329         Reviewed by Mark Hahnenberg.
1330         
1331         Basically, I turned CodeBlock::m_livenessAnalysis into a pointer that is null by
1332         default.
1333
1334         * bytecode/BytecodeLivenessAnalysis.cpp:
1335         (JSC::BytecodeLivenessAnalysis::BytecodeLivenessAnalysis):
1336         (JSC::BytecodeLivenessAnalysis::runLivenessFixpoint):
1337         (JSC::BytecodeLivenessAnalysis::operandIsLiveAtBytecodeOffset):
1338         (JSC::BytecodeLivenessAnalysis::dumpResults):
1339         (JSC::BytecodeLivenessAnalysis::compute):
1340         * bytecode/BytecodeLivenessAnalysis.h:
1341         * bytecode/CodeBlock.cpp:
1342         (JSC::CodeBlock::CodeBlock):
1343         * bytecode/CodeBlock.h:
1344         (JSC::CodeBlock::livenessAnalysis):
1345
1346 2013-11-11  Oliver Hunt  <oliver@apple.com>
1347
1348         Support unprefixed deconstructing assignment
1349         https://bugs.webkit.org/show_bug.cgi?id=124172
1350
1351         Reviewed by Mark Lam.
1352
1353         Add support for unprefixed descontructive assignment.
1354
1355         Happily non-reference types on the left hand side of an assignment
1356         are a runtime error, so we're able to defer validation of the binding
1357         pattern to codegen time when we're already doing a lot more work.
1358
1359         We're also able to predicate our attempt to parse on the existence of
1360         '[' or '{' as they are not as common as other constructs. 
1361
1362         * bytecompiler/NodesCodegen.cpp:
1363         (JSC::ArrayPatternNode::emitDirectBinding):
1364         * parser/ASTBuilder.h:
1365         * parser/Parser.cpp:
1366         (JSC::::createBindingPattern):
1367         (JSC::::tryParseDeconstructionPatternExpression):
1368         (JSC::::parseDeconstructionPattern):
1369         (JSC::::parseForStatement):
1370         (JSC::::parseAssignmentExpression):
1371         * parser/Parser.h:
1372         (JSC::Parser::createSavePoint):
1373         (JSC::Parser::restoreSavePoint):
1374         * parser/SyntaxChecker.h:
1375
1376 2013-11-12  Andy Estes  <aestes@apple.com>
1377
1378         Run JavaScriptCore Objective-C API tests on all supported platforms
1379         https://bugs.webkit.org/show_bug.cgi?id=124214
1380
1381         Reviewed by Mark Hahnenberg.
1382
1383         Now that we support the API on iOS and on OS X 10.8, there's no reason
1384         to limit the tests to OS X 10.9 (or greater).
1385
1386         * API/tests/CurrentThisInsideBlockGetterTest.h:
1387         * API/tests/CurrentThisInsideBlockGetterTest.mm:
1388         * API/tests/testapi.mm:
1389
1390 2013-08-02  Mark Hahnenberg  <mhahnenberg@apple.com>
1391
1392         CodeBlocks should be able to determine bytecode liveness
1393         https://bugs.webkit.org/show_bug.cgi?id=118546
1394
1395         Reviewed by Filip Pizlo.
1396
1397         This will simplify some things in the DFG related to OSR exits and determining 
1398         which bytecode variables are live at which points during execution. It will
1399         also be useful for making our conservative GC scan more precise. Currently it 
1400         doesn't properly account for liveness while the DFG is running, so it will be 
1401         off by default behing a runtime Options flag.
1402
1403         * JavaScriptCore.xcodeproj/project.pbxproj:
1404         * bytecode/BytecodeBasicBlock.cpp: Added.
1405         (JSC::isBranch): Used to determine the end of basic blocks.
1406         (JSC::isUnconditionalBranch): Used to determine when a branch at the end of a 
1407         basic block can't possibly fall through to the next basic block in program order.
1408         (JSC::isTerminal): Also used to detect the end of a block.
1409         (JSC::isThrow):
1410         (JSC::isJumpTarget): Used to correctly separate basic blocks. Any jump destination 
1411         must be the head of its own basic block.
1412         (JSC::linkBlocks): Links two blocks together in a bi-direcitonal fashion.
1413         (JSC::computeBytecodeBasicBlocks): Creates a set of basic blocks given a particular 
1414         CodeBlock and links them together.
1415         * bytecode/BytecodeBasicBlock.h: Added.
1416         (JSC::BytecodeBasicBlock::isEntryBlock): Entry blocks are a special basic blocks 
1417         that indicate the beginning of the function.
1418         (JSC::BytecodeBasicBlock::isExitBlock): Exit blocks are a special basic block that 
1419         all blocks that exit the function have as a successor. Entry and exit blocks allows 
1420         the various code paths to be more regular.
1421         (JSC::BytecodeBasicBlock::leaderBytecodeOffset): The leader bytecode offset is the 
1422         bytecode offset of the first instruction in the block.
1423         (JSC::BytecodeBasicBlock::totalBytecodeLength): The total length of all the bytecodes 
1424         in this block.
1425         (JSC::BytecodeBasicBlock::bytecodeOffsets): The bytecode offsets in this particular 
1426         basic block. This Vector allows us to iterate over the bytecodes in reverse order 
1427         which wouldn't be possible normally since they are of variable size.
1428         (JSC::BytecodeBasicBlock::addPredecessor): Links a block to a specified predecessor. 
1429         Only creates one direction of the link.
1430         (JSC::BytecodeBasicBlock::addSuccessor): Same as addPredecessor, but for successors.
1431         (JSC::BytecodeBasicBlock::predecessors): Getter for predecessors.
1432         (JSC::BytecodeBasicBlock::successors): Getter for successors.
1433         (JSC::BytecodeBasicBlock::in): Getter for the liveness info at the head of the block.
1434         (JSC::BytecodeBasicBlock::out): Getter for the liveness info at  the tail of the block.
1435         (JSC::BytecodeBasicBlock::BytecodeBasicBlock):
1436         (JSC::BytecodeBasicBlock::addBytecodeLength): When creating basic blocks we call 
1437         this function when we want to add the next bytecode in program order to this block.
1438         * bytecode/BytecodeLivenessAnalysis.cpp: Added.
1439         (JSC::BytecodeLivenessAnalysis::BytecodeLivenessAnalysis):
1440         (JSC::numberOfCapturedVariables): Convenience wrapper. Returns the
1441         number of captured variables for a particular CodeBlock, or 0 if 
1442         the CodeBlock has no SymbolTable.
1443         (JSC::captureStart): Ditto, but for captureStart().
1444         (JSC::captureEnd): Ditto, but for captureEnd().
1445         (JSC::isValidRegisterForLiveness): Returns true if the liveness analysis should 
1446         track the liveness of a particular operand. We ignore constants, arguments, and 
1447         captured variables. We ignore arguments because they're live for the duration of 
1448         a function call. We ignore captured variables because we also treat them as live 
1449         for the duration of the function. This could probably be improved to be more precise, 
1450         but it didn't seem worth it for now.
1451         (JSC::setForOperand): Convenience wrapper that sets the bit in the provided bit 
1452         vector for the provided operand. It handles skipping over captured variables.
1453         (JSC::computeUsesForBytecodeOffset): Computes which operands are used by a particular bytecode.
1454         (JSC::computeDefsForBytecodeOffset): Computes which operands are defined by a particular 
1455         bytecode. Typically this is just the left-most operand.
1456         (JSC::findBasicBlockWithLeaderOffset): 
1457         (JSC::findBasicBlockForBytecodeOffset): Scans over basic blocks to find the block 
1458         which contains a particular bytecode offset.
1459         (JSC::computeLocalLivenessForBytecodeOffset): Computes block-local liveness from the 
1460         bottom of the block until a specified bytecode offset is reached. 
1461         (JSC::computeLocalLivenessForBlock): Computes liveness for the entire block and 
1462         stores the resulting liveness at the head.
1463         (JSC::BytecodeLivenessAnalysis::runLivenessFixpoint): Runs backward flow liveness 
1464         analysis to fixpoint.
1465         (JSC::BytecodeLivenessAnalysis::getLivenessInfoForNonCapturedVarsAtBytecodeOffset): 
1466         Slow path to get liveness info for non-captured, non-argument variable.
1467         (JSC::BytecodeLivenessAnalysis::operandIsLiveAtBytecodeOffset): 
1468         (JSC::BytecodeLivenessAnalysis::getLivenessInfoAtBytecodeOffset): Returns the liveness 
1469         info for both captured and non-captured vars at a particular bytecode offset.
1470         (JSC::BytecodeLivenessAnalysis::dumpResults): Dumps the output of the liveness analysis. 
1471         Controlled by new flag in Options.h/.cpp.
1472         (JSC::BytecodeLivenessAnalysis::compute): Creates bytecode basic blocks and runs 
1473         full liveness analysis.
1474         * bytecode/BytecodeLivenessAnalysis.h: Added.
1475         (JSC::BytecodeLivenessAnalysis::hasBeenComputed):
1476         (JSC::BytecodeLivenessAnalysis::computeIfNecessary):
1477         * bytecode/CodeBlock.cpp:
1478         (JSC::CodeBlock::CodeBlock):
1479         * bytecode/CodeBlock.h:
1480         (JSC::CodeBlock::livenessAnalysis):
1481         * bytecode/PreciseJumpTargets.cpp: Refactored to be able to get the jump targets for 
1482         a particular bytecode offset for use during bytecode basic block construction.
1483         (JSC::getJumpTargetsForBytecodeOffset):
1484         (JSC::computePreciseJumpTargets):
1485         (JSC::findJumpTargetsForBytecodeOffset):
1486         * bytecode/PreciseJumpTargets.h:
1487         * runtime/Options.cpp:
1488         (JSC::Options::initialize):
1489         * runtime/Options.h:
1490
1491 2013-11-11  Andy Estes  <aestes@apple.com>
1492
1493         [iOS] Define JSC_OBJC_API_ENABLED
1494         https://bugs.webkit.org/show_bug.cgi?id=124192
1495
1496         Reviewed by Geoffrey Garen.
1497
1498         * API/JSBase.h: JSC_OBJC_API_ENABLED should evaluate to true if
1499         TARGET_OS_IPHONE is true.
1500         * API/JSValue.h: Ensure CG types referenced later in the file are defined.
1501
1502 2013-11-12  Balazs Kilvady  <kilvadyb@homejinni.com>
1503
1504         Fix undefined reference issues in JavaScriptCore build.
1505         https://bugs.webkit.org/show_bug.cgi?id=124152
1506
1507         Reviewed by Michael Saboff.
1508
1509         Missing includes added.
1510
1511         * runtime/SymbolTable.cpp:
1512
1513 2013-11-12  Alexandru Chiculita  <achicu@adobe.com>
1514
1515         Web Inspector: Crash when closing the Inspector while debugging an exception inside a breakpoint condition.
1516         https://bugs.webkit.org/show_bug.cgi?id=124078
1517
1518         Reviewed by Joseph Pecoraro.
1519
1520         The crash would happen because the Debugger is not designed to support nested
1521         breaks. For example, when the debugger handles a breakpoint and the Inspector
1522         executes a console command that would hit the breakpoint again, the Debugger
1523         will just ignore the breakpoint.
1524
1525         There were no checks for conditions and actions. Because of that conditions and actions
1526         could trigger exceptions and breakpoints. This patch disables that functionality as it
1527         cannot be supported without a bigger rewrite of the code.
1528
1529         * debugger/Debugger.cpp:
1530         (JSC::TemporaryPausedState::TemporaryPausedState):
1531         (JSC::TemporaryPausedState::~TemporaryPausedState):
1532         (JSC::Debugger::hasBreakpoint):
1533         (JSC::Debugger::pauseIfNeeded):
1534         * debugger/Debugger.h:
1535
1536 2013-11-12  Julien Brianceau  <jbriance@cisco.com>
1537
1538         InvalidIndex shouldn't be private in GPRInfo and FPRInfo for sh4, mips and arm64 architectures.
1539         https://bugs.webkit.org/show_bug.cgi?id=124156
1540
1541         Reviewed by Michael Saboff.
1542
1543         * jit/FPRInfo.h:
1544         (JSC::FPRInfo::debugName):
1545         * jit/GPRInfo.h:
1546         (JSC::GPRInfo::debugName):
1547
1548 2013-11-11  Andreas Kling  <akling@apple.com>
1549
1550         CodeBlock: Un-segment some Vectors.
1551         <https://webkit.org/b/124188>
1552
1553         Turn some SegmentedVectors into Vectors where the final item count
1554         is known at CodeBlock construction time. This removes unnecessary
1555         allocation and indirection.
1556
1557         I've got ~4.5 MB below SegmentedVector<ValueProfile>::ensureSegment
1558         on Membuster3 (peak, before pressure signal) so this should help
1559         take a bit of the edge off there.
1560
1561         Reviewed by Geoffrey Garen.
1562
1563 2013-11-11  Filip Pizlo  <fpizlo@apple.com>
1564
1565         Get rid of the lastResultRegister optimization in the baseline JIT
1566         https://bugs.webkit.org/show_bug.cgi?id=124171
1567
1568         Rubber stamped by Mark Hahnenberg.
1569         
1570         The baseline JIT no longer needs amazing throughput. And this optimization has caused
1571         way too many OSR exit bugs. And it constrains how much we can do in the DFG/FTL. So,
1572         I'm getting rid of it.
1573
1574         * dfg/DFGOSRExit.cpp:
1575         (JSC::DFG::OSRExit::OSRExit):
1576         (JSC::DFG::OSRExit::convertToForward):
1577         * dfg/DFGOSRExit.h:
1578         * dfg/DFGOSRExitCompiler32_64.cpp:
1579         (JSC::DFG::OSRExitCompiler::compileExit):
1580         * dfg/DFGOSRExitCompiler64.cpp:
1581         (JSC::DFG::OSRExitCompiler::compileExit):
1582         * dfg/DFGSpeculativeJIT.cpp:
1583         (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
1584         (JSC::DFG::SpeculativeJIT::compileMovHint):
1585         (JSC::DFG::SpeculativeJIT::compileCurrentBlock):
1586         * dfg/DFGSpeculativeJIT.h:
1587         * ftl/FTLLowerDFGToLLVM.cpp:
1588         (JSC::FTL::LowerDFGToLLVM::LowerDFGToLLVM):
1589         (JSC::FTL::LowerDFGToLLVM::compileZombieHint):
1590         (JSC::FTL::LowerDFGToLLVM::compileInvalidationPoint):
1591         (JSC::FTL::LowerDFGToLLVM::appendOSRExit):
1592         (JSC::FTL::LowerDFGToLLVM::observeMovHint):
1593         * ftl/FTLOSRExit.cpp:
1594         (JSC::FTL::OSRExit::OSRExit):
1595         (JSC::FTL::OSRExit::convertToForward):
1596         * ftl/FTLOSRExit.h:
1597         * ftl/FTLOSRExitCompiler.cpp:
1598         (JSC::FTL::compileStub):
1599         * jit/JIT.cpp:
1600         (JSC::JIT::JIT):
1601         (JSC::JIT::privateCompileMainPass):
1602         (JSC::JIT::privateCompileSlowCases):
1603         * jit/JIT.h:
1604         (JSC::JIT::appendCall):
1605         * jit/JITArithmetic32_64.cpp:
1606         (JSC::JIT::emit_op_lshift):
1607         (JSC::JIT::emitRightShift):
1608         (JSC::JIT::emit_op_bitand):
1609         (JSC::JIT::emit_op_bitor):
1610         (JSC::JIT::emit_op_bitxor):
1611         (JSC::JIT::emit_op_inc):
1612         (JSC::JIT::emit_op_dec):
1613         * jit/JITCall.cpp:
1614         (JSC::JIT::emitPutCallResult):
1615         (JSC::JIT::compileLoadVarargs):
1616         * jit/JITInlines.h:
1617         (JSC::JIT::emitGetFromCallFrameHeaderPtr):
1618         (JSC::JIT::emitGetFromCallFrameHeader32):
1619         (JSC::JIT::emitGetFromCallFrameHeader64):
1620         (JSC::JIT::emitLoadTag):
1621         (JSC::JIT::emitLoadPayload):
1622         (JSC::JIT::emitLoad2):
1623         (JSC::JIT::emitGetVirtualRegister):
1624         (JSC::JIT::emitGetVirtualRegisters):
1625         (JSC::JIT::emitPutVirtualRegister):
1626         * jit/JITOpcodes.cpp:
1627         (JSC::JIT::emit_op_mov):
1628         (JSC::JIT::emit_op_catch):
1629         (JSC::JIT::emit_op_new_func):
1630         * jit/JITOpcodes32_64.cpp:
1631         (JSC::JIT::emit_op_mov):
1632         (JSC::JIT::emit_op_to_primitive):
1633         (JSC::JIT::emit_op_to_number):
1634         (JSC::JIT::emit_op_catch):
1635         * jit/JITPropertyAccess.cpp:
1636         (JSC::JIT::emit_op_resolve_scope):
1637         (JSC::JIT::emit_op_get_from_scope):
1638         (JSC::JIT::emit_op_put_to_scope):
1639         * jit/JITPropertyAccess32_64.cpp:
1640         (JSC::JIT::emit_op_get_by_val):
1641         (JSC::JIT::emit_op_get_by_id):
1642         (JSC::JIT::emit_op_get_by_pname):
1643         (JSC::JIT::emitResolveClosure):
1644         (JSC::JIT::emit_op_resolve_scope):
1645         (JSC::JIT::emit_op_get_from_scope):
1646         (JSC::JIT::emit_op_init_global_const):
1647         * jit/SlowPathCall.h:
1648         (JSC::JITSlowPathCall::call):
1649
1650 2013-11-11  Filip Pizlo  <fpizlo@apple.com>
1651
1652         Remove ConstantFoldingPhase's weirdo compile-time optimization
1653         https://bugs.webkit.org/show_bug.cgi?id=124169
1654
1655         Reviewed by Mark Hahnenberg.
1656         
1657         It turns out that this compile-time optimization doesn't optimize compile times
1658         anymore. Kill it with fire.
1659
1660         * dfg/DFGConstantFoldingPhase.cpp:
1661         (JSC::DFG::ConstantFoldingPhase::foldConstants):
1662
1663 2013-11-11  Filip Pizlo  <fpizlo@apple.com>
1664
1665         Make bytecode dumping use the right opcode names for inc/dec.
1666
1667         Rubber stamped by Mark Hahnenberg.
1668
1669         * bytecode/CodeBlock.cpp:
1670         (JSC::CodeBlock::dumpBytecode):
1671
1672 2013-11-10  Filip Pizlo  <fpizlo@apple.com>
1673
1674         DFG Int52 boxing code may clobber the source without telling anyone
1675         https://bugs.webkit.org/show_bug.cgi?id=124137
1676
1677         Reviewed by Mark Hahnenberg.
1678
1679         * dfg/DFGSpeculativeJIT64.cpp:
1680         (JSC::DFG::SpeculativeJIT::boxInt52): This is called in places where source is expected to be unchanged. We never call this expecting super-amazing codegen. So, preserve the source's value the dumb way (by recovering it mathematically).
1681         * jit/AssemblyHelpers.h: Document the invariant for boxInt52.
1682         * jsc.cpp:
1683         (GlobalObject::finishCreation): It's been super annoying that sometimes we say noInline() and sometimes we say neverInlineFunction(). The LayoutTests harnesses ensure that we have something called noInline(), but it's great to also ensure that the shell has it.
1684
1685 2013-11-11  Oliver Hunt  <oliver@apple.com>
1686
1687         ExtJS breaks with modern Array.prototype.values API due to use of with()
1688         https://bugs.webkit.org/show_bug.cgi?id=123440
1689
1690         Reviewed by Beth Dakin.
1691
1692         As with our attempt to make Arguments use the Array prototype, ExtJS has
1693         a weird dependency on not adding new APIs to core types.  In this case
1694         Array.prototype.values.  The fix is to remove it, and push for ES6 to drop
1695         the API.
1696
1697         * runtime/ArrayPrototype.cpp:
1698
1699 2013-11-11  Gabor Rapcsanyi  <rgabor@webkit.org>
1700
1701         Fix CPU(ARM_TRADITIONAL) build after r159039.
1702         https://bugs.webkit.org/show_bug.cgi?id=124149
1703
1704         Reviewed by Geoffrey Garen.
1705
1706         * assembler/ARMAssembler.h:
1707         (JSC::ARMAssembler::firstRegister):
1708         (JSC::ARMAssembler::lastRegister):
1709         (JSC::ARMAssembler::firstFPRegister):
1710         (JSC::ARMAssembler::lastFPRegister):
1711         * assembler/MacroAssemblerARM.h:
1712         * jit/FPRInfo.h:
1713
1714 2013-11-09  Filip Pizlo  <fpizlo@apple.com>
1715
1716         Switch FTL GetById/PutById IC's over to using AnyRegCC
1717         https://bugs.webkit.org/show_bug.cgi?id=124094
1718
1719         Reviewed by Sam Weinig.
1720         
1721         This closes the loop on inline caches (IC's) in the FTL. The goal is to have IC's
1722         in LLVM-generated code that are just as efficient (if not more so) than what a
1723         custom JIT could do. As in zero sources of overhead. Not a single extra instruction
1724         or even register allocation pathology. We accomplish this by having two thingies in
1725         LLVM. First is the llvm.experimental.patchpoint intrinsic, which is sort of an
1726         inline machine code snippet that we can fill in with whatever we want and then
1727         modify subsequently. But you have only two choices of how to pass values to a
1728         patchpoint: (1) via the calling convention or (2) via the stackmap. Neither are good
1729         for operands to an IC (like the base pointer for a GetById, for example). (1) is bad
1730         because it results in things being pinned to certain registers a priori; a custom
1731         JIT (like the DFG) will not pin IC operands to any registers a priori but will allow
1732         the register allocator to do whatever it wants. (2) is bad because the operands may
1733         be spilled or may be represented in other crazy ways. You generally want an IC to
1734         have its operands in registers. Also, patchpoints only return values using the
1735         calling convention, which is unfortunate since it pins the return value to a
1736         register a priori. This is where the second thingy comes in: the AnyRegCC. This is
1737         a special calling convention only for use with patchpoints. It means that arguments
1738         passed "by CC" in the patchpoint can be placed in any register, and the register
1739         that gets used is reported as part of the stackmap. It also means that the return
1740         value (if there is one) can be placed in any register, and the stackmap will tell
1741         you which one it was. Thus, patchpoints combined with AnyRegCC mean that you not
1742         only get the kind of self-modifying code that you want for IC's, but you also get
1743         all of the register allocation goodness that a custom JIT would have given you.
1744         Except that you're getting it from LLVM and not a custom JIT. Awesome.
1745         
1746         Even though all of the fun stuff is on the LLVM side, this patch was harder than
1747         you'd expect.
1748         
1749         First the obvious bits:
1750         
1751         - IC patchpoints now use AnyRegCC instead of the C CC. (CC = calling convention.)
1752         
1753         - FTL::fixFunctionBasedOnStackMaps() now correctly figures out which registers the
1754           IC is supposed to use instead of assuming C CC argument registers.
1755         
1756         And then all of the stuff that broke and that this patch fixes:
1757         
1758         - IC sizing based on generating a dummy IC (what FTLInlineCacheSize did) is totally
1759           bad on x86-64, where various register permutations lead to bizarre header bytes
1760           and eclectic SIB encodings. I changed that to have magic constants, for now.
1761         
1762         - Slow path calls didn't preserve the CC return register.
1763         
1764         - Repatch's scratch register allocation would get totally confused if the operand
1765           registers weren't one of the DFG-style "temp" registers. And by "totally confused"
1766           I mean that it would crash.
1767         
1768         - We assumed that r10 is callee-saved. It's not. That one dude's PPT about x86-64
1769           cdecl that I found on the intertubes was not a trustworthy source of information,
1770           apparently.
1771         
1772         - Call repatching didn't know that the FTL does its IC slow calls via specially
1773           generated thunks. This was particularly fun to fix: basically, now when we relink
1774           an IC call in the FTL, we use the old call target to find the SlowPathCallKey,
1775           which tells us everything we need to know to generate (or look up) a new thunk for
1776           the new function we want to call.
1777         
1778         * assembler/MacroAssemblerCodeRef.h:
1779         (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
1780         (JSC::MacroAssemblerCodePtr::isEmptyValue):
1781         (JSC::MacroAssemblerCodePtr::isDeletedValue):
1782         (JSC::MacroAssemblerCodePtr::hash):
1783         (JSC::MacroAssemblerCodePtr::emptyValue):
1784         (JSC::MacroAssemblerCodePtr::deletedValue):
1785         (JSC::MacroAssemblerCodePtrHash::hash):
1786         (JSC::MacroAssemblerCodePtrHash::equal):
1787         * assembler/MacroAssemblerX86Common.h:
1788         * assembler/RepatchBuffer.h:
1789         (JSC::RepatchBuffer::RepatchBuffer):
1790         (JSC::RepatchBuffer::codeBlock):
1791         * ftl/FTLAbbreviations.h:
1792         (JSC::FTL::setInstructionCallingConvention):
1793         * ftl/FTLCompile.cpp:
1794         (JSC::FTL::fixFunctionBasedOnStackMaps):
1795         * ftl/FTLInlineCacheSize.cpp:
1796         (JSC::FTL::sizeOfGetById):
1797         (JSC::FTL::sizeOfPutById):
1798         * ftl/FTLJITFinalizer.cpp:
1799         (JSC::FTL::JITFinalizer::finalizeFunction):
1800         * ftl/FTLLocation.cpp:
1801         (JSC::FTL::Location::forStackmaps):
1802         * ftl/FTLLocation.h:
1803         * ftl/FTLLowerDFGToLLVM.cpp:
1804         (JSC::FTL::LowerDFGToLLVM::compileGetById):
1805         (JSC::FTL::LowerDFGToLLVM::compilePutById):
1806         * ftl/FTLOSRExitCompiler.cpp:
1807         (JSC::FTL::compileStub):
1808         * ftl/FTLSlowPathCall.cpp:
1809         * ftl/FTLSlowPathCallKey.h:
1810         (JSC::FTL::SlowPathCallKey::withCallTarget):
1811         * ftl/FTLStackMaps.cpp:
1812         (JSC::FTL::StackMaps::Location::directGPR):
1813         (JSC::FTL::StackMaps::Location::restoreInto):
1814         * ftl/FTLStackMaps.h:
1815         * ftl/FTLThunks.h:
1816         (JSC::FTL::generateIfNecessary):
1817         (JSC::FTL::keyForThunk):
1818         (JSC::FTL::Thunks::keyForSlowPathCallThunk):
1819         * jit/FPRInfo.h:
1820         (JSC::FPRInfo::toIndex):
1821         * jit/GPRInfo.h:
1822         (JSC::GPRInfo::toIndex):
1823         (JSC::GPRInfo::debugName):
1824         * jit/RegisterSet.cpp:
1825         (JSC::RegisterSet::calleeSaveRegisters):
1826         * jit/RegisterSet.h:
1827         (JSC::RegisterSet::filter):
1828         * jit/Repatch.cpp:
1829         (JSC::readCallTarget):
1830         (JSC::repatchCall):
1831         (JSC::repatchByIdSelfAccess):
1832         (JSC::tryCacheGetByID):
1833         (JSC::tryCachePutByID):
1834         (JSC::tryBuildPutByIdList):
1835         (JSC::resetGetByID):
1836         (JSC::resetPutByID):
1837         * jit/ScratchRegisterAllocator.h:
1838         (JSC::ScratchRegisterAllocator::lock):
1839
1840 2013-11-10  Oliver Hunt  <oliver@apple.com>
1841
1842         Implement Set iterators
1843         https://bugs.webkit.org/show_bug.cgi?id=124129
1844
1845         Reviewed by Antti Koivisto.
1846
1847         Add Set iterator classes and implementations
1848
1849         * JavaScriptCore.xcodeproj/project.pbxproj:
1850         * runtime/CommonIdentifiers.h:
1851         * runtime/JSGlobalObject.cpp:
1852         * runtime/JSGlobalObject.h:
1853         * runtime/JSSetIterator.cpp: Added.
1854         (JSC::JSSetIterator::finishCreation):
1855         (JSC::JSSetIterator::visitChildren):
1856         (JSC::JSSetIterator::createPair):
1857         * runtime/JSSetIterator.h: Added.
1858         (JSC::JSSetIterator::createStructure):
1859         (JSC::JSSetIterator::create):
1860         (JSC::JSSetIterator::next):
1861         (JSC::JSSetIterator::JSSetIterator):
1862         * runtime/SetIteratorConstructor.cpp: Added.
1863         (JSC::SetIteratorConstructor::finishCreation):
1864         * runtime/SetIteratorConstructor.h: Added.
1865         (JSC::SetIteratorConstructor::create):
1866         (JSC::SetIteratorConstructor::createStructure):
1867         (JSC::SetIteratorConstructor::SetIteratorConstructor):
1868         * runtime/SetIteratorPrototype.cpp: Added.
1869         (JSC::SetIteratorPrototype::finishCreation):
1870         (JSC::SetIteratorPrototypeFuncIterator):
1871         (JSC::SetIteratorPrototypeFuncNext):
1872         * runtime/SetIteratorPrototype.h: Added.
1873         (JSC::SetIteratorPrototype::create):
1874         (JSC::SetIteratorPrototype::createStructure):
1875         (JSC::SetIteratorPrototype::SetIteratorPrototype):
1876         * runtime/SetPrototype.cpp:
1877         (JSC::SetPrototype::finishCreation):
1878         (JSC::setProtoFuncValues):
1879         (JSC::setProtoFuncEntries):
1880         (JSC::setProtoFuncKeys):
1881
1882 2013-11-09  Oliver Hunt  <oliver@apple.com>
1883
1884         Add Map Iterators
1885         https://bugs.webkit.org/show_bug.cgi?id=124109
1886
1887         Reviewed by Andreas Kling.
1888
1889         Added new Map iterator implementation.  This is a mostly boilerplate patch
1890         however there's a a little bit of additional logic added to the MapData iterator
1891         to deal with the possibility of map mutation between creation of the iterator
1892         and use of it.  We'll be able to improve the performance of this substantially
1893         by using intrinsics, however I'm pondering coming up with a better way to define
1894         these thunks without requiring so much duplicated logic.
1895
1896         * CMakeLists.txt:
1897         * GNUmakefile.list.am:
1898         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1899         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
1900         * JavaScriptCore.xcodeproj/project.pbxproj:
1901         * runtime/CommonIdentifiers.h:
1902         * runtime/JSGlobalObject.cpp:
1903         * runtime/JSGlobalObject.h:
1904         * runtime/JSMapIterator.cpp: Added.
1905         (JSC::JSMapIterator::finishCreation):
1906         (JSC::JSMapIterator::visitChildren):
1907         (JSC::JSMapIterator::createPair):
1908         * runtime/JSMapIterator.h: Added.
1909         (JSC::JSMapIterator::createStructure):
1910         (JSC::JSMapIterator::create):
1911         (JSC::JSMapIterator::next):
1912         (JSC::JSMapIterator::JSMapIterator):
1913         * runtime/MapData.h:
1914         (JSC::MapData::const_iterator::ensureSlot):
1915         * runtime/MapIteratorConstructor.cpp: Added.
1916         (JSC::MapIteratorConstructor::finishCreation):
1917         * runtime/MapIteratorConstructor.h: Added.
1918         (JSC::MapIteratorConstructor::create):
1919         (JSC::MapIteratorConstructor::createStructure):
1920         (JSC::MapIteratorConstructor::MapIteratorConstructor):
1921         * runtime/MapIteratorPrototype.cpp: Added.
1922         (JSC::MapIteratorPrototype::finishCreation):
1923         (JSC::MapIteratorPrototypeFuncIterator):
1924         (JSC::MapIteratorPrototypeFuncNext):
1925         * runtime/MapIteratorPrototype.h: Added.
1926         (JSC::MapIteratorPrototype::create):
1927         (JSC::MapIteratorPrototype::createStructure):
1928         (JSC::MapIteratorPrototype::MapIteratorPrototype):
1929         * runtime/MapPrototype.cpp:
1930         (JSC::MapPrototype::finishCreation):
1931         (JSC::mapProtoFuncValues):
1932         (JSC::mapProtoFuncEntries):
1933         (JSC::mapProtoFuncKeys):
1934
1935 2013-11-08  Zan Dobersek  <zdobersek@igalia.com>
1936
1937         Unreviewed GTK build fix.
1938
1939         * GNUmakefile.list.am: Remove redundant build targets.
1940
1941 2013-11-08  Filip Pizlo  <fpizlo@apple.com>
1942
1943         Remove dead FTL C ABI support
1944         https://bugs.webkit.org/show_bug.cgi?id=124100
1945
1946         Reviewed by Jer Noble.
1947
1948         * JavaScriptCore.xcodeproj/project.pbxproj:
1949         * ftl/FTLCArgumentGetter.cpp: Removed.
1950         * ftl/FTLCArgumentGetter.h: Removed.
1951         * ftl/FTLOSRExitCompiler.cpp:
1952         * jit/FPRInfo.h:
1953
1954 2013-11-08  Filip Pizlo  <fpizlo@apple.com>
1955
1956         FTL should support Phantom(FinalObject:)
1957         https://bugs.webkit.org/show_bug.cgi?id=124092
1958
1959         Reviewed by Oliver Hunt.
1960
1961         * ftl/FTLAbstractHeapRepository.h:
1962         * ftl/FTLCapabilities.cpp:
1963         (JSC::FTL::canCompile):
1964         * ftl/FTLLowerDFGToLLVM.cpp:
1965         (JSC::FTL::LowerDFGToLLVM::speculate):
1966         (JSC::FTL::LowerDFGToLLVM::isType):
1967         (JSC::FTL::LowerDFGToLLVM::isNotType):
1968         (JSC::FTL::LowerDFGToLLVM::speculateFinalObject):
1969
1970 2013-11-08  Filip Pizlo  <fpizlo@apple.com>
1971
1972         Get rid of the FTL tail call APIs since they are unused
1973         https://bugs.webkit.org/show_bug.cgi?id=124093
1974
1975         Reviewed by Oliver Hunt.
1976
1977         * ftl/FTLAbbreviations.h:
1978         (JSC::FTL::buildCall):
1979         * ftl/FTLOutput.h:
1980
1981 2013-11-08  Filip Pizlo  <fpizlo@apple.com>
1982
1983         FTL should support AllocatePropertyStorage
1984         https://bugs.webkit.org/show_bug.cgi?id=124086
1985
1986         Reviewed by Oliver Hunt.
1987         
1988         Also rationalized some offsets in the DFG.
1989
1990         * dfg/DFGSpeculativeJIT.cpp:
1991         (JSC::DFG::SpeculativeJIT::compileAllocatePropertyStorage):
1992         (JSC::DFG::SpeculativeJIT::compileReallocatePropertyStorage):
1993         * ftl/FTLCapabilities.cpp:
1994         (JSC::FTL::canCompile):
1995         * ftl/FTLIntrinsicRepository.h:
1996         * ftl/FTLLowerDFGToLLVM.cpp:
1997         (JSC::FTL::LowerDFGToLLVM::compileNode):
1998         (JSC::FTL::LowerDFGToLLVM::compileAllocatePropertyStorage):
1999
2000 2013-11-08  Filip Pizlo  <fpizlo@apple.com>
2001
2002         Get rid of the bizarre Darwin/x86-only MacroAssembler::shouldBlindForSpecificArch(uintptr_t) overload
2003         https://bugs.webkit.org/show_bug.cgi?id=124087
2004
2005         Reviewed by Michael Saboff.
2006
2007         * assembler/MacroAssembler.h:
2008         (JSC::MacroAssembler::shouldBlindPointerForSpecificArch):
2009         (JSC::MacroAssembler::shouldBlind):
2010         * assembler/MacroAssemblerX86Common.h:
2011         (JSC::MacroAssemblerX86Common::shouldBlindForSpecificArch):
2012
2013 2013-11-08  Filip Pizlo  <fpizlo@apple.com>
2014
2015         FTL should support NewArrayBuffer
2016         https://bugs.webkit.org/show_bug.cgi?id=124067
2017
2018         Reviewed by Michael Saboff.
2019         
2020         This expanded coverage and revealed some bugs.
2021         
2022         This revealed a bug in FTL::OSRExitCompiler where it was assuming that it could save
2023         the framePointer in regT3 even though DFG::reifyInlinedCallFrames() would clobber it.
2024         It turns out that this can be fixed by just completely restoring the stack prior to
2025         doing reifyInlineCallFrames().
2026         
2027         I used this as an opportunity to simplify NewArray. That revealed a bug; whenever we say
2028         lowJSValue() in there we need to use ManualOperandSpeculation since we're using it to
2029         rebox values even when we also have to do some speculations. The speculations are done
2030         at the top of compileNewArray().
2031         
2032         This also revealed a bug in StringCharAt() for the OOB case.
2033
2034         * ftl/FTLAbstractHeapRepository.h:
2035         (JSC::FTL::AbstractHeapRepository::forIndexingType):
2036         * ftl/FTLCapabilities.cpp:
2037         (JSC::FTL::canCompile):
2038         * ftl/FTLIntrinsicRepository.h:
2039         * ftl/FTLLowerDFGToLLVM.cpp:
2040         (JSC::FTL::LowerDFGToLLVM::compileNode):
2041         (JSC::FTL::LowerDFGToLLVM::compileNewArray):
2042         (JSC::FTL::LowerDFGToLLVM::compileNewArrayBuffer):
2043         (JSC::FTL::LowerDFGToLLVM::compileStringCharAt):
2044         * ftl/FTLOSRExitCompiler.cpp:
2045         (JSC::FTL::compileStub):
2046
2047 2013-11-08  Filip Pizlo  <fpizlo@apple.com>
2048
2049         It should be easy to disable blinding on a per-architecture basis
2050         https://bugs.webkit.org/show_bug.cgi?id=124083
2051
2052         Reviewed by Michael Saboff.
2053
2054         * assembler/AbstractMacroAssembler.h:
2055         (JSC::AbstractMacroAssembler::haveScratchRegisterForBlinding):
2056         (JSC::AbstractMacroAssembler::scratchRegisterForBlinding):
2057         (JSC::AbstractMacroAssembler::canBlind):
2058         (JSC::AbstractMacroAssembler::shouldBlindForSpecificArch):
2059         * assembler/MacroAssembler.h:
2060         (JSC::MacroAssembler::shouldBlind):
2061         (JSC::MacroAssembler::store32):
2062         (JSC::MacroAssembler::branch32):
2063         (JSC::MacroAssembler::branchAdd32):
2064         (JSC::MacroAssembler::branchMul32):
2065         * assembler/MacroAssemblerX86Common.h:
2066         (JSC::MacroAssemblerX86Common::canBlind):
2067         * assembler/MacroAssemblerX86_64.h:
2068         (JSC::MacroAssemblerX86_64::haveScratchRegisterForBlinding):
2069
2070 2013-11-08  Oliver Hunt  <oliver@apple.com>
2071
2072         Remove more accidentally added files.
2073
2074         * runtime/SetIteratorConstructor.cpp: Removed.
2075         * runtime/SetIteratorConstructor.h: Removed.
2076         * runtime/SetIteratorPrototype.cpp: Removed.
2077         * runtime/SetIteratorPrototype.h: Removed.
2078
2079 2013-11-08  Oliver Hunt  <oliver@apple.com>
2080
2081         Remove accidentally added files.
2082
2083         * runtime/JSSetIterator.cpp: Removed.
2084         * runtime/JSSetIterator.h: Removed.
2085
2086 2013-11-08  Oliver Hunt  <oliver@apple.com>
2087
2088         Fix minor (unobservable) bug in ArrayIterator::next()
2089         https://bugs.webkit.org/show_bug.cgi?id=124061
2090
2091         Reviewed by Beth Dakin.
2092
2093         I noticed this while reading the array iterator code.  Due to how
2094         ArrayIterator::next() and our enumeration behaviour is implemented
2095         this is not actually a code path that can be hit.  But in order to
2096         future proof this it should be correct.
2097         
2098         * runtime/JSArrayIterator.cpp:
2099         (JSC::arrayIteratorNext):
2100
2101 2013-11-08  Mark Lam  <mark.lam@apple.com>
2102
2103         Move breakpoint (and exception break) functionality into JSC::Debugger.
2104         https://bugs.webkit.org/show_bug.cgi?id=121796.
2105
2106         Reviewed by Geoffrey Garen.
2107
2108         - In ScriptDebugServer and JSC::Debugger, SourceID and BreakpointID are
2109           now numeric tokens.
2110
2111         - JSC::Debugger now tracks user defined breakpoints in a JSC::Breakpoint
2112           record. Previously, this info is tracked in the ScriptBreakpoint record
2113           in ScriptDebugServer. The only element of ScriptBreakpoint that is not
2114           being tracked by JSC::Breakpoint is the ScriptBreakpointAction.
2115              The ScriptBreakpointAction is still tracked by the ScriptDebugServer
2116           in a list keyed on the corresponding BreakpointID.
2117              The ScriptBreakpoint record is now only used as a means of passing
2118           breakpoint paramaters to the ScriptDebugServer.
2119
2120         - ScriptDebugServer now no longer accesses the JSC::CallFrame* directly.
2121           It always goes through the DebuggerCallFrame.
2122
2123         * GNUmakefile.list.am:
2124         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
2125         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
2126         * JavaScriptCore.xcodeproj/project.pbxproj:
2127         * debugger/Breakpoint.h: Added.
2128         (JSC::Breakpoint::Breakpoint):
2129         - Breakpoint class to track info for each breakpoint in JSC::Debugger.
2130         * debugger/Debugger.cpp:
2131         (JSC::DebuggerCallFrameScope::DebuggerCallFrameScope):
2132         (JSC::DebuggerCallFrameScope::~DebuggerCallFrameScope):
2133         (JSC::Debugger::Debugger):
2134         (JSC::Debugger::detach):
2135         (JSC::Debugger::updateNeedForOpDebugCallbacks):
2136         (JSC::Debugger::setBreakpoint):
2137         (JSC::Debugger::removeBreakpoint):
2138         (JSC::Debugger::hasBreakpoint):
2139         (JSC::Debugger::clearBreakpoints):
2140         (JSC::Debugger::setBreakpointsActivated):
2141         (JSC::Debugger::setPauseOnExceptionsState):
2142         (JSC::Debugger::setPauseOnNextStatement):
2143         (JSC::Debugger::breakProgram):
2144         (JSC::Debugger::continueProgram):
2145         (JSC::Debugger::stepIntoStatement):
2146         (JSC::Debugger::stepOverStatement):
2147         (JSC::Debugger::stepOutOfFunction):
2148         (JSC::Debugger::updateCallFrame):
2149         (JSC::Debugger::updateCallFrameAndPauseIfNeeded):
2150         (JSC::Debugger::pauseIfNeeded):
2151         (JSC::Debugger::exception):
2152         (JSC::Debugger::atStatement):
2153         (JSC::Debugger::callEvent):
2154         (JSC::Debugger::returnEvent):
2155         (JSC::Debugger::willExecuteProgram):
2156         (JSC::Debugger::didExecuteProgram):
2157         (JSC::Debugger::didReachBreakpoint):
2158         (JSC::Debugger::currentDebuggerCallFrame):
2159         * debugger/Debugger.h:
2160         * debugger/DebuggerCallFrame.cpp:
2161         (JSC::DebuggerCallFrame::sourceID):
2162         (JSC::DebuggerCallFrame::sourceIDForCallFrame):
2163         * debugger/DebuggerCallFrame.h:
2164         * debugger/DebuggerPrimitives.h: Added.
2165         - define SourceID, noSourceID, BreakpointID, and noBreakpointID.
2166
2167 2013-11-08  Oliver Hunt  <oliver@apple.com>
2168
2169         Map.forEach crashes on deleted values
2170         https://bugs.webkit.org/show_bug.cgi?id=124017
2171
2172         Reviewed by Ryosuke Niwa.
2173
2174         MapData iterator did not consider the case of the first entries
2175         being holes.  To fix this I've refactored iteration so that we
2176         can perform an initialisation increment on construction, whle
2177         retaining the useful assertion in MapData::const_iterator::operator++
2178
2179         * runtime/MapData.h:
2180         (JSC::MapData::const_iterator::operator++):
2181         (JSC::MapData::const_iterator::internalIncrement):
2182         (JSC::MapData::const_iterator::const_iterator):
2183
2184 2013-11-08  Julien Brianceau  <jbriance@cisco.com>
2185
2186         REGRESSION(r158883): Fix crashes for ARM architecture.
2187         https://bugs.webkit.org/show_bug.cgi?id=124038
2188
2189         Reviewed by Michael Saboff.
2190
2191         * jit/GPRInfo.h: Remove r11 from the temporary register set, use a free register for
2192         nonPreservedNonReturnGPR and remove obsolete declaration of bucketCounterRegister.
2193         (JSC::GPRInfo::toRegister):
2194         (JSC::GPRInfo::toIndex):
2195         * jit/JITOperations.cpp: Frame pointer register is r11 for ARM_TRADITIONAL and
2196         r7 for ARM_THUMB2 instead of r5 since r158883.
2197
2198 2013-11-08  Julien Brianceau  <jbriance@cisco.com>
2199
2200         REGRESSION(r158883): Fix crashes for MIPS architecture.
2201         https://bugs.webkit.org/show_bug.cgi?id=124044
2202
2203         Reviewed by Michael Saboff.
2204
2205         * jit/JITOperations.cpp: Frame pointer register is fp instead of s0 since r158883 for MIPS.
2206         * jit/ThunkGenerators.cpp: Save and restore the new frame pointer register.
2207         (JSC::returnFromJavaScript):
2208         (JSC::callToJavaScript):
2209
2210 2013-11-08  peavo@outlook.com  <peavo@outlook.com>
2211
2212         [Win] JavaScript crash in getHostCallReturnValue.
2213         https://bugs.webkit.org/show_bug.cgi?id=124040
2214
2215         Reviewed by Geoffrey Garen.
2216
2217         * jit/JITOperations.cpp: Update MSVC assembler code in getHostCallReturnValue according to gcc x86 version.
2218
2219 2013-11-08  Julien Brianceau  <jbriance@cisco.com>
2220
2221         [mips] Fix typo (introduced in r158751).
2222         https://bugs.webkit.org/show_bug.cgi?id=124033.
2223
2224         Reviewed by Csaba Osztrogonác.
2225
2226         * jit/ThunkGenerators.cpp:
2227         (JSC::callToJavaScript):
2228
2229 2013-11-08  Julien Brianceau  <jbriance@cisco.com>
2230
2231         [arm] Use specific PatchableJump implementation for CPU(ARM_TRADITIONAL).
2232         https://bugs.webkit.org/show_bug.cgi?id=123891
2233
2234         Reviewed by Michael Saboff.
2235
2236         Although patchableBranch32 is implemented in MacroAssemblerARM.h, the used implementation
2237         is the generic one in MacroAssembler.h. This patch fixes it and also implements the
2238         patchableJump() function for CPU(ARM_TRADITIONAL). These specific implementations are
2239         needed for this architecture backend to ensure that these jumps can be relinked.
2240
2241         * assembler/MacroAssembler.h:
2242         * assembler/MacroAssemblerARM.h:
2243         (JSC::MacroAssemblerARM::patchableJump):
2244         * jit/GPRInfo.h: Remove static_cast that are generating warnings in debug builds.
2245         (JSC::GPRInfo::toIndex):
2246         (JSC::GPRInfo::debugName):
2247
2248 2013-11-07  Mark Lam  <mark.lam@apple.com>
2249
2250         Get rid of the regT* definitions in JSInterfaceJIT.h.
2251         https://bugs.webkit.org/show_bug.cgi?id=123806.
2252
2253         Reviewed by Geoffrey Garen.
2254
2255         JSInterfaceJIT now inherits from GPRInfo and FPRInfo, and relies on them
2256         to provide all the register definitions.
2257
2258         * jit/GPRInfo.h:
2259         (JSC::GPRInfo::toArgumentRegister):
2260         * jit/JIT.cpp:
2261         (JSC::JIT::emitEnterOptimizationCheck):
2262         (JSC::JIT::privateCompile):
2263         * jit/JITArithmetic.cpp:
2264         (JSC::JIT::emit_compareAndJumpSlow):
2265         * jit/JITArithmetic32_64.cpp:
2266         (JSC::JIT::emit_compareAndJumpSlow):
2267         * jit/JITCall.cpp:
2268         (JSC::JIT::compileLoadVarargs):
2269         * jit/JITCall32_64.cpp:
2270         (JSC::JIT::compileLoadVarargs):
2271         * jit/JITInlines.h:
2272         (JSC::JIT::appendCallWithExceptionCheckSetJSValueResult):
2273         (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile):
2274         * jit/JITOpcodes.cpp:
2275         (JSC::JIT::emit_op_end):
2276         (JSC::JIT::emitSlow_op_new_object):
2277         (JSC::JIT::emit_op_ret):
2278         (JSC::JIT::emit_op_ret_object_or_this):
2279         (JSC::JIT::emit_op_throw):
2280         (JSC::JIT::emit_op_get_pnames):
2281         (JSC::JIT::emit_op_switch_imm):
2282         (JSC::JIT::emit_op_switch_char):
2283         (JSC::JIT::emit_op_switch_string):
2284         (JSC::JIT::emit_op_create_activation):
2285         (JSC::JIT::emit_op_create_arguments):
2286         (JSC::JIT::emitSlow_op_jfalse):
2287         (JSC::JIT::emitSlow_op_jtrue):
2288         (JSC::JIT::emitSlow_op_eq):
2289         (JSC::JIT::emitSlow_op_neq):
2290         (JSC::JIT::emitSlow_op_get_argument_by_val):
2291         (JSC::JIT::emitSlow_op_loop_hint):
2292         * jit/JITOpcodes32_64.cpp:
2293         (JSC::JIT::privateCompileCTINativeCall):
2294         (JSC::JIT::emit_op_end):
2295         (JSC::JIT::emitSlow_op_new_object):
2296         (JSC::JIT::emitSlow_op_jfalse):
2297         (JSC::JIT::emitSlow_op_jtrue):
2298         (JSC::JIT::emitSlow_op_eq):
2299         (JSC::JIT::emitSlow_op_neq):
2300         (JSC::JIT::emit_op_throw):
2301         (JSC::JIT::emit_op_get_pnames):
2302         (JSC::JIT::emit_op_switch_imm):
2303         (JSC::JIT::emit_op_switch_char):
2304         (JSC::JIT::emit_op_switch_string):
2305         (JSC::JIT::emit_op_create_activation):
2306         (JSC::JIT::emit_op_create_arguments):
2307         (JSC::JIT::emitSlow_op_get_argument_by_val):
2308         * jit/JSInterfaceJIT.h:
2309         (JSC::JSInterfaceJIT::JSInterfaceJIT):
2310         * jit/SlowPathCall.h:
2311         (JSC::JITSlowPathCall::call):
2312         * jit/ThunkGenerators.cpp:
2313
2314 2013-11-07  Filip Pizlo  <fpizlo@apple.com>
2315
2316         FTL should support NewArray
2317         https://bugs.webkit.org/show_bug.cgi?id=124010
2318
2319         Reviewed by Oliver Hunt.
2320
2321         * ftl/FTLCapabilities.cpp:
2322         (JSC::FTL::canCompile):
2323         * ftl/FTLIntrinsicRepository.h:
2324         * ftl/FTLLowerDFGToLLVM.cpp:
2325         (JSC::FTL::LowerDFGToLLVM::compileNode):
2326         (JSC::FTL::LowerDFGToLLVM::compileNewObject):
2327         (JSC::FTL::LowerDFGToLLVM::compileNewArray):
2328         (JSC::FTL::LowerDFGToLLVM::allocateCell):
2329         (JSC::FTL::LowerDFGToLLVM::allocateObject):
2330         (JSC::FTL::LowerDFGToLLVM::allocateBasicStorageAndGetEnd):
2331         (JSC::FTL::LowerDFGToLLVM::ArrayValues::ArrayValues):
2332         (JSC::FTL::LowerDFGToLLVM::allocateJSArray):
2333         * ftl/FTLOutput.h:
2334         (JSC::FTL::Output::loadDouble):
2335         (JSC::FTL::Output::storeDouble):
2336
2337 2013-11-07  Michael Saboff  <msaboff@apple.com>
2338
2339         Change CallFrameRegister to architected frame pointer register
2340         https://bugs.webkit.org/show_bug.cgi?id=123956
2341
2342         Reviewed by Geoffrey Garen.
2343
2344         Changed X86 and ARM variants as well as MIPS to use their respective architected
2345         frame pointer registers.  The freed up callFrameRegisteris are made available to 
2346         the DFG register allocator.  Modified the FTL OSR exit compiler to use a temporary
2347         register as a stand in for the destination callFrameRegister since the FTL frame
2348         pointer register is needed to extract values from the FTL stack.
2349
2350         Reviewed by Geoffrey Garen.
2351
2352         * assembler/ARMAssembler.h:
2353         * assembler/ARMv7Assembler.h:
2354         * assembler/MacroAssemblerMIPS.h:
2355         * ftl/FTLOSRExitCompiler.cpp:
2356         (JSC::FTL::compileStub):
2357         * jit/AssemblyHelpers.h:
2358         (JSC::AssemblyHelpers::addressFor):
2359         * jit/GPRInfo.h:
2360         (JSC::GPRInfo::toRegister):
2361         (JSC::GPRInfo::toIndex):
2362         * jit/JITOperations.cpp:
2363         * jit/JSInterfaceJIT.h:
2364         * jit/ThunkGenerators.cpp:
2365         (JSC::callToJavaScript):
2366         * offlineasm/arm.rb:
2367         * offlineasm/arm64.rb:
2368         * offlineasm/mips.rb:
2369         * offlineasm/x86.rb:
2370
2371 2013-11-07  Oliver Hunt  <oliver@apple.com>
2372
2373         Reproducible crash when using Map (affects Web Inspector)
2374         https://bugs.webkit.org/show_bug.cgi?id=123940
2375
2376         Reviewed by Geoffrey Garen.
2377
2378         Trivial fix.  Once again we get bitten by attempting to be clever when
2379         growing while adding entries to indexing maps.
2380
2381         Now we simply do a find(), and then add() _after_ we've ensured there is
2382         sufficient space in the MapData list.
2383
2384         * runtime/MapData.cpp:
2385         (JSC::MapData::add):
2386
2387 2013-11-07  Mark Lam  <mark.lam@apple.com>
2388
2389         Cosmetic: rename xxxId to xxxID for ScriptId, SourceId, and BreakpointId.
2390         https://bugs.webkit.org/show_bug.cgi?id=123945.
2391
2392         Reviewed by Geoffrey Garen.
2393
2394         * debugger/DebuggerCallFrame.cpp:
2395         (JSC::DebuggerCallFrame::sourceID):
2396         (JSC::DebuggerCallFrame::sourceIDForCallFrame):
2397         * debugger/DebuggerCallFrame.h:
2398
2399 2013-11-07  Michael Saboff  <msaboff@apple.com>
2400
2401         returnFromJavaScript() for ARM_THUMB2 uses push()s which should be pop()s
2402         https://bugs.webkit.org/show_bug.cgi?id=124006
2403
2404         Rubber stamped by Mark Hahnenberg.
2405
2406         Changed the push() calls to pop().
2407
2408         * jit/ThunkGenerators.cpp:
2409         (JSC::returnFromJavaScript):
2410
2411 2013-11-07  Michael Saboff  <msaboff@apple.com>
2412
2413         Remove unneeded moving of ESP to ECX in callToJavaScript for COMPILER(MSVC)
2414         https://bugs.webkit.org/show_bug.cgi?id=123998
2415
2416         Reviewed by Mark Lam.
2417
2418         Dead code removal.  Passing esp as the first "C" argument to a JavaScript
2419         function is no longer needed.
2420
2421         * jit/ThunkGenerators.cpp:
2422         (JSC::callToJavaScript):
2423
2424 2013-11-07  Julien Brianceau  <jbriance@cisco.com>
2425
2426         Fix build for architectures with 4 argument registers (broken since r158820).
2427         https://bugs.webkit.org/show_bug.cgi?id=123969
2428
2429         Reviewed by Andreas Kling.
2430
2431         * jit/CCallHelpers.h:
2432         (JSC::CCallHelpers::setupArguments):
2433
2434 2013-11-05  Filip Pizlo  <fpizlo@apple.com>
2435
2436         FTL should support CheckFunction
2437         https://bugs.webkit.org/show_bug.cgi?id=123862
2438
2439         Reviewed by Sam Weinig.
2440
2441         * ftl/FTLCapabilities.cpp:
2442         (JSC::FTL::canCompile):
2443         * ftl/FTLLowerDFGToLLVM.cpp:
2444         (JSC::FTL::LowerDFGToLLVM::compileNode):
2445         (JSC::FTL::LowerDFGToLLVM::compileCheckFunction):
2446
2447 2013-11-06  Filip Pizlo  <fpizlo@apple.com>
2448
2449         IC code should handle the call frame register not being the callFrameRegister
2450         https://bugs.webkit.org/show_bug.cgi?id=123865
2451
2452         Reviewed by Geoffrey Garen.
2453         
2454         For now, in the FTL, the call frame may be something other than our frame pointer,
2455         since it's an argument passed in according to whatever convention LLVM picks.
2456         
2457         This is temporary in two ways - pretty soon the callFrameRegister will be the actual
2458         frame pointer and not some other register, and LLVM will not pass the frame pointer
2459         as an argument to IC's.
2460
2461         * bytecode/StructureStubInfo.h:
2462         * dfg/DFGSpeculativeJIT32_64.cpp:
2463         (JSC::DFG::SpeculativeJIT::cachedGetById):
2464         (JSC::DFG::SpeculativeJIT::cachedPutById):
2465         * dfg/DFGSpeculativeJIT64.cpp:
2466         (JSC::DFG::SpeculativeJIT::cachedGetById):
2467         (JSC::DFG::SpeculativeJIT::cachedPutById):
2468         * ftl/FTLCompile.cpp:
2469         (JSC::FTL::fixFunctionBasedOnStackMaps):
2470         * ftl/FTLInlineCacheSize.cpp:
2471         (JSC::FTL::sizeOfGetById):
2472         (JSC::FTL::sizeOfPutById):
2473         * jit/CCallHelpers.h:
2474         (JSC::CCallHelpers::setupArguments):
2475         * jit/JITInlineCacheGenerator.cpp:
2476         (JSC::JITByIdGenerator::JITByIdGenerator):
2477         (JSC::JITPutByIdGenerator::JITPutByIdGenerator):
2478         * jit/JITInlineCacheGenerator.h:
2479         (JSC::JITGetByIdGenerator::JITGetByIdGenerator):
2480         * jit/JITPropertyAccess.cpp:
2481         (JSC::JIT::emit_op_get_by_id):
2482         (JSC::JIT::emit_op_put_by_id):
2483         * jit/JITPropertyAccess32_64.cpp:
2484         (JSC::JIT::emit_op_get_by_id):
2485         (JSC::JIT::emit_op_put_by_id):
2486         * jit/Repatch.cpp:
2487         (JSC::tryBuildGetByIDList):
2488         (JSC::emitPutTransitionStub):
2489
2490 2013-11-06  Daniel Bates  <dabates@apple.com>
2491
2492         [iOS] Upstream Letterpress effect
2493         https://bugs.webkit.org/show_bug.cgi?id=123932
2494
2495         Reviewed by Sam Weinig.
2496
2497         Add feature define ENABLE_LETTERPRESS disabled by default. We only enable
2498         letterpress on iOS.
2499
2500         * Configurations/FeatureDefines.xcconfig:
2501
2502 2013-11-05  Oliver Hunt  <oliver@apple.com>
2503
2504         Support iteration of the Arguments object
2505         https://bugs.webkit.org/show_bug.cgi?id=123835
2506
2507         Reviewed by Mark Lam.
2508
2509         Add an ArgumentsIterator object, and associated classes so that we can support
2510         iteration of the arguments object.
2511
2512         This is a largely mechanical patch.  The only gnarliness is in the
2513         logic to avoid reifying the Arguments object in for(... of arguments)
2514         scenarios.
2515
2516         * GNUmakefile.list.am:
2517         * JavaScriptCore.xcodeproj/project.pbxproj:
2518         * bytecompiler/BytecodeGenerator.cpp:
2519         (JSC::BytecodeGenerator::emitEnumeration):
2520         * runtime/Arguments.cpp:
2521         (JSC::Arguments::getOwnPropertySlot):
2522         (JSC::argumentsFuncIterator):
2523         * runtime/Arguments.h:
2524         * runtime/ArgumentsIteratorConstructor.cpp: Added.
2525         (JSC::ArgumentsIteratorConstructor::finishCreation):
2526         * runtime/ArgumentsIteratorConstructor.h: Added.
2527         (JSC::ArgumentsIteratorConstructor::create):
2528         (JSC::ArgumentsIteratorConstructor::createStructure):
2529         (JSC::ArgumentsIteratorConstructor::ArgumentsIteratorConstructor):
2530         * runtime/ArgumentsIteratorPrototype.cpp: Added.
2531         (JSC::ArgumentsIteratorPrototype::finishCreation):
2532         (JSC::argumentsIteratorPrototypeFuncIterator):
2533         (JSC::argumentsIteratorPrototypeFuncNext):
2534         * runtime/ArgumentsIteratorPrototype.h: Added.
2535         (JSC::ArgumentsIteratorPrototype::create):
2536         (JSC::ArgumentsIteratorPrototype::createStructure):
2537         (JSC::ArgumentsIteratorPrototype::ArgumentsIteratorPrototype):
2538         * runtime/CommonIdentifiers.h:
2539         * runtime/JSArgumentsIterator.cpp: Added.
2540         (JSC::JSArgumentsIterator::finishCreation):
2541         * runtime/JSArgumentsIterator.h: Added.
2542         (JSC::JSArgumentsIterator::createStructure):
2543         (JSC::JSArgumentsIterator::create):
2544         (JSC::JSArgumentsIterator::next):
2545         (JSC::JSArgumentsIterator::JSArgumentsIterator):
2546         * runtime/JSArrayIterator.cpp:
2547         (JSC::createIteratorResult):
2548         * runtime/JSGlobalObject.cpp:
2549         * runtime/JSGlobalObject.h:
2550
2551 2013-11-06  Filip Pizlo  <fpizlo@apple.com>
2552
2553         DFG CheckArray(NonArray) should prove that the child isn't an array
2554         https://bugs.webkit.org/show_bug.cgi?id=123911
2555         <rdar://problem/15202803>
2556
2557         Reviewed by Mark Hahnenberg.
2558
2559         * dfg/DFGSpeculativeJIT.cpp:
2560         (JSC::DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode):
2561         * ftl/FTLLowerDFGToLLVM.cpp:
2562         (JSC::FTL::LowerDFGToLLVM::isArrayType):
2563
2564 2013-11-06  Mark Hahnenberg  <mhahnenberg@apple.com>
2565
2566         JSExport doesn't support constructors
2567         https://bugs.webkit.org/show_bug.cgi?id=123380
2568
2569         Reviewed by Geoffrey Garen.
2570
2571         Needed another linked-on-or-after check for when we're deciding whether
2572         we should copy over init family methods.
2573
2574         Factored out the link time checks into a separate function so that they can be cached.
2575
2576         Factored out the check for init-family method selectors into helper function and changed it to
2577         match the description in the clang docs, namely that there can be underscores at the beginning
2578         and the first letter after 'init' part of the selector (if there is one) must be a capital letter.
2579
2580         Updated tests to make sure we don't treat "initialize" as an init-family method and that we do
2581         treat "_init" as an init-family method.
2582
2583         * API/JSWrapperMap.h:
2584         * API/JSWrapperMap.mm:
2585         (isInitFamilyMethod):
2586         (shouldSkipMethodWithName):
2587         (copyMethodsToObject):
2588         (allocateConstructorForCustomClass):
2589         (supportsInitMethodConstructors):
2590         * API/tests/testapi.mm:
2591         (-[ClassA initialize]):
2592         (-[ClassD initialize]):
2593
2594 2013-11-06  Michael Saboff  <msaboff@apple.com>
2595
2596         Change ctiTrampoline into a thunk
2597         https://bugs.webkit.org/show_bug.cgi?id=123844
2598
2599         Reviewed by Filip Pizlo.
2600
2601         Converted ctiTrampoline and ctiOpThrowNotCaught into thunks named callToJavaScript
2602         and returnFromJavaScript.  Cleaned up and in some cases removed JITStubsXXX.h files
2603         after removing ctiTrampoline and ctiOpThrowNotCaught.  Added callJavaScriptJITFunction
2604         to VM that is a function pointer to the callToJavaScript thunk.
2605
2606         * GNUmakefile.list.am:
2607         * JavaScriptCore.xcodeproj/project.pbxproj:
2608         * dfg/DFGDriver.cpp:
2609         (JSC::DFG::compileImpl):
2610         * jit/JITCode.cpp:
2611         (JSC::JITCode::execute):
2612         * jit/JITExceptions.cpp:
2613         (JSC::genericUnwind):
2614         * jit/JITStubs.cpp:
2615         * jit/JITStubs.h:
2616         * jit/JITStubsARM.h:
2617         * jit/JITStubsARM64.h: Removed.
2618         * jit/JITStubsARMv7.h:
2619         * jit/JITStubsMIPS.h: Removed.
2620         * jit/JITStubsMSVC64.asm:
2621         * jit/JITStubsSH4.h: Removed.
2622         * jit/JITStubsX86.h:
2623         * jit/JITStubsX86_64.h:
2624         * jit/JSInterfaceJIT.h:
2625         * jit/ThunkGenerators.cpp:
2626         (JSC::returnFromJavaScript):
2627         (JSC::callToJavaScript):
2628         * jit/ThunkGenerators.h:
2629         * runtime/VM.cpp:
2630         (JSC::VM::VM):
2631         * runtime/VM.h:
2632
2633 2013-11-05  Filip Pizlo  <fpizlo@apple.com>
2634
2635         FTL should support StringCharCodeAt
2636         https://bugs.webkit.org/show_bug.cgi?id=123854
2637
2638         Reviewed by Sam Weinig.
2639
2640         * ftl/FTLCapabilities.cpp:
2641         (JSC::FTL::canCompile):
2642         * ftl/FTLLowerDFGToLLVM.cpp:
2643         (JSC::FTL::LowerDFGToLLVM::compileNode):
2644         (JSC::FTL::LowerDFGToLLVM::compileStringCharCodeAt):
2645
2646 2013-11-05  Filip Pizlo  <fpizlo@apple.com>
2647
2648         FTL should support NewObject
2649         https://bugs.webkit.org/show_bug.cgi?id=123849
2650
2651         Reviewed by Oliver Hunt.
2652
2653         * ftl/FTLAbstractHeapRepository.cpp:
2654         (JSC::FTL::AbstractHeapRepository::AbstractHeapRepository):
2655         * ftl/FTLAbstractHeapRepository.h:
2656         * ftl/FTLCapabilities.cpp:
2657         (JSC::FTL::canCompile):
2658         * ftl/FTLIntrinsicRepository.h:
2659         * ftl/FTLLowerDFGToLLVM.cpp:
2660         (JSC::FTL::LowerDFGToLLVM::compileNode):
2661         (JSC::FTL::LowerDFGToLLVM::compileNewObject):
2662         (JSC::FTL::LowerDFGToLLVM::allocate):
2663
2664 2013-11-05  Filip Pizlo  <fpizlo@apple.com>
2665
2666         FTL should support StringCharAt
2667         https://bugs.webkit.org/show_bug.cgi?id=123855
2668
2669         Reviewed by Oliver Hunt.
2670         
2671         This is just like GetByVal for String, so we reuse that code.
2672
2673         * ftl/FTLCapabilities.cpp:
2674         (JSC::FTL::canCompile):
2675         * ftl/FTLLowerDFGToLLVM.cpp:
2676         (JSC::FTL::LowerDFGToLLVM::compileNode):
2677         (JSC::FTL::LowerDFGToLLVM::compileGetByVal):
2678         (JSC::FTL::LowerDFGToLLVM::compileStringCharAt):
2679
2680 2013-11-05  Filip Pizlo  <fpizlo@apple.com>
2681
2682         Remove old unused code for hypothetical LLVM intrinsics
2683         https://bugs.webkit.org/show_bug.cgi?id=123824
2684
2685         Reviewed by Oliver Hunt.
2686
2687         * ftl/FTLIntrinsicRepository.h:
2688
2689 2013-11-05  Filip Pizlo  <fpizlo@apple.com>
2690
2691         FTL should support String character access operations
2692         https://bugs.webkit.org/show_bug.cgi?id=123783
2693
2694         Reviewed by Oliver Hunt.
2695         
2696         Implements:
2697         
2698         - string.length
2699         
2700         - string[index]
2701
2702         * ftl/FTLAbstractHeapRepository.h:
2703         * ftl/FTLCapabilities.cpp:
2704         (JSC::FTL::canCompile):
2705         * ftl/FTLIntrinsicRepository.h:
2706         * ftl/FTLLowerDFGToLLVM.cpp:
2707         (JSC::FTL::LowerDFGToLLVM::compileGetIndexedPropertyStorage):
2708         (JSC::FTL::LowerDFGToLLVM::compileGetArrayLength):
2709         (JSC::FTL::LowerDFGToLLVM::compileGetByVal):
2710
2711 2013-11-05  Mark Hahnenberg  <mhahnenberg@apple.com>
2712
2713         ObjCCallbackFunctionImpl's NSInvocation shouldn't retain its target or arguments
2714         https://bugs.webkit.org/show_bug.cgi?id=123822
2715
2716         Reviewed by Geoffrey Garen.
2717
2718         Using -retainArguments on ObjCCallbackFunctionImpl's NSInvocation leads to memory leaks.
2719         We should handle retaining/releasing the target ourselves, and we should never retain the arguments.
2720
2721         * API/ObjCCallbackFunction.mm:
2722         (JSC::ObjCCallbackFunctionImpl::~ObjCCallbackFunctionImpl):
2723         (JSC::ObjCCallbackFunctionImpl::name):
2724         (objCCallbackFunctionForInvocation):
2725         (objCCallbackFunctionForMethod):
2726         (objCCallbackFunctionForBlock):
2727
2728 2013-11-05  Julien Brianceau  <jbriance@cisco.com>
2729
2730         Fix build for architectures with 4 argument registers (broken since r158681).
2731         https://bugs.webkit.org/show_bug.cgi?id=123826
2732
2733         Reviewed by Michael Saboff.
2734
2735         * jit/CCallHelpers.h:
2736         (JSC::CCallHelpers::setupArgumentsWithExecState):
2737         (JSC::CCallHelpers::setupArguments):
2738
2739 2013-11-05  Filip Pizlo  <fpizlo@apple.com>
2740
2741         Fix register allocation inside control flow in GetByVal String
2742         https://bugs.webkit.org/show_bug.cgi?id=123816
2743
2744         Reviewed by Geoffrey Garen.
2745
2746         * dfg/DFGSpeculativeJIT.cpp:
2747         (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
2748
2749 2013-11-05  Filip Pizlo  <fpizlo@apple.com>
2750
2751         Remove FTL::LowerDFGToLLVM::compileJSConstant()
2752         https://bugs.webkit.org/show_bug.cgi?id=123817
2753
2754         Reviewed by Geoffrey Garen.
2755
2756         * ftl/FTLLowerDFGToLLVM.cpp:
2757
2758 2013-11-04  Filip Pizlo  <fpizlo@apple.com>
2759
2760         FTL should support PutById
2761         https://bugs.webkit.org/show_bug.cgi?id=123784
2762
2763         Reviewed by Geoffrey Garen.
2764
2765         * ftl/FTLAbbreviations.h:
2766         (JSC::FTL::buildCall):
2767         * ftl/FTLCapabilities.cpp:
2768         (JSC::FTL::canCompile):
2769         * ftl/FTLCompile.cpp:
2770         (JSC::FTL::generateICFastPath):
2771         (JSC::FTL::fixFunctionBasedOnStackMaps):
2772         * ftl/FTLInlineCacheDescriptor.h:
2773         (JSC::FTL::InlineCacheDescriptor::InlineCacheDescriptor):
2774         (JSC::FTL::GetByIdDescriptor::GetByIdDescriptor):
2775         (JSC::FTL::PutByIdDescriptor::PutByIdDescriptor):
2776         (JSC::FTL::PutByIdDescriptor::ecmaMode):
2777         (JSC::FTL::PutByIdDescriptor::putKind):
2778         * ftl/FTLIntrinsicRepository.h:
2779         * ftl/FTLLowerDFGToLLVM.cpp:
2780         (JSC::FTL::LowerDFGToLLVM::compileNode):
2781         (JSC::FTL::LowerDFGToLLVM::compilePutById):
2782         * ftl/FTLOutput.h:
2783         (JSC::FTL::Output::call):
2784         * ftl/FTLSlowPathCall.cpp:
2785         (JSC::FTL::callOperation):
2786         * ftl/FTLSlowPathCall.h:
2787         * ftl/FTLState.h:
2788         * jit/CCallHelpers.h:
2789         (JSC::CCallHelpers::setupArguments):
2790         * runtime/Executable.h:
2791         (JSC::ScriptExecutable::ecmaMode):
2792
2793 2013-11-04  Filip Pizlo  <fpizlo@apple.com>
2794
2795         GetById->GetByOffset and PutById->PutByOffset folding should mark haveStructures since it may result in structure transition watchpoints
2796         https://bugs.webkit.org/show_bug.cgi?id=123788
2797
2798         Reviewed by Geoffrey Garen.
2799         
2800         haveStructures is true if there are any currentlyKnownStructures that have
2801         interesting values, since that's the only time when clobbering needs to do things.
2802         It's a really important compile-time optimization. But that also means that anytime
2803         we might cause currentlyKnownStructures to get set - like when we might insert some
2804         structure transition watchpoints - we need to set haveStructures. We were forgetting
2805         to do that for GetById->GetByOffset and PutById->PutByOffset because, I guess, we
2806         forgot that those might insert structure transition watchpoints.
2807
2808         * dfg/DFGAbstractInterpreterInlines.h:
2809         (JSC::DFG::::executeEffects):
2810
2811 2013-11-05  Julien Brianceau  <jbriance@cisco.com>
2812
2813         [mips] Make regTx registers match between JSInterfaceJIT and GPRInfo.
2814         https://bugs.webkit.org/show_bug.cgi?id=123807
2815
2816         Reviewed by Mark Lam.
2817
2818         * jit/GPRInfo.h:
2819         (JSC::GPRInfo::toIndex):
2820         * jit/JSInterfaceJIT.h:
2821
2822 2013-11-05  Julien Brianceau  <jbriance@cisco.com>
2823
2824         REGRESSION(r158315): Fix register mixup in JIT::compileOpCall.
2825         https://bugs.webkit.org/show_bug.cgi?id=123799
2826
2827         Reviewed by Mark Lam.
2828
2829         Changeset r158315 is crashing architectures where JSInterfaceJIT::regT3 is
2830         different from GPRInfo::regT3. This is the case for MIPS architecture.
2831
2832         * jit/JITCall32_64.cpp:
2833         (JSC::JIT::compileOpCall):
2834
2835 2013-11-05  Julien Brianceau  <jbriance@cisco.com>
2836
2837         [mips] Fix build for MIPS platforms.
2838         https://bugs.webkit.org/show_bug.cgi?id=123796
2839
2840         Reviewed by Michael Saboff.
2841
2842         * assembler/LinkBuffer.cpp:
2843         (JSC::LinkBuffer::linkCode): Add specific MIPS call to relocateJumps.
2844         * assembler/MIPSAssembler.h: Remove executableCopy (because of r157690) and set relocateJumps function public.
2845         (JSC::MIPSAssembler::firstRegister):
2846         (JSC::MIPSAssembler::lastRegister):
2847         (JSC::MIPSAssembler::firstFPRegister):
2848         (JSC::MIPSAssembler::lastFPRegister):
2849         (JSC::MIPSAssembler::buffer): Needed since r157690.
2850         * assembler/MacroAssemblerMIPS.h: Add framePointerRegister.
2851         (JSC::MacroAssemblerMIPS::revertJumpReplacementToPatchableBranchPtrWithPatch): Remove unused parameter warning.
2852
2853 2013-11-04  Filip Pizlo  <fpizlo@apple.com>
2854
2855         internal-js-tests.yaml/Octane/stress-tests/pdfjs.js.default: ASSERTION FAILED: m_state.forNode(child).m_futurePossibleStructure.isSubsetOf(StructureSet(structure)) at DFGConstantFoldingPhase.cpp:249
2856         https://bugs.webkit.org/show_bug.cgi?id=123778
2857
2858         Unreviewed, remove the other such assertion.
2859
2860         * dfg/DFGConstantFoldingPhase.cpp:
2861         (JSC::DFG::ConstantFoldingPhase::foldConstants):
2862
2863 2013-11-04  Michael Saboff  <msaboff@apple.com>
2864
2865         REGRESSION(r158586): plugins/refcount-leaks.html fails
2866         https://bugs.webkit.org/show_bug.cgi?id=123765
2867
2868         We were leaving a hole of one slot above a new frame when pushing the new frame on
2869         the stack with pushFrame().  This unused slot can contain residual values that will
2870         be marked during GC.
2871
2872         Reviewed by Filip Pizlo.
2873
2874         * interpreter/JSStackInlines.h:
2875         (JSC::JSStack::pushFrame):
2876
2877 2013-11-04  Filip Pizlo  <fpizlo@apple.com>
2878
2879         internal-js-tests.yaml/Octane/stress-tests/pdfjs.js.default: ASSERTION FAILED: m_state.forNode(child).m_futurePossibleStructure.isSubsetOf(StructureSet(structure)) at DFGConstantFoldingPhase.cpp:249
2880         https://bugs.webkit.org/show_bug.cgi?id=123778
2881
2882         Reviewed by Geoffrey Garen.
2883         
2884         This assertion was just wrong: ee do an execute() above the assertion. The assertion
2885         is asserting that if we need a watchpoint (i.e. the best proven structure was not the
2886         current structure) then it must be the future possible structure.  But while that may
2887         have been true before execute(), it won't be true after if the PutById was a
2888         transition. Of course, this can only happen in the concurrent JIT in which case the
2889         code would be invalidated anyway since we would only transform the code in a way that
2890         leveraged the lack of a transition if we inserted a watchpoint, in which case we
2891         would realize that the watchpoint had been fired during compilation.
2892         
2893         Since this requires concurrent JIT awesomeness, I don't know how to test it.
2894
2895         * dfg/DFGConstantFoldingPhase.cpp:
2896         (JSC::DFG::ConstantFoldingPhase::foldConstants):
2897
2898 2013-11-04  Filip Pizlo  <fpizlo@apple.com>
2899
2900         DFG CheckArray(String) should just be a Phantom(String:)
2901         https://bugs.webkit.org/show_bug.cgi?id=123779
2902
2903         Reviewed by Geoffrey Garen.
2904         
2905         This should be a speed-up since Phantom(String:) is smart enough to use the string
2906         structure. It should also be a simplification since CheckArray(String) was totally
2907         redundant.
2908         
2909         Also FixupPhase was assuming that it may see CheckArray's. That's wrong. It can
2910         create CheckArray's but it won't see them as input since no previous phase can
2911         create them.
2912
2913         * dfg/DFGFixupPhase.cpp:
2914         (JSC::DFG::FixupPhase::fixupNode):
2915         (JSC::DFG::FixupPhase::checkArray):
2916         * dfg/DFGSpeculativeJIT.cpp:
2917         (JSC::DFG::SpeculativeJIT::checkArray):
2918
2919 2013-11-04  Filip Pizlo  <fpizlo@apple.com>
2920
2921         DFG NewArray/NewArrayBuffer shouldn't be constructing with negative indexing
2922         https://bugs.webkit.org/show_bug.cgi?id=123760
2923         <rdar://problem/15356705>
2924
2925         Reviewed by Mark Hahnenberg and Oliver Hunt.
2926
2927         * dfg/DFGOperations.cpp:
2928
2929 2013-11-04  Michael Saboff  <msaboff@apple.com>
2930
2931         Eliminate HostCall bit from JSC Stack CallerFrame
2932         https://bugs.webkit.org/show_bug.cgi?id=123642
2933
2934         Reviewed by Geoffrey Garen.
2935
2936         Replace the HostCallFrame bit or'ed to the CallerFrame value in a CallFrame with
2937         a VM entry sentinel CallFrame.  Logically, the VM entry sentinel call frame is
2938         pushed on the stack before the callee frame when calling from native to JavaScript
2939         code.  The callee frame's CallerFrame points at the VM entry sentinel call frame
2940         and the VM entry sentinel call frame's CallerFrame points to the real caller.
2941         The VM entry sentinel call frame has a sentinel (1) in the CodeBlock to indicate
2942         its a VM entry sentinel call frame.  It's ScopeChain has vm.topCallFrame at the
2943         time of the call.  This allows for a complete stack walk as well as walking just
2944         the contiguous JS frames.
2945
2946         The VM entry sentinel call frame and callee frame are currently allocated and
2947         initialized in ExecState::init(), but this initialization will be moved to
2948         ctiTrampoline when we actually move onto the native stack.
2949
2950         * bytecode/CodeBlock.cpp:
2951         (JSC::CodeBlock::noticeIncomingCall):
2952         * debugger/DebuggerCallFrame.cpp:
2953         (JSC::DebuggerCallFrame::callerFrame):
2954         * dfg/DFGJITCompiler.cpp:
2955         (JSC::DFG::JITCompiler::compileExceptionHandlers):
2956         * interpreter/CallFrame.h:
2957         (JSC::ExecState::frameExtent):
2958         (JSC::ExecState::currentVPC):
2959         (JSC::ExecState::setCurrentVPC):
2960         (JSC::ExecState::init):
2961         (JSC::ExecState::noCaller):
2962         (JSC::ExecState::isVMEntrySentinel):
2963         (JSC::ExecState::vmEntrySentinelCallerFrame):
2964         (JSC::ExecState::initializeVMEntrySentinelFrame):
2965         (JSC::ExecState::callerFrameSkippingVMEntrySentinel):
2966         (JSC::ExecState::vmEntrySentinelCodeBlock):
2967         * interpreter/Interpreter.cpp:
2968         (JSC::unwindCallFrame):
2969         (JSC::Interpreter::getStackTrace):
2970         * interpreter/Interpreter.h:
2971         (JSC::TopCallFrameSetter::TopCallFrameSetter):
2972         (JSC::TopCallFrameSetter::~TopCallFrameSetter):
2973         (JSC::NativeCallFrameTracer::NativeCallFrameTracer):
2974         * interpreter/JSStack.cpp:
2975         (JSC::JSStack::~JSStack):
2976         * interpreter/JSStackInlines.h:
2977         (JSC::JSStack::getStartOfFrame):
2978         (JSC::JSStack::pushFrame):
2979         (JSC::JSStack::popFrame):
2980         * interpreter/Register.h:
2981         (JSC::Register::operator=):
2982         (JSC::Register::callFrame):
2983         * interpreter/StackVisitor.cpp:
2984         (JSC::StackVisitor::readFrame):
2985         (JSC::StackVisitor::readNonInlinedFrame):
2986         (JSC::StackVisitor::readInlinedFrame):
2987         (JSC::StackVisitor::Frame::print):
2988         * interpreter/VMInspector.cpp:
2989         (JSC::VMInspector::countFrames):
2990         * jit/JIT.cpp:
2991         (JSC::JIT::privateCompileExceptionHandlers):
2992         * jit/JITOperations.cpp:
2993         * jit/JITStubsARM.h:
2994         (JSC::ctiTrampoline):
2995         * jit/JITStubsARM64.h:
2996         * jit/JITStubsARMv7.h:
2997         (JSC::ctiTrampoline):
2998         * jit/JITStubsMIPS.h:
2999         * jit/JITStubsMSVC64.asm:
3000         * jit/JITStubsSH4.h:
3001         * jit/JITStubsX86.h:
3002         * jit/JITStubsX86_64.h:
3003         * jsc.cpp:
3004         (functionDumpCallFrame):
3005         * llint/LowLevelInterpreter.cpp:
3006         (JSC::CLoop::execute):
3007         * runtime/VM.cpp:
3008         (JSC::VM::VM):
3009         (JSC::VM::throwException):
3010
3011 2013-11-04  Mark Hahnenberg  <mhahnenberg@apple.com>
3012
3013         JSArrayBufferViews of length 0 allocate 0 CopiedSpace bytes, which is invalid
3014         https://bugs.webkit.org/show_bug.cgi?id=123746
3015
3016         Reviewed by Geoffrey Garen.
3017
3018         This patch disallows clients from allocating 0 bytes in CopiedSpace. We enforce this invariant 
3019         with an ASSERT in C++ code and a breakpoint in JIT code. Clients who care about 0-byte 
3020         allocations (like JSArrayBufferViews) must handle that case themselves, but we don't punish 
3021         anybody else for the rare case that somebody decides to allocate a 0-length typed array. 
3022         It also makes the allocation and copying cases consistent for CopiedSpace: no 0-byte allocations, 
3023         no 0-byte copying.
3024  
3025         Also added a check so that JSArrayBufferViews don't try to copy their m_vector backing store when 
3026         their length is 0. Also sprinkled several ASSERTs throughout the JSArrayBufferView code to make sure that 
3027         when length is 0 m_vector is null.
3028
3029         * dfg/DFGSpeculativeJIT.cpp:
3030         (JSC::DFG::SpeculativeJIT::compileNewTypedArray):
3031         * dfg/DFGSpeculativeJIT.h:
3032         (JSC::DFG::SpeculativeJIT::emitAllocateBasicStorage):
3033         * heap/CopiedSpaceInlines.h:
3034         (JSC::CopiedSpace::tryAllocate):
3035         * runtime/ArrayBuffer.h:
3036         (JSC::ArrayBuffer::create):
3037         * runtime/JSArrayBufferView.cpp:
3038         (JSC::JSArrayBufferView::ConstructionContext::ConstructionContext):
3039         * runtime/JSGenericTypedArrayViewInlines.h:
3040         (JSC::::visitChildren):
3041         (JSC::::copyBackingStore):
3042         (JSC::::slowDownAndWasteMemory):
3043
3044 2013-11-04  Julien Brianceau  <jbriance@cisco.com>
3045
3046         [sh4] Refactor jumps in baseline JIT to return label after the jump.
3047         https://bugs.webkit.org/show_bug.cgi?id=123734
3048
3049         Reviewed by Michael Saboff.
3050
3051         Current implementation of jumps in sh4 baseline JIT returns a label on the jump itself
3052         and not after it. This is not correct and leads to issues like infinite loop the DFG
3053         (https://bugs.webkit.org/show_bug.cgi?id=122597 for instance). This refactor fixes this
3054         and also simplifies the link and relink procedures for sh4 jumps.
3055
3056         * assembler/MacroAssemblerSH4.h:
3057         (JSC::MacroAssemblerSH4::branchDouble):
3058         (JSC::MacroAssemblerSH4::branchTrue):
3059         (JSC::MacroAssemblerSH4::branchFalse):
3060         * assembler/SH4Assembler.h:
3061         (JSC::SH4Assembler::jmp):
3062         (JSC::SH4Assembler::extraInstrForBranch):
3063         (JSC::SH4Assembler::jne):
3064         (JSC::SH4Assembler::je):
3065         (JSC::SH4Assembler::bra):
3066         (JSC::SH4Assembler::linkJump):
3067         (JSC::SH4Assembler::relinkJump):
3068
3069 2013-11-03  Filip Pizlo  <fpizlo@apple.com>
3070
3071         Generated color wheel displays incorrectly (regressed in r155567)
3072         https://bugs.webkit.org/show_bug.cgi?id=123664
3073
3074         Reviewed by Andreas Kling.
3075
3076         Interestingly, r155567 just "un-broke" the attempt to constant-fold ArithMod, but
3077         that constant folding was just wrong to begin with. There is no evidence that this
3078         constant folding rule is profitable. I'm removing it instead of trying to think
3079         about what it means for it to be correct.
3080
3081         * dfg/DFGAbstractInterpreterInlines.h:
3082         (JSC::DFG::::executeEffects):
3083
3084 2013-11-03  Filip Pizlo  <fpizlo@apple.com>
3085
3086         Unreviewed, it is no longer necessary to call DisablePrettyStackTrace.
3087
3088         * llvm/library/LLVMExports.cpp:
3089         (initializeAndGetJSCLLVMAPI):
3090
3091 2013-11-02  Mark Lam  <mark.lam@apple.com>
3092
3093         Assertion failure in non-JIT'ed LLInt on ARM Thumb.
3094         https://bugs.webkit.org/show_bug.cgi?id=97569.
3095
3096         Reviewed by Geoffrey Garen.
3097
3098         * assembler/MacroAssemblerCodeRef.h:
3099         - Thumb2 alignment assertions do not apply to the C Loop LLINT because
3100           the arguments passed to those assertions are actually OpcodeIDs
3101           masquerading as addresses.
3102         * llint/LLIntOfflineAsmConfig.h:
3103         - Some of the #defines belong in the !ENABLE(LLINT_C_LOOP) section.
3104           Moving them there.
3105         * llint/LowLevelInterpreter.cpp:
3106         - Keep the compiler happy from some unreferenced C Loop labels.
3107
3108 2013-11-02  Filip Pizlo  <fpizlo@apple.com>
3109
3110         FTL should use LLVM intrinsics for OSR exit, watchpoints, inline caches, and stack layout
3111         https://bugs.webkit.org/show_bug.cgi?id=122318
3112
3113         Reviewed by Geoffrey Garen.
3114         
3115         This all now works. This patch just updates our implementation to work with LLVM trunk,
3116         and removes all of the old code that tried to do OSR exits and heap accesses without
3117         the benefit of those intrinsics.
3118         
3119         In particular:
3120         
3121         - StackMaps parsing now uses the new, less compact, but more future-proof, format.
3122         
3123         - Remove the ftlUsesStackmaps() option and hard-code ftlUsesStackmaps = true. Remove
3124           all code for ftlUsesStackmaps = false, since that was only there for back when we
3125           didn't have the intrinsics.
3126         
3127         - Remove the other experimental OSR options (useLLVMOSRExitIntrinsic,
3128           ftlTrapsOnOSRExit, and FTLOSRExitOmitsMarshalling).
3129         
3130         - Remove LowerDFGToLLVM's use of the ExitThunkGenerator since we don't need to generate
3131           the exit thunks until after we parse the stackmaps.
3132         
3133         - Remove all of the exit thunk and compiler code for the no-stackmaps case.
3134
3135         * dfg/DFGDriver.cpp:
3136         (JSC::DFG::compileImpl):
3137         * ftl/FTLCompile.cpp:
3138         (JSC::FTL::mmAllocateDataSection):
3139         * ftl/FTLExitThunkGenerator.cpp:
3140         (JSC::FTL::ExitThunkGenerator::emitThunk):
3141         * ftl/FTLIntrinsicRepository.h:
3142         * ftl/FTLLocation.cpp:
3143         (JSC::FTL::Location::forStackmaps):
3144         * ftl/FTLLowerDFGToLLVM.cpp:
3145         (JSC::FTL::LowerDFGToLLVM::LowerDFGToLLVM):
3146         (JSC::FTL::LowerDFGToLLVM::lower):
3147         (JSC::FTL::LowerDFGToLLVM::compileGetById):
3148         (JSC::FTL::LowerDFGToLLVM::compileInvalidationPoint):
3149         (JSC::FTL::LowerDFGToLLVM::appendOSRExit):
3150         (JSC::FTL::LowerDFGToLLVM::emitOSRExitCall):
3151         (JSC::FTL::LowerDFGToLLVM::callStackmap):
3152         (JSC::FTL::LowerDFGToLLVM::addExitArgumentForNode):
3153         * ftl/FTLOSRExitCompilationInfo.h:
3154         (JSC::FTL::OSRExitCompilationInfo::OSRExitCompilationInfo):
3155         * ftl/FTLOSRExitCompiler.cpp:
3156         (JSC::FTL::compileStub):
3157         (JSC::FTL::compileFTLOSRExit):
3158         * ftl/FTLStackMaps.cpp:
3159         (JSC::FTL::StackMaps::Location::parse):
3160         (JSC::FTL::StackMaps::parse):
3161         (WTF::printInternal):
3162         * ftl/FTLStackMaps.h:
3163         * ftl/FTLThunks.cpp:
3164         (JSC::FTL::osrExitGenerationThunkGenerator):
3165         * ftl/FTLThunks.h:
3166         (JSC::FTL::Thunks::getOSRExitGenerationThunk):
3167         * runtime/Options.h:
3168
3169 2013-11-02  Patrick Gansterer  <paroga@webkit.org>
3170
3171         Add missing getHostCallReturnValue() for MSVC ARM
3172         https://bugs.webkit.org/show_bug.cgi?id=123685
3173
3174         Reviewed by Darin Adler.
3175
3176         * jit/JITStubsARM.h:
3177
3178 2013-11-02  Patrick Gansterer  <paroga@webkit.org>
3179
3180         Fix MSVC warning about unary minus operator
3181         https://bugs.webkit.org/show_bug.cgi?id=123674
3182
3183         Reviewed by Darin Adler.
3184
3185         Change some static_cast<> to silence the following warning of Microsoft compiler:
3186         warning C4146: unary minus operator applied to unsigned type, result still unsigned
3187
3188         * jit/Repatch.cpp:
3189         (JSC::emitPutTransitionStub):
3190
3191 2013-11-02  Filip Pizlo  <fpizlo@apple.com>
3192
3193         Disable LLVM's pretty stack traces, which involve intercepting fatal signals
3194         https://bugs.webkit.org/show_bug.cgi?id=123681
3195
3196         Reviewed by Geoffrey Garen.
3197
3198         * llvm/library/LLVMExports.cpp:
3199         (initializeAndGetJSCLLVMAPI):
3200
3201 2013-11-02  Filip Pizlo  <fpizlo@apple.com>
3202
3203         LLVM assertion failures should funnel into WTF's crash handling
3204         https://bugs.webkit.org/show_bug.cgi?id=123682
3205
3206         Reviewed by Geoffrey Garen.
3207         
3208         Inside llvmForJSC, we override assertion-related functions and funnel them
3209         into g_llvmTrapCallback(). We also now register a fatal error handler inside
3210         the library and funnel that into g_llvmTrapCallback, and have
3211         initializeAndGetJSCLLVMAPI() take such a callback as an argument.
3212         
3213         Inside JSC, we no longer call LLVMInstallFatalErrorHandler() but instead we
3214         pass WTFLogAlwaysAndCrash() as the trap callback for llvmForJSC.
3215
3216         * llvm/InitializeLLVM.cpp:
3217         (JSC::initializeLLVM):
3218         * llvm/InitializeLLVMPOSIX.cpp:
3219         (JSC::initializeLLVMPOSIX):
3220         * llvm/library/LLVMExports.cpp:
3221         (llvmCrash):
3222         (initializeAndGetJSCLLVMAPI):
3223         * llvm/library/LLVMOverrides.cpp:
3224         (raise):
3225         (__assert_rtn):
3226         (abort):
3227         * llvm/library/LLVMTrapCallback.h: Added.
3228
3229 2013-11-02  Filip Pizlo  <fpizlo@apple.com>
3230
3231         CodeBlock::jettison() shouldn't call baselineVersion()
3232         https://bugs.webkit.org/show_bug.cgi?id=123675
3233
3234         Reviewed by Geoffrey Garen.
3235         
3236         Fix more uses of baselineVersion().
3237
3238         * bytecode/CodeBlock.cpp:
3239         (JSC::CodeBlock::jettison):
3240         * bytecode/CodeBlock.h:
3241         * bytecode/ProfiledCodeBlockJettisoningWatchpoint.cpp:
3242         (JSC::ProfiledCodeBlockJettisoningWatchpoint::fireInternal):
3243
3244 2013-11-02  Filip Pizlo  <fpizlo@apple.com>
3245
3246         LLVM asserts in internal-js-tests.yaml/Octane/stress-tests/mandreel.js
3247         https://bugs.webkit.org/show_bug.cgi?id=123535
3248
3249         Reviewed by Geoffrey Garen.
3250         
3251         Use double comparisons for doubles.
3252
3253         * ftl/FTLLowerDFGToLLVM.cpp:
3254         (JSC::FTL::LowerDFGToLLVM::doubleToInt32):
3255
3256 2013-11-02  Patrick Gansterer  <paroga@webkit.org>
3257
3258         Various small WinCE build fixes
3259
3260         * jsc.cpp:
3261         (main):
3262
3263 2013-11-02  Patrick Gansterer  <paroga@webkit.org>
3264
3265         Fix MSVC ARM build after r157581.
3266
3267         * jit/JITStubsARM.h:
3268
3269 2013-11-01  Filip Pizlo  <fpizlo@apple.com>
3270
3271         FTL should use a simple optimization pipeline by default
3272         https://bugs.webkit.org/show_bug.cgi?id=123638
3273
3274         Reviewed by Geoffrey Garen.
3275         
3276         20% speed-up on imagine-gaussian-blur, when combined with --ftlUsesStackmaps=true.
3277
3278         * ftl/FTLCompile.cpp:
3279         (JSC::FTL::compile):
3280         * runtime/Options.h:
3281
3282 2013-11-01  Andreas Kling  <akling@apple.com>
3283
3284         Neuter WTF_MAKE_FAST_ALLOCATED in GLOBAL_FASTMALLOC_NEW builds.
3285         <https://webkit.org/b/123639>
3286
3287         JSC::ParserArenaRefCounted really needed to have the new/delete
3288         operators overridden, in order for JSC::ScopeNode to be able to
3289         choose that "operator new" out of the two it inherits.
3290
3291         Reviewed by Anders Carlsson.
3292
3293 2013-11-01  Filip Pizlo  <fpizlo@apple.com>
3294
3295         OSR exit profiling should be robust against all code being cleared
3296         https://bugs.webkit.org/show_bug.cgi?id=123629
3297         <rdar://problem/15365476>
3298
3299         Reviewed by Michael Saboff.
3300         
3301         The problem here is two-fold:
3302
3303         1) A watchpoint (i.e. ProfiledCodeBlockJettisoningWatchpoint) may be fired after we
3304         have cleared the CodeBlock for all or some Executables.  This means that doing
3305         codeBlock->baselineVersion() would either crash or return a bogus CodeBlock, since
3306         there wasn't a baseline code block reachable from the Executable anymore.  The
3307         solution is that we shouldn't be asking for the baseline code block reachable from
3308         the owning executable (what baselineVersion did), but instead we should be asking
3309         for the baseline version reachable from the code block being watchpointed (basically
3310         what CodeBlock::alternative() did).
3311
3312         2) If dealing with inlined code, baselienCodeBlockForOriginAndBaselineCodeBlock()
3313         may return null, for the same reason as above - we might have cleared the baseline
3314         codeblock for the executable that was inlined.  The solution is to just not do
3315         profiling if there isn't a baseline code block anymore.
3316
3317         * bytecode/CodeBlock.cpp:
3318         (JSC::CodeBlock::baselineAlternative):
3319         (JSC::CodeBlock::baselineVersion):
3320         (JSC::CodeBlock::jettison):
3321         * bytecode/CodeBlock.h:
3322         * bytecode/CodeBlockJettisoningWatchpoint.cpp:
3323         (JSC::CodeBlockJettisoningWatchpoint::fireInternal):
3324         * bytecode/ProfiledCodeBlockJettisoningWatchpoint.cpp:
3325         (JSC::ProfiledCodeBlockJettisoningWatchpoint::fireInternal):
3326         * dfg/DFGOSRExitBase.cpp:
3327         (JSC::DFG::OSRExitBase::considerAddingAsFrequentExitSiteSlow):
3328         * jit/AssemblyHelpers.h:
3329         (JSC::AssemblyHelpers::AssemblyHelpers):
3330         * runtime/Executable.cpp:
3331         (JSC::FunctionExecutable::baselineCodeBlockFor):
3332
3333 2013-10-31  Oliver Hunt  <oliver@apple.com>
3334
3335         JavaScript parser bug
3336         https://bugs.webkit.org/show_bug.cgi?id=123506
3337
3338         Reviewed by Mark Lam.
3339
3340         Add ParserState as an abstraction and use that to save and restore
3341         the parser state around nested functions (We'll need to use this in
3342         more places in future).  Also fix a minor error typo this testcases
3343         hit.
3344
3345         * parser/Parser.cpp:
3346         (JSC::::parseFunctionInfo):
3347         (JSC::::parseAssignmentExpression):
3348         * parser/Parser.h:
3349         (JSC::Parser::saveState):
3350         (JSC::Parser::restoreState):
3351
3352 2013-10-31  Filip Pizlo  <fpizlo@apple.com>
3353
3354         FTL Int32ToDouble should handle the forward type check case where you need a recovery
3355         https://bugs.webkit.org/show_bug.cgi?id=123605
3356
3357         Reviewed by Mark Hahnenberg.
3358         
3359         If you have a Int32ToDouble that needs to do a type check and it's required to do a
3360         forward exit, then it needs to manually pass in a value recovery for itself in the
3361         OSR exit - since this is one of those forward-exiting nodes that doesn't have a
3362         preceding MovHint.
3363
3364         * ftl/FTLLowerDFGToLLVM.cpp:
3365         (JSC::FTL::LowerDFGToLLVM::compileInt32ToDouble):
3366         (JSC::FTL::LowerDFGToLLVM::forwardTypeCheck):
3367
3368 2013-10-31  Filip Pizlo  <fpizlo@apple.com>
3369
3370         FTL should implement InvalidationPoint in terms of llvm.stackmap
3371         https://bugs.webkit.org/show_bug.cgi?id=113647
3372
3373         Reviewed by Mark Hahnenberg.
3374         
3375         This is pretty straightforward now that InvalidationPoint has exactly the semantics
3376         that agree with llvm.stackmap.
3377
3378         * ftl/FTLCompile.cpp:
3379         (JSC::FTL::fixFunctionBasedOnStackMaps):
3380         * ftl/FTLLowerDFGToLLVM.cpp:
3381         (JSC::FTL::LowerDFGToLLVM::compileInvalidationPoint):
3382         (JSC::FTL::LowerDFGToLLVM::emitOSRExitCall):
3383         (JSC::FTL::LowerDFGToLLVM::buildExitArguments):
3384         (JSC::FTL::LowerDFGToLLVM::callStackmap):
3385         * ftl/FTLOSRExitCompilationInfo.h:
3386         (JSC::FTL::OSRExitCompilationInfo::OSRExitCompilationInfo):
3387