.: == Rolled over to ChangeLog-2012-05-22 ==
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog-2012-05-22
1 2012-05-22  Yong Li  <yoli@rim.com>
2
3         [BlackBerry] getPlatformThreadRegisters() should fetch target thread's registers
4         https://bugs.webkit.org/show_bug.cgi?id=87148
5
6         Reviewed by George Staikos.
7
8         Our previous implementation of getPlatformThreadRegisters() read registers in current
9         thread's context but it is supposed to read the target thread's registers.
10
11         * heap/MachineStackMarker.cpp:
12         (JSC::getPlatformThreadRegisters):
13
14 2012-05-05  Filip Pizlo  <fpizlo@apple.com>
15
16         DFG should support reflective arguments access
17         https://bugs.webkit.org/show_bug.cgi?id=85721
18
19         Reviewed by Oliver Hunt.
20         
21         Merged r116345 from dfgopt.
22         
23         This adds support for op_create_arguments to the DFG. No other arguments-related
24         opcodes are added by this change, though it does add a lot of the scaffolding
25         necessary for the other ops.
26         
27         This also adds GetByVal/PutByVal optimizations for Arguments.
28         
29         Finally, this rationalizes slowPathCall with no return. Previously, that would
30         work via callOperation() overloads that took InvalidGPRReg as the return GPR.
31         But that creates awful ambiguity, since we had template functions that were
32         polymorphic over all parameters except the second, which was a GPRReg, and a
33         bunch of non-template overloads that also potentially had GPRReg as the second
34         argument. I finally started to hit this ambiguity and was getting absolutely
35         bizarre compiler errors, that made me feel like I was programming in SML. So,
36         I changed the no-argument overloads to take NoResultTag instead, which made
37         everything sensible again by eliminating the overload ambiguity.
38         
39         This is a ~7% speed-up on V8/earley and neutral elsewhere.
40
41         * bytecode/PredictedType.h:
42         (JSC::isArgumentsPrediction):
43         (JSC):
44         (JSC::isActionableMutableArrayPrediction):
45         * dfg/DFGAbstractState.cpp:
46         (JSC::DFG::AbstractState::execute):
47         * dfg/DFGByteCodeParser.cpp:
48         (JSC::DFG::ByteCodeParser::parseBlock):
49         * dfg/DFGCCallHelpers.h:
50         (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
51         (CCallHelpers):
52         * dfg/DFGCSEPhase.cpp:
53         (JSC::DFG::CSEPhase::performNodeCSE):
54         * dfg/DFGCapabilities.h:
55         (JSC::DFG::canCompileOpcode):
56         (JSC::DFG::canInlineOpcode):
57         * dfg/DFGCommon.h:
58         * dfg/DFGFixupPhase.cpp:
59         (JSC::DFG::FixupPhase::fixupNode):
60         * dfg/DFGNode.h:
61         (JSC::DFG::Node::unmodifiedArgumentsRegister):
62         (Node):
63         (JSC::DFG::Node::shouldSpeculateArguments):
64         * dfg/DFGNodeType.h:
65         (DFG):
66         * dfg/DFGOperations.cpp:
67         * dfg/DFGOperations.h:
68         * dfg/DFGPredictionPropagationPhase.cpp:
69         (JSC::DFG::PredictionPropagationPhase::propagate):
70         * dfg/DFGSpeculativeJIT.cpp:
71         (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
72         (JSC::DFG::SpeculativeJIT::compileGetByValOnArguments):
73         (DFG):
74         (JSC::DFG::SpeculativeJIT::compileGetArgumentsLength):
75         * dfg/DFGSpeculativeJIT.h:
76         (JSC::DFG::SpeculativeJIT::silentSpillAllRegistersImpl):
77         (SpeculativeJIT):
78         (JSC::DFG::SpeculativeJIT::pickCanTrample):
79         (JSC::DFG::SpeculativeJIT::callOperation):
80         * dfg/DFGSpeculativeJIT32_64.cpp:
81         (JSC::DFG::SpeculativeJIT::cachedPutById):
82         (JSC::DFG::SpeculativeJIT::compile):
83         * dfg/DFGSpeculativeJIT64.cpp:
84         (JSC::DFG::SpeculativeJIT::cachedPutById):
85         (JSC::DFG::SpeculativeJIT::compile):
86         * runtime/Arguments.h:
87         (ArgumentsData):
88         (Arguments):
89         (JSC::Arguments::offsetOfData):
90
91 2011-05-21  Geoffrey Garen  <ggaren@apple.com>
92
93         GC allocation trigger should be tuned to system RAM
94         https://bugs.webkit.org/show_bug.cgi?id=87039
95
96         Reviewed by Darin Adler.
97
98         This helps avoid OOM crashes on small platforms, and helps avoid "too much GC"
99         performance issues on big platforms.
100
101         * heap/Heap.cpp:
102         (JSC::Heap::Heap):
103         (JSC::Heap::collect):
104         * heap/Heap.h:
105         (Heap): GC balances between a fixed minimum and a proportional multiplier,
106         which are limited based on system RAM.
107
108         * runtime/JSGlobalData.cpp:
109         (JSC::JSGlobalData::JSGlobalData):
110         (JSC::JSGlobalData::createContextGroup):
111         (JSC::JSGlobalData::create):
112         (JSC::JSGlobalData::createLeaked):
113         * runtime/JSGlobalData.h:
114         (JSGlobalData): Renamed HeapSize to HeapType because the exact size is
115         influenced by the heap type, but not determined by it.
116
117 2012-05-21  Gavin Barraclough  <barraclough@apple.com>
118
119         Disable private names by default in WebCore
120         https://bugs.webkit.org/show_bug.cgi?id=87088
121
122         Reviewed by Geoff Garen.
123
124         r117859 introduced a preliminary implementation of ES6-like private name objects to JSC.
125         These are probably not yet ready to be web-facing, so disabling by default in WebCore.
126         Opting-in for JSC & DumpRenderTree so that we can still run the fast/js/names.html test.
127
128         * jsc.cpp:
129         (GlobalObject):
130         (GlobalObject::javaScriptExperimentsEnabled):
131             - Implemented new trap to opt-in to private names support.
132         * runtime/JSGlobalObject.cpp:
133         (JSC):
134         (JSC::JSGlobalObject::reset):
135             - Only add the Name property to the global object if experiments are enabled.
136         * runtime/JSGlobalObject.h:
137         (GlobalObjectMethodTable):
138             - Added new trap to enabled experiments.
139         (JSGlobalObject):
140         (JSC::JSGlobalObject::finishCreation):
141             - Set the global object's m_experimentsEnabled state on construction.
142         (JSC::JSGlobalObject::javaScriptExperimentsEnabled):
143             - Defaults to off.
144
145 2012-05-06  Filip Pizlo  <fpizlo@apple.com>
146
147         Truncating multiplication on integers should not OSR exit every time
148         https://bugs.webkit.org/show_bug.cgi?id=85752
149
150         Reviewed by Gavin Barraclough.
151         
152         Merge r116264 from dfgopt.
153
154         * dfg/DFGAbstractState.cpp:
155         (JSC::DFG::AbstractState::execute):
156         * dfg/DFGFixupPhase.cpp:
157         (JSC::DFG::FixupPhase::fixupNode):
158         * dfg/DFGGraph.h:
159         (JSC::DFG::Graph::mulShouldSpeculateInteger):
160         (Graph):
161         (JSC::DFG::Graph::mulImmediateShouldSpeculateInteger):
162         * dfg/DFGPredictionPropagationPhase.cpp:
163         (JSC::DFG::PredictionPropagationPhase::propagate):
164         (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
165         * dfg/DFGSpeculativeJIT.cpp:
166         (JSC::DFG::SpeculativeJIT::compileArithMul):
167
168 2012-05-21  Csaba Osztrogonác  <ossy@webkit.org>
169
170         DFG should be able to compute dominators
171         https://bugs.webkit.org/show_bug.cgi?id=85269
172
173         Unreviewed trivial 32 bit buildfix after r117861.
174
175         * dfg/DFGGraph.cpp:
176         (JSC::DFG::Graph::dump):
177
178 2012-05-21  Filip Pizlo  <fpizlo@apple.com>
179
180         DFG should be able to compute dominators
181         https://bugs.webkit.org/show_bug.cgi?id=85269
182
183         Reviewed by Oliver Hunt.
184         
185         Merged r115754 from dfgopt.
186         
187         Implements a naive dominator calculator, which is currently just used to
188         print information in graph dumps. I've enabled it by default mainly to
189         be able to track its performance impact. So far it appears that there is
190         none, which is unsurprising given that the number of basic blocks in most
191         procedures is small.
192         
193         Also tweaked bytecode dumping to reveal more useful information about the
194         nature of the code block.
195
196         * CMakeLists.txt:
197         * GNUmakefile.list.am:
198         * JavaScriptCore.xcodeproj/project.pbxproj:
199         * Target.pri:
200         * bytecode/CodeBlock.cpp:
201         (JSC::CodeBlock::dump):
202         * dfg/DFGDominators.cpp: Added.
203         (DFG):
204         (JSC::DFG::Dominators::Dominators):
205         (JSC::DFG::Dominators::~Dominators):
206         (JSC::DFG::Dominators::compute):
207         (JSC::DFG::Dominators::iterateForBlock):
208         * dfg/DFGDominators.h: Added.
209         (DFG):
210         (Dominators):
211         (JSC::DFG::Dominators::invalidate):
212         (JSC::DFG::Dominators::computeIfNecessary):
213         (JSC::DFG::Dominators::isValid):
214         (JSC::DFG::Dominators::dominates):
215         * dfg/DFGDriver.cpp:
216         (JSC::DFG::compile):
217         * dfg/DFGGraph.cpp:
218         (JSC::DFG::Graph::dump):
219         * dfg/DFGGraph.h:
220         (Graph):
221
222 2012-05-21  Michael Saboff  <msaboff@apple.com>
223
224         Cleanup of Calls to operationStrCat and operationNewArray and Use Constructor after r117729
225         https://bugs.webkit.org/show_bug.cgi?id=87027
226
227         Reviewed by Oliver Hunt.
228
229         Change calls to operationStrCat and operationNewArray to provide the
230         pointer to the EncodedJSValue* data buffer instead of the ScratchBuffer
231         that contains it.  Added a ScratchBuffer::create() function.
232         This is a clean-up to r117729.
233
234         * dfg/DFGOperations.cpp:
235         * dfg/DFGSpeculativeJIT32_64.cpp:
236         (JSC::DFG::SpeculativeJIT::compile):
237         * dfg/DFGSpeculativeJIT64.cpp:
238         (JSC::DFG::SpeculativeJIT::compile):
239         * runtime/JSGlobalData.h:
240         (JSC::ScratchBuffer::create):
241         (JSC::ScratchBuffer::dataBuffer):
242         (JSC::JSGlobalData::scratchBufferForSize):
243
244 2012-05-15  Gavin Barraclough  <barraclough@apple.com>
245
246         Add support for private names
247         https://bugs.webkit.org/show_bug.cgi?id=86509
248
249         Reviewed by Oliver Hunt.
250
251         The spec isn't final, but we can start adding support to allow property maps
252         to contain keys that aren't identifiers.
253
254         * API/JSCallbackObjectFunctions.h:
255         (JSC::::getOwnPropertySlot):
256         (JSC::::put):
257         (JSC::::deleteProperty):
258         (JSC::::getStaticValue):
259         (JSC::::staticFunctionGetter):
260         (JSC::::callbackGetter):
261             - Only expose public named properties over the JSC API.
262         * CMakeLists.txt:
263         * DerivedSources.make:
264         * DerivedSources.pri:
265         * GNUmakefile.list.am:
266         * JavaScriptCore.gypi:
267         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
268         * JavaScriptCore.xcodeproj/project.pbxproj:
269         * Target.pri:
270             - Added new files to build system.
271         * dfg/DFGOperations.cpp:
272         (JSC::DFG::operationPutByValInternal):
273             - Added support for property access with name objects.
274         * interpreter/CallFrame.h:
275         (JSC::ExecState::privateNamePrototypeTable):
276             - Added hash table for NamePrototype
277         * interpreter/Interpreter.cpp:
278         (JSC::Interpreter::privateExecute):
279             - Added support for property access with name objects.
280         * jit/JITStubs.cpp:
281         (JSC::DEFINE_STUB_FUNCTION):
282             - Added support for property access with name objects.
283         * llint/LLIntSlowPaths.cpp:
284         (JSC::LLInt::getByVal):
285         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
286         * runtime/CommonSlowPaths.h:
287         (JSC::CommonSlowPaths::opIn):
288         * runtime/JSActivation.cpp:
289         (JSC::JSActivation::symbolTableGet):
290         (JSC::JSActivation::symbolTablePut):
291         (JSC::JSActivation::symbolTablePutWithAttributes):
292             - Added support for property access with name objects.
293         * runtime/JSGlobalData.cpp:
294         (JSC):
295         (JSC::JSGlobalData::JSGlobalData):
296         (JSC::JSGlobalData::~JSGlobalData):
297         * runtime/JSGlobalData.h:
298         (JSGlobalData):
299             - Added hash table for NamePrototype
300         * runtime/JSGlobalObject.cpp:
301         (JSC::JSGlobalObject::reset):
302         * runtime/JSGlobalObject.h:
303         (JSGlobalObject):
304         (JSC::JSGlobalObject::privateNameStructure):
305         (JSC::JSGlobalObject::symbolTableHasProperty):
306             - Added new global properties.
307         * runtime/JSType.h:
308         * runtime/JSTypeInfo.h:
309         (JSC::TypeInfo::isName):
310             - Added type for NameInstances, for fast isName check.
311         * runtime/JSVariableObject.cpp:
312         (JSC::JSVariableObject::deleteProperty):
313         (JSC::JSVariableObject::symbolTableGet):
314         * runtime/JSVariableObject.h:
315         (JSC::JSVariableObject::symbolTableGet):
316         (JSC::JSVariableObject::symbolTablePut):
317         (JSC::JSVariableObject::symbolTablePutWithAttributes):
318             - symbol table lookup should take a PropertyName.
319         * runtime/Lookup.cpp:
320         (JSC::setUpStaticFunctionSlot):
321         * runtime/Lookup.h:
322         (JSC::HashTable::entry):
323             - entry lookup should take a PropertyName.
324         * runtime/NameConstructor.cpp: Added.
325         (JSC):
326         (JSC::NameConstructor::NameConstructor):
327         (JSC::NameConstructor::finishCreation):
328         (JSC::constructPrivateName):
329         (JSC::NameConstructor::getConstructData):
330         (JSC::NameConstructor::getCallData):
331         * runtime/NameConstructor.h: Added.
332         (JSC):
333         (NameConstructor):
334         (JSC::NameConstructor::create):
335         (JSC::NameConstructor::createStructure):
336             - Added constructor.
337         * runtime/NameInstance.cpp: Added.
338         (JSC):
339         (JSC::NameInstance::NameInstance):
340         (JSC::NameInstance::destroy):
341         * runtime/NameInstance.h: Added.
342         (JSC):
343         (NameInstance):
344         (JSC::NameInstance::createStructure):
345         (JSC::NameInstance::create):
346         (JSC::NameInstance::privateName):
347         (JSC::NameInstance::nameString):
348         (JSC::NameInstance::finishCreation):
349         (JSC::isName):
350             - Added instance.
351         * runtime/NamePrototype.cpp: Added.
352         (JSC):
353         (JSC::NamePrototype::NamePrototype):
354         (JSC::NamePrototype::finishCreation):
355         (JSC::NamePrototype::getOwnPropertySlot):
356         (JSC::NamePrototype::getOwnPropertyDescriptor):
357         (JSC::privateNameProtoFuncToString):
358         * runtime/NamePrototype.h: Added.
359         (JSC):
360         (NamePrototype):
361         (JSC::NamePrototype::create):
362         (JSC::NamePrototype::createStructure):
363             - Added prototype.
364         * runtime/PrivateName.h: Added.
365         (JSC):
366         (PrivateName):
367         (JSC::PrivateName::PrivateName):
368         (JSC::PrivateName::uid):
369             - A private name object holds a StringImpl that can be used as a unique key in a property map.
370         * runtime/PropertyMapHashTable.h:
371         (JSC::PropertyTable::find):
372         (JSC::PropertyTable::findWithString):
373             - Strings should only match keys in the table that are identifiers.
374         * runtime/PropertyName.h:
375         (JSC::PropertyName::PropertyName):
376         (PropertyName):
377         (JSC::PropertyName::uid):
378         (JSC::PropertyName::publicName):
379         (JSC::PropertyName::asIndex):
380         (JSC::operator==):
381         (JSC::operator!=):
382             - replaced impl() & ustring() with uid() [to get the raw impl] and publicName() [impl or null, if not an identifier].
383         * runtime/Structure.cpp:
384         (JSC::Structure::despecifyDictionaryFunction):
385         (JSC::Structure::addPropertyTransitionToExistingStructure):
386         (JSC::Structure::addPropertyTransition):
387         (JSC::Structure::attributeChangeTransition):
388         (JSC::Structure::get):
389         (JSC::Structure::despecifyFunction):
390         (JSC::Structure::putSpecificValue):
391         (JSC::Structure::remove):
392         (JSC::Structure::getPropertyNamesFromStructure):
393         * runtime/Structure.h:
394         (JSC::Structure::get):
395             - call uid() to get a PropertyName raw impl, for use as a key.
396
397 2012-04-30  Filip Pizlo  <fpizlo@apple.com>
398
399         Bytecode dumps should contain data about the state of get_by_id caches
400         https://bugs.webkit.org/show_bug.cgi?id=85246
401
402         Reviewed by Gavin Barraclough.
403         
404         Merge r115694 from dfgopt.
405         
406         Changed the DFG bytecode parser (and the code that calls it) to be able
407         to call codeBlock->dump() on the code blocks being parsed.
408         
409         Changed bytecode dumping to be able to print the state of get_by_id
410         caches inline with the bytecode.
411         
412         Removed the old StructureStubInfo dumping code, which no longer worked
413         right, and was incapable of telling us information about chain and list
414         accesses.
415         
416         This change does not add dumping for put_by_id caches. We can add that
417         at a later time.
418
419         * bytecode/CodeBlock.cpp:
420         (JSC::CodeBlock::printUnaryOp):
421         (JSC::CodeBlock::printBinaryOp):
422         (JSC::CodeBlock::printConditionalJump):
423         (JSC::CodeBlock::printGetByIdOp):
424         (JSC::dumpStructure):
425         (JSC):
426         (JSC::dumpChain):
427         (JSC::CodeBlock::printGetByIdCacheStatus):
428         (JSC::CodeBlock::printCallOp):
429         (JSC::CodeBlock::printPutByIdOp):
430         (JSC::printGlobalResolveInfo):
431         (JSC::CodeBlock::printStructure):
432         (JSC::CodeBlock::printStructures):
433         (JSC::CodeBlock::dump):
434         (JSC::CodeBlock::visitStructures):
435         (JSC::ProgramCodeBlock::jitCompileImpl):
436         (JSC::EvalCodeBlock::jitCompileImpl):
437         (JSC::FunctionCodeBlock::jitCompileImpl):
438         * bytecode/CodeBlock.h:
439         (CodeBlock):
440         (JSC::CodeBlock::jitCompile):
441         (ProgramCodeBlock):
442         (EvalCodeBlock):
443         (FunctionCodeBlock):
444         * dfg/DFGByteCodeParser.cpp:
445         (JSC::DFG::ByteCodeParser::ByteCodeParser):
446         (ByteCodeParser):
447         (JSC::DFG::ByteCodeParser::parseCodeBlock):
448         (JSC::DFG::parse):
449         * dfg/DFGByteCodeParser.h:
450         (DFG):
451         * dfg/DFGDriver.cpp:
452         (JSC::DFG::compile):
453         (JSC::DFG::tryCompile):
454         (JSC::DFG::tryCompileFunction):
455         * dfg/DFGDriver.h:
456         (DFG):
457         (JSC::DFG::tryCompile):
458         (JSC::DFG::tryCompileFunction):
459         * dfg/DFGOSRExitCompiler.cpp:
460         * jit/JITDriver.h:
461         (JSC::jitCompileIfAppropriate):
462         (JSC::jitCompileFunctionIfAppropriate):
463         * llint/LLIntSlowPaths.cpp:
464         (JSC::LLInt::jitCompileAndSetHeuristics):
465         * runtime/Executable.cpp:
466         (JSC::EvalExecutable::jitCompile):
467         (JSC::EvalExecutable::compileInternal):
468         (JSC::ProgramExecutable::jitCompile):
469         (JSC::ProgramExecutable::compileInternal):
470         (JSC::FunctionExecutable::jitCompileForCall):
471         (JSC::FunctionExecutable::jitCompileForConstruct):
472         (JSC::FunctionExecutable::compileForCallInternal):
473         (JSC::FunctionExecutable::compileForConstructInternal):
474         * runtime/Executable.h:
475         (EvalExecutable):
476         (ProgramExecutable):
477         (FunctionExecutable):
478         (JSC::FunctionExecutable::jitCompileFor):
479         * runtime/ExecutionHarness.h:
480         (JSC::prepareForExecution):
481         (JSC::prepareFunctionForExecution):
482
483 2012-05-21  Carlos Garcia Campos  <cgarcia@igalia.com>
484
485         Unreviewed. Fix make distcheck.
486
487         * GNUmakefile.list.am: Add missing header files.
488
489 2012-05-21  Allan Sandfeld Jensen  <allan.jensen@nokia.com>
490
491         GCC 4.7 and C++11
492         https://bugs.webkit.org/show_bug.cgi?id=86465
493
494         Reviewed by Darin Adler.
495
496         Set emptyValueIsZero flag so RegExpKey can be used with the non-copyable RegExp values.
497
498         * runtime/RegExpKey.h:
499
500 2012-05-20  Michael Saboff  <msaboff@apple.com>
501
502         JSGlobalData ScratchBuffers Are Not Visited During Garbage Collection
503         https://bugs.webkit.org/show_bug.cgi?id=86553
504
505         Reviewed by Gavin Barraclough.
506
507         Scratch buffers can contain the only reference to live objects.
508         Therefore visit scratch buffer contents as conservative roots.
509         Changed the scratch buffers to be a struct with an "active"
510         length and the actual buffer.  The users of the scratch
511         buffer emit code where needed to set and clear the active
512         length as appropriate.  During marking, the active count is
513         used for conservative marking.
514
515         * dfg/DFGAssemblyHelpers.h:
516         (JSC::DFG::AssemblyHelpers::debugCall):
517         * dfg/DFGOSRExitCompiler32_64.cpp:
518         (JSC::DFG::OSRExitCompiler::compileExit):
519         * dfg/DFGOSRExitCompiler64.cpp:
520         (JSC::DFG::OSRExitCompiler::compileExit):
521         * dfg/DFGOperations.cpp:
522         * dfg/DFGOperations.h:
523         * dfg/DFGSpeculativeJIT32_64.cpp:
524         (JSC::DFG::SpeculativeJIT::compile):
525         * dfg/DFGSpeculativeJIT64.cpp:
526         (JSC::DFG::SpeculativeJIT::compile):
527         * dfg/DFGThunks.cpp:
528         (JSC::DFG::osrExitGenerationThunkGenerator):
529         * heap/Heap.cpp:
530         (JSC::Heap::markRoots):
531         * runtime/JSGlobalData.cpp:
532         (JSC::JSGlobalData::gatherConservativeRoots):
533         * runtime/JSGlobalData.h:
534         (JSC::ScratchBuffer::ScratchBuffer):
535         (ScratchBuffer):
536         (JSC::ScratchBuffer::allocationSize):
537         (JSC::ScratchBuffer::setActiveLength):
538         (JSC::ScratchBuffer::activeLength):
539         (JSC::ScratchBuffer::activeLengthPtr):
540         (JSC::ScratchBuffer::dataBuffer):
541         (JSGlobalData):
542         (JSC::JSGlobalData::scratchBufferForSize):
543
544 2012-05-20  Filip Pizlo  <fpizlo@apple.com>
545
546         Predicted types should know about arguments
547         https://bugs.webkit.org/show_bug.cgi?id=85165
548
549         Reviewed by Oliver Hunt.
550         
551         Merge r115604 from dfgopt.
552
553         * bytecode/PredictedType.cpp:
554         (JSC::predictionToString):
555         (JSC::predictionToAbbreviatedString):
556         (JSC::predictionFromClassInfo):
557         * bytecode/PredictedType.h:
558         (JSC):
559         (JSC::isMyArgumentsPrediction):
560         (JSC::isArgumentsPrediction):
561
562 2012-05-20  Filip Pizlo  <fpizlo@apple.com>
563
564         Bytecompiler should emit trivially fewer jumps in loops
565         https://bugs.webkit.org/show_bug.cgi?id=85144
566
567         Reviewed by Oliver Hunt.
568         
569         Merged r115587 from dfgopt.
570         
571         1-2% across the board win.
572
573         * bytecompiler/NodesCodegen.cpp:
574         (JSC::WhileNode::emitBytecode):
575         (JSC::ForNode::emitBytecode):
576
577 2012-05-19  Vivek Galatage  <vivekgalatage@gmail.com>
578
579         Windows build broken due to changes in the http://trac.webkit.org/changeset/117646
580         https://bugs.webkit.org/show_bug.cgi?id=86939
581
582         The changeset 117646 changed the JSString::toBoolean signature. This
583         change is for fixing the windows build break.
584
585         Reviewed by Ryosuke Niwa.
586
587         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
588
589 2012-05-18  Filip Pizlo  <fpizlo@apple.com>
590
591         REGRESSION(117646): fast/canvas/webgl/glsl-conformance.html is crashing in the DFG
592         https://bugs.webkit.org/show_bug.cgi?id=86929
593
594         Reviewed by Oliver Hunt.
595         
596         The problem was that if CFG simplification saw a Branch with identical successors,
597         it would always perform a basic block merge. But that's wrong if the successor has
598         other predecessors.
599
600         * dfg/DFGCFGSimplificationPhase.cpp:
601         (JSC::DFG::CFGSimplificationPhase::run):
602
603 2012-05-18  Filip Pizlo  <fpizlo@apple.com>
604
605         DFG CFG simplification crashes if it's trying to remove an unreachable block
606         that has an already-killed-off unreachable successor
607         https://bugs.webkit.org/show_bug.cgi?id=86918
608
609         Reviewed by Oliver Hunt.
610         
611         This fixes crashes in:
612         inspector/styles/styles-computed-trace.html
613         inspector/console/console-big-array.html
614
615         * dfg/DFGCFGSimplificationPhase.cpp:
616         (JSC::DFG::CFGSimplificationPhase::fixPhis):
617
618 2012-05-18  Filip Pizlo  <fpizlo@apple.com>
619
620         DFG should have control flow graph simplification
621         https://bugs.webkit.org/show_bug.cgi?id=84553
622
623         Reviewed by Oliver Hunt.
624         
625         Merged r115512 from dfgopt.
626
627         This change gives the DFG the ability to simplify the control flow graph
628         as part of an optimization fixpoint that includes CSE, CFA, and constant
629         folding. This required a number of interesting changes including:
630         
631         - Solidifying the set of invariants that the DFG obeys. For example, the
632           head and tail of each basic block must advertise the set of live locals
633           and the set of available locals, respectively. It must do so by
634           referring to the first access to the local in the block (for head) and
635           the last one (for tail). This patch introduces the start of a
636           validation step that may be turned on even with asserts disabled. To
637           ensure that these invariants are preserved, I had to remove the
638           redundant phi elimination phase. For now I just remove the call, but in
639           the future we will probably remove it entirely unless we find a use for
640           it.
641         
642         - Making it easier to get the boolean version of a JSValue. This is a
643           pure operation, but we previously did not treat it as such.
644         
645         - Fixing the merging and filtering of AbstractValues that correspond to
646           concrete JSValues. This was previously broken and was limiting the
647           effect of running constant folding. Fixing this meant that I had to
648           change how constant folding eliminates GetLocal nodes, so as to ensure
649           that the resulting graph still obeys DFG rules.
650         
651         - Introducing simplified getters for some of the things that DFG phases
652           want to know about, like the Nth child of a node (now just
653           graph.child(...) if you don't care about performance too much) or
654           getting successors of a basic block.
655         
656         The current CFG simplifier can handle almost all of the cases that it
657         ought to handle; the noteworthy one that is not yet handled is removing
658         basic blocks that just have jumps. To do this right we need to be able
659         to remove jump-only blocks that also perform keep-alive on some values.
660         To make this work, we need to be able to hoist the keep-alive into (or
661         just above) a Branch. This is not fundamentally difficult but I opted to
662         let this patch omit this optimization. We can handle this later.
663         
664         This is a big win on programs that include inline functions that are
665         often called with constant arguments. Of course, SunSpider, V8, and
666         Kraken don't count. Those benchmarks are completely neutral with this
667         change.
668
669         * API/JSValueRef.cpp:
670         (JSValueToBoolean):
671         * CMakeLists.txt:
672         * GNUmakefile.list.am:
673         * JavaScriptCore.xcodeproj/project.pbxproj:
674         * Target.pri:
675         * bytecode/CodeBlock.h:
676         (JSC::CodeBlock::dfgOSREntryDataForBytecodeIndex):
677         * bytecode/Operands.h:
678         (JSC::Operands::setOperandFirstTime):
679         (Operands):
680         * dfg/DFGAbstractState.cpp:
681         (JSC::DFG::AbstractState::initialize):
682         (JSC::DFG::AbstractState::execute):
683         (JSC::DFG::AbstractState::mergeStateAtTail):
684         (JSC::DFG::AbstractState::mergeToSuccessors):
685         * dfg/DFGAbstractValue.h:
686         (JSC::DFG::AbstractValue::isClear):
687         (JSC::DFG::AbstractValue::operator!=):
688         (JSC::DFG::AbstractValue::merge):
689         (JSC::DFG::AbstractValue::filter):
690         (JSC::DFG::AbstractValue::validateIgnoringValue):
691         (AbstractValue):
692         * dfg/DFGAdjacencyList.h:
693         (JSC::DFG::AdjacencyList::child):
694         (JSC::DFG::AdjacencyList::setChild):
695         (AdjacencyList):
696         * dfg/DFGBasicBlock.h:
697         (JSC::DFG::BasicBlock::~BasicBlock):
698         (BasicBlock):
699         (JSC::DFG::BasicBlock::numNodes):
700         (JSC::DFG::BasicBlock::nodeIndex):
701         (JSC::DFG::BasicBlock::isPhiIndex):
702         (JSC::DFG::BasicBlock::isInPhis):
703         (JSC::DFG::BasicBlock::isInBlock):
704         * dfg/DFGByteCodeParser.cpp:
705         (ByteCodeParser):
706         (DFG):
707         (JSC::DFG::ByteCodeParser::parse):
708         * dfg/DFGCFAPhase.cpp:
709         (JSC::DFG::CFAPhase::run):
710         (JSC::DFG::CFAPhase::performBlockCFA):
711         (JSC::DFG::performCFA):
712         * dfg/DFGCFAPhase.h:
713         (DFG):
714         * dfg/DFGCFGSimplificationPhase.cpp: Added.
715         (DFG):
716         (CFGSimplificationPhase):
717         (JSC::DFG::CFGSimplificationPhase::CFGSimplificationPhase):
718         (JSC::DFG::CFGSimplificationPhase::run):
719         (JSC::DFG::CFGSimplificationPhase::killUnreachable):
720         (JSC::DFG::CFGSimplificationPhase::findOperandSource):
721         (JSC::DFG::CFGSimplificationPhase::keepOperandAlive):
722         (JSC::DFG::CFGSimplificationPhase::fixPossibleGetLocal):
723         (JSC::DFG::CFGSimplificationPhase::jettisonBlock):
724         (JSC::DFG::CFGSimplificationPhase::fixPhis):
725         (JSC::DFG::CFGSimplificationPhase::fixJettisonedPredecessors):
726         (JSC::DFG::CFGSimplificationPhase::removePotentiallyDeadPhiReference):
727         (JSC::DFG::CFGSimplificationPhase::OperandSubstitution::OperandSubstitution):
728         (OperandSubstitution):
729         (JSC::DFG::CFGSimplificationPhase::OperandSubstitution::dump):
730         (JSC::DFG::CFGSimplificationPhase::skipGetLocal):
731         (JSC::DFG::CFGSimplificationPhase::fixTailOperand):
732         (JSC::DFG::CFGSimplificationPhase::mergeBlocks):
733         (JSC::DFG::performCFGSimplification):
734         * dfg/DFGCFGSimplificationPhase.h: Added.
735         (DFG):
736         * dfg/DFGCSEPhase.cpp:
737         (JSC::DFG::CSEPhase::run):
738         (CSEPhase):
739         (JSC::DFG::CSEPhase::impureCSE):
740         (JSC::DFG::CSEPhase::globalVarLoadElimination):
741         (JSC::DFG::CSEPhase::getByValLoadElimination):
742         (JSC::DFG::CSEPhase::checkStructureLoadElimination):
743         (JSC::DFG::CSEPhase::getByOffsetLoadElimination):
744         (JSC::DFG::CSEPhase::getPropertyStorageLoadElimination):
745         (JSC::DFG::CSEPhase::getIndexedPropertyStorageLoadElimination):
746         (JSC::DFG::CSEPhase::performNodeCSE):
747         (JSC::DFG::CSEPhase::performBlockCSE):
748         (JSC::DFG::performCSE):
749         * dfg/DFGCSEPhase.h:
750         (DFG):
751         * dfg/DFGCommon.h:
752         * dfg/DFGConstantFoldingPhase.cpp:
753         (JSC::DFG::ConstantFoldingPhase::run):
754         (JSC::DFG::performConstantFolding):
755         * dfg/DFGConstantFoldingPhase.h:
756         (DFG):
757         * dfg/DFGDriver.cpp:
758         (JSC::DFG::compile):
759         * dfg/DFGEdge.h:
760         (Edge):
761         (JSC::DFG::Edge::operator UnspecifiedBoolType*):
762         * dfg/DFGFixupPhase.cpp:
763         (JSC::DFG::FixupPhase::run):
764         (JSC::DFG::FixupPhase::fixupBlock):
765         (JSC::DFG::performFixup):
766         * dfg/DFGFixupPhase.h:
767         (DFG):
768         * dfg/DFGGraph.cpp:
769         (JSC::DFG::Graph::dump):
770         (JSC::DFG::Graph::handleSuccessor):
771         (DFG):
772         (JSC::DFG::Graph::determineReachability):
773         (JSC::DFG::Graph::resetReachability):
774         * dfg/DFGGraph.h:
775         (JSC::DFG::Graph::deref):
776         (JSC::DFG::Graph::changeIndex):
777         (Graph):
778         (JSC::DFG::Graph::changeEdge):
779         (JSC::DFG::Graph::numSuccessors):
780         (JSC::DFG::Graph::successor):
781         (JSC::DFG::Graph::successorForCondition):
782         (JSC::DFG::Graph::isPredictedNumerical):
783         (JSC::DFG::Graph::byValIsPure):
784         (JSC::DFG::Graph::clobbersWorld):
785         (JSC::DFG::Graph::numChildren):
786         (JSC::DFG::Graph::child):
787         * dfg/DFGNode.h:
788         (JSC::DFG::Node::convertToConstant):
789         (JSC::DFG::Node::numSuccessors):
790         (Node):
791         (JSC::DFG::Node::successor):
792         (JSC::DFG::Node::successorForCondition):
793         * dfg/DFGNodeType.h:
794         (DFG):
795         * dfg/DFGOSREntry.cpp:
796         (JSC::DFG::prepareOSREntry):
797         * dfg/DFGOperations.cpp:
798         * dfg/DFGPhase.cpp:
799         (JSC::DFG::Phase::endPhase):
800         * dfg/DFGPhase.h:
801         (JSC::DFG::runPhase):
802         * dfg/DFGPredictionPropagationPhase.cpp:
803         (JSC::DFG::PredictionPropagationPhase::run):
804         (JSC::DFG::performPredictionPropagation):
805         * dfg/DFGPredictionPropagationPhase.h:
806         (DFG):
807         * dfg/DFGRedundantPhiEliminationPhase.cpp:
808         (JSC::DFG::RedundantPhiEliminationPhase::run):
809         (JSC::DFG::performRedundantPhiElimination):
810         * dfg/DFGRedundantPhiEliminationPhase.h:
811         (DFG):
812         * dfg/DFGScoreBoard.h:
813         (JSC::DFG::ScoreBoard::use):
814         (ScoreBoard):
815         (JSC::DFG::ScoreBoard::useIfHasResult):
816         * dfg/DFGSpeculativeJIT.cpp:
817         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
818         (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
819         (JSC::DFG::SpeculativeJIT::compile):
820         (JSC::DFG::SpeculativeJIT::createOSREntries):
821         (JSC::DFG::SpeculativeJIT::linkOSREntries):
822         (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
823         (JSC::DFG::SpeculativeJIT::compileRegExpExec):
824         * dfg/DFGSpeculativeJIT.h:
825         (JSC::DFG::SpeculativeJIT::nextBlock):
826         (SpeculativeJIT):
827         (JSC::DFG::SpeculativeJIT::use):
828         (JSC::DFG::SpeculativeJIT::jump):
829         * dfg/DFGSpeculativeJIT32_64.cpp:
830         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
831         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
832         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
833         (JSC::DFG::SpeculativeJIT::emitBranch):
834         (JSC::DFG::SpeculativeJIT::compile):
835         * dfg/DFGSpeculativeJIT64.cpp:
836         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
837         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
838         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
839         (JSC::DFG::SpeculativeJIT::emitBranch):
840         (JSC::DFG::SpeculativeJIT::compile):
841         * dfg/DFGValidate.cpp: Added.
842         (DFG):
843         (Validate):
844         (JSC::DFG::Validate::Validate):
845         (JSC::DFG::Validate::validate):
846         (JSC::DFG::Validate::reportValidationContext):
847         (JSC::DFG::Validate::dumpData):
848         (JSC::DFG::Validate::dumpGraphIfAppropriate):
849         (JSC::DFG::validate):
850         * dfg/DFGValidate.h: Added.
851         (DFG):
852         (JSC::DFG::validate):
853         * dfg/DFGVirtualRegisterAllocationPhase.cpp:
854         (JSC::DFG::VirtualRegisterAllocationPhase::run):
855         (JSC::DFG::performVirtualRegisterAllocation):
856         * dfg/DFGVirtualRegisterAllocationPhase.h:
857         (DFG):
858         * interpreter/Interpreter.cpp:
859         (JSC::Interpreter::privateExecute):
860         * jit/JITStubs.cpp:
861         (JSC::DEFINE_STUB_FUNCTION):
862         * llint/LLIntSlowPaths.cpp:
863         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
864         * runtime/ArrayPrototype.cpp:
865         (JSC::arrayProtoFuncFilter):
866         (JSC::arrayProtoFuncEvery):
867         (JSC::arrayProtoFuncSome):
868         * runtime/BooleanConstructor.cpp:
869         (JSC::constructBoolean):
870         (JSC::callBooleanConstructor):
871         * runtime/JSCell.h:
872         (JSCell):
873         * runtime/JSObject.cpp:
874         (JSC):
875         * runtime/JSObject.h:
876         * runtime/JSString.cpp:
877         (JSC::JSString::toBoolean):
878         * runtime/JSString.h:
879         (JSString):
880         (JSC::JSCell::toBoolean):
881         (JSC::JSValue::toBoolean):
882         * runtime/JSValue.h:
883         * runtime/ObjectConstructor.cpp:
884         (JSC::toPropertyDescriptor):
885         * runtime/RegExpConstructor.cpp:
886         (JSC::setRegExpConstructorMultiline):
887         * runtime/RegExpPrototype.cpp:
888         (JSC::regExpProtoFuncToString):
889
890 2012-05-18  Filip Pizlo  <fpizlo@apple.com>
891
892         Unreviewed, build fix.
893
894         * dfg/DFGSpeculativeJIT.h:
895         (JSC::DFG::SpeculativeJIT::silentSavePlanForGPR):
896
897 2012-04-17  Filip Pizlo  <fpizlo@apple.com>
898
899         DFG should have constant propagation
900         https://bugs.webkit.org/show_bug.cgi?id=84004
901
902         Reviewed by Gavin Barraclough.
903         
904         Merge r114554 from dfgopt.
905         
906         Changes AbstractValue to be able to hold a "set" of constants, where
907         the maximum set size is 1 - so merging a value containing constant A
908         with another value containing constant B where A != B will result in
909         the AbstractValue claiming that it does not know any constants (i.e.
910         it'll just have a predicted type and possible a structure).
911         
912         Added a constant folding phase that uses this new information to
913         replace pure operations known to have constant results with
914         JSConstants. This is OSR-exit-aware, in that it will prepend a Phantom
915         that refers to all of the kids of the node we replaced.
916
917         * CMakeLists.txt:
918         * GNUmakefile.list.am:
919         * JavaScriptCore.xcodeproj/project.pbxproj:
920         * Target.pri:
921         * dfg/DFGAbstractState.cpp:
922         (JSC::DFG::AbstractState::beginBasicBlock):
923         (JSC::DFG::AbstractState::endBasicBlock):
924         (JSC::DFG::AbstractState::execute):
925         * dfg/DFGAbstractState.h:
926         (AbstractState):
927         * dfg/DFGAbstractValue.h:
928         (JSC::DFG::AbstractValue::clear):
929         (JSC::DFG::AbstractValue::isClear):
930         (JSC::DFG::AbstractValue::makeTop):
931         (JSC::DFG::AbstractValue::clobberValue):
932         (AbstractValue):
933         (JSC::DFG::AbstractValue::valueIsTop):
934         (JSC::DFG::AbstractValue::value):
935         (JSC::DFG::AbstractValue::set):
936         (JSC::DFG::AbstractValue::operator==):
937         (JSC::DFG::AbstractValue::merge):
938         (JSC::DFG::AbstractValue::filter):
939         (JSC::DFG::AbstractValue::validate):
940         (JSC::DFG::AbstractValue::checkConsistency):
941         (JSC::DFG::AbstractValue::dump):
942         * dfg/DFGAdjacencyList.h:
943         (JSC::DFG::AdjacencyList::initialize):
944         (AdjacencyList):
945         (JSC::DFG::AdjacencyList::reset):
946         * dfg/DFGBasicBlock.h:
947         (JSC::DFG::BasicBlock::BasicBlock):
948         (BasicBlock):
949         * dfg/DFGCSEPhase.cpp:
950         (JSC::DFG::CSEPhase::constantCSE):
951         (CSEPhase):
952         (JSC::DFG::CSEPhase::performNodeCSE):
953         * dfg/DFGConstantFoldingPhase.cpp: Added.
954         (DFG):
955         (ConstantFoldingPhase):
956         (JSC::DFG::ConstantFoldingPhase::ConstantFoldingPhase):
957         (JSC::DFG::ConstantFoldingPhase::run):
958         (JSC::DFG::performConstantFolding):
959         * dfg/DFGConstantFoldingPhase.h: Added.
960         (DFG):
961         * dfg/DFGDriver.cpp:
962         (JSC::DFG::compile):
963         * dfg/DFGGraph.h:
964         (Graph):
965         (JSC::DFG::Graph::convertToConstant):
966         * dfg/DFGInsertionSet.h:
967         (JSC::DFG::InsertionSet::execute):
968         * dfg/DFGNode.h:
969         (JSC::DFG::Node::convertToConstant):
970         (Node):
971         * runtime/JSValue.cpp:
972         (JSC::JSValue::description):
973         * runtime/JSValue.h:
974         (JSValue):
975
976 2012-05-18  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>
977
978         Fix build for Qt by using ASSERT_UNUSED in DFGSpeculativeJIT
979         https://bugs.webkit.org/show_bug.cgi?id=86902
980
981         Reviewed by Andreas Kling.
982
983         * dfg/DFGSpeculativeJIT.h:
984         (JSC::DFG::SpeculativeJIT::silentSavePlanForGPR):
985
986 2012-04-16  Filip Pizlo  <fpizlo@apple.com>
987
988         DFG should have out-of-line slow paths
989         https://bugs.webkit.org/show_bug.cgi?id=83992
990
991         Reviewed by Oliver Hunt.
992         
993         Merge of r114472 and r114553 from dfgopt.
994         
995         Introduces the notion of slow path code generation closures in the DFG.
996         These are defined in DFGSlowPathGenerator.h, though they are fairly
997         extensible so DFGSpeculativeJIT64.cpp and DFGSpeculativeJIT32_64.cpp
998         define a couple special-purpose ones. A slow path generation closure
999         (DFG::SlowPathGenerator) is executed after the main speculative path is
1000         generated. This makes them great for scheduling slow path code out of
1001         the way of the hot paths.
1002         
1003         This patch also converts most - but not all - of the DFG to use slow
1004         path generators instead of inline slow paths.
1005         
1006         The result is a sub-1% improvement on SunSpider and V8, and a miniscule
1007         regression on Kraken.
1008         
1009         * JavaScriptCore.xcodeproj/project.pbxproj:
1010         * assembler/AbstractMacroAssembler.h:
1011         (JSC::AbstractMacroAssembler::TrustedImmPtr::TrustedImmPtr):
1012         (TrustedImmPtr):
1013         (JSC::AbstractMacroAssembler::TrustedImm32::TrustedImm32):
1014         (TrustedImm32):
1015         * bytecode/StructureStubInfo.h:
1016         * dfg/DFGCommon.h:
1017         * dfg/DFGJITCompiler.cpp:
1018         (JSC::DFG::JITCompiler::link):
1019         (JSC::DFG::JITCompiler::compile):
1020         (JSC::DFG::JITCompiler::compileFunction):
1021         * dfg/DFGJITCompiler.h:
1022         (DFG):
1023         (JSC::DFG::PropertyAccessRecord::PropertyAccessRecord):
1024         (PropertyAccessRecord):
1025         (JITCompiler):
1026         * dfg/DFGSilentRegisterSavePlan.h: Added.
1027         (DFG):
1028         (SilentRegisterSavePlan):
1029         (JSC::DFG::SilentRegisterSavePlan::SilentRegisterSavePlan):
1030         (JSC::DFG::SilentRegisterSavePlan::spillAction):
1031         (JSC::DFG::SilentRegisterSavePlan::fillAction):
1032         (JSC::DFG::SilentRegisterSavePlan::nodeIndex):
1033         (JSC::DFG::SilentRegisterSavePlan::gpr):
1034         (JSC::DFG::SilentRegisterSavePlan::fpr):
1035         * dfg/DFGSlowPathGenerator.h: Added.
1036         (DFG):
1037         (SlowPathGenerator):
1038         (JSC::DFG::SlowPathGenerator::SlowPathGenerator):
1039         (JSC::DFG::SlowPathGenerator::~SlowPathGenerator):
1040         (JSC::DFG::SlowPathGenerator::generate):
1041         (JSC::DFG::SlowPathGenerator::label):
1042         (JSC::DFG::SlowPathGenerator::call):
1043         (JumpingSlowPathGenerator):
1044         (JSC::DFG::JumpingSlowPathGenerator::JumpingSlowPathGenerator):
1045         (JSC::DFG::JumpingSlowPathGenerator::linkFrom):
1046         (JSC::DFG::JumpingSlowPathGenerator::jumpTo):
1047         (CallSlowPathGenerator):
1048         (JSC::DFG::CallSlowPathGenerator::CallSlowPathGenerator):
1049         (JSC::DFG::CallSlowPathGenerator::call):
1050         (JSC::DFG::CallSlowPathGenerator::setUp):
1051         (JSC::DFG::CallSlowPathGenerator::recordCall):
1052         (JSC::DFG::CallSlowPathGenerator::tearDown):
1053         (CallResultAndNoArgumentsSlowPathGenerator):
1054         (JSC::DFG::CallResultAndNoArgumentsSlowPathGenerator::CallResultAndNoArgumentsSlowPathGenerator):
1055         (JSC::DFG::CallResultAndNoArgumentsSlowPathGenerator::generateInternal):
1056         (CallResultAndOneArgumentSlowPathGenerator):
1057         (JSC::DFG::CallResultAndOneArgumentSlowPathGenerator::CallResultAndOneArgumentSlowPathGenerator):
1058         (JSC::DFG::CallResultAndOneArgumentSlowPathGenerator::generateInternal):
1059         (CallResultAndTwoArgumentsSlowPathGenerator):
1060         (JSC::DFG::CallResultAndTwoArgumentsSlowPathGenerator::CallResultAndTwoArgumentsSlowPathGenerator):
1061         (JSC::DFG::CallResultAndTwoArgumentsSlowPathGenerator::generateInternal):
1062         (CallResultAndThreeArgumentsSlowPathGenerator):
1063         (JSC::DFG::CallResultAndThreeArgumentsSlowPathGenerator::CallResultAndThreeArgumentsSlowPathGenerator):
1064         (JSC::DFG::CallResultAndThreeArgumentsSlowPathGenerator::generateInternal):
1065         (CallResultAndFourArgumentsSlowPathGenerator):
1066         (JSC::DFG::CallResultAndFourArgumentsSlowPathGenerator::CallResultAndFourArgumentsSlowPathGenerator):
1067         (JSC::DFG::CallResultAndFourArgumentsSlowPathGenerator::generateInternal):
1068         (CallResultAndFiveArgumentsSlowPathGenerator):
1069         (JSC::DFG::CallResultAndFiveArgumentsSlowPathGenerator::CallResultAndFiveArgumentsSlowPathGenerator):
1070         (JSC::DFG::CallResultAndFiveArgumentsSlowPathGenerator::generateInternal):
1071         (JSC::DFG::slowPathCall):
1072         (AssigningSlowPathGenerator):
1073         (JSC::DFG::AssigningSlowPathGenerator::AssigningSlowPathGenerator):
1074         (JSC::DFG::AssigningSlowPathGenerator::generateInternal):
1075         (JSC::DFG::slowPathMove):
1076         * dfg/DFGSpeculativeJIT.cpp:
1077         (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
1078         (DFG):
1079         (JSC::DFG::SpeculativeJIT::~SpeculativeJIT):
1080         (JSC::DFG::SpeculativeJIT::addSlowPathGenerator):
1081         (JSC::DFG::SpeculativeJIT::runSlowPathGenerators):
1082         (JSC::DFG::SpeculativeJIT::compileValueToInt32):
1083         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
1084         * dfg/DFGSpeculativeJIT.h:
1085         (DFG):
1086         (SpeculativeJIT):
1087         (JSC::DFG::SpeculativeJIT::silentSavePlanForGPR):
1088         (JSC::DFG::SpeculativeJIT::silentSavePlanForFPR):
1089         (JSC::DFG::SpeculativeJIT::silentSpill):
1090         (JSC::DFG::SpeculativeJIT::silentFill):
1091         (JSC::DFG::SpeculativeJIT::silentSpillAllRegistersImpl):
1092         (JSC::DFG::SpeculativeJIT::silentSpillAllRegisters):
1093         (JSC::DFG::SpeculativeJIT::pickCanTrample):
1094         (JSC::DFG::SpeculativeJIT::silentFillAllRegisters):
1095         (JSC::DFG::SpeculativeJIT::callOperation):
1096         * dfg/DFGSpeculativeJIT32_64.cpp:
1097         (ValueToNumberSlowPathGenerator):
1098         (JSC::DFG::ValueToNumberSlowPathGenerator::ValueToNumberSlowPathGenerator):
1099         (JSC::DFG::ValueToNumberSlowPathGenerator::generateInternal):
1100         (DFG):
1101         (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber):
1102         (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
1103         (JSC::DFG::SpeculativeJIT::cachedGetById):
1104         (JSC::DFG::SpeculativeJIT::cachedPutById):
1105         (CompareAndBoxBooleanSlowPathGenerator):
1106         (JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::CompareAndBoxBooleanSlowPathGenerator):
1107         (JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::generateInternal):
1108         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
1109         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
1110         (JSC::DFG::SpeculativeJIT::compileLogicalNot):
1111         (JSC::DFG::SpeculativeJIT::compile):
1112         * dfg/DFGSpeculativeJIT64.cpp:
1113         (ValueToNumberSlowPathGenerator):
1114         (JSC::DFG::ValueToNumberSlowPathGenerator::ValueToNumberSlowPathGenerator):
1115         (JSC::DFG::ValueToNumberSlowPathGenerator::generateInternal):
1116         (DFG):
1117         (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber):
1118         (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
1119         (JSC::DFG::SpeculativeJIT::cachedGetById):
1120         (JSC::DFG::SpeculativeJIT::cachedPutById):
1121         (CompareAndBoxBooleanSlowPathGenerator):
1122         (JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::CompareAndBoxBooleanSlowPathGenerator):
1123         (JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::generateInternal):
1124         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
1125         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
1126         (JSC::DFG::SpeculativeJIT::compileLogicalNot):
1127         (JSC::DFG::SpeculativeJIT::compile):
1128
1129 2012-05-18  Tony Chang  <tony@chromium.org>
1130
1131         remove the CSS_GRID_LAYOUT compiler define, but default grid layout to off
1132         https://bugs.webkit.org/show_bug.cgi?id=86767
1133
1134         Reviewed by Ojan Vafai.
1135
1136         * Configurations/FeatureDefines.xcconfig: Remove ENABLE_CSS_GRID_LAYOUT.
1137
1138 2012-05-17  Filip Pizlo  <fpizlo@apple.com>
1139
1140         Setting array index -1 and looping over array causes bad behavior
1141         https://bugs.webkit.org/show_bug.cgi?id=86733
1142         <rdar://problem/11477670>
1143
1144         Reviewed by Oliver Hunt.
1145
1146         * dfg/DFGOperations.cpp:
1147
1148 2012-05-17  Geoffrey Garen  <ggaren@apple.com>
1149
1150         Not reviewed.
1151
1152         Rolled out r117495 because it caused som out of memory crashes.
1153
1154         * heap/Heap.cpp:
1155         (JSC::Heap::collect):
1156
1157 2012-05-17  Geoffrey Garen  <ggaren@apple.com>
1158
1159         Refactored the Heap to move more MarkedSpace logic into MarkedSpace
1160         https://bugs.webkit.org/show_bug.cgi?id=86790
1161
1162         Reviewed by Gavin Barraclough.
1163
1164         * heap/Heap.cpp:
1165         (JSC::Heap::lastChanceToFinalize):
1166         (JSC::Heap::markRoots):
1167         (JSC):
1168         (JSC::Heap::objectCount):
1169         (JSC::Heap::size):
1170         (JSC::Heap::capacity):
1171         (JSC::Heap::collect):
1172         * heap/Heap.h:
1173         (Heap): Took all the functors from here...
1174
1175         * heap/MarkedBlock.h:
1176         (CountFunctor):
1177         (JSC::MarkedBlock::CountFunctor::CountFunctor):
1178         (JSC::MarkedBlock::CountFunctor::count):
1179         (JSC::MarkedBlock::CountFunctor::returnValue):
1180         (MarkedBlock):
1181         * heap/MarkedSpace.h:
1182         (JSC::ClearMarks::operator()):
1183         (JSC):
1184         (JSC::Sweep::operator()):
1185         (JSC::MarkCount::operator()):
1186         (JSC::Size::operator()):
1187         (JSC::Capacity::operator()):
1188         (MarkedSpace):
1189         (JSC::MarkedSpace::clearMarks):
1190         (JSC::MarkedSpace::sweep):
1191         (JSC::MarkedSpace::objectCount):
1192         (JSC::MarkedSpace::size):
1193         (JSC::MarkedSpace::capacity): and put them here.
1194
1195 2012-05-17  Geoffrey Garen  <ggaren@apple.com>
1196
1197         Increase the GC allocation trigger
1198         https://bugs.webkit.org/show_bug.cgi?id=86699
1199
1200         Reviewed by Sam Weinig.
1201
1202         This helps a lot when the heap is growing, and helps to resolve
1203         the regression caused by r116484.
1204
1205         * heap/Heap.cpp:
1206         (JSC::Heap::collect):
1207
1208 2012-05-16  Mark Hahnenberg  <mhahnenberg@apple.com>
1209
1210         GC in the middle of JSObject::allocatePropertyStorage can cause badness
1211         https://bugs.webkit.org/show_bug.cgi?id=83839
1212
1213         Reviewed by Geoff Garen.
1214
1215         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1216         * jit/JITStubs.cpp: Making changes to use the new return value of growPropertyStorage.
1217         (JSC::DEFINE_STUB_FUNCTION):
1218         * runtime/JSObject.cpp:
1219         (JSC::JSObject::growPropertyStorage): Renamed to more accurately reflect that we're 
1220         growing our already-existing PropertyStorage.
1221         * runtime/JSObject.h:
1222         (JSObject):
1223         (JSC::JSObject::setPropertyStorage): "Atomically" sets the new property storage 
1224         and the new structure so that we can be sure a GC never occurs when our Structure
1225         info is out of sync with our PropertyStorage.
1226         (JSC):
1227         (JSC::JSObject::putDirectInternal): Moved the check to see if we should 
1228         allocate more backing store before the actual property insertion into 
1229         the structure.
1230         (JSC::JSObject::putDirectWithoutTransition): Ditto.
1231         (JSC::JSObject::transitionTo): Ditto.
1232         * runtime/Structure.cpp:
1233         (JSC::Structure::suggestedNewPropertyStorageSize): Added to keep the resize policy 
1234         for property backing stores contained within the Structure class.
1235         (JSC):
1236         * runtime/Structure.h:
1237         (JSC::Structure::shouldGrowPropertyStorage): Lets clients know if another insertion 
1238         into the Structure would require resizing the property backing store so that they can 
1239         preallocate the required storage.
1240         (Structure):
1241
1242 2012-05-16  Geoffrey Garen  <ggaren@apple.com>
1243
1244         GC is not thread-safe when moving values between C stacks
1245         https://bugs.webkit.org/show_bug.cgi?id=86672
1246
1247         Reviewed by Phil Pizlo.
1248
1249         GC pauses thread A while marking thread A, and then B while marking B,
1250         which isn't safe against A and B moving values between each others'
1251         stacks.
1252
1253         This is a theoretical bug -- I haven't been able to reproduce it
1254         in the wild.
1255
1256         * heap/MachineStackMarker.cpp:
1257         (JSC::MachineThreads::gatherFromOtherThread):
1258         (JSC::MachineThreads::gatherConservativeRoots): Pause all C stacks for the
1259         duration of stack marking, to avoid missing values that might be moving
1260         between C stacks.
1261
1262 2012-05-15  Mark Hahnenberg  <mhahnenberg@apple.com>
1263
1264         Block freeing thread should not free blocks when we are actively requesting them
1265         https://bugs.webkit.org/show_bug.cgi?id=86519
1266
1267         Reviewed by Geoff Garen.
1268
1269         * heap/BlockAllocator.h:
1270         (JSC::BlockAllocator::allocate): Reordering the setting of the flag so its done 
1271         while we hold the lock to ensure proper locking.
1272
1273 2012-05-15  Filip Pizlo  <fpizlo@apple.com>
1274
1275         shrinkToFit() is often not called for Vectors in CodeBlock
1276         https://bugs.webkit.org/show_bug.cgi?id=86436
1277
1278         Reviewed by Oliver Hunt.
1279         
1280         The vectors in CodeBlock are often appended to during various stages of
1281         compilation, but we neglect to shrink them after compilation finishes. This
1282         patch takes the most brutal possible approach: shrink all the vectors after
1283         the bytecompile phase, and then shrink them again after the appropriate
1284         JITing phase. The two shrinks are necessary because the JIT may append more
1285         stuff, but may also generate code that directly references things in other
1286         vectors; hence some can only be shrunk before JIT and some after. Also,
1287         we may allow a CodeBlock to sit around for a long time - possibly forever -
1288         before invoking the JIT, hence it makes sense to have two shrinks.
1289         
1290         This is performance neutral on the major benchmarks we track.
1291
1292         * bytecode/CodeBlock.cpp:
1293         (JSC::CodeBlock::shrinkToFit):
1294         * bytecode/CodeBlock.h:
1295         (CodeBlock):
1296         (JSC::CodeBlock::appendWeakReferenceTransition):
1297         * bytecompiler/BytecodeGenerator.cpp:
1298         (JSC::BytecodeGenerator::generate):
1299         * dfg/DFGDriver.cpp:
1300         (JSC::DFG::compile):
1301         * dfg/DFGJITCompiler.cpp:
1302         (JSC::DFG::JITCompiler::link):
1303         * jit/JIT.cpp:
1304         (JSC::JIT::privateCompile):
1305
1306 2012-05-15  Oliver Hunt  <oliver@apple.com>
1307
1308         Make error information available even if all we have is line number information.
1309         https://bugs.webkit.org/show_bug.cgi?id=86547
1310
1311         Reviewed by Filip Pizlo.
1312
1313         We don't need expression information to generate useful line, file, and stack information,
1314         so only require that we have line number info available.
1315
1316         * interpreter/Interpreter.cpp:
1317         (JSC::Interpreter::throwException):
1318         * runtime/Executable.h:
1319         (JSC):
1320
1321 2012-05-15  Mark Hahnenberg  <mhahnenberg@apple.com>
1322
1323         Block freeing thread should not free blocks when we are actively requesting them
1324         https://bugs.webkit.org/show_bug.cgi?id=86519
1325
1326         Reviewed by Geoffrey Garen.
1327
1328         The block freeing thread shoots us in the foot if it decides to run while we're actively 
1329         requesting blocks and returning them. This situation can arise when there is a lot of copying 
1330         collection going on in steady state. We allocate a large swath of pages to copy into, then we 
1331         return all the newly free old pages to the BlockAllocator. In this state, if the block freeing 
1332         thread wakes up in between collections (which is more likely than it waking up during a 
1333         collection) and frees half of these pages, they will be needed almost immediately during the 
1334         next collection, causing a storm of VM allocations which we know are going to be very slow.
1335
1336         What we'd like is for when things have quieted down the block freeing thread can then return 
1337         memory to the OS. Usually this will be when a page has fully loaded and has a low allocation 
1338         rate. In this situation, our opportunistic collections will only be running at least every few 
1339         seconds, thus the extra time spent doing VM allocations won't matter nearly as much as, say, 
1340         while a page is loading.
1341
1342         * heap/BlockAllocator.cpp:
1343         (JSC::BlockAllocator::BlockAllocator): Initialize our new field.
1344         (JSC::BlockAllocator::blockFreeingThreadMain): We check if we've seen any block requests recently.
1345         If so, reset our flag and go back to sleep. We also don't bother with locking here. If we miss out 
1346         on an update, we'll see it when we wake up again.
1347         * heap/BlockAllocator.h: Add new field to track whether or not we've received recent block requests.
1348         (BlockAllocator):
1349         (JSC::BlockAllocator::allocate): If we receive a request for a block, set our field that tracks 
1350         that to true. We don't bother locking since we assume that writing to a bool is atomic.
1351
1352 2012-05-14  Luke Macpherson  <macpherson@chromium.org>
1353
1354         Introduce ENABLE_CSS_VARIABLES compile flag.
1355         https://bugs.webkit.org/show_bug.cgi?id=86338
1356
1357         Reviewed by Dimitri Glazkov.
1358
1359         Add a configuration option for CSS Variables support, disabling it by default.
1360
1361         * Configurations/FeatureDefines.xcconfig:
1362
1363 2012-05-14  Gavin Barraclough  <barraclough@apple.com>
1364
1365         Cannot login to iCloud
1366         https://bugs.webkit.org/show_bug.cgi?id=86321
1367
1368         Reviewed by Filip Pizlo.
1369
1370         This is a bug introduced by bug#85853, we shouldn't allow assignment to
1371         the prototype property of functions to be cached, since we need to clear
1372         the cached inheritorID.
1373
1374         * runtime/JSFunction.cpp:
1375         (JSC::JSFunction::put):
1376
1377 2012-05-14  Michael Saboff  <msaboff@apple.com>
1378
1379         Enh: Add the Ability to Disable / Enable JavaScript GC Timer
1380         https://bugs.webkit.org/show_bug.cgi?id=86382
1381
1382         Reviewed by Darin Adler.
1383
1384         Add flag to GCActivityCallback to enable / disable activity timer.
1385         Add api via Heap to set the flag's value.
1386
1387         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Windows export
1388         * heap/Heap.cpp:
1389         (JSC::Heap::setGarbageCollectionTimerEnabled):
1390         * heap/Heap.h:
1391         * runtime/GCActivityCallback.h:
1392         (JSC::GCActivityCallback::isEnabled):
1393         (JSC::GCActivityCallback::setEnabled):
1394         (JSC::GCActivityCallback::GCActivityCallback):
1395         * runtime/GCActivityCallbackCF.cpp:
1396         (JSC::DefaultGCActivityCallbackPlatformData::timerDidFire):
1397
1398 2012-05-14  Michael Saboff  <msaboff@apple.com>
1399
1400         Increase Debug Logging in MarkStack::validate()
1401         https://bugs.webkit.org/show_bug.cgi?id=86408
1402
1403         Rubber-stamped by Filip Pizlo.
1404
1405         Added some descriptive debug messages for the conditions and
1406         values when a cell validation fails.
1407
1408         * heap/MarkStack.cpp:
1409         (JSC::MarkStack::validate):
1410
1411 2012-05-14  Carlos Garcia Campos  <cgarcia@igalia.com>
1412
1413         Unreviewed. Fix make distcheck.
1414
1415         * GNUmakefile.list.am: Add missing header file.
1416
1417 2012-05-14  Yong Li  <yoli@rim.com>
1418
1419         DFG JIT didn't work with ARM EABI.
1420         https://bugs.webkit.org/show_bug.cgi?id=84449
1421
1422         Reviewed by Filip Pizlo.
1423
1424         Add a 32-bit dummy argument for some callOperation()
1425         methods to make it work for ARM EABI.
1426
1427         * dfg/DFGCCallHelpers.h:
1428         (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
1429         (CCallHelpers):
1430         * dfg/DFGOperations.cpp:
1431         * dfg/DFGSpeculativeJIT.h:
1432         (SpeculativeJIT):
1433         (JSC::DFG::SpeculativeJIT::callOperation):
1434
1435 2012-05-13  Gavin Barraclough  <barraclough@apple.com>
1436
1437         Introduce PropertyName class
1438         https://bugs.webkit.org/show_bug.cgi?id=86241
1439
1440         Reviewed by Darin Adler.
1441
1442         This patch introduced a couple of small bugs.
1443
1444         * runtime/PropertyName.h:
1445         (JSC::toUInt32FromCharacters):
1446             - Returning wrong value for "" - should not convert to 0.
1447         (JSC::PropertyName::PropertyName):
1448             - Remove the ASSERT, it was a little too aspirational.
1449
1450 2012-05-13  Filip Pizlo  <fpizlo@apple.com>
1451
1452         DFG performs incorrect constant folding on double-to-uint32 conversion in
1453         Uint32Array PutByVal
1454         https://bugs.webkit.org/show_bug.cgi?id=86330
1455
1456         Reviewed by Darin Adler.
1457         
1458         static_cast<int>(d) is wrong, since JS semantics require us to use toInt32(d).
1459         In particular, C++ casts on typical hardware (like x86 and similar) will
1460         return 0x80000000 for double values that are out of range of the int32 domain
1461         (i.e. less than -2^31 or greater than or equal to 2^31). But JS semantics call
1462         for wrap-around; for example the double value 4294967297 ought to become the
1463         int32 value 1, not 0x80000000.
1464
1465         * dfg/DFGSpeculativeJIT.cpp:
1466         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
1467
1468 2012-05-11  Gavin Barraclough  <barraclough@apple.com>
1469
1470         Introduce PropertyName class
1471         https://bugs.webkit.org/show_bug.cgi?id=86241
1472
1473         Reviewed by Geoff Garen.
1474
1475         Replace 'const Identifier&' arguments to functions accessing object properties with a new 'PropertyName' type.
1476         This change paves the way to allow for properties keyed by values that are not Identifiers.
1477
1478         This change is largely a mechanical find & replace.
1479         It also changes JSFunction's constructor to take a UString& instead of an Identifier&
1480         (since in some cases we can no longer guarantee that we'lll have an Identifier), and
1481         unifies Identifier's methods to obtain array indices onto PropertyName.
1482
1483         The new PropertyName class retains the ability to support .impl() and .ustring(), but
1484         in a future patch we may need to rework this, since not all PropertyNames should be
1485         equal based on their string representation.
1486
1487         * API/JSCallbackFunction.cpp:
1488         (JSC::JSCallbackFunction::finishCreation):
1489         * API/JSCallbackFunction.h:
1490         (JSCallbackFunction):
1491         (JSC::JSCallbackFunction::create):
1492         * API/JSCallbackObject.h:
1493         (JSCallbackObject):
1494         * API/JSCallbackObjectFunctions.h:
1495         (JSC::::getOwnPropertySlot):
1496         (JSC::::getOwnPropertyDescriptor):
1497         (JSC::::put):
1498         (JSC::::deleteProperty):
1499         (JSC::::getStaticValue):
1500         (JSC::::staticFunctionGetter):
1501         (JSC::::callbackGetter):
1502         * API/JSObjectRef.cpp:
1503         (JSObjectMakeFunctionWithCallback):
1504         * JSCTypedArrayStubs.h:
1505         (JSC):
1506         * JavaScriptCore.xcodeproj/project.pbxproj:
1507         * debugger/DebuggerActivation.cpp:
1508         (JSC::DebuggerActivation::getOwnPropertySlot):
1509         (JSC::DebuggerActivation::put):
1510         (JSC::DebuggerActivation::putDirectVirtual):
1511         (JSC::DebuggerActivation::deleteProperty):
1512         (JSC::DebuggerActivation::getOwnPropertyDescriptor):
1513         (JSC::DebuggerActivation::defineOwnProperty):
1514         * debugger/DebuggerActivation.h:
1515         (DebuggerActivation):
1516         * jsc.cpp:
1517         (GlobalObject::addFunction):
1518         (GlobalObject::addConstructableFunction):
1519         * runtime/Arguments.cpp:
1520         (JSC::Arguments::getOwnPropertySlot):
1521         (JSC::Arguments::getOwnPropertyDescriptor):
1522         (JSC::Arguments::put):
1523         (JSC::Arguments::deleteProperty):
1524         (JSC::Arguments::defineOwnProperty):
1525         * runtime/Arguments.h:
1526         (Arguments):
1527         * runtime/ArrayConstructor.cpp:
1528         (JSC::ArrayConstructor::finishCreation):
1529         (JSC::ArrayConstructor::getOwnPropertySlot):
1530         (JSC::ArrayConstructor::getOwnPropertyDescriptor):
1531         * runtime/ArrayConstructor.h:
1532         (ArrayConstructor):
1533         * runtime/ArrayPrototype.cpp:
1534         (JSC::ArrayPrototype::getOwnPropertySlot):
1535         (JSC::ArrayPrototype::getOwnPropertyDescriptor):
1536         (JSC::putProperty):
1537         * runtime/ArrayPrototype.h:
1538         (ArrayPrototype):
1539         * runtime/BooleanConstructor.cpp:
1540         (JSC::BooleanConstructor::finishCreation):
1541         * runtime/BooleanPrototype.cpp:
1542         (JSC::BooleanPrototype::getOwnPropertySlot):
1543         (JSC::BooleanPrototype::getOwnPropertyDescriptor):
1544         * runtime/BooleanPrototype.h:
1545         (BooleanPrototype):
1546         * runtime/ClassInfo.h:
1547         (MethodTable):
1548         * runtime/DateConstructor.cpp:
1549         (JSC::DateConstructor::finishCreation):
1550         (JSC::DateConstructor::getOwnPropertySlot):
1551         (JSC::DateConstructor::getOwnPropertyDescriptor):
1552         * runtime/DateConstructor.h:
1553         (DateConstructor):
1554         * runtime/DatePrototype.cpp:
1555         (JSC::DatePrototype::getOwnPropertySlot):
1556         (JSC::DatePrototype::getOwnPropertyDescriptor):
1557         * runtime/DatePrototype.h:
1558         (DatePrototype):
1559         * runtime/Error.h:
1560         (JSC::StrictModeTypeErrorFunction::create):
1561         * runtime/ErrorConstructor.cpp:
1562         (JSC::ErrorConstructor::finishCreation):
1563         * runtime/ErrorPrototype.cpp:
1564         (JSC::ErrorPrototype::getOwnPropertySlot):
1565         (JSC::ErrorPrototype::getOwnPropertyDescriptor):
1566         * runtime/ErrorPrototype.h:
1567         (ErrorPrototype):
1568         * runtime/FunctionConstructor.cpp:
1569         (JSC::FunctionConstructor::finishCreation):
1570         * runtime/FunctionPrototype.cpp:
1571         (JSC::FunctionPrototype::finishCreation):
1572         (JSC::FunctionPrototype::addFunctionProperties):
1573         (JSC::functionProtoFuncBind):
1574         * runtime/FunctionPrototype.h:
1575         (JSC::FunctionPrototype::create):
1576         (FunctionPrototype):
1577         * runtime/Identifier.cpp:
1578         (JSC):
1579         * runtime/Identifier.h:
1580         (Identifier):
1581         * runtime/InternalFunction.cpp:
1582         (JSC::InternalFunction::finishCreation):
1583         * runtime/InternalFunction.h:
1584         (InternalFunction):
1585         * runtime/JSActivation.cpp:
1586         (JSC::JSActivation::symbolTableGet):
1587         (JSC::JSActivation::symbolTablePut):
1588         (JSC::JSActivation::symbolTablePutWithAttributes):
1589         (JSC::JSActivation::getOwnPropertySlot):
1590         (JSC::JSActivation::put):
1591         (JSC::JSActivation::putDirectVirtual):
1592         (JSC::JSActivation::deleteProperty):
1593         (JSC::JSActivation::argumentsGetter):
1594         * runtime/JSActivation.h:
1595         (JSActivation):
1596         * runtime/JSArray.cpp:
1597         (JSC::JSArray::defineOwnProperty):
1598         (JSC::JSArray::getOwnPropertySlot):
1599         (JSC::JSArray::getOwnPropertyDescriptor):
1600         (JSC::JSArray::put):
1601         (JSC::JSArray::deleteProperty):
1602         * runtime/JSArray.h:
1603         (JSArray):
1604         (JSC):
1605         * runtime/JSBoundFunction.cpp:
1606         (JSC::JSBoundFunction::create):
1607         (JSC::JSBoundFunction::finishCreation):
1608         * runtime/JSBoundFunction.h:
1609         (JSBoundFunction):
1610         * runtime/JSCell.cpp:
1611         (JSC::JSCell::getOwnPropertySlot):
1612         (JSC::JSCell::put):
1613         (JSC::JSCell::deleteProperty):
1614         (JSC::JSCell::putDirectVirtual):
1615         (JSC::JSCell::defineOwnProperty):
1616         (JSC::JSCell::getOwnPropertyDescriptor):
1617         * runtime/JSCell.h:
1618         (JSCell):
1619         * runtime/JSFunction.cpp:
1620         (JSC::JSFunction::create):
1621         (JSC::JSFunction::finishCreation):
1622         (JSC::JSFunction::argumentsGetter):
1623         (JSC::JSFunction::callerGetter):
1624         (JSC::JSFunction::lengthGetter):
1625         (JSC::JSFunction::getOwnPropertySlot):
1626         (JSC::JSFunction::getOwnPropertyDescriptor):
1627         (JSC::JSFunction::put):
1628         (JSC::JSFunction::deleteProperty):
1629         (JSC::JSFunction::defineOwnProperty):
1630         (JSC::getCalculatedDisplayName):
1631         * runtime/JSFunction.h:
1632         (JSFunction):
1633         * runtime/JSGlobalObject.cpp:
1634         (JSC::JSGlobalObject::put):
1635         (JSC::JSGlobalObject::putDirectVirtual):
1636         (JSC::JSGlobalObject::defineOwnProperty):
1637         (JSC::JSGlobalObject::reset):
1638         (JSC::JSGlobalObject::createThrowTypeError):
1639         (JSC::JSGlobalObject::getOwnPropertySlot):
1640         (JSC::JSGlobalObject::getOwnPropertyDescriptor):
1641         * runtime/JSGlobalObject.h:
1642         (JSGlobalObject):
1643         (JSC::JSGlobalObject::hasOwnPropertyForWrite):
1644         (JSC::JSGlobalObject::symbolTableHasProperty):
1645         * runtime/JSNotAnObject.cpp:
1646         (JSC::JSNotAnObject::getOwnPropertySlot):
1647         (JSC::JSNotAnObject::getOwnPropertyDescriptor):
1648         (JSC::JSNotAnObject::put):
1649         (JSC::JSNotAnObject::deleteProperty):
1650         * runtime/JSNotAnObject.h:
1651         (JSNotAnObject):
1652         * runtime/JSONObject.cpp:
1653         (JSC::JSONObject::getOwnPropertySlot):
1654         (JSC::JSONObject::getOwnPropertyDescriptor):
1655         * runtime/JSONObject.h:
1656         (JSONObject):
1657         * runtime/JSObject.cpp:
1658         (JSC::JSObject::put):
1659         (JSC::JSObject::putDirectVirtual):
1660         (JSC::JSObject::putDirectAccessor):
1661         (JSC::JSObject::hasProperty):
1662         (JSC::JSObject::deleteProperty):
1663         (JSC::JSObject::hasOwnProperty):
1664         (JSC::callDefaultValueFunction):
1665         (JSC::JSObject::findPropertyHashEntry):
1666         (JSC::JSObject::getPropertySpecificValue):
1667         (JSC::JSObject::removeDirect):
1668         (JSC::JSObject::getOwnPropertyDescriptor):
1669         (JSC::JSObject::getPropertyDescriptor):
1670         (JSC::putDescriptor):
1671         (JSC::JSObject::defineOwnProperty):
1672         * runtime/JSObject.h:
1673         (JSObject):
1674         (JSC::JSObject::getDirect):
1675         (JSC::JSObject::getDirectLocation):
1676         (JSC::JSObject::inlineGetOwnPropertySlot):
1677         (JSC::JSObject::getOwnPropertySlot):
1678         (JSC::JSCell::fastGetOwnPropertySlot):
1679         (JSC::JSObject::getPropertySlot):
1680         (JSC::JSObject::get):
1681         (JSC::JSObject::putDirectInternal):
1682         (JSC::JSObject::putOwnDataProperty):
1683         (JSC::JSObject::putDirect):
1684         (JSC::JSObject::putDirectWithoutTransition):
1685         (JSC::JSValue::get):
1686         (JSC::JSValue::put):
1687         * runtime/JSStaticScopeObject.cpp:
1688         (JSC::JSStaticScopeObject::put):
1689         (JSC::JSStaticScopeObject::putDirectVirtual):
1690         (JSC::JSStaticScopeObject::getOwnPropertySlot):
1691         * runtime/JSStaticScopeObject.h:
1692         (JSStaticScopeObject):
1693         * runtime/JSString.cpp:
1694         (JSC::JSString::getOwnPropertySlot):
1695         (JSC::JSString::getStringPropertyDescriptor):
1696         * runtime/JSString.h:
1697         (JSString):
1698         (JSC::JSString::getStringPropertySlot):
1699         * runtime/JSValue.cpp:
1700         (JSC::JSValue::putToPrimitive):
1701         * runtime/JSValue.h:
1702         (JSC):
1703         (JSValue):
1704         * runtime/JSVariableObject.cpp:
1705         (JSC::JSVariableObject::deleteProperty):
1706         (JSC::JSVariableObject::symbolTableGet):
1707         (JSC::JSVariableObject::putDirectVirtual):
1708         * runtime/JSVariableObject.h:
1709         (JSVariableObject):
1710         (JSC::JSVariableObject::symbolTableGet):
1711         (JSC::JSVariableObject::symbolTablePut):
1712         (JSC::JSVariableObject::symbolTablePutWithAttributes):
1713         * runtime/Lookup.cpp:
1714         (JSC::setUpStaticFunctionSlot):
1715         * runtime/Lookup.h:
1716         (JSC::HashTable::entry):
1717         (JSC):
1718         (JSC::getStaticPropertySlot):
1719         (JSC::getStaticPropertyDescriptor):
1720         (JSC::getStaticFunctionSlot):
1721         (JSC::getStaticFunctionDescriptor):
1722         (JSC::getStaticValueSlot):
1723         (JSC::getStaticValueDescriptor):
1724         (JSC::lookupPut):
1725         * runtime/MathObject.cpp:
1726         (JSC::MathObject::getOwnPropertySlot):
1727         (JSC::MathObject::getOwnPropertyDescriptor):
1728         * runtime/MathObject.h:
1729         (MathObject):
1730         * runtime/NativeErrorConstructor.h:
1731         (JSC::NativeErrorConstructor::finishCreation):
1732         * runtime/NumberConstructor.cpp:
1733         (JSC):
1734         (JSC::NumberConstructor::finishCreation):
1735         (JSC::NumberConstructor::getOwnPropertySlot):
1736         (JSC::NumberConstructor::getOwnPropertyDescriptor):
1737         (JSC::NumberConstructor::put):
1738         (JSC::numberConstructorNaNValue):
1739         (JSC::numberConstructorNegInfinity):
1740         (JSC::numberConstructorPosInfinity):
1741         (JSC::numberConstructorMaxValue):
1742         (JSC::numberConstructorMinValue):
1743         * runtime/NumberConstructor.h:
1744         (NumberConstructor):
1745         * runtime/NumberPrototype.cpp:
1746         (JSC::NumberPrototype::getOwnPropertySlot):
1747         (JSC::NumberPrototype::getOwnPropertyDescriptor):
1748         * runtime/NumberPrototype.h:
1749         (NumberPrototype):
1750         * runtime/ObjectConstructor.cpp:
1751         (JSC::ObjectConstructor::finishCreation):
1752         (JSC::ObjectConstructor::getOwnPropertySlot):
1753         (JSC::ObjectConstructor::getOwnPropertyDescriptor):
1754         * runtime/ObjectConstructor.h:
1755         (ObjectConstructor):
1756         * runtime/ObjectPrototype.cpp:
1757         (JSC::ObjectPrototype::put):
1758         (JSC::ObjectPrototype::defineOwnProperty):
1759         (JSC::ObjectPrototype::getOwnPropertySlot):
1760         (JSC::ObjectPrototype::getOwnPropertyDescriptor):
1761         * runtime/ObjectPrototype.h:
1762         (ObjectPrototype):
1763         * runtime/PropertySlot.h:
1764         (PropertySlot):
1765         (JSC::PropertySlot::getValue):
1766         * runtime/RegExpConstructor.cpp:
1767         (JSC):
1768         (JSC::RegExpConstructor::finishCreation):
1769         (JSC::RegExpConstructor::getOwnPropertySlot):
1770         (JSC::RegExpConstructor::getOwnPropertyDescriptor):
1771         (JSC::regExpConstructorDollar1):
1772         (JSC::regExpConstructorDollar2):
1773         (JSC::regExpConstructorDollar3):
1774         (JSC::regExpConstructorDollar4):
1775         (JSC::regExpConstructorDollar5):
1776         (JSC::regExpConstructorDollar6):
1777         (JSC::regExpConstructorDollar7):
1778         (JSC::regExpConstructorDollar8):
1779         (JSC::regExpConstructorDollar9):
1780         (JSC::regExpConstructorInput):
1781         (JSC::regExpConstructorMultiline):
1782         (JSC::regExpConstructorLastMatch):
1783         (JSC::regExpConstructorLastParen):
1784         (JSC::regExpConstructorLeftContext):
1785         (JSC::regExpConstructorRightContext):
1786         (JSC::RegExpConstructor::put):
1787         * runtime/RegExpConstructor.h:
1788         (RegExpConstructor):
1789         * runtime/RegExpMatchesArray.h:
1790         (JSC::RegExpMatchesArray::getOwnPropertySlot):
1791         (JSC::RegExpMatchesArray::getOwnPropertyDescriptor):
1792         (JSC::RegExpMatchesArray::put):
1793         (JSC::RegExpMatchesArray::deleteProperty):
1794         (JSC::RegExpMatchesArray::defineOwnProperty):
1795         * runtime/RegExpObject.cpp:
1796         (JSC):
1797         (JSC::RegExpObject::getOwnPropertySlot):
1798         (JSC::RegExpObject::getOwnPropertyDescriptor):
1799         (JSC::RegExpObject::deleteProperty):
1800         (JSC::RegExpObject::defineOwnProperty):
1801         (JSC::regExpObjectGlobal):
1802         (JSC::regExpObjectIgnoreCase):
1803         (JSC::regExpObjectMultiline):
1804         (JSC::regExpObjectSource):
1805         (JSC::RegExpObject::put):
1806         * runtime/RegExpObject.h:
1807         (RegExpObject):
1808         * runtime/RegExpPrototype.cpp:
1809         (JSC::RegExpPrototype::getOwnPropertySlot):
1810         (JSC::RegExpPrototype::getOwnPropertyDescriptor):
1811         * runtime/RegExpPrototype.h:
1812         (RegExpPrototype):
1813         * runtime/StrictEvalActivation.cpp:
1814         (JSC::StrictEvalActivation::deleteProperty):
1815         * runtime/StrictEvalActivation.h:
1816         (StrictEvalActivation):
1817         * runtime/StringConstructor.cpp:
1818         (JSC::StringConstructor::finishCreation):
1819         (JSC::StringConstructor::getOwnPropertySlot):
1820         (JSC::StringConstructor::getOwnPropertyDescriptor):
1821         * runtime/StringConstructor.h:
1822         (StringConstructor):
1823         * runtime/StringObject.cpp:
1824         (JSC::StringObject::getOwnPropertySlot):
1825         (JSC::StringObject::getOwnPropertyDescriptor):
1826         (JSC::StringObject::put):
1827         (JSC::StringObject::defineOwnProperty):
1828         (JSC::StringObject::deleteProperty):
1829         * runtime/StringObject.h:
1830         (StringObject):
1831         * runtime/StringPrototype.cpp:
1832         (JSC::StringPrototype::getOwnPropertySlot):
1833         (JSC::StringPrototype::getOwnPropertyDescriptor):
1834         * runtime/StringPrototype.h:
1835         (StringPrototype):
1836         * runtime/Structure.cpp:
1837         (JSC::Structure::despecifyDictionaryFunction):
1838         (JSC::Structure::addPropertyTransitionToExistingStructure):
1839         (JSC::Structure::addPropertyTransition):
1840         (JSC::Structure::removePropertyTransition):
1841         (JSC::Structure::despecifyFunctionTransition):
1842         (JSC::Structure::attributeChangeTransition):
1843         (JSC::Structure::addPropertyWithoutTransition):
1844         (JSC::Structure::removePropertyWithoutTransition):
1845         (JSC::Structure::get):
1846         (JSC::Structure::despecifyFunction):
1847         (JSC::Structure::putSpecificValue):
1848         (JSC::Structure::remove):
1849         * runtime/Structure.h:
1850         (Structure):
1851         (JSC::Structure::get):
1852
1853 2012-05-11  Michael Saboff  <msaboff@apple.com>
1854
1855         Rolling out r116659.
1856
1857         Causes ASSERT failures on bots.
1858
1859         Rubber stamped by Geoff Garen.
1860
1861         * heap/Heap.cpp:
1862         (JSC::Heap::markRoots):
1863         * heap/MarkStack.cpp:
1864         (JSC::MarkStackThreadSharedData::markingThreadMain):
1865         (JSC::MarkStackThreadSharedData::markingThreadStartFunc):
1866         (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData):
1867         (JSC::MarkStackThreadSharedData::reset):
1868         (JSC::MarkStack::reset):
1869         (JSC):
1870         (JSC::SlotVisitor::copyAndAppend):
1871         * heap/MarkStack.h:
1872         (MarkStackThreadSharedData):
1873         (MarkStack):
1874         * runtime/JSString.h:
1875         (JSString):
1876         (JSC::JSString::finishCreation):
1877         (JSC::JSString::is8Bit):
1878         (JSC::JSRopeString::finishCreation):
1879
1880 2012-05-11  Oliver Hunt  <oliver@apple.com>
1881
1882         Appease thread verifier when dealing with the JSC API's shared VM
1883         https://bugs.webkit.org/show_bug.cgi?id=86268
1884
1885         Reviewed by Geoffrey Garen.
1886
1887         If we're the shared VM, just disable the verifier.  This makes debug builds
1888         livable against non-webkit clients.
1889
1890         * runtime/JSGlobalData.cpp:
1891         (JSC::JSGlobalData::JSGlobalData):
1892
1893 2012-05-11  Filip Pizlo  <fpizlo@apple.com>
1894
1895         JIT memory allocator is not returning memory to the OS on Darwin
1896         https://bugs.webkit.org/show_bug.cgi?id=86047
1897
1898         Reviewed by Geoff Garen.
1899
1900         * jit/ExecutableAllocatorFixedVMPool.cpp:
1901         (JSC::FixedVMPoolExecutableAllocator::notifyPageIsFree):
1902
1903 2012-05-11  Geoffrey Garen  <ggaren@apple.com>
1904
1905         Clarified JSGlobalData (JavaScript VM) lifetime
1906         https://bugs.webkit.org/show_bug.cgi?id=85142
1907
1908         Reviewed by Alexey Proskuryakov.
1909
1910         (Follow-up fix.)
1911
1912         * API/JSContextRef.cpp:
1913         (JSGlobalContextCreate): Restored some code I removed because I misread an #ifdef.
1914         (We don't need to test BUILDING_ON_LEOPARD, but we still need the linked-on
1915         test, because apps might have been linked on older OS's.)
1916
1917 2012-05-11  Sam Weinig  <sam@webkit.org>
1918
1919         Fix crash seen when running with libgmalloc
1920         <rdar://problem/11435411>
1921         https://bugs.webkit.org/show_bug.cgi?id=86232
1922
1923         Reviewed by Gavin Barraclough.
1924
1925         * heap/MarkStack.cpp:
1926         (JSC::MarkStackThreadSharedData::markingThreadMain):
1927         Don't delete the SlotVisitor before the ParallelModeEnabler has had a chance to run its
1928         destructor.
1929
1930 2012-05-10  Gavin Barraclough  <barraclough@apple.com>
1931
1932         Remove op_get_callee
1933
1934         Rubber stamped by Geoff Garen.
1935         
1936         This is now redundant.
1937
1938         * bytecode/CodeBlock.cpp:
1939         (JSC::CodeBlock::dump):
1940         * bytecode/Opcode.h:
1941         (JSC):
1942         (JSC::padOpcodeName):
1943         * dfg/DFGByteCodeParser.cpp:
1944         (JSC::DFG::ByteCodeParser::parseBlock):
1945         * dfg/DFGCapabilities.h:
1946         (JSC::DFG::canCompileOpcode):
1947         * interpreter/Interpreter.cpp:
1948         (JSC::Interpreter::privateExecute):
1949         * jit/JIT.cpp:
1950         (JSC::JIT::privateCompileMainPass):
1951         * jit/JIT.h:
1952         * jit/JITOpcodes.cpp:
1953         (JSC):
1954         * jit/JITOpcodes32_64.cpp:
1955         (JSC):
1956         * llint/LowLevelInterpreter32_64.asm:
1957         * llint/LowLevelInterpreter64.asm:
1958
1959 2012-05-10  Gavin Barraclough  <barraclough@apple.com>
1960
1961         Cache inheritorID on JSFunction
1962         https://bugs.webkit.org/show_bug.cgi?id=85853
1963
1964         Reviewed by Geoff Garen & Filip Pizlo.
1965
1966         An object's prototype is indicated via its structure.  To create an otherwise
1967         empty object with object A as its prototype, we require a structure with its
1968         prototype set to point to A.  We wish to use this same structure for all empty
1969         objects created with a prototype of A, so we presently store this structure as
1970         a property of A, known as the inheritorID.
1971
1972         When a function F is invoked as a constructor, where F has a property 'prototype'
1973         set to point to A, in order to create the 'this' value for the constructor to
1974         use the following steps are taken:
1975           - the 'prototype' proptery of F is read, via a regular [[Get]] access.
1976           - the inheritorID internal property of the prototype is read.
1977           - a new, empty object is constructed with its structure set to point to inheritorID.
1978
1979         There are two drawbacks to the current approach:
1980           - it requires that every object has an inheritorID field.
1981           - it requires a [[Get]] access on every constructor call to access the 'prototype' property.
1982
1983         Instead, switch to caching a copy of the inheritorID on the function.  Constructor
1984         calls now only need read the internal property from the callee, saving a [[Get]].
1985         This also means that JSObject::m_inheritorID is no longer commonly read, and in a
1986         future patch we can move to storing this in a more memory efficient fashion.
1987
1988         * JavaScriptCore.xcodeproj/project.pbxproj:
1989         * bytecode/CodeBlock.cpp:
1990         (JSC::CodeBlock::dump):
1991         * bytecode/Opcode.h:
1992         (JSC):
1993         (JSC::padOpcodeName):
1994         * bytecompiler/BytecodeGenerator.cpp:
1995         (JSC::BytecodeGenerator::BytecodeGenerator):
1996         * dfg/DFGAbstractState.cpp:
1997         (JSC::DFG::AbstractState::execute):
1998         * dfg/DFGByteCodeParser.cpp:
1999         (JSC::DFG::ByteCodeParser::parseBlock):
2000         * dfg/DFGNodeType.h:
2001         (DFG):
2002         * dfg/DFGOperations.cpp:
2003         * dfg/DFGOperations.h:
2004         * dfg/DFGPredictionPropagationPhase.cpp:
2005         (JSC::DFG::PredictionPropagationPhase::propagate):
2006         * dfg/DFGSpeculativeJIT32_64.cpp:
2007         (JSC::DFG::SpeculativeJIT::compile):
2008         * dfg/DFGSpeculativeJIT64.cpp:
2009         (JSC::DFG::SpeculativeJIT::compile):
2010         * interpreter/Interpreter.cpp:
2011         (JSC::Interpreter::privateExecute):
2012         * jit/JITInlineMethods.h:
2013         (JSC::JIT::emitAllocateJSFunction):
2014         * jit/JITOpcodes.cpp:
2015         (JSC::JIT::emit_op_create_this):
2016         (JSC::JIT::emitSlow_op_create_this):
2017         * jit/JITOpcodes32_64.cpp:
2018         (JSC::JIT::emit_op_create_this):
2019         (JSC::JIT::emitSlow_op_create_this):
2020         * jit/JITStubs.cpp:
2021         (JSC::DEFINE_STUB_FUNCTION):
2022         * llint/LLIntSlowPaths.cpp:
2023         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
2024         * llint/LowLevelInterpreter32_64.asm:
2025         * llint/LowLevelInterpreter64.asm:
2026         * runtime/JSFunction.cpp:
2027         (JSC::JSFunction::JSFunction):
2028         (JSC::JSFunction::cacheInheritorID):
2029         (JSC):
2030         (JSC::JSFunction::put):
2031         (JSC::JSFunction::defineOwnProperty):
2032         * runtime/JSFunction.h:
2033         (JSC::JSFunction::cachedInheritorID):
2034         (JSFunction):
2035         (JSC::JSFunction::offsetOfCachedInheritorID):
2036
2037 2012-05-10  Michael Saboff  <msaboff@apple.com>
2038
2039         Enh: Hash Const JSString in Backing Stores to Save Memory
2040         https://bugs.webkit.org/show_bug.cgi?id=86024
2041
2042         Reviewed by Filip Pizlo.
2043
2044         During garbage collection, each marking thread keeps a HashMap of
2045         strings.  While visiting via MarkStack::copyAndAppend(), we check to
2046         see if the string we are visiting is already in the HashMap.  If not
2047         we add it.  If so, we change the reference to the current string we're
2048         visiting to the prior string.
2049
2050         To somewhat reduce the performance impact of this change, if a string
2051         is unique at the end of a marking it will not be checked during further
2052         GC phases.  In some cases this won't catch all duplicates, but we are
2053         trying to catch the growth of duplicate strings.
2054
2055         * heap/Heap.cpp:
2056         (JSC::Heap::markRoots):
2057         * heap/MarkStack.cpp:
2058         (JSC::MarkStackThreadSharedData::resetChildren): New method called by the 
2059         main thread to reset the slave threads.  This is primarily done to
2060         clear the m_uniqueStrings HashMap.
2061         (JSC):
2062         (JSC::MarkStackThreadSharedData::markingThreadMain):
2063         (JSC::MarkStackThreadSharedData::markingThreadStartFunc):
2064         (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData):
2065         (JSC::MarkStackThreadSharedData::reset):
2066         (JSC::MarkStack::reset): Added call to clear m_uniqueStrings.
2067         (JSC::MarkStack::internalAppend): New method that performs the hash consting.
2068         (JSC::SlotVisitor::copyAndAppend): Changed to call the new hash consting
2069         internalAppend()
2070         * heap/MarkStack.h:
2071         (MarkStackThreadSharedData):
2072         (MarkStack):
2073         (JSC::MarkStack::sharedData):
2074         * runtime/JSString.h:
2075         (JSString): Added m_isHashConstSingleton flag, accessors for the flag and
2076         code to initialize the flag.
2077         (JSC::JSString::finishCreation):
2078         (JSC::JSString::isHashConstSingleton):
2079         (JSC::JSString::clearHashConstSingleton):
2080         (JSC::JSString::setHashConstSingleton):
2081         (JSC::JSRopeString::finishCreation):
2082
2083 2012-05-09  Filip Pizlo  <fpizlo@apple.com>
2084
2085         JIT memory allocator is not returning memory to the OS on Darwin
2086         https://bugs.webkit.org/show_bug.cgi?id=86047
2087         <rdar://problem/11414948>
2088
2089         Reviewed by Geoff Garen.
2090         
2091         Work around the problem by using a different madvise() flag, but only for the JIT memory
2092         allocator. Also put in ASSERTs that the call is actually working.
2093
2094         * jit/ExecutableAllocatorFixedVMPool.cpp:
2095         (JSC::FixedVMPoolExecutableAllocator::notifyNeedPage):
2096         (JSC::FixedVMPoolExecutableAllocator::notifyPageIsFree):
2097
2098 2012-05-09  Filip Pizlo  <fpizlo@apple.com>
2099
2100         It should be possible to get useful debug logging from the JIT memory allocator
2101         https://bugs.webkit.org/show_bug.cgi?id=86042
2102
2103         Reviewed by Geoff Garen.
2104
2105         * jit/ExecutableAllocator.h:
2106
2107 2012-05-09  Gavin Barraclough  <barraclough@apple.com>
2108
2109         GC race condition in OpaqueJSClass::prototype
2110         https://bugs.webkit.org/show_bug.cgi?id=86034
2111
2112         Build fix.
2113
2114         * API/JSClassRef.cpp:
2115         (OpaqueJSClass::prototype):
2116             - Eeeep, landed bad version of patch!
2117
2118 2012-05-09  Gavin Barraclough  <barraclough@apple.com>
2119
2120         GC race condition in OpaqueJSClass::prototype
2121         https://bugs.webkit.org/show_bug.cgi?id=86034
2122
2123         Reviewed by Filip Pizlo.
2124
2125         The bug here is basically:
2126             if (weakref) weakref->method()
2127         where a GC may occur between the if & the method call.
2128
2129         * API/JSClassRef.cpp:
2130         (OpaqueJSClass::prototype):
2131
2132 2012-05-09  Mark Hahnenberg  <mhahnenberg@apple.com>
2133
2134         CopiedSpace does not add pinned blocks back to the to-space filter
2135         https://bugs.webkit.org/show_bug.cgi?id=86011
2136
2137         Reviewed by Geoffrey Garen.
2138
2139         After a collection has finished, we go through the blocks in from-space 
2140         and move any of them that are pinned into to-space. At the beginning of 
2141         collection, we reset the to-space block filter that is used during 
2142         conservative scanning and add back the blocks that are filled during the 
2143         collection. However, we neglect to add back those blocks that are moved 
2144         from from-space to to-space, which can cause the conservative scan to 
2145         think that some pinned items are not actually in CopiedSpace.
2146
2147         * heap/CopiedSpace.cpp:
2148         (JSC::CopiedSpace::doneCopying): Add the pinned blocks back to the 
2149         to-space filter. Also added a comment and assert for future readers that 
2150         indicates that it's okay that we don't also add the block to the 
2151         to-space block set since it was never removed.
2152
2153
2154 2012-05-09  Carlos Garcia Campos  <cgarcia@igalia.com>
2155
2156         [GTK] Use independent version numbers for public libraries
2157         https://bugs.webkit.org/show_bug.cgi?id=85984
2158
2159         Reviewed by Gustavo Noronha Silva.
2160
2161         * GNUmakefile.am: Use LIBJAVASCRIPTCOREGTK_VERSION for library
2162         version.
2163
2164 2012-05-09  Carlos Garcia Campos  <cgarcia@igalia.com>
2165
2166         [GTK] Do not install JavaScriptCore platform-specific headers
2167         https://bugs.webkit.org/show_bug.cgi?id=85983
2168
2169         Reviewed by Gustavo Noronha Silva.
2170
2171         JavaScriptCore.h includes JSStringRefCF.h unconditionally. It was
2172         renamed to JavaScript.h in r29234 and it still exists for
2173         compatibility with mac and windows users.
2174
2175         * GNUmakefile.list.am: Remove JavaScriptCore.h, JSStringRefCF.h
2176         and JSStringRefBSTR.h from the sources and headers list.
2177
2178 2012-05-08  Gavin Barraclough  <barraclough@apple.com>
2179
2180         ROLLING OUT r114255
2181         
2182         GC in the middle of JSObject::allocatePropertyStorage can cause badness
2183         https://bugs.webkit.org/show_bug.cgi?id=83839
2184
2185         Reviewed by nobody.
2186
2187         This breaks the world, with COLLECT_ON_EVERY_ALLOCATION enabled.
2188
2189         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2190         * jit/JITStubs.cpp:
2191         (JSC::DEFINE_STUB_FUNCTION):
2192         * runtime/JSObject.cpp:
2193         (JSC::JSObject::allocatePropertyStorage):
2194         * runtime/JSObject.h:
2195         (JSObject):
2196         (JSC::JSObject::isUsingInlineStorage):
2197         (JSC):
2198         (JSC::JSObject::putDirectInternal):
2199         (JSC::JSObject::putDirectWithoutTransition):
2200         (JSC::JSObject::transitionTo):
2201         * runtime/Structure.cpp:
2202         (JSC):
2203         * runtime/Structure.h:
2204         (JSC::Structure::didTransition):
2205
2206 2012-05-08  Mark Hahnenberg  <mhahnenberg@apple.com>
2207
2208         Heap should not continually allocate new pages in steady state
2209         https://bugs.webkit.org/show_bug.cgi?id=85936
2210
2211         Reviewed by Geoff Garen.
2212
2213         Currently, in steady state (i.e. a constant amount of live GC 
2214         memory with a constant rate of allocation) assuming we've just 
2215         finished a collection with X live blocks in CopiedSpace, we 
2216         increase our working set by X blocks in CopiedSpace with each 
2217         collection we perform. This is due to the fact that we allocate 
2218         until we run out of free blocks to use in the Heap before we 
2219         consider whether we should run a collection. 
2220
2221         In the longer term, this issue will be mostly resolved by 
2222         implementing quick release for the CopiedSpace. In the shorter 
2223         term, we should change our policy to check whether we should 
2224         allocate before trying to use a free block from the Heap. We 
2225         can change our policy to something more appropriate once we 
2226         have implemented quick release.
2227
2228         This change should also have the convenient side effect of 
2229         reducing the variance in GC-heavy tests (e.g. v8-splay) due 
2230         to fact that we are doing less VM allocation during copying 
2231         collection. Overall, this patch is performance neutral across 
2232         the benchmarks we track.
2233
2234         * heap/CopiedSpace.cpp: 
2235         (JSC::CopiedSpace::getFreshBlock): Shuffle the request from the BlockAllocator
2236         around so that we only do it if the block request must succeed 
2237         i.e. after we've already checked whether we should do a collection.
2238         * heap/MarkedAllocator.cpp:
2239         (JSC::MarkedAllocator::allocateSlowCase): Ditto.
2240         (JSC::MarkedAllocator::allocateBlock): We no longer have a failure mode in this 
2241         function because by the time we've called it, we've already checked whether we 
2242         should run a collection so there's no point in returning null.
2243         * heap/MarkedAllocator.h: Removing old arguments from function declaration.
2244         (MarkedAllocator):
2245
2246 2012-05-08  Gavin Barraclough  <barraclough@apple.com>
2247
2248         SIGFPE on divide in classic interpreter
2249         https://bugs.webkit.org/show_bug.cgi?id=85917
2250
2251         Rubber stamped by Oliver Hunt.
2252
2253         * interpreter/Interpreter.cpp:
2254         (JSC::Interpreter::privateExecute):
2255             - check for divisor of -1.
2256
2257 2012-05-07  Oliver Hunt  <oliver@apple.com>
2258
2259         Rolling out r110287
2260
2261         RS=Filip Pizlo
2262
2263         r110287 was meant to be refactoring only, but changed behavior
2264         enough to break some websites, including qq.com.
2265
2266 2012-05-07  Andy Estes  <aestes@apple.com>
2267
2268         ENABLE_IFRAME_SEAMLESS should be part of FEATURE_DEFINES.
2269
2270         * Configurations/FeatureDefines.xcconfig:
2271
2272 2012-05-07  Oliver Hunt  <oliver@apple.com>
2273
2274         Fix release build.
2275
2276         * llint/LLIntSlowPaths.cpp:
2277         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
2278
2279 2012-05-07  Oliver Hunt  <oliver@apple.com>
2280
2281         LLInt doesn't check for Ropes when performing a character switch
2282         https://bugs.webkit.org/show_bug.cgi?id=85837
2283
2284         Reviewed by Filip Pizlo.
2285
2286         Make LLint check if the scrutinee of a char switch is a rope, and if
2287         so fall back to a slow case.
2288
2289         * llint/LLIntSlowPaths.cpp:
2290         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
2291         (LLInt):
2292         * llint/LowLevelInterpreter32_64.asm:
2293         * llint/LowLevelInterpreter64.asm:
2294
2295 2012-05-07  Eric Seidel  <eric@webkit.org>
2296
2297         Add ENABLE_IFRAME_SEAMLESS so Apple can turn off SEAMLESS if needed
2298         https://bugs.webkit.org/show_bug.cgi?id=85822
2299
2300         Reviewed by Adam Barth.
2301
2302         * Configurations/FeatureDefines.xcconfig:
2303
2304 2012-05-05  Gavin Barraclough  <barraclough@apple.com>
2305
2306         Remove TrustedImm32::m_isPointer
2307         https://bugs.webkit.org/show_bug.cgi?id=85726
2308
2309         Rubber stamped by Sam Weinig.
2310
2311         We used to rely on being able to generate code with known, fixed offsets – to do so we
2312         would inhibit more optimal code generation for pointers. This is no longer necessary.
2313
2314         * assembler/AbstractMacroAssembler.h:
2315         (JSC::AbstractMacroAssembler::TrustedImm32::TrustedImm32):
2316         (TrustedImm32):
2317         * assembler/MacroAssemblerARM.h:
2318         (JSC::MacroAssemblerARM::store32):
2319         (JSC::MacroAssemblerARM::move):
2320         (JSC::MacroAssemblerARM::branch32):
2321         * assembler/MacroAssemblerARMv7.h:
2322         (JSC::MacroAssemblerARMv7::move):
2323         * assembler/MacroAssemblerMIPS.h:
2324         (JSC::MacroAssemblerMIPS::add32):
2325         (JSC::MacroAssemblerMIPS::and32):
2326         (JSC::MacroAssemblerMIPS::mul32):
2327         (JSC::MacroAssemblerMIPS::or32):
2328         (JSC::MacroAssemblerMIPS::sub32):
2329         (JSC::MacroAssemblerMIPS::store32):
2330         (JSC::MacroAssemblerMIPS::move):
2331
2332 2012-05-04  Filip Pizlo  <fpizlo@apple.com>
2333
2334         DFG should not Flush GetLocal's
2335         https://bugs.webkit.org/show_bug.cgi?id=85663
2336         <rdar://problem/11373600>
2337
2338         Reviewed by Oliver Hunt.
2339
2340         * dfg/DFGByteCodeParser.cpp:
2341         (JSC::DFG::ByteCodeParser::flushArgument):
2342         (JSC::DFG::ByteCodeParser::handleCall):
2343
2344 2012-05-04  Allan Sandfeld Jensen  <allan.jensen@nokia.com>
2345
2346         Doesn't build with ENABLE_JIT=0 
2347         https://bugs.webkit.org/show_bug.cgi?id=85042
2348
2349         Reviewed by Gavin Barraclough.
2350
2351         * bytecode/Operands.h:
2352
2353 2012-05-03  Oliver Hunt  <oliver@apple.com>
2354
2355         Regression(r114702): Clobbering the caller frame register before we've stored it.
2356         https://bugs.webkit.org/show_bug.cgi?id=85564
2357
2358         Reviewed by Filip Pizlo.
2359
2360         Don't use t0 as a temporary, when we're about to use the value in t0.
2361
2362         * llint/LowLevelInterpreter32_64.asm:
2363
2364 2012-05-03  Mark Hahnenberg  <mhahnenberg@apple.com>
2365
2366         Removing remainder of accidental printfs.
2367
2368         * heap/Heap.cpp:
2369         (JSC::Heap::collect):
2370
2371 2012-05-03  Andy Estes  <aestes@apple.com>
2372
2373         If you add printf()s to your garbage collector, the layout tests are gonna have a bad time.
2374
2375         * runtime/GCActivityCallbackCF.cpp:
2376         (JSC::DefaultGCActivityCallbackPlatformData::timerDidFire):
2377
2378 2012-05-03  Mark Hahnenberg  <mhahnenberg@apple.com>
2379
2380         Heap::reportAbandonedObjectGraph should not hasten an allocation-triggered collection
2381         https://bugs.webkit.org/show_bug.cgi?id=85543
2382
2383         Reviewed by Filip Pizlo.
2384
2385         Currently reportAbandonedObjectGraph causes the Heap to think it is closer to its 
2386         allocation limit for the current cycle, thus hastening an allocation-triggered collection. 
2387         In reality, it should just affect the opportunistic GC timer. We should track the bytes 
2388         we think have been abandoned and the bytes that have been allocated separately.
2389
2390         * heap/Heap.cpp: Added a new field m_abandonedBytes to Heap to keep track of how much 
2391         we think we've abandoned.
2392         (JSC::Heap::Heap): 
2393         (JSC::Heap::reportAbandonedObjectGraph): 
2394         (JSC):
2395         (JSC::Heap::didAbandon): Added this function for reportAbandonedObjectGraph to call 
2396         rather than didAllocate. Works the same as didAllocate, but modifies bytes abandoned rather 
2397         than bytes allocated. Also notifies the timer, summing the two values together.
2398         (JSC::Heap::collect):
2399         (JSC::Heap::didAllocate): Now adds the bytes allocated and bytes abandoned when reporting 
2400         to GCActivityCallback.
2401         * heap/Heap.h:
2402         (Heap):
2403
2404 2012-05-02  Eric Seidel  <eric@webkit.org>
2405
2406         Sort ENABLE_ defines in FeatureDefines.xcconfig files to make them easier to compare with one another (and easier to autogenerate)
2407         https://bugs.webkit.org/show_bug.cgi?id=85433
2408
2409         Reviewed by Adam Barth.
2410
2411         I have a script which can autogenerate these xcconfig files as well as the
2412         vsprops files (and soon the Chromium, cmake, gnumake and qmake) feature lists
2413         from a central feature list file.
2414         In preparation for posting such a tool, I'm re-sorting these xcconfig files to be
2415         alphabetically ordered (currently they're close, but not quite).
2416         There is also at least one inconsistency between these files (CSS_LEGACY_PREFIXES) which
2417         I will fix in a second pass.  I will also sort the FEATURE_DEFINES = line in a follow-up patch.
2418
2419         * Configurations/FeatureDefines.xcconfig:
2420
2421 2012-05-02  Hojong Han  <hojong.han@samsung.com>
2422
2423         ARM_TRADITIONAL build fix
2424         https://bugs.webkit.org/show_bug.cgi?id=85358
2425
2426         Reviewed by Gavin Barraclough.
2427
2428         * assembler/MacroAssemblerARM.h:
2429         (JSC::MacroAssemblerARM::lshift32):
2430         (MacroAssemblerARM):
2431         (JSC::MacroAssemblerARM::or32):
2432         (JSC::MacroAssemblerARM::urshift32):
2433         (JSC::MacroAssemblerARM::xor32):
2434         (JSC::MacroAssemblerARM::branchSub32):
2435
2436 2012-05-02  Mark Hahnenberg  <mhahnenberg@apple.com>
2437
2438         Opportunistic GC should give up if the Heap is paged out
2439         https://bugs.webkit.org/show_bug.cgi?id=85411
2440
2441         Reviewed by Filip Pizlo.
2442
2443         Opportunistic GC is punishing us severely in limited memory situations because its 
2444         assumptions about how much time a collection will take are way out of whack when the Heap 
2445         has been paged out by the OS. We should add a simple detection function to the Heap that 
2446         detects if its is paged out. It will do this by iterating each block of both the MarkedSpace 
2447         and CopiedSpace. If that operation takes longer than a fixed amount of time (e.g. 100ms), 
2448         the function returns true. This function will only be run prior to an opportunistic 
2449         collection (i.e. it will not run during our normal allocation-triggered collections).
2450
2451         In my tests, steady state was drastically improved in high memory pressure situations (i.e. 
2452         the browser was still usable, significant reduction in SPODs). Occasionally, a normal GC
2453         would be triggered due to pages doing things in the background, which would cause a 
2454         significant pause. As we close pages we now cause normal collections rather than full 
2455         collections, which prevents us from collecting all of the dead memory immediately. One 
2456         nice way to deal with this issue might be to do incremental sweeping.
2457
2458
2459         * heap/CopiedSpace.cpp:
2460         (JSC::isBlockListPagedOut): Helper function to reduce code duplication when iterating over 
2461         to-space, from-space, and the oversize blocks.
2462         (JSC):
2463         (JSC::CopiedSpace::isPagedOut): Tries to determine whether or not CopiedSpace is paged out
2464         by iterating all of the blocks.
2465         * heap/CopiedSpace.h:
2466         (CopiedSpace):
2467         * heap/Heap.cpp:
2468         (JSC::Heap::isPagedOut): Tries to determine whether the Heap is paged out by asking the 
2469         MarkedSpace and CopiedSpace if they are paged out.
2470         (JSC):
2471         * heap/Heap.h:
2472         (Heap):
2473         (JSC::Heap::increaseLastGCLength): Added this so that the GC timer can linearly back off 
2474         each time it determines that the Heap is paged out.
2475         * heap/MarkedAllocator.cpp:
2476         (JSC::MarkedAllocator::isPagedOut): Tries to determine if this particular MarkedAllocator's
2477         list of blocks are paged out.
2478         (JSC):
2479         * heap/MarkedAllocator.h:
2480         (MarkedAllocator):
2481         * heap/MarkedSpace.cpp:
2482         (JSC::MarkedSpace::isPagedOut): For each MarkedAllocator, check to see if they're paged out.
2483         * heap/MarkedSpace.h:
2484         (MarkedSpace):
2485         * runtime/GCActivityCallback.cpp:
2486         (JSC::DefaultGCActivityCallback::cancel):
2487         (JSC):
2488         * runtime/GCActivityCallback.h:
2489         (JSC::GCActivityCallback::cancel):
2490         (DefaultGCActivityCallback):
2491         * runtime/GCActivityCallbackCF.cpp: Added a constant of 100ms for the timeout in determining
2492         whether the Heap is paged out or not.
2493         (JSC):
2494         (JSC::DefaultGCActivityCallbackPlatformData::timerDidFire): Added the check to see if we 
2495         should attempt a collection based on whether or not we can iterate the blocks of the Heap in 
2496         100ms. If we can't, we cancel the timer and tell the Heap we just wasted 100ms more trying to 
2497         do a collection. This gives us a nice linear backoff so we're not constantly re-trying in
2498         steady state paged-out-ness.
2499         (JSC::DefaultGCActivityCallback::cancel): Added this function which, while currently doing 
2500         exactly the same thing as willCollect, is more obvious as to what it's doing when we call it 
2501         in timerDidFire.
2502
2503 2012-05-02  Yong Li  <yoli@rim.com>
2504
2505         Fix GCC X86 build error
2506         https://bugs.webkit.org/show_bug.cgi?id=85379
2507
2508         Reviewed by Rob Buis.
2509
2510         Always explicitly claim ".text" to make sure
2511         functions defined with inline assembly will be
2512         created in the correct section.
2513
2514         * dfg/DFGOperations.cpp:
2515         (JSC):
2516
2517 2012-05-02  Oliver Hunt  <oliver@apple.com>
2518
2519         Unreviewed, rolling out r115388.
2520         http://trac.webkit.org/changeset/115388
2521         https://bugs.webkit.org/show_bug.cgi?id=85011
2522
2523         This caused many weird performance problems, and needs to be
2524         landed in pieces.
2525
2526         * dfg/DFGOperations.cpp:
2527         * heap/Heap.cpp:
2528         (JSC::Heap::getConservativeRegisterRoots):
2529         (JSC::Heap::markRoots):
2530         * interpreter/CallFrame.cpp:
2531         (JSC::CallFrame::dumpCaller):
2532         (JSC):
2533         * interpreter/CallFrame.h:
2534         (JSC::ExecState::init):
2535         (ExecState):
2536         * interpreter/Interpreter.cpp:
2537         (JSC::Interpreter::execute):
2538         (JSC::Interpreter::executeCall):
2539         (JSC::Interpreter::executeConstruct):
2540         (JSC::Interpreter::prepareForRepeatCall):
2541         (JSC::Interpreter::privateExecute):
2542         * interpreter/Interpreter.h:
2543         (JSC::Interpreter::execute):
2544         * interpreter/RegisterFile.cpp:
2545         (JSC::RegisterFile::growSlowCase):
2546         (JSC::RegisterFile::gatherConservativeRoots):
2547         * interpreter/RegisterFile.h:
2548         (JSC::RegisterFile::end):
2549         (JSC::RegisterFile::size):
2550         (JSC::RegisterFile::addressOfEnd):
2551         (RegisterFile):
2552         (JSC::RegisterFile::RegisterFile):
2553         (JSC::RegisterFile::shrink):
2554         (JSC::RegisterFile::grow):
2555         * jit/JITStubs.cpp:
2556         (JSC::DEFINE_STUB_FUNCTION):
2557         (JSC::jitCompileFor):
2558         (JSC::lazyLinkFor):
2559         * llint/LLIntSlowPaths.cpp:
2560         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
2561         (JSC::LLInt::handleHostCall):
2562         * llint/LowLevelInterpreter.asm:
2563         * runtime/CommonSlowPaths.h:
2564         (JSC::CommonSlowPaths::arityCheckFor):
2565
2566 2012-05-01  Oliver Hunt  <oliver@apple.com>
2567
2568         Physijs demo crashes due to DFG not updating topCallFrame correctly.
2569         https://bugs.webkit.org/show_bug.cgi?id=85311
2570
2571         Reviewed by Filip Pizlo.
2572
2573         A few of the dfg operations failed to correctly set the topCallFrame,
2574         and so everything goes wrong.  This patch corrects the effected operations,
2575         and makes debug builds poison topCallFrame before calling a dfg operation.
2576
2577         * dfg/DFGOperations.cpp:
2578         (JSC::DFG::putByVal):
2579         * dfg/DFGSpeculativeJIT.h:
2580         (JSC::DFG::SpeculativeJIT::callOperation):
2581         (SpeculativeJIT):
2582         (JSC::DFG::SpeculativeJIT::prepareForExternalCall):
2583         (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheck):
2584         (JSC::DFG::SpeculativeJIT::appendCallSetResult):
2585
2586 2012-04-30  Gavin Barraclough  <barraclough@apple.com>
2587
2588         Should be able to use YARR JIT without the JS language JIT
2589         https://bugs.webkit.org/show_bug.cgi?id=85252
2590
2591         Reviewed by Geoff Garen.
2592
2593         Need to split canUseRegExpJIT out of canUseJIT.
2594
2595         * runtime/JSGlobalData.cpp:
2596         (JSC):
2597         (JSC::useJIT):
2598         (JSC::JSGlobalData::JSGlobalData):
2599             - replace m_canUseJIT with m_canUseAssembler
2600         * runtime/JSGlobalData.h:
2601         (JSGlobalData):
2602         (JSC::JSGlobalData::canUseRegExpJIT):
2603             - Added canUseRegExpJIT, distinct from canUseJIT.
2604         * runtime/RegExp.cpp:
2605         (JSC::RegExp::compile):
2606         (JSC::RegExp::compileMatchOnly):
2607             - Call canUseRegExpJIT instead of canUseJIT.
2608
2609 2012-04-30  Gavin Barraclough  <barraclough@apple.com>
2610
2611         Should be able to build YARR JIT without the JS language JIT
2612         https://bugs.webkit.org/show_bug.cgi?id=85242
2613
2614         Reviewed by Michael Saboff.
2615
2616         Some build macros are wrong.
2617
2618         * assembler/RepatchBuffer.h:
2619         * jit/ExecutableAllocator.h:
2620         (JSC):
2621         * jit/JITExceptions.cpp:
2622         * runtime/InitializeThreading.cpp:
2623         (JSC::initializeThreadingOnce):
2624
2625 2012-04-26  Gavin Barraclough  <barraclough@apple.com>
2626
2627         Arguments object resets attributes on redefinition of a parameter
2628         https://bugs.webkit.org/show_bug.cgi?id=84994
2629
2630         Rubber stamped by Oliver Hunt.
2631
2632         There is a bug that we always re-add the original property before
2633         redefinition, doing so in a way that will reset the attributes
2634         without checking configurability.
2635
2636         * runtime/Arguments.cpp:
2637         (JSC::Arguments::defineOwnProperty):
2638             - Only instantiate the property once - do not re-add if
2639               it has already been added, or if it has been deleted.
2640
2641 2012-04-30  Ryosuke Niwa  <rniwa@webkit.org>
2642
2643         Remove an erroneous assertion after r115655.
2644
2645         * runtime/NumberPrototype.cpp:
2646         (JSC::toUStringWithRadix):
2647
2648 2012-04-30  Myles Maxfield  <mmaxfield@google.com>
2649
2650         End of Interpreter::tryCacheGetByID can trigger the garbage collector
2651         https://bugs.webkit.org/show_bug.cgi?id=84927
2652
2653         Reviewed by Oliver Hunt.
2654
2655         * interpreter/Interpreter.cpp:
2656         (JSC::Interpreter::tryCacheGetByID):
2657
2658 2012-04-30  Benjamin Poulain  <benjamin@webkit.org>
2659
2660         jsSingleCharacterString and jsSingleCharacterSubstring are not inlined
2661         https://bugs.webkit.org/show_bug.cgi?id=85147
2662
2663         Reviewed by Darin Adler.
2664
2665         The functions jsSingleCharacterString() and jsSingleCharacterSubstring() were not inlined
2666         by the compiler. This annihilate the gains of using SmallStrings.
2667
2668         On stringProtoFuncCharAt(), this patch improves the performance by 11%.
2669
2670         * runtime/JSString.h:
2671         (JSC::jsSingleCharacterString):
2672         (JSC::jsSingleCharacterSubstring):
2673
2674 2012-04-30  Benjamin Poulain  <bpoulain@apple.com>
2675
2676         Add fast patch for radix == 10 on numberProtoFuncToString
2677         https://bugs.webkit.org/show_bug.cgi?id=85120
2678
2679         Reviewed by Darin Adler.
2680
2681         When radix, we use to turn the doubleValue into a JSValue just to convert
2682         it to a String. The problem is that was using the slow path for conversion and
2683         for the toString() operation.
2684
2685         This patch shortcuts the creation of a JSValue and uses NumericStrings directly.
2686         The conversion is split between Integer and Double to ensure the fastest conversion
2687         for the common case of integer arguments.
2688
2689         Converting number with radix 10 becomes 5% faster.
2690
2691         Due to the simpler conversion of number to string for integer, converting
2692         integers that do not fall in the two previous optimizations get 32% faster.
2693
2694         * runtime/NumberPrototype.cpp:
2695         (JSC::extractRadixFromArgs):
2696         (JSC::integerValueToString):
2697         (JSC::numberProtoFuncToString):
2698
2699 2012-04-30  Carlos Garcia Campos  <cgarcia@igalia.com>
2700
2701         Unreviewed. Fix make distcheck.
2702
2703         * GNUmakefile.list.am: Add missing header.
2704
2705 2012-04-28  Geoffrey Garen  <ggaren@apple.com>
2706
2707         Factored threaded block allocation into a separate object
2708         https://bugs.webkit.org/show_bug.cgi?id=85148
2709
2710         Reviewed by Sam Weinig.
2711
2712         99% of this patch just moves duplicated block allocation and 
2713         deallocation code into a new object named BlockAllocator, with these 
2714         exceptions:
2715
2716         * heap/BlockAllocator.h: Added.
2717         (BlockAllocator::BlockAllocator): The order of declarations here now 
2718         guards us against an unlikely race condition during startup.
2719
2720         * heap/BlockAllocator.cpp:
2721         JSC::BlockAllocator::blockFreeingThreadMain): Added a FIXME to 
2722         highlight a lack of clarity we have in our block deallocation routines.
2723
2724 2012-04-28  Sam Weinig  <sam@webkit.org>
2725
2726         Try to fix the Qt build.
2727
2728         * heap/Heap.cpp:
2729         (JSC::Heap::lastChanceToFinalize):
2730
2731 2012-04-28  Geoffrey Garen  <ggaren@apple.com>
2732
2733         Try to fix the Windows build.
2734
2735         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2736
2737 2012-04-28  Geoffrey Garen  <ggaren@apple.com>
2738
2739         Clarified JSGlobalData (JavaScript VM) lifetime
2740         https://bugs.webkit.org/show_bug.cgi?id=85142
2741
2742         Reviewed by Anders Carlsson.
2743
2744         This was so confusing that I didn't feel like I could reason about 
2745         memory lifetime in the heap without fixing it.
2746
2747         The rules are:
2748
2749         (1) JSGlobalData owns the virtual machine and all memory in it.
2750
2751         (2) Deleting a JSGlobalData frees the virtual machine and all memory 
2752         in it.
2753
2754         (Caveat emptor: if you delete the virtual machine while you're running 
2755         JIT code or accessing GC objects, you're gonna have a bad time.)
2756
2757         (I opted not to make arbitrary sub-objects keep the virtual machine 
2758         alive automatically because:
2759
2760                 (a) doing that right would be complex and slow;
2761
2762                 (b) in the case of an exiting thread or process, there's no 
2763                 clear way to give the garbage collector a chance to try again 
2764                 later; 
2765
2766                 (c) continuing to run the garbage collector after we've been 
2767                 asked to shut down the virtual machine seems rude;
2768
2769                 (d) we've never really supported that feature, anyway.)
2770
2771         (3) Normal ref-counting will do. No need to call a battery of 
2772         specialty functions to tear down a JSGlobalData. Its foibles 
2773         notwithstanding, C++ does in fact know how to execute destructors in 
2774         order.
2775
2776         * API/JSContextRef.cpp:
2777         (JSGlobalContextCreate): Removed compatibility shim for older 
2778         operating systems because it's no longer used.
2779
2780         (JSGlobalContextRelease): Now that we can rely on JSGlobalData to "do 
2781         the right thing", this code is much simpler. We still have one special 
2782         case to notify the garbage collector if we're removing the last 
2783         reference to the global object, since this can improve memory behavior.
2784
2785         * heap/CopiedSpace.cpp:
2786         (JSC::CopiedSpace::freeAllBlocks):
2787         * heap/CopiedSpace.h:
2788         (CopiedSpace): Renamed "destroy" => "freeAllBlocks" because true 
2789         destruction-time behaviors should be limited to our C++ destructor.
2790
2791         * heap/Heap.cpp:
2792         (JSC::Heap::~Heap):
2793         (JSC):
2794         (JSC::Heap::lastChanceToFinalize):
2795         * heap/Heap.h:
2796         (Heap):
2797         (JSC::Heap::heap): Renamed "destroy" => "lastChanceToFinalize" because 
2798         true destruction-time behaviors should be limited to our C++ 
2799         destructor.
2800
2801         Reorganized the code, putting code that must run before any objects 
2802         get torn down into lastChanceToFinalize, and code that just tears down 
2803         objects into our destructor.
2804
2805         * heap/Local.h:
2806         (JSC::LocalStack::LocalStack):
2807         (JSC::LocalStack::push):
2808         (LocalStack): See rule (2).
2809
2810         * jsc.cpp:
2811         (functionQuit):
2812         (main):
2813         (printUsageStatement):
2814         (parseArguments):
2815         (jscmain):
2816         * testRegExp.cpp:
2817         (main):
2818         (printUsageStatement):
2819         (parseArguments):
2820         (realMain): See rule (3).
2821
2822         I removed the feature of ensuring orderly tear-down when calling quit()
2823         or running in --help mode because it didn't seem very useful and 
2824         making it work with Windows structured exception handling and 
2825         NO_RETURN didn't seem like a fun way to spend a Saturday.
2826
2827         * runtime/JSGlobalData.h:
2828         * runtime/JSGlobalData.cpp:
2829         (JSC::JSGlobalData::JSGlobalData): Moved heap to be the first data 
2830         member in JSGlobalData to ensure that it's destructed last, so other 
2831         objects that reference it destruct without crashing. This allowed me 
2832         to remove clearBuiltinStructures() altogether, and helped guarantee 
2833         rule (3).
2834
2835         (JSC::JSGlobalData::~JSGlobalData): Explicitly call 
2836         lastChanceToFinalize() at the head of our destructor to ensure that 
2837         all pending finalizers run while the virtual machine is still in a 
2838         valid state. Trying to resurrect (re-ref) the virtual machine at this 
2839         point is not valid, but all other operations are.
2840
2841         Changed a null to a 0xbbadbeef to clarify just how bad this beef is.
2842
2843         * runtime/JSGlobalObject.cpp:
2844         (JSC::JSGlobalObject::init):
2845         * runtime/JSGlobalObject.h:
2846         (JSGlobalObject):
2847         (JSC::JSGlobalObject::globalData): See rule (3).
2848
2849 2012-04-27  Geoffrey Garen  <ggaren@apple.com>
2850
2851         Try to fix the Windows build.
2852
2853         * heap/WeakBlock.h:
2854         (WeakBlock):
2855
2856 2012-04-27  Geoffrey Garen  <ggaren@apple.com>
2857
2858         Made WeakSet::allocate() static and removed its JSGlobalData argument
2859         https://bugs.webkit.org/show_bug.cgi?id=85128
2860
2861         Reviewed by Anders Carlsson.
2862
2863         This is a step toward faster finalization.
2864
2865         WeakSet::allocate() now deduces which WeakSet to allocate from based on
2866         its JSCell* argument. (Currently, there's only one WeakSet, but soon
2867         there will be many.)
2868
2869         This was a global replace of "globalData.heap.weakSet()->allocate" with
2870         "WeakSet::allocate", plus by-hand removal of the JSGlobalData argument.
2871
2872         * heap/WeakSetInlines.h: Copied from Source/JavaScriptCore/heap/WeakSet.h.
2873
2874         I had to split out WeakSet::allocate() in to a separate header to avoid
2875         a cycle.
2876
2877         (JSC::WeakSet::allocate): We can mask the pointer we're passed to
2878         figure out where to allocate our WeakImpl. (Soon, we'll use this to
2879         associate the WeakImpl with the GC block it references.)
2880
2881 2012-04-27  Geoffrey Garen  <ggaren@apple.com>
2882
2883         Stop using aligned allocation for WeakBlock
2884         https://bugs.webkit.org/show_bug.cgi?id=85124
2885
2886         Reviewed by Anders Carlsson.
2887
2888         We don't actually use the alignment for anything.
2889
2890         * heap/WeakBlock.cpp:
2891         (JSC::WeakBlock::create):
2892         (JSC::WeakBlock::WeakBlock): Switched from aligned allocation to regular
2893         allocation.
2894
2895         * heap/WeakBlock.h:
2896         (WeakBlock): Don't use HeapBlock because HeapBlock requires aligned
2897         allocation. This change required me to add some declarations that we used
2898         to inherit from HeapBlock.
2899
2900         (WeakBlock::blockFor): Removed. This function relied on aligned allocation
2901         but didn't do anything for us.
2902
2903         (WeakBlock::deallocate): Removed. WeakBlock doesn't own any of the deallocation
2904         logic, so it shouldn't own the function.
2905
2906         * heap/WeakSet.cpp:
2907         (JSC::WeakSet::~WeakSet):
2908         (JSC::WeakSet::finalizeAll):
2909         (JSC::WeakSet::visitLiveWeakImpls):
2910         (JSC::WeakSet::visitDeadWeakImpls):
2911         (JSC::WeakSet::sweep):
2912         (JSC::WeakSet::shrink):
2913         (JSC::WeakSet::resetAllocator):
2914         (JSC::WeakSet::tryFindAllocator):
2915         * heap/WeakSet.h:
2916         (WeakSet): Updated declarations to reflect WeakBlock not inheriting from
2917         HeapBlock. This allowed me to remove some casts, which was nice.
2918
2919         (JSC::WeakSet::deallocate): Directly set the deallocated flag instead of
2920         asking WeakBlock to do it for us.  We don't need to have a WeakBlock
2921         pointer to set the flag, so stop asking for one.
2922
2923 2012-04-27  Kentaro Hara  <haraken@chromium.org>
2924
2925         [JSC] Implement a helper method createNotEnoughArgumentsError()
2926         https://bugs.webkit.org/show_bug.cgi?id=85102
2927
2928         Reviewed by Geoffrey Garen.
2929
2930         In bug 84787, kbr@ requested to avoid hard-coding
2931         createTypeError(exec, "Not enough arguments") here and there.
2932         This patch implements createNotEnoughArgumentsError(exec)
2933         and uses it in JSC bindings.
2934
2935         c.f. a corresponding bug for V8 bindings is bug 85097.
2936
2937         * runtime/Error.cpp:
2938         (JSC::createNotEnoughArgumentsError):
2939         (JSC):
2940         * runtime/Error.h:
2941         (JSC):
2942
2943 2012-04-27  Geoffrey Garen  <ggaren@apple.com>
2944
2945         Only allow non-null pointers in the WeakSet
2946         https://bugs.webkit.org/show_bug.cgi?id=85119
2947
2948         Reviewed by Darin Adler.
2949
2950         This is a step toward more efficient finalization.
2951
2952         No clients put non-pointers (JSValues) into Weak<T> and PassWeak<T>.
2953
2954         Some clients put null pointers into Weak<T> and PassWeak<T>, but this is
2955         more efficient and straight-forward to model with a null in the Weak<T>
2956         or PassWeak<T> instead of allocating a WeakImpl just to hold null.
2957
2958         * heap/PassWeak.h:
2959         (JSC): Removed the Unknown (JSValue) type of weak pointer because it's
2960         unused now.
2961
2962         (PassWeak): Don't provide a default initializer for our JSCell* argument.
2963         This feature was only used in one place, and it was a bug.
2964
2965         (JSC::::get): Don't check for a null stored inside our WeakImpl: that's 
2966         not allowed anymore.
2967
2968         (JSC::PassWeak::PassWeak): Handle null as a null WeakImpl instead of
2969         allocating a WeakImpl and storing null into it.
2970
2971         * heap/Weak.h:
2972         (Weak):
2973         (JSC::::Weak): Same changes as in PassWeak<T>.
2974
2975         * heap/WeakBlock.cpp:
2976         (JSC::WeakBlock::visitLiveWeakImpls):
2977         (JSC::WeakBlock::visitDeadWeakImpls): Only non-null cells are valid in
2978         the WeakSet now, so no need to check for non-cells and null cell pointers.
2979
2980         * heap/WeakImpl.h:
2981         (JSC::WeakImpl::WeakImpl): Only non-null cells are valid in the WeakSet
2982         now, so ASSERT that.
2983
2984 2012-04-27  Gavin Barraclough  <barraclough@apple.com>
2985
2986         <rdar://problem/7909395> Math in JavaScript is inaccurate on iOS
2987
2988         By defalut IEEE754 denormal support is disabled on iOS;
2989         turn it on.
2990
2991         Reviewed by Filip Pizlo.
2992
2993         * jsc.cpp:
2994         (main):
2995             - clear the appropriate bit in the fpscr.
2996
2997 2012-04-27  Michael Saboff  <msaboff@apple.com>
2998
2999         Memory wasted in JSString for non-rope strings
3000         https://bugs.webkit.org/show_bug.cgi?id=84907
3001
3002         Reviewed by Geoffrey Garen.
3003
3004         Split JSString into two classes, JSString as a base class that does not
3005         include the fibers of a Rope, and a subclass JSRopeString that has the
3006         rope functionality.  Both classes "share" the same ClassInfo.  Added
3007         a bool to JSString to indicate that the string was allocated as a JSRopeString
3008         to properly handle visiting the fiber children when the rope is resolved and
3009         the JSRopeString appears as a JSString.  Didn't change the interface of JSString
3010         to require any JIT changes.
3011
3012         As part of this change, removed "cellSize" from ClassInfo since both classes
3013         share the same ClassInfo, but have different sizes.  The only use I could find
3014         for cellSize was an ASSERT in allocateCell().
3015
3016         This appears to be neutral on performance tests.
3017
3018         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Changed JSString::resolveRope
3019                 to JSRopeString::resolveRope
3020         * runtime/ClassInfo.h:
3021         (JSC):
3022         (ClassInfo):
3023         * runtime/JSCell.h:
3024         (JSC::allocateCell):
3025         * runtime/JSString.cpp:
3026         (JSC::JSRopeString::RopeBuilder::expand):
3027         (JSC::JSString::visitChildren):
3028         (JSC):
3029         (JSC::JSRopeString::visitFibers):
3030         (JSC::JSRopeString::resolveRope):
3031         (JSC::JSRopeString::resolveRopeSlowCase8):
3032         (JSC::JSRopeString::resolveRopeSlowCase):
3033         (JSC::JSRopeString::outOfMemory):
3034         (JSC::JSRopeString::getIndexSlowCase):
3035         * runtime/JSString.h:
3036         (JSC):
3037         (JSString):
3038         (JSC::JSString::finishCreation):
3039         (JSC::JSString::create):
3040         (JSC::JSString::isRope):
3041         (JSC::JSString::is8Bit):
3042         (JSRopeString):
3043         (RopeBuilder):
3044         (JSC::JSRopeString::RopeBuilder::RopeBuilder):
3045         (JSC::JSRopeString::RopeBuilder::append):
3046         (JSC::JSRopeString::RopeBuilder::release):
3047         (JSC::JSRopeString::RopeBuilder::length):
3048         (JSC::JSRopeString::JSRopeString):
3049         (JSC::JSRopeString::finishCreation):
3050         (JSC::JSRopeString::createNull):
3051         (JSC::JSRopeString::create):
3052         (JSC::JSString::value):
3053         (JSC::JSString::tryGetValue):
3054         (JSC::JSString::getIndex):
3055         (JSC::jsStringBuilder):
3056         * runtime/Operations.h:
3057         (JSC::jsString):
3058         (JSC::jsStringFromArguments):
3059
3060 2012-04-27  Oliver Hunt  <oliver@apple.com>
3061
3062         Correct assertion.
3063
3064         * interpreter/Interpreter.cpp:
3065         (JSC::Interpreter::throwException):
3066
3067 2012-04-27  Oliver Hunt  <oliver@apple.com>
3068
3069         Lazy link phase of baseline jit fails to propagate exception
3070         https://bugs.webkit.org/show_bug.cgi?id=85092
3071
3072         Reviewed by Filip Pizlo.
3073
3074         Very simple patch, when linking produces an error we need to actually store
3075         the exception prior to throwing it.  I can't find any other examples of this,
3076         but as we're already in the slow path when throwing an exception I've hardened
3077         exception throwing against null exceptions.
3078
3079         * interpreter/Interpreter.cpp:
3080         (JSC::Interpreter::throwException):
3081         * jit/JITStubs.cpp:
3082         (JSC::lazyLinkFor):
3083
3084 2012-04-27  Benjamin Poulain  <benjamin@webkit.org>
3085
3086         Generalize the single character optimization of numberProtoFuncToString
3087         https://bugs.webkit.org/show_bug.cgi?id=85027
3088
3089         Reviewed by Geoffrey Garen.
3090
3091         The function numberProtoFuncToString() has an optimization to use SmallStrings::singleCharacterString()
3092         when the radix is 36.
3093
3094         This patch generalize the optimization for any radix. Any positive number smaller than its radix
3095         can be represented by a single character of radixDigits.
3096
3097         This makes numberProtoFuncToString() about twice as fast for this case of single digit conversion.
3098
3099         * runtime/NumberPrototype.cpp:
3100         (JSC::numberProtoFuncToString):
3101
3102 2012-04-27  Gavin Peters  <gavinp@chromium.org>
3103
3104         Add new ENABLE_LINK_PRERENDER define to control the Prerendering API
3105         https://bugs.webkit.org/show_bug.cgi?id=84871
3106
3107         Reviewed by Adam Barth.
3108
3109         Prerendering is currently covered by the ENABLE_LINK_PREFETCH macro, but the new Prerendering
3110         API separates it from prefetching.  Having separate include guards lets ports enable prefetching,
3111         a relatively easy change, without needing to build the infrastructure for prerendering, which
3112         is considerably more complicated.
3113
3114         * Configurations/FeatureDefines.xcconfig:
3115
3116 2012-04-26  Oliver Hunt  <oliver@apple.com>
3117
3118         Allocating WeakImpl should not trigger GC, as that makes the world very tricksy.
3119         https://bugs.webkit.org/show_bug.cgi?id=85020
3120
3121         Reviewed by Gavin Barraclough.
3122
3123         Now in the event that we are unable to find an allocator for a new handle, just
3124         add a new allocator rather than trying to recover "dead" handles through a GC.
3125
3126         Find allocator is now much simpler, and addAllocator directly reports the
3127         increased memory usage to the heap without causing any GC to happen immediately.
3128
3129         * heap/WeakSet.cpp:
3130         (JSC::WeakSet::findAllocator):
3131         (JSC::WeakSet::addAllocator):
3132
3133 2012-04-26  Oliver Hunt  <oliver@apple.com>
3134
3135         Remove RegisterFile::end()/m_end
3136         https://bugs.webkit.org/show_bug.cgi?id=85011
3137
3138         Reviewed by Gavin Barraclough.
3139
3140         Get rid of end() and m_end from RegisterFile.  From now on
3141         we only care about the end of the committed region when calling
3142         code.  When re-entering the VM we now plant the new CallFrame
3143         immediately after whatever the current topCallFrame is.  This
3144         required adding a routine to CallFrame to determine exactly what
3145         we should be doing (in the absence of an existing CallFrame, we
3146         can't reason about the frameExtent() so we check for that).
3147
3148         This also now means that the GC only marks the portion of the
3149         RegisterFile that is actually in use, and that VM re-entry doesn't
3150         exhaust the RegisterFile as rapidly.
3151
3152         * dfg/DFGOperations.cpp:
3153         * heap/Heap.cpp:
3154         (JSC::Heap::getConservativeRegisterRoots):
3155         (JSC::Heap::markRoots):
3156         * interpreter/CallFrame.h:
3157         (JSC::ExecState::init):
3158         (JSC::ExecState::startOfReusableRegisterFile):
3159         (ExecState):
3160         * interpreter/Interpreter.cpp:
3161         (JSC::Interpreter::execute):
3162         (JSC::Interpreter::executeCall):
3163         (JSC::Interpreter::executeConstruct):
3164         (JSC::Interpreter::prepareForRepeatCall):
3165         (JSC::Interpreter::privateExecute):
3166         * interpreter/Interpreter.h:
3167         (JSC::Interpreter::execute):
3168         * interpreter/RegisterFile.cpp:
3169         (JSC::RegisterFile::growSlowCase):
3170         (JSC::RegisterFile::gatherConservativeRoots):
3171         * interpreter/RegisterFile.h:
3172         (JSC::RegisterFile::commitEnd):
3173         (JSC::RegisterFile::addressOfEnd):
3174         (RegisterFile):
3175         (JSC::RegisterFile::RegisterFile):
3176         (JSC::RegisterFile::shrink):
3177         (JSC::RegisterFile::grow):
3178         * jit/JITStubs.cpp:
3179         (JSC::DEFINE_STUB_FUNCTION):
3180         (JSC::jitCompileFor):
3181         (JSC::lazyLinkFor):
3182         * llint/LLIntSlowPaths.cpp:
3183         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
3184         (JSC::LLInt::handleHostCall):
3185         * llint/LowLevelInterpreter.asm:
3186         * runtime/CommonSlowPaths.h:
3187         (JSC::CommonSlowPaths::arityCheckFor):
3188
3189 2012-04-26  Filip Pizlo  <fpizlo@apple.com>
3190
3191         DFG ARMv7 backend should optimize Float32 arrays
3192         https://bugs.webkit.org/show_bug.cgi?id=85000
3193         <rdar://problem/10652827>
3194
3195         Reviewed by Gavin Barraclough.
3196
3197         * assembler/ARMv7Assembler.h:
3198         (ARMv7Assembler):
3199         (JSC::ARMv7Assembler::flds):
3200         (JSC::ARMv7Assembler::fsts):
3201         (JSC::ARMv7Assembler::vcvtds):
3202         (JSC::ARMv7Assembler::vcvtsd):
3203         * assembler/MacroAssemblerARMv7.h:
3204         (JSC::MacroAssemblerARMv7::loadFloat):
3205         (MacroAssemblerARMv7):
3206         (JSC::MacroAssemblerARMv7::storeFloat):
3207         (JSC::MacroAssemblerARMv7::convertFloatToDouble):
3208         (JSC::MacroAssemblerARMv7::convertDoubleToFloat):
3209         * bytecode/PredictedType.h:
3210         (JSC::isActionableFloatMutableArrayPrediction):
3211         * dfg/DFGNode.h:
3212         (JSC::DFG::Node::shouldSpeculateFloat32Array):
3213
3214 2012-04-25  Benjamin Poulain  <benjamin@webkit.org>
3215
3216         Add a version of StringImpl::find() without offset
3217         https://bugs.webkit.org/show_bug.cgi?id=83968
3218
3219         Reviewed by Sam Weinig.
3220
3221         Add support for the new StringImpl::find() to UString.
3222
3223         Change stringProtoFuncIndexOf() to specifically take advatage of the feature.
3224         This gives a 12% gains on a distribution of strings between 30 and 100 characters.
3225
3226         * runtime/StringPrototype.cpp:
3227         (JSC::substituteBackreferences):
3228         (JSC::stringProtoFuncIndexOf):
3229         * runtime/UString.h:
3230         (UString):
3231         (JSC::UString::find):
3232
3233 2012-04-25  Mark Hahnenberg  <mhahnenberg@apple.com>
3234
3235         WebCore shouldn't call collectAllGarbage directly
3236         https://bugs.webkit.org/show_bug.cgi?id=84897
3237
3238         Reviewed by Geoffrey Garen.
3239
3240         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Exported symbol 
3241         for reportAbanondedObjectGraph so WebCore can use it.
3242         * heap/Heap.h: Ditto.
3243
3244 2012-04-25  Oliver Hunt  <oliver@apple.com>
3245
3246         Biolab disaster crashes on ToT
3247         https://bugs.webkit.org/show_bug.cgi?id=84898
3248
3249         Reviewed by Filip Pizlo.
3250
3251         Whoops, committed without saving reviewer requested change.
3252
3253         * dfg/DFGVirtualRegisterAllocationPhase.cpp:
3254         (JSC::DFG::VirtualRegisterAllocationPhase::run):
3255
3256 2012-04-25  Oliver Hunt  <oliver@apple.com>
3257
3258         Biolab disaster crashes on ToT
3259         https://bugs.webkit.org/show_bug.cgi?id=84898
3260
3261         Reviewed by Filip Pizlo.
3262
3263         I recently added an assertion to the Interpreter to catch incorrect
3264         updates of topCallFrame.  This caused a bunch of sites (including biolab
3265         disaster) to crash as we were not correctly handling callee registers
3266         of inlined functions, leading to a mismatch.
3267
3268         I could not actually make this trigger directly, although it does trigger
3269         already on some of the GTK and QT bots.
3270
3271         * dfg/DFGVirtualRegisterAllocationPhase.cpp:
3272         (JSC::DFG::VirtualRegisterAllocationPhase::run):
3273
3274 2012-04-25  Kenneth Russell  <kbr@google.com>
3275
3276         Delete CanvasPixelArray, ByteArray, JSByteArray and JSC code once unreferenced
3277         https://bugs.webkit.org/show_bug.cgi?id=83655
3278
3279         Reviewed by Oliver Hunt.
3280
3281         * CMakeLists.txt:
3282         * GNUmakefile.list.am:
3283         * JavaScriptCore.gypi:
3284         * JavaScriptCore.order:
3285         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
3286         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3287         * JavaScriptCore.xcodeproj/project.pbxproj:
3288         * Target.pri:
3289         * bytecode/PredictedType.cpp:
3290         (JSC::predictionToString):
3291         (JSC::predictionToAbbreviatedString):
3292         (JSC::predictionFromClassInfo):
3293