a46b2204b591e86c51565b37daf7ccd2e5f67689
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2011-12-13  Oliver Hunt  <oliver@apple.com>
2
3         Arguments object doesn't handle mutation of length property correctly
4         https://bugs.webkit.org/show_bug.cgi?id=74454
5
6         Reviewed by Gavin Barraclough.
7
8         Correct handling of arguments objects with overridden length property
9
10         * interpreter/Interpreter.cpp:
11         (JSC::loadVarargs):
12         * runtime/Arguments.cpp:
13         (JSC::Arguments::copyToArguments):
14         (JSC::Arguments::fillArgList):
15
16 2011-12-13  Filip Pizlo  <fpizlo@apple.com>
17
18         DFG GetByVal CSE rule should match PutByValAlias
19         https://bugs.webkit.org/show_bug.cgi?id=74390
20
21         Reviewed by Geoff Garen.
22         
23         Tiny win on some benchmarks. Maybe a 0.2% win on SunSpider.
24
25         * dfg/DFGPropagator.cpp:
26         (JSC::DFG::Propagator::getByValLoadElimination):
27
28 2011-12-13  Andy Wingo  <wingo@igalia.com>
29
30         Fix interpreter debug build.
31         https://bugs.webkit.org/show_bug.cgi?id=74439
32
33         Reviewed by Geoffrey Garen.
34
35         * bytecode/ValueRecovery.h: Include stdio.h on debug builds.
36
37 2011-12-13  Filip Pizlo  <fpizlo@apple.com>
38
39         DFG should know exactly why recompilation was triggered
40         https://bugs.webkit.org/show_bug.cgi?id=74362
41
42         Reviewed by Oliver Hunt.
43         
44         Each OSR exit is now individually counted, as well as counting the total number 
45         of OSR exits that occurred in a code block. If recompilation is triggered, we
46         check to see if there are OSR exit sites that make up a sufficiently large
47         portion of the total OSR exits that occurred. For any such OSR exit sites, we
48         add a description of the site (bytecode index, kind) to a data structure in the
49         corresponding baseline CodeBlock. Then, when we recompile the code, we immediately
50         know which speculations would be unwise based on the fact that previous such
51         speculations proved to be fruitless.
52         
53         This means 2% win on two of the SunSpider string tests, a 4% win on V8's deltablue,
54         and 5% on Kraken's imaging-darkroom. It is only a minor win in the averages, less
55         than 0.5%.
56
57         * CMakeLists.txt:
58         * GNUmakefile.list.am:
59         * JavaScriptCore.xcodeproj/project.pbxproj:
60         * Target.pri:
61         * bytecode/CodeBlock.cpp:
62         (JSC::CodeBlock::tallyFrequentExitSites):
63         * bytecode/CodeBlock.h:
64         (JSC::CodeBlock::addFrequentExitSite):
65         (JSC::CodeBlock::exitProfile):
66         (JSC::CodeBlock::reoptimize):
67         (JSC::CodeBlock::tallyFrequentExitSites):
68         * bytecode/DFGExitProfile.cpp: Added.
69         (JSC::DFG::ExitProfile::ExitProfile):
70         (JSC::DFG::ExitProfile::~ExitProfile):
71         (JSC::DFG::ExitProfile::add):
72         (JSC::DFG::QueryableExitProfile::QueryableExitProfile):
73         (JSC::DFG::QueryableExitProfile::~QueryableExitProfile):
74         * bytecode/DFGExitProfile.h: Added.
75         (JSC::DFG::exitKindToString):
76         (JSC::DFG::exitKindIsCountable):
77         (JSC::DFG::FrequentExitSite::FrequentExitSite):
78         (JSC::DFG::FrequentExitSite::operator!):
79         (JSC::DFG::FrequentExitSite::operator==):
80         (JSC::DFG::FrequentExitSite::hash):
81         (JSC::DFG::FrequentExitSite::bytecodeOffset):
82         (JSC::DFG::FrequentExitSite::kind):
83         (JSC::DFG::FrequentExitSite::isHashTableDeletedValue):
84         (JSC::DFG::FrequentExitSiteHash::hash):
85         (JSC::DFG::FrequentExitSiteHash::equal):
86         (JSC::DFG::QueryableExitProfile::hasExitSite):
87         * dfg/DFGAssemblyHelpers.h:
88         (JSC::DFG::AssemblyHelpers::baselineCodeBlockForOriginAndBaselineCodeBlock):
89         (JSC::DFG::AssemblyHelpers::baselineCodeBlockFor):
90         * dfg/DFGByteCodeParser.cpp:
91         (JSC::DFG::ByteCodeParser::makeSafe):
92         (JSC::DFG::ByteCodeParser::makeDivSafe):
93         (JSC::DFG::ByteCodeParser::handleCall):
94         (JSC::DFG::ByteCodeParser::handleIntrinsic):
95         (JSC::DFG::ByteCodeParser::parseBlock):
96         (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
97         * dfg/DFGOSRExit.cpp:
98         (JSC::DFG::OSRExit::OSRExit):
99         (JSC::DFG::OSRExit::considerAddingAsFrequentExitSiteSlow):
100         * dfg/DFGOSRExit.h:
101         (JSC::DFG::OSRExit::considerAddingAsFrequentExitSite):
102         * dfg/DFGOSRExitCompiler.cpp:
103         * dfg/DFGOSRExitCompiler32_64.cpp:
104         (JSC::DFG::OSRExitCompiler::compileExit):
105         * dfg/DFGOSRExitCompiler64.cpp:
106         (JSC::DFG::OSRExitCompiler::compileExit):
107         * dfg/DFGSpeculativeJIT.cpp:
108         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
109         (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
110         (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
111         (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
112         (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
113         (JSC::DFG::SpeculativeJIT::compileGetByValOnByteArray):
114         (JSC::DFG::SpeculativeJIT::compileGetTypedArrayLength):
115         (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
116         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
117         (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
118         (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
119         (JSC::DFG::SpeculativeJIT::compileInstanceOfForObject):
120         (JSC::DFG::SpeculativeJIT::compileSoftModulo):
121         (JSC::DFG::SpeculativeJIT::compileArithMul):
122         (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
123         * dfg/DFGSpeculativeJIT.h:
124         (JSC::DFG::SpeculativeJIT::speculationCheck):
125         (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
126         * dfg/DFGSpeculativeJIT32_64.cpp:
127         (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
128         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
129         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
130         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
131         (JSC::DFG::SpeculativeJIT::compileObjectEquality):
132         (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
133         (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
134         (JSC::DFG::SpeculativeJIT::compile):
135         * dfg/DFGSpeculativeJIT64.cpp:
136         (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
137         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
138         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
139         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
140         (JSC::DFG::SpeculativeJIT::compileObjectEquality):
141         (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
142         (JSC::DFG::SpeculativeJIT::compileLogicalNot):
143         (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
144         (JSC::DFG::SpeculativeJIT::emitBranch):
145         (JSC::DFG::SpeculativeJIT::compile):
146         * runtime/Heuristics.cpp:
147         (JSC::Heuristics::initializeHeuristics):
148         * runtime/Heuristics.h:
149
150 2011-12-13  Michael Saboff  <msaboff@apple.com>
151
152         Cleanup of StringImpl::equal in r102631 post commit
153         https://bugs.webkit.org/show_bug.cgi?id=74421
154
155         Reviewed by Darin Adler.
156
157         * wtf/text/AtomicString.h:
158         (WTF::operator==): Removed cast no longer needed.
159         * wtf/text/StringImpl.h:
160         (WTF::equal): Changed template to several overloaded methods.
161
162 2011-12-12  Michael Saboff  <msaboff@apple.com>
163
164         Eliminate Duplicate word at a time equal code in StringImpl.cpp and StringHash.h
165         https://bugs.webkit.org/show_bug.cgi?id=73622
166
167         Reviewed by Oliver Hunt.
168
169         Moved equal(charType1 *, charType2, unsigned) template methods
170         from static StringImpl.cpp to StringImpl.h and then replaced the
171         processor specific character comparison code in StringHash::equal
172         with calls to these methods.
173
174         This change is worth 3% on SunSpider string-unpack-code as reported
175         by the SunSpider command line harness.  No other tests appear to
176         have measurable performance changes.
177
178         * wtf/text/AtomicString.h:
179         (WTF::operator==):
180         * wtf/text/StringHash.h:
181         (WTF::StringHash::equal):
182         * wtf/text/StringImpl.cpp:
183         * wtf/text/StringImpl.h:
184         (WTF::LChar):
185         (WTF::UChar):
186         (WTF::equal):
187
188 2011-12-12  Filip Pizlo  <fpizlo@apple.com>
189
190         ARMv7 version of DFG soft modulo does register allocation inside of control flow
191         https://bugs.webkit.org/show_bug.cgi?id=74354
192
193         Reviewed by Gavin Barraclough.
194
195         * dfg/DFGSpeculativeJIT.cpp:
196         (JSC::DFG::SpeculativeJIT::compileSoftModulo):
197
198 2011-12-12  Andy Wingo  <wingo@igalia.com>
199
200         Simplify autotools configure.ac
201         https://bugs.webkit.org/show_bug.cgi?id=74312
202
203         Reviewed by Martin Robinson.
204
205         * GNUmakefile.am: Add JSC_CPPFLAGS to javascriptcore_cppflags.
206
207 2011-12-12  Filip Pizlo  <fpizlo@apple.com>
208
209         DFG GetByVal CSE incorrectly assumes that a non-matching PutByVal cannot clobber
210         https://bugs.webkit.org/show_bug.cgi?id=74329
211
212         Reviewed by Gavin Barraclough.
213
214         * dfg/DFGPropagator.cpp:
215         (JSC::DFG::Propagator::getByValLoadElimination):
216
217 2011-12-09  Alexander Pavlov  <apavlov@chromium.org>
218
219         WebKit does not enumerate over CSS properties in HTMLElement.style
220         https://bugs.webkit.org/show_bug.cgi?id=23946
221
222         Reviewed by Darin Adler.
223
224         Add a few exports to follow the JSCSSStyleDeclaration.cpp changes,
225         introduce an std::sort() comparator function.
226
227         * JavaScriptCore.exp:
228         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
229         * wtf/text/WTFString.h:
230         (WTF::codePointCompareLessThan): Used by std::sort() to sort properties.
231
232 2011-12-12  Alexander Pavlov  <apavlov@chromium.org>
233
234         Unreviewed, build fix.
235
236         Revert r102570 which broke SnowLeopard builders.
237
238         * JavaScriptCore.exp:
239         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
240         * wtf/text/WTFString.h:
241
242 2011-12-09  Alexander Pavlov  <apavlov@chromium.org>
243
244         WebKit does not enumerate over CSS properties in HTMLElement.style
245         https://bugs.webkit.org/show_bug.cgi?id=23946
246
247         Reviewed by Darin Adler.
248
249         Add a few exports to follow the JSCSSStyleDeclaration.cpp changes,
250         introduce an std::sort() comparator function.
251
252         * JavaScriptCore.exp:
253         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
254         * wtf/text/WTFString.h:
255         (WTF::codePointCompareLessThan): Used by std::sort() to sort properties.
256
257 2011-12-12  Carlos Garcia Campos  <cgarcia@igalia.com>
258
259         Unreviewed. Fix make distcheck issues.
260
261         * GNUmakefile.list.am:
262
263 2011-12-11  Sam Weinig  <sam@webkit.org>
264
265         Fix another signed vs. unsigned warning
266
267         * runtime/ArgList.h:
268         (JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer):
269
270 2011-12-11  Sam Weinig  <sam@webkit.org>
271
272         Fix a signed vs. unsigned warning.
273
274         * runtime/ArgList.cpp:
275         (JSC::MarkedArgumentBuffer::slowAppend):
276         Cast inlineCapacity to an int to appease the warning. This is known OK
277         since inlineCapacity is defined to be 8.
278
279 2011-12-11  Geoffrey Garen  <ggaren@apple.com>
280
281         Rolled out *another* debugging change I committed accidentally.
282
283         Unreviewed.
284
285         * Configurations/Base.xcconfig:
286
287 2011-12-11  Geoffrey Garen  <ggaren@apple.com>
288         
289         Rolled out a debug counter I committed accidentally.
290
291         Unreviewed.
292
293         * jit/JITStubs.cpp:
294         (JSC::arityCheckFor):
295
296 2011-12-10  Geoffrey Garen  <ggaren@apple.com>
297
298         v8 benchmark takes 12-13 million function call slow paths due to extra arguments
299         https://bugs.webkit.org/show_bug.cgi?id=74244
300
301         Reviewed by Filip Pizlo.
302         
303         .arguments function of order the Reversed
304         
305         10% speedup on v8-raytrace, 1.7% speedup on v8 overall, neutral on Kraken
306         and SunSpider.
307
308         * bytecode/CodeBlock.h:
309         (JSC::CodeBlock::valueProfileForArgument): Clarified that the interface
310         to this function is an argument number.
311
312         * bytecompiler/BytecodeGenerator.cpp:
313         (JSC::BytecodeGenerator::BytecodeGenerator):
314         (JSC::BytecodeGenerator::emitCall):
315         (JSC::BytecodeGenerator::emitConstruct):
316         (JSC::BytecodeGenerator::isArgumentNumber): Switched to using CallFrame
317         helper functions for computing offsets for arguments, rather than doing
318         the math by hand.
319         
320         Switched to iterating argument offsets backwards (--) instead of forwards (++).
321
322         * bytecompiler/BytecodeGenerator.h:
323         (JSC::CallArguments::thisRegister):
324         (JSC::CallArguments::argumentRegister):
325         (JSC::CallArguments::registerOffset): Updated for arguments being reversed.
326
327         * bytecompiler/NodesCodegen.cpp: Allocate arguments in reverse order.
328
329         * dfg/DFGByteCodeParser.cpp:
330         (JSC::DFG::ByteCodeParser::getArgument):
331         (JSC::DFG::ByteCodeParser::setArgument):
332         (JSC::DFG::ByteCodeParser::flush):
333         (JSC::DFG::ByteCodeParser::addCall):
334         (JSC::DFG::ByteCodeParser::handleCall):
335         (JSC::DFG::ByteCodeParser::handleInlining):
336         (JSC::DFG::ByteCodeParser::handleMinMax):
337         (JSC::DFG::ByteCodeParser::handleIntrinsic):
338         (JSC::DFG::ByteCodeParser::parseBlock):
339         (JSC::DFG::ByteCodeParser::processPhiStack): Use abstract argument indices
340         that just-in-time convert to bytecode operands (i.e., indexes in the register
341         file) through helper functions. This means only one piece of code needs
342         to know how arguments are laid out in the register file.
343
344         * dfg/DFGGraph.cpp:
345         (JSC::DFG::Graph::dump): Ditto.
346
347         * dfg/DFGGraph.h:
348         (JSC::DFG::Graph::valueProfileFor): Ditto.
349
350         * dfg/DFGJITCompiler.cpp:
351         (JSC::DFG::JITCompiler::compileFunction): The whole point of this patch:
352         Treat too many arguments as an arity match.
353
354         * dfg/DFGOSRExit.h:
355         (JSC::DFG::OSRExit::variableForIndex):
356         (JSC::DFG::OSRExit::operandForIndex): Use helper functions, as above.
357
358         * dfg/DFGOperands.h:
359         (JSC::DFG::operandToArgument):
360         (JSC::DFG::argumentToOperand): These are now the only two lines of code in
361         the DFG compiler that know how arguments are laid out in memory.
362
363         (JSC::DFG::Operands::operand):
364         (JSC::DFG::Operands::setOperand): Use helper functions, as above.
365
366         * dfg/DFGOperations.cpp: The whole point of this patch:
367         Treat too many arguments as an arity match.
368
369         * dfg/DFGSpeculativeJIT32_64.cpp:
370         (JSC::DFG::SpeculativeJIT::emitCall): Use helper functions, as above.
371         
372         Also, don't tag the caller frame slot as a cell, because it's not a cell.
373
374         * dfg/DFGSpeculativeJIT64.cpp:
375         (JSC::DFG::SpeculativeJIT::emitCall): Use helper functions, as above.
376
377         * dfg/DFGSpeculativeJIT.cpp:
378         (JSC::DFG::SpeculativeJIT::compile): Use helper functions, as above.
379
380         (JSC::DFG::SpeculativeJIT::checkArgumentTypes): Use already-computed
381         argument virtual register instead of recomputing by hand.
382
383         * dfg/DFGSpeculativeJIT.h:
384         (JSC::DFG::SpeculativeJIT::callFrameSlot):
385         (JSC::DFG::SpeculativeJIT::argumentSlot):
386         (JSC::DFG::SpeculativeJIT::callFrameTagSlot):
387         (JSC::DFG::SpeculativeJIT::callFramePayloadSlot):
388         (JSC::DFG::SpeculativeJIT::argumentTagSlot):
389         (JSC::DFG::SpeculativeJIT::argumentPayloadSlot): Added a few helper
390         functions for dealing with callee arguments specifically. These still
391         build on top of our other helper functions, and have no direct knowledge
392         of how arguments are laid out in the register file.
393
394         (JSC::DFG::SpeculativeJIT::resetCallArguments):
395         (JSC::DFG::SpeculativeJIT::addCallArgument): Renamed argumentIndex to
396         argumentOffset to match CallFrame naming.
397
398         (JSC::DFG::SpeculativeJIT::valueSourceReferenceForOperand): Use helper
399         functions, as above.
400
401         * interpreter/CallFrame.h:
402         (JSC::ExecState::argumentOffset):
403         (JSC::ExecState::argumentOffsetIncludingThis):
404         (JSC::ExecState::argument):
405         (JSC::ExecState::setArgument):
406         (JSC::ExecState::thisArgumentOffset):
407         (JSC::ExecState::thisValue):
408         (JSC::ExecState::setThisValue):
409         (JSC::ExecState::offsetFor):
410         (JSC::ExecState::hostThisRegister):
411         (JSC::ExecState::hostThisValue): Added a bunch of helper functions for
412         computing where an argument is in the register file. Anything in the
413         runtime that needs to access arguments should use these helpers.
414
415         * interpreter/CallFrameClosure.h:
416         (JSC::CallFrameClosure::setThis):
417         (JSC::CallFrameClosure::setArgument):
418         (JSC::CallFrameClosure::resetCallFrame): This stuff is a lot simpler, now
419         that too many arguments counts as an arity match and doesn't require
420         preserving two copies of our arguments.
421
422         * interpreter/Interpreter.cpp:
423         (JSC::Interpreter::slideRegisterWindowForCall): Only need to do something
424         special if the caller provided too few arguments.
425         
426         Key simplification: We never need to maintain two copies of our arguments
427         anymore.
428
429         (JSC::eval):
430         (JSC::loadVarargs): Use helper functions.
431
432         (JSC::Interpreter::unwindCallFrame): Updated for new interface.
433
434         (JSC::Interpreter::execute):
435         (JSC::Interpreter::executeCall):
436         (JSC::Interpreter::executeConstruct):
437         (JSC::Interpreter::prepareForRepeatCall): Seriously, though: use helper
438         functions.
439
440         (JSC::Interpreter::privateExecute): No need to check for stack overflow
441         when calling host functions because they have zero callee registers.
442
443         (JSC::Interpreter::retrieveArguments): Explicitly tear off the arguments
444         object, since there's no special constructor for this anymore.
445
446         * interpreter/Interpreter.h: Reduced the C++ re-entry depth because some
447         workers tests were hitting stack overflow in some of my testing. We should
448         make this test more exact in future.
449
450         * interpreter/RegisterFile.h: Death to all runtime knowledge of argument
451         location that does not belong to the CallFrame class!
452
453         * jit/JIT.cpp:
454         (JSC::JIT::privateCompile): I am a broken record and I use helper functions.
455         
456         Also, the whole point of this patch: Treat too many arguments as an arity match.
457
458         * jit/JITCall32_64.cpp:
459         (JSC::JIT::compileLoadVarargs):
460         * jit/JITCall.cpp:
461         (JSC::JIT::compileLoadVarargs): Updated the argument copying math to use
462         helper functions, for backwards-correctness. Removed the condition
463         pertaining to declared argument count because, now that arguments are
464         always in just one place, this optimization is valid for all functions.
465         Standardized the if predicate for each line of the optimization. This might
466         fix a bug, but I couldn't get the bug to crash in practice.
467
468         * jit/JITOpcodes32_64.cpp:
469         (JSC::JIT::emit_op_create_arguments):
470         (JSC::JIT::emit_op_get_argument_by_val):
471         (JSC::JIT::emitSlow_op_get_argument_by_val):
472         * jit/JITOpcodes.cpp:
473         (JSC::JIT::emit_op_create_arguments):
474         (JSC::JIT::emit_op_get_argument_by_val):
475         (JSC::JIT::emitSlow_op_get_argument_by_val): Removed cti_op_create_arguments_no_params
476         optimization because it's no longer an optimization, now that arguments
477         are always contiguous in a known location.
478         
479         Updated argument access opcode math for backwards-correctness.
480
481         * jit/JITStubs.cpp:
482         (JSC::arityCheckFor): Updated just like slideRegisterWindowForCall. This
483         function is slightly different because it copies the call frame in
484         addition to the arguments. (In the Interpreter, the call frame is not
485         set up by this point.)
486
487         (JSC::lazyLinkFor): The whole point of this patch: Treat too many
488         arguments as an arity match.
489
490         (JSC::DEFINE_STUB_FUNCTION): Updated for new iterface to tearOff().
491
492         * jit/JITStubs.h:
493         * jit/SpecializedThunkJIT.h:
494         (JSC::SpecializedThunkJIT::loadDoubleArgument):
495         (JSC::SpecializedThunkJIT::loadCellArgument):
496         (JSC::SpecializedThunkJIT::loadInt32Argument): Use helper functions! They
497         build strong bones and teeth!
498
499         * runtime/ArgList.cpp:
500         (JSC::ArgList::getSlice):
501         (JSC::MarkedArgumentBuffer::slowAppend):
502         * runtime/ArgList.h:
503         (JSC::MarkedArgumentBuffer::MarkedArgumentBuffer):
504         (JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer):
505         (JSC::MarkedArgumentBuffer::at):
506         (JSC::MarkedArgumentBuffer::clear):
507         (JSC::MarkedArgumentBuffer::append):
508         (JSC::MarkedArgumentBuffer::removeLast):
509         (JSC::MarkedArgumentBuffer::last):
510         (JSC::ArgList::ArgList):
511         (JSC::ArgList::at): Updated for backwards-correctness. WTF::Vector doesn't
512         play nice with backwards-ness, so I changed to using manual allocation.
513         
514         Fixed a FIXME about not all values being marked in the case of out-of-line
515         arguments. I had to rewrite the loop anyway, and I didn't feel like
516         maintaining fidelity to its old bugs.
517
518         * runtime/Arguments.cpp:
519         (JSC::Arguments::visitChildren):
520         (JSC::Arguments::copyToArguments):
521         (JSC::Arguments::fillArgList):
522         (JSC::Arguments::getOwnPropertySlotByIndex):
523         (JSC::Arguments::getOwnPropertySlot):
524         (JSC::Arguments::getOwnPropertyDescriptor):
525         (JSC::Arguments::putByIndex):
526         (JSC::Arguments::put):
527         (JSC::Arguments::tearOff):
528         * runtime/Arguments.h:
529         (JSC::Arguments::create):
530         (JSC::Arguments::Arguments):
531         (JSC::Arguments::argument):
532         (JSC::Arguments::finishCreation): Secondary benefit of this patch: deleted
533         lots of tricky code designed to maintain two different copies of function
534         arguments. Now that arguments are always contiguous in one place in memory,
535         this complexity can go away.
536         
537         Reduced down to one create function for the Arguments class, from three.
538
539         Moved tearOff() into an out-of-line function because it's huge.
540         
541         Moved logic about whether to tear off eagerly into the Arguments class,
542         so we didn't have to duplicate it elsewhere.
543
544         * runtime/JSActivation.cpp:
545         (JSC::JSActivation::JSActivation):
546         (JSC::JSActivation::visitChildren): Renamed m_numParametersMinusThis to
547         m_numCapturedArgs because if the value really were m_numParametersMinusThis
548         we would be marking too much. (We shouldn't mark 'this' because it can't
549         be captured.) Also, use helper functions.
550
551         * runtime/JSActivation.h:
552         (JSC::JSActivation::tearOff): Use helper functions.
553
554         * runtime/JSArray.cpp:
555         (JSC::JSArray::copyToArguments):
556         * runtime/JSArray.h: Use helper functions, as above.
557
558 2011-12-10  Mark Hahnenberg  <mhahnenberg@apple.com>
559
560         JSC testapi is crashing on Windows
561         https://bugs.webkit.org/show_bug.cgi?id=74233
562
563         Reviewed by Sam Weinig.
564
565         Same error we've encountered before where we are calling the wrong version of 
566         visitChildren and objects that are still reachable aren't getting marked.
567         This problem will go away soon with the removal of vptrs for these sorts of 
568         optimizations in favor of using the ClassInfo, but for now we can simply give 
569         JSFinalObject a bogus virtual method that Visual Studio can't optimize away to
570         ensure that JSFinalObject will always have a unique vptr.  We don't have to worry 
571         about JSString or JSArray right now, which are the other two special cases for
572         visitChildren, since they already have their own virtual functions.
573
574         * JavaScriptCore.exp:
575         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
576         * runtime/JSObject.cpp:
577         (JSC::JSFinalObject::vtableAnchor):
578         * runtime/JSObject.h:
579
580 2011-12-10  Alexis Menard  <alexis.menard@openbossa.org>
581
582         Unused variable in YarrJIT.cpp.
583         https://bugs.webkit.org/show_bug.cgi?id=74237
584
585         Reviewed by Andreas Kling.
586
587         Variable is set but not used so we can remove it.
588
589         * yarr/YarrJIT.cpp:
590         (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
591
592 2011-12-09  Filip Pizlo  <fpizlo@apple.com>
593
594         DFG ArithMul power-of-two case does not check for overflow
595         https://bugs.webkit.org/show_bug.cgi?id=74230
596
597         Reviewed by Gavin Barraclough.
598         
599         Disabled power-of-2 peephole optimization for multiplication, because it was wrong,
600         and any attempt to fix it would likely introduce code bloat and register pressure.
601
602         * dfg/DFGSpeculativeJIT.cpp:
603         (JSC::DFG::SpeculativeJIT::compileArithMul):
604
605 2011-12-09  David Levin  <levin@chromium.org>
606
607         REGRESSION(r101863-r102042): Assertion hit: m_verifier.isSafeToUse() in RefCountedBase::ref in FunctionCodeBlock
608         https://bugs.webkit.org/show_bug.cgi?id=73886
609
610         Reviewed by Darin Adler.
611
612         * runtime/SymbolTable.h:
613         (JSC::SharedSymbolTable::SharedSymbolTable): Added deprecatedTurnOffVerifier for
614         another JavaScriptObject, since JavaScriptCore objects allow use on multiple threads.
615         Bug 58091 is about changing these deprecated calls to something else but that something
616         else will still need to be in all of these places.
617
618 2011-12-09  Konrad Piascik  <kpiascik@rim.com>
619
620         Remove unnecessary file DissasemblerARM.cpp from build system
621         https://bugs.webkit.org/show_bug.cgi?id=74184
622
623         Reviewed by Daniel Bates.
624
625         * PlatformBlackBerry.cmake:
626
627 2011-12-09  Filip Pizlo  <fpizlo@apple.com>
628
629         DFG's interpretation of rare case profiles should be frequency-based not count-based
630         https://bugs.webkit.org/show_bug.cgi?id=74170
631
632         Reviewed by Geoff Garen.
633         
634         DFG optimizes for rare cases only when the rare case counter is above some threshold
635         and it also constitutes a large enough fraction of total function executions. Also
636         added some minor debug logic.
637
638         * bytecode/CodeBlock.cpp:
639         (JSC::CodeBlock::CodeBlock):
640         * bytecode/CodeBlock.h:
641         (JSC::CodeBlock::likelyToTakeSlowCase):
642         (JSC::CodeBlock::couldTakeSlowCase):
643         (JSC::CodeBlock::likelyToTakeSpecialFastCase):
644         (JSC::CodeBlock::likelyToTakeDeepestSlowCase):
645         (JSC::CodeBlock::likelyToTakeAnySlowCase):
646         (JSC::CodeBlock::executionEntryCount):
647         * dfg/DFGByteCodeParser.cpp:
648         (JSC::DFG::ByteCodeParser::makeSafe):
649         (JSC::DFG::ByteCodeParser::makeDivSafe):
650         (JSC::DFG::ByteCodeParser::handleCall):
651         (JSC::DFG::ByteCodeParser::parseBlock):
652         * dfg/DFGDriver.cpp:
653         (JSC::DFG::compile):
654         * jit/JIT.cpp:
655         (JSC::JIT::privateCompile):
656         * runtime/Heuristics.cpp:
657         (JSC::Heuristics::initializeHeuristics):
658         * runtime/Heuristics.h:
659
660 2011-12-09  Oliver Hunt  <oliver@apple.com>
661
662         PutByValAlias unnecessarily clobbers GetIndexedPropertyStorage
663         https://bugs.webkit.org/show_bug.cgi?id=74223
664
665         Reviewed by Geoffrey Garen.
666
667         Don't clobber GetIndexedPropertyStorage when we see PutByValAlias
668
669         * dfg/DFGPropagator.cpp:
670         (JSC::DFG::Propagator::getIndexedPropertyStorageLoadElimination):
671
672 2011-12-09  David Levin  <levin@chromium.org>
673
674         Hash* iterators should allow comparison between const and const versions.
675         https://bugs.webkit.org/show_bug.cgi?id=73370
676
677         Reviewed by Darin Adler.
678
679         * wtf/HashTable.h: Add the operators needed to do this.
680         (WTF::HashTableConstIterator::operator==):
681         (WTF::HashTableConstIterator::operator!=):
682         (WTF::HashTableIterator::operator==):
683         (WTF::HashTableIterator::operator!=):
684         (WTF::operator==):
685         (WTF::operator!=):
686
687 2011-12-09  Michael Saboff  <msaboff@apple.com>
688
689         YARR: Multi-character read optimization for 8bit strings
690         https://bugs.webkit.org/show_bug.cgi?id=74191
691
692         Reviewed by Oliver Hunt.
693
694         Changed generatePatternCharacterOnce to generate
695         code for 1 to 4 characters in the 8 bit case.
696         This is worth 29% improvement on SunSpider regexp-dna test.
697         It provides no benefit to v8-regexp.
698
699         * yarr/YarrJIT.cpp:
700         (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
701         (JSC::Yarr::YarrGenerator::generate): Spelling fix in comment.
702
703 2011-12-09  David Levin  <levin@chromium.org>
704
705         Regression(r53595): Sync xhr requests in workers aren't terminated on worker close.
706         https://bugs.webkit.org/show_bug.cgi?id=71695
707
708         Reviewed by Zoltan Herczeg.
709
710         * wtf/MessageQueue.h:
711         (WTF::MessageQueue::tryGetMessageIgnoringKilled): Added a way to get messages
712         even after the queue has been killed. This is useful when one wants to
713         kill a queue but then go through it to run clean up tasks from it.
714
715 2011-12-09  Adrienne Walker  <enne@google.com>
716
717         Fix HashMap<..., OwnPtr<...> >::add compilation errors
718         https://bugs.webkit.org/show_bug.cgi?id=74159
719
720         Reviewed by Darin Adler.
721
722         Add a constructor to OwnPtr that takes the empty value (nullptr_t)
723         from HashTraits so that this function can compile.
724
725         * wtf/OwnPtr.h:
726         (WTF::OwnPtr::OwnPtr):
727
728 2011-12-09  Oliver Hunt  <oliver@apple.com>
729
730         Avoid reloading storage pointer for indexed properties unnecessarily
731         https://bugs.webkit.org/show_bug.cgi?id=74136
732
733         Reviewed by Filip Pizlo.
734
735         Add a node to represent loading property storage for indexed properties.
736         This allows us to reduce code generated for sequential access of arrays,
737         strings, etc.  This results in up to 5% improvement in code that is 
738         very heavy on indexed reads, such as matrix operations in typed arrays
739         and 20% faster on microbenchmarks.
740
741         Currently this is only supported by GetByVal and other similar indexed reads.
742
743         * bytecode/PredictedType.h:
744         (JSC::isFixedIndexedStorageObjectPrediction):
745         * dfg/DFGAbstractState.cpp:
746         (JSC::DFG::AbstractState::execute):
747         * dfg/DFGByteCodeParser.cpp:
748         (JSC::DFG::ByteCodeParser::handleIntrinsic):
749         (JSC::DFG::ByteCodeParser::parseBlock):
750         * dfg/DFGNode.h:
751         * dfg/DFGPropagator.cpp:
752         (JSC::DFG::Propagator::propagateNodePredictions):
753         (JSC::DFG::Propagator::fixupNode):
754         (JSC::DFG::Propagator::getIndexedPropertyStorageLoadElimination):
755         (JSC::DFG::Propagator::performNodeCSE):
756         * dfg/DFGSpeculativeJIT.cpp:
757         (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
758         (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
759         (JSC::DFG::SpeculativeJIT::compileGetByValOnByteArray):
760         (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
761         (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
762         (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
763         * dfg/DFGSpeculativeJIT.h:
764         * dfg/DFGSpeculativeJIT32_64.cpp:
765         (JSC::DFG::SpeculativeJIT::compile):
766         * dfg/DFGSpeculativeJIT64.cpp:
767         (JSC::DFG::SpeculativeJIT::compile):
768
769 2011-12-08  Fady Samuel  <fsamuel@chromium.org>
770
771         [Chromium] Enable viewport metatag
772         https://bugs.webkit.org/show_bug.cgi?id=73495
773
774         Reviewed by Darin Fisher.
775
776         * wtf/Platform.h: Added ENABLE(VIEWPORT) tag.
777
778 2011-12-08  Adam Klein  <adamk@chromium.org>
779
780         Use HashMap<Node*, OwnPtr<...>> in ChildListMutationScope
781         https://bugs.webkit.org/show_bug.cgi?id=73964
782
783         Reviewed by Darin Adler.
784
785         * wtf/HashTraits.h: Add passOut(std::nullptr_t) to allow callers to use HashMap::take on a HashMap of OwnPtrs.
786
787 2011-12-08  Thouraya ANDOLSI  <thouraya.andolsi@st.com>
788
789         https://bugs.webkit.org/show_bug.cgi?id=74005
790         fix unaligned access memory in generatePatternCharacterOnce function
791         for SH4 platforms.
792
793         Reviewed by Gavin Barraclough.
794
795         * assembler/MacroAssemblerARM.h:
796         (JSC::MacroAssemblerARM::load16Unaligned):
797         * assembler/MacroAssemblerARMv7.h:
798         (JSC::MacroAssemblerARMv7::load16Unaligned):
799         * assembler/MacroAssemblerMIPS.h:
800         (JSC::MacroAssemblerMIPS::load16Unaligned):
801         * assembler/MacroAssemblerSH4.h:
802         (JSC::MacroAssemblerSH4::lshift32):
803         (JSC::MacroAssemblerSH4::load8):
804         (JSC::MacroAssemblerSH4::load16):
805         (JSC::MacroAssemblerSH4::load16Unaligned):
806         (JSC::MacroAssemblerSH4::branch8):
807         * assembler/MacroAssemblerX86Common.h:
808         (JSC::MacroAssemblerX86Common::load16Unaligned):
809         * jit/JIT.h:
810         * yarr/YarrJIT.cpp:
811         (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
812
813 2011-12-08  Michael Saboff  <msaboff@apple.com>
814
815         Add 8 bit paths for StringTypeAdapter classes
816         https://bugs.webkit.org/show_bug.cgi?id=73882
817
818         Reviewed by Darin Adler.
819
820         Added is8Bit() method and writeTo(LChar*) methods
821         to StringTypeAdapter<> classes.  The writeTo(LChar*)
822         method can be used if is8Bit() returns true.  The
823         non-native 8 bit classes contain ASSERT(is8Bit())
824         in their writeTo(LChar*).
825
826         Updated all of the various versions of tryMakeString() to
827         use 8 bit processing in the updated StringTypeAdapter<>
828         classes.
829
830         This has slight if any performance improvement on kraken.
831
832         * runtime/UStringConcatenate.h:
833         * wtf/text/StringConcatenate.h:
834         (WTF::tryMakeString):
835         * wtf/text/StringOperators.h:
836         (WTF::StringAppend::is8Bit):
837         (WTF::StringAppend::writeTo):
838
839 2011-12-07  Filip Pizlo  <fpizlo@apple.com>
840
841         DFG CSE should know that CheckFunction is pure
842         https://bugs.webkit.org/show_bug.cgi?id=74044
843
844         Reviewed by Oliver Hunt.
845         
846         Possible slight win on V8, no regressions.
847
848         * dfg/DFGPropagator.cpp:
849         (JSC::DFG::Propagator::checkFunctionElimination):
850
851 2011-12-07  Michael Saboff  <msaboff@apple.com>
852
853         StringBuilderTest.Append and StringBuilderTest.ToStringPreserveCapacity are failing.
854         https://bugs.webkit.org/show_bug.cgi?id=73995
855
856         Reviewed by Geoffrey Garen.
857
858         Problem was that a call to characters on an StringImpl associated
859         with a StringBuilder that is being appended to gets stale.
860         Added a new m_valid16BitShadowlen that keeps the length of
861         the 16 bit shadow that has been upconverted or will be up converted
862         with the first getCharacters().  When StringBuilder::characters or
863         ::reifyString is called, further characters are upconverted if
864         we have a shadow16bit copy and the m_valid16BitShadowlen is updated.
865
866         * JavaScriptCore.exp:
867         * wtf/text/StringBuilder.cpp:
868         (WTF::StringBuilder::reifyString):
869         * wtf/text/StringBuilder.h:
870         (WTF::StringBuilder::StringBuilder):
871         (WTF::StringBuilder::characters):
872         (WTF::StringBuilder::clear): Cleaned up as part of the change.
873         * wtf/text/StringImpl.cpp:
874         (WTF::StringImpl::getData16SlowCase):
875         (WTF::StringImpl::upconvertCharacters):
876         * wtf/text/StringImpl.h:
877
878 2011-12-07  Filip Pizlo  <fpizlo@apple.com>
879
880         Compare and Swap should be enabled on ARMv7
881         https://bugs.webkit.org/show_bug.cgi?id=74023
882
883         Reviewed by Geoff Garen.
884         
885         Implemented weakCompareAndSwap in terms of LDREX/STREX and enabled PARALLEL_GC.
886         It gives the expected speed-up on multi-core ARMv7 devices.
887
888         * wtf/Atomics.h:
889         (WTF::weakCompareAndSwap):
890         * wtf/Platform.h:
891
892 2011-12-07  Filip Pizlo  <fpizlo@apple.com>
893
894         DFG CSE is overzealous with GetByVal
895         https://bugs.webkit.org/show_bug.cgi?id=74042
896
897         Reviewed by Oliver Hunt.
898         
899         Made sure that the purity of GetByVal and the limited-clobber-itude of PutByVal
900         is tested in all places that matter.
901
902         * dfg/DFGPropagator.cpp:
903         (JSC::DFG::Propagator::byValIsPure):
904         (JSC::DFG::Propagator::clobbersWorld):
905         (JSC::DFG::Propagator::getByValLoadElimination):
906         (JSC::DFG::Propagator::checkStructureLoadElimination):
907         (JSC::DFG::Propagator::getByOffsetLoadElimination):
908         (JSC::DFG::Propagator::getPropertyStorageLoadElimination):
909         (JSC::DFG::Propagator::performNodeCSE):
910
911 2011-12-07  Sheriff Bot  <webkit.review.bot@gmail.com>
912
913         Unreviewed, rolling out r102267.
914         http://trac.webkit.org/changeset/102267
915         https://bugs.webkit.org/show_bug.cgi?id=74032
916
917         Breaks build on Chromium Mac Debug (Requested by aklein on
918         #webkit).
919
920         * wtf/HashTraits.h:
921
922 2011-12-07  Adam Klein  <adamk@chromium.org>
923
924         Use HashMap<Node*, OwnPtr<...>> in ChildListMutationScope
925         https://bugs.webkit.org/show_bug.cgi?id=73964
926
927         Reviewed by Ryosuke Niwa.
928
929         * wtf/HashTraits.h: Add passOut(std::nullptr_t) to allow callers to use HashMap::take on an entry whose value is null.
930
931 2011-12-07  Filip Pizlo  <fpizlo@apple.com>
932
933         Non-Mac devices should benefit from a larger heap
934         https://bugs.webkit.org/show_bug.cgi?id=74015
935
936         Reviewed by Geoff Garen.
937         
938         Removed the ENABLE(LARGE_HEAP) option from Platform.h, since it was only used in
939         Heap.cpp, and got in the way of having more granular, per-platform control over
940         what the heap size should be. Bumped the heap size to 8MB on iOS (was 512KB).
941
942         * heap/Heap.cpp:
943         (JSC::GCTimer::heapSizeForHint):
944         * wtf/Platform.h:
945
946 2011-11-30  Simon Hausmann  <simon.hausmann@nokia.com>
947
948         [Qt] V8 build fixes.
949
950         Reviewed by Tor Arne Vestbø.
951
952         * yarr/yarr.pri: Don't rely on Source/JavaScriptCore being in
953         VPATH. Prefix SOURCES correctly and make sure that runtime/ is
954         in the include search path when building with v8.
955
956 2011-12-06  Filip Pizlo  <fpizlo@apple.com>
957
958         Zapping a block that is Marked leads to dead objects being mistaken for live ones
959         https://bugs.webkit.org/show_bug.cgi?id=73982
960
961         Reviewed by Geoff Garen.
962         
963         Changed the zapping code to ignore blocks that are Marked or Zapped. Additionally,
964         the code asserts that:
965         
966         - If we zap a Marked or Zapped block then the free list is empty, because this
967           can only happen if the block was never free-listed.
968           
969         - Zapping can only happen for Marked, Zapped, or FreeListed blocks, since Allocated
970           blocks are those that cannot be referred to by SizeClass::currentBlock (since
971           SizeClass::currentBlock only refers to blocks that are candidates for allocation,
972           and Allocated blocks are those who have been exhausted by allocation and will not
973           be allocated from again), and New blocks cannot be referred to by anything except
974           during a brief window inside the allocation slow-path.
975
976         * heap/MarkedBlock.cpp:
977         (JSC::MarkedBlock::zapFreeList):
978
979 2011-12-06  Filip Pizlo  <fpizlo@apple.com>
980
981         DFG 32_64 call linking does not handle non-cell callees correctly
982         https://bugs.webkit.org/show_bug.cgi?id=73965
983
984         Reviewed by Sam Weinig.
985
986         * dfg/DFGSpeculativeJIT32_64.cpp:
987         (JSC::DFG::SpeculativeJIT::emitCall):
988
989 2011-12-06  Sam Weinig  <sam@webkit.org>
990
991         Remove unintentional type name shadowing in the Interpreter
992         https://bugs.webkit.org/show_bug.cgi?id=73963
993
994         Reviewed by Oliver Hunt.
995
996         * interpreter/Interpreter.cpp:
997         (JSC::Interpreter::prepareForRepeatCall): Replace the parameter name FunctionExecutable,
998         which shadows the FunctionExecutable type name, with functionExecutable.
999
1000 2011-12-06  Michael Saboff  <msaboff@apple.com>
1001
1002         r102146 from 73875 broke fast/js/encode-URI-test.html
1003         https://bugs.webkit.org/show_bug.cgi?id=73950
1004
1005         Reviewed by Gavin Barraclough.
1006
1007         * runtime/JSGlobalObjectFunctions.cpp:
1008         (JSC::globalFuncUnescape): Restructured to handle
1009         the %uHHHH case to output the resulting character
1010         and continue so that a failure in finding 4 hex
1011         digits will fall through and output the '%'.
1012         Due to style check, changed the temporary
1013         character variable to a more descriptive name.
1014
1015 2011-12-06  Filip Pizlo  <fpizlo@apple.com>
1016
1017         GC zapping logic could benefit from some more assertions
1018         https://bugs.webkit.org/show_bug.cgi?id=73947
1019
1020         Reviewed by Gavin Barraclough.
1021         
1022         - If you're in a zapped block and you're zapped, then your mark bit should
1023           never be set.
1024           
1025         - If you're being marked, then you should never be zapped.
1026
1027         * heap/MarkedBlock.h:
1028         (JSC::MarkedBlock::isLive):
1029         * runtime/Structure.h:
1030         (JSC::MarkStack::internalAppend):
1031
1032 2011-12-06  Oliver Hunt  <oliver@apple.com>
1033
1034         Don't allocate register in typedarray control flow
1035         https://bugs.webkit.org/show_bug.cgi?id=73944
1036
1037         Reviewed by Gavin Barraclough.
1038
1039         Move a temporary allocation outside of control flow.
1040
1041         * dfg/DFGSpeculativeJIT.cpp:
1042         (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
1043
1044 2011-12-06  Gavin Barraclough  <barraclough@apple.com>
1045
1046         https://bugs.webkit.org/show_bug.cgi?id=68328
1047         The generator and intrinsic fields in HashTableValue/HashEntry and associated structures and methods are redundant
1048
1049         Reviewed by Geoff Garen.
1050
1051         Move the instrinsic enum out of the DFG, into runtime. Add entires for all host functions
1052         that have an intrinsic in the form of a generated thunk. Remove the thunk pointer from the
1053         hashtable, and make Intrinsic field no longer ifdef on JIT/DFG. In getHostFunction select
1054         a thunk genertaor to use based on the Intrinsic.
1055
1056         * JavaScriptCore.xcodeproj/project.pbxproj:
1057         * create_hash_table:
1058         * dfg/DFGByteCodeParser.cpp:
1059         (JSC::DFG::ByteCodeParser::handleCall):
1060         (JSC::DFG::ByteCodeParser::handleIntrinsic):
1061         * dfg/DFGCapabilities.h:
1062         * dfg/DFGIntrinsic.h: Removed.
1063         * jit/JITStubs.cpp:
1064         (JSC::JITThunks::hostFunctionStub):
1065         * jit/JITStubs.h:
1066         * runtime/Executable.cpp:
1067         (JSC::ExecutableBase::intrinsic):
1068         (JSC::NativeExecutable::intrinsic):
1069         * runtime/Executable.h:
1070         (JSC::ExecutableBase::intrinsicFor):
1071         (JSC::NativeExecutable::create):
1072         (JSC::NativeExecutable::finishCreation):
1073         * runtime/Intrinsic.h: Copied from Source/JavaScriptCore/dfg/DFGIntrinsic.h.
1074         * runtime/JSGlobalData.cpp:
1075         (JSC::thunkGeneratorForIntrinsic):
1076         (JSC::JSGlobalData::getHostFunction):
1077         * runtime/JSGlobalData.h:
1078         * runtime/Lookup.cpp:
1079         (JSC::HashTable::createTable):
1080         (JSC::setUpStaticFunctionSlot):
1081         * runtime/Lookup.h:
1082         (JSC::HashEntry::initialize):
1083         (JSC::HashEntry::intrinsic):
1084
1085 2011-12-06  Michael Saboff  <msaboff@apple.com>
1086
1087         Add 8 bit paths to global object functions
1088         https://bugs.webkit.org/show_bug.cgi?id=73875
1089
1090         Added 8 bit paths for converions methods.
1091
1092         This is worth 1.5% on kraken audio-oscillator,
1093         1.6% on stanford-crypto-ccm and 2.5% on
1094         stanford-crypto-sha256-iterative.  See bug for
1095         a full report.
1096
1097         Reviewed by Oliver Hunt.
1098
1099         * runtime/JSGlobalObjectFunctions.cpp:
1100         (JSC::decode): Split into a templated helper.
1101         (JSC::parseInt): Split into a templated helper.
1102         (JSC::parseFloat): Added an 8 bit path
1103         (JSC::globalFuncEscape): Added 8 bit path
1104         (JSC::globalFuncUnescape): Added 8 bit path
1105         * runtime/JSStringBuilder.h:
1106         (JSC::JSStringBuilder::append): New append for LChar
1107         * wtf/text/StringBuilder.h:
1108         (WTF::StringBuilder::append): New append for LChar
1109
1110 2011-11-21  Balazs Kelemen  <kbalazs@webkit.org>
1111
1112         Enable ParallelJobs by default
1113         https://bugs.webkit.org/show_bug.cgi?id=70032
1114
1115         Reviewed by Zoltan Herczeg.
1116
1117         According to measurements on Mac and Linux it is a
1118         considerable speedup for SVG on multicore.
1119
1120         Remove the ENABLE(PARALLEL_JOBS) guard.
1121         Fix build on Windows and Chromium.
1122
1123         * JavaScriptCore.gypi:  Add the files to the build. It was
1124         missing for the gyp build system.
1125         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1126         Export symbols.
1127         * wtf/ParallelJobs.h:
1128         * wtf/ParallelJobsGeneric.cpp:
1129         (WTF::ParallelEnvironment::ParallelEnvironment):
1130         (WTF::ParallelEnvironment::execute):
1131         Deinline these to avoid exporting a lot of symbols.
1132         These are non-trivial and called only once on a given object
1133         so it doesn't seems to be worthwile to inline them.
1134         Additionally fix a signed-unsigned comparison in the constructor.
1135         * wtf/ParallelJobsGeneric.h:
1136         * wtf/Platform.h:
1137
1138 2011-12-06  Simon Hausmann  <simon.hausmann@nokia.com>
1139
1140         [Qt] build-jsc script doesn't work
1141         https://bugs.webkit.org/show_bug.cgi?id=73910
1142
1143         Reviewed by Tor Arne Vestbø.
1144
1145         * JavaScriptCore.pro: Build WTF before JavaScriptCore and JSC
1146         (moved from top-level WebKit.pro). Also add v8 scopes to only build
1147         WTF during v8 builds.
1148
1149 2011-12-05  Anders Carlsson  <andersca@apple.com>
1150
1151         Add HashMap::keys() and HashMap::values() for easy iteration of hash map keys and values in C++11.
1152
1153         Reviewed by Darin Adler.
1154
1155         * wtf/HashMap.h:
1156
1157 2011-12-05  Michael Saboff  <msaboff@apple.com>
1158
1159         Create StringImpl::empty() as an 8 bit string
1160         https://bugs.webkit.org/show_bug.cgi?id=73871
1161
1162         Reviewed by Oliver Hunt.
1163
1164         * wtf/text/StringStatics.cpp:
1165         (WTF::StringImpl::empty): Changed to be an 8 bit string.
1166
1167 2011-12-05  Darin Adler  <darin@apple.com>
1168
1169         Convert JSClassRef to use HashMap<OwnPtr>
1170         https://bugs.webkit.org/show_bug.cgi?id=73780
1171
1172         Reviewed by Andreas Kling.
1173
1174         * API/JSCallbackObjectFunctions.h:
1175         (JSC::JSCallbackObject::getOwnPropertyNames): Use get() on the hash map
1176         entries because the hash map now has an OwnPtr instead of a raw pointer.
1177
1178         * API/JSClassRef.cpp:
1179         (OpaqueJSClass::OpaqueJSClass): No need to initialize m_staticValues and
1180         m_staticFunctions since they are now OwnPtr. Use adoptPtr when allocating.
1181         Removed the code that gets and deletes existing entries, and just use set,
1182         which now handles deletion automatically due to it being OwnPtr.
1183         (OpaqueJSClass::~OpaqueJSClass): Replaced code to do all the deletion
1184         with assertion-only NDEBUG-only code.
1185         (OpaqueJSClassContextData::OpaqueJSClassContextData): Use adoptPtr when
1186         allocating. Use OwnPtr when adding. Removed unneeded code to set
1187         staticValues and staticFunctions to 0. Removed unneeded destructor.
1188         (OpaqueJSClass::staticValues): Added get call. Also removed unneeded local.
1189         (OpaqueJSClass::staticFunctions): Ditto.
1190         (OpaqueJSClass::prototype): Added use of adoptPtr.
1191
1192         * API/JSClassRef.h: Made the static values and static functions tables
1193         use OwnPtr for the entries. Also used OwnPtr for the pointers to the
1194         tables themselves. Also removed ~OpaqueJSClassContextData(), letting
1195         the compiler generate it.
1196
1197 2011-12-05  Oliver Hunt  <oliver@apple.com>
1198
1199         Land uncommitted bit of float array support
1200         https://bugs.webkit.org/show_bug.cgi?id=73873
1201
1202         Reviewed by Filip Pizlo.
1203
1204         * dfg/DFGSpeculativeJIT.cpp:
1205         (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
1206
1207 2011-12-05  Benjamin Poulain  <benjamin@webkit.org>
1208
1209         Update String::containsOnlyASCII() to handle 8 bits strings
1210         https://bugs.webkit.org/show_bug.cgi?id=73799
1211
1212         Reviewed by Darin Adler.
1213
1214         Implement String::containsOnlyASCII() so that it does not
1215         call String::characters().
1216
1217         * wtf/text/WTFString.h:
1218         (WTF::String::containsOnlyASCII):
1219
1220 2011-12-05  Filip Pizlo  <fpizlo@apple.com>
1221
1222         Unreviewed build fix for non-DFG platforms.
1223
1224         * dfg/DFGRepatch.h:
1225
1226 2011-12-05  Filip Pizlo  <fpizlo@apple.com>
1227
1228         Old JIT emits 32-bit offsets for put_by_id but sometimes patches them as if they
1229         were compact offsets
1230         https://bugs.webkit.org/show_bug.cgi?id=73861
1231
1232         Reviewed by Gavin Barraclough.
1233
1234         * jit/JITPropertyAccess32_64.cpp:
1235         (JSC::JIT::resetPatchPutById):
1236
1237 2011-12-05  Filip Pizlo  <fpizlo@apple.com>
1238
1239         Unreviewed, build fixes for ARM.
1240
1241         * assembler/AbstractMacroAssembler.h:
1242         (JSC::AbstractMacroAssembler::unreachableForPlatform):
1243         * assembler/MacroAssemblerARMv7.h:
1244         (JSC::MacroAssemblerARMv7::loadDouble):
1245         (JSC::MacroAssemblerARMv7::loadFloat):
1246         (JSC::MacroAssemblerARMv7::storeFloat):
1247         (JSC::MacroAssemblerARMv7::convertFloatToDouble):
1248         (JSC::MacroAssemblerARMv7::convertDoubleToFloat):
1249
1250 2011-12-05  Benjamin Poulain  <benjamin@webkit.org>
1251
1252         Update String::containsOnlyLatin1() to avoid converting to 16 bits
1253         https://bugs.webkit.org/show_bug.cgi?id=73797
1254
1255         Reviewed by Andreas Kling.
1256
1257         When the String use 8bits StringImpl, there is no need to iterate
1258         over the string.
1259
1260         The function charactersAreAllLatin1() is removed because it is not
1261         used anywhere.
1262
1263         * wtf/text/WTFString.h:
1264         (WTF::String::containsOnlyLatin1):
1265
1266 2011-12-05  Michael Saboff  <msaboff@apple.com>
1267
1268         8 bit string work slows down Kraken json-stringify-tinderbox
1269         https://bugs.webkit.org/show_bug.cgi?id=73457
1270
1271         Added 8 bit path to StringBuilder.  StringBuilder starts
1272         assuming 8 bit contents and gets converted to 16 bit upon
1273         seeing the first 16 bit character or string.  Split
1274         appendUninitialiezed into an inlined fast and function call
1275         slow case.
1276
1277         Factored out the processing of the UString argument from
1278         Stringifier::appendQuotedString() to a static templated function
1279         based on character size.
1280
1281         This change eliminates 5% of the 7% slowdown to json-stringify-tinderbox.
1282         This change introduces a 4.8% slowdown to json-parse-financial.
1283         This slowdown will be addressed in a subsequent patch to StringImpl::equal.
1284
1285         Reviewed by Oliver Hunt.
1286
1287         * runtime/JSONObject.cpp:
1288         (JSC::appendStringToUStringBuilder):
1289         (JSC::Stringifier::appendQuotedString):
1290         * wtf/text/StringBuilder.cpp:
1291         (WTF::StringBuilder::resize):
1292         (WTF::StringBuilder::allocateBuffer):
1293         (WTF::StringBuilder::allocateBufferUpConvert):
1294         (WTF::LChar):
1295         (WTF::UChar):
1296         (WTF::StringBuilder::reserveCapacity):
1297         (WTF::StringBuilder::appendUninitialized):
1298         (WTF::StringBuilder::appendUninitializedSlow):
1299         (WTF::StringBuilder::append):
1300         (WTF::StringBuilder::shrinkToFit):
1301         * wtf/text/StringBuilder.h:
1302         (WTF::StringBuilder::StringBuilder):
1303         (WTF::StringBuilder::append):
1304         (WTF::StringBuilder::operator[]):
1305         (WTF::StringBuilder::characters8):
1306         (WTF::StringBuilder::characters16):
1307         (WTF::StringBuilder::charactersBlah):
1308         (WTF::LChar):
1309         (WTF::UChar):
1310
1311 2011-12-01  Gavin Barraclough  <barraclough@apple.com>
1312
1313         https://bugs.webkit.org/show_bug.cgi?id=73624
1314         JIT + INTERPRETER builds are broken
1315
1316         Reviewed by Geoff Garen, Sam Weinig.
1317
1318         These don't fallback to the interpreter correctly.
1319         Thunk creation assumes that is the JIT is compiled in, then it is enabled.
1320
1321         * jit/JITStubs.cpp:
1322         (JSC::JITThunks::JITThunks):
1323         * runtime/Executable.h:
1324         (JSC::NativeExecutable::create):
1325         (JSC::NativeExecutable::finishCreation):
1326         * runtime/JSGlobalData.cpp:
1327         (JSC::JSGlobalData::getHostFunction):
1328
1329 2011-12-05  Zoltan Herczeg  <zherczeg@webkit.org>
1330
1331         MacroAssemblerSH4 does not implement readCallTarget
1332         https://bugs.webkit.org/show_bug.cgi?id=73434
1333
1334         Reviewed by Csaba Osztrogonác.
1335
1336         * assembler/MacroAssemblerSH4.h: Support for SH4.
1337         (JSC::MacroAssemblerSH4::readCallTarget):
1338         * assembler/SH4Assembler.h:
1339         (JSC::SH4Assembler::readCallTarget):
1340
1341 2011-12-04  Filip Pizlo  <fpizlo@apple.com>
1342
1343         DFG should optimize strict equality
1344         https://bugs.webkit.org/show_bug.cgi?id=73764
1345
1346         Reviewed by Oliver Hunt.
1347         
1348         1% speed-up on V8.
1349
1350         * dfg/DFGSpeculativeJIT.cpp:
1351         (JSC::DFG::SpeculativeJIT::compare):
1352         (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
1353         (JSC::DFG::SpeculativeJIT::compileStrictEq):
1354         * dfg/DFGSpeculativeJIT.h:
1355         * dfg/DFGSpeculativeJIT32_64.cpp:
1356         (JSC::DFG::SpeculativeJIT::compileIntegerCompare):
1357         (JSC::DFG::SpeculativeJIT::compileDoubleCompare):
1358         (JSC::DFG::SpeculativeJIT::compile):
1359         * dfg/DFGSpeculativeJIT64.cpp:
1360         (JSC::DFG::SpeculativeJIT::compileIntegerCompare):
1361         (JSC::DFG::SpeculativeJIT::compileDoubleCompare):
1362         (JSC::DFG::SpeculativeJIT::compile):
1363
1364 2011-12-03  Darin Adler  <darin@apple.com>
1365
1366         Use HashMap<OwnPtr> for ScriptSampleRecordMap
1367         https://bugs.webkit.org/show_bug.cgi?id=73758
1368
1369         Reviewed by Andreas Kling.
1370
1371         * bytecode/SamplingTool.cpp:
1372         (JSC::SamplingTool::notifyOfScope): Added adoptPtr.
1373         (JSC::SamplingTool::dump): Added get.
1374         * bytecode/SamplingTool.h: Changed the value type of ScriptSampleRecordMap to be OwnPtr.
1375
1376 2011-12-03  Darin Adler  <darin@apple.com>
1377
1378         Use HashMap<OwnPtr> for the opaqueJSClassData map
1379         https://bugs.webkit.org/show_bug.cgi?id=73759
1380
1381         Reviewed by Andreas Kling.
1382
1383         * API/JSClassRef.cpp:
1384         (OpaqueJSClass::contextData): Update types.
1385         * runtime/JSGlobalData.cpp:
1386         (JSC::JSGlobalData::~JSGlobalData): Add an explicit clear of opaqueJSClassData to keep the
1387         timing the same. If we didn't care about the order of operations, we could remove this, too.
1388         * runtime/JSGlobalData.h: Use OwnPtr instead of raw pointer for the mapped type in the
1389         opaqueJSClassData map.
1390
1391 2011-12-03  Darin Adler  <darin@apple.com>
1392
1393         Change HashMap implementation to use the pass type and peek type from traits for the mapped value
1394         https://bugs.webkit.org/show_bug.cgi?id=72474
1395
1396         Reviewed by Anders Carlsson.
1397
1398         * wtf/HashMap.h: Added ReferenceTypeMaker struct template. Get PassInType, PassOutType,
1399         and PeekType from the traits of the mapped value instead of hard-coding them here.
1400         Changed inlineAdd to take a reference to the PassInType instead of the PassInType itself,
1401         to accomodate a PassInType that can't be copied. Use the store, peek, and passOut
1402         functions from the traits as well.
1403
1404         * wtf/HashTraits.h: Updated GenericHashTraits and HashTraits for OwnPtr to include
1405         PassInType, PassOutType, PeekType, store, passOut, and peek. Before this, the file had
1406         an earlier version that was just PassType, PeekType, pass, and peek. Also commented
1407         the HashTraits for RefPtr to foreshadow some work we can do there.
1408
1409         * wtf/RefPtrHashMap.h: Same changes as HashMap.h.
1410
1411 2011-12-02  David Levin  <levin@chromium.org>
1412
1413         Rename WTF class from TemporarilyChange to TemporaryChange.
1414         https://bugs.webkit.org/show_bug.cgi?id=73479
1415
1416         Reviewed by Eric Seidel.
1417
1418         * JavaScriptCore.gypi:
1419         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
1420         * JavaScriptCore.xcodeproj/project.pbxproj:
1421         * wtf/TemporaryChange.h: Renamed from Source/JavaScriptCore/wtf/TemporarilyChange.h.
1422         (WTF::TemporaryChange::TemporaryChange):
1423         (WTF::TemporaryChange::~TemporaryChange):
1424
1425 2011-12-02  Mark Hahnenberg  <mhahnenberg@apple.com>
1426
1427         REGRESSION (r99754): All layout tests crash on Windows
1428         https://bugs.webkit.org/show_bug.cgi?id=72305
1429
1430         Reviewed by Geoffrey Garen.
1431
1432         Fixes a crash in release builds on Windows.  Windows was optimizing the out-of-line virtual destructor in 
1433         JSFunction away, which left it with no virtual functions.  Its vtable ptr was then identical to that of 
1434         a different class, therefore the optimization in the visitChildren helper function in MarkedStack.cpp was calling an 
1435         incorrect version of visitChildren on the object, which left its children unmarked, causing them to be 
1436         collected when they were still reachable.
1437
1438         * runtime/JSFunction.cpp:
1439         (JSC::JSFunction::vtableAnchor): Add a virtual function to JSFunction that Visual Studio can't optimize away.
1440         * runtime/JSFunction.h:
1441         * runtime/JSGlobalData.cpp:
1442         (JSC::JSGlobalData::storeVPtrs): Add checks to make sure that all virtual pointers that we rely on for optimization
1443         purposes are distinct from one another.
1444
1445 2011-12-02  Oliver Hunt  <oliver@apple.com>
1446
1447         Improve float array support in the DFG JIT
1448         https://bugs.webkit.org/show_bug.cgi?id=73722
1449
1450         Reviewed by Gavin Barraclough.
1451
1452         Add basic support for float typed arrays in JSC.  This is currently
1453         less optimal than it could be in the following ways:
1454          * float32Array1[0] = float32Array2[0] (eg. an element by element copy) 
1455            promotes float to double and then back to float.
1456          * float64Array[0] will always perform NaN tests in order to prevent
1457            signalling NaNs from entering the engine.
1458
1459         We also don't support Float32Array on ARMv7
1460
1461         * assembler/MacroAssemblerARMv7.h:
1462         (JSC::MacroAssemblerARMv7::loadDouble):
1463         (JSC::MacroAssemblerARMv7::loadFloat):
1464         (JSC::MacroAssemblerARMv7::storeDouble):
1465         (JSC::MacroAssemblerARMv7::storeFloat):
1466         (JSC::MacroAssemblerARMv7::convertFloatToDouble):
1467         (JSC::MacroAssemblerARMv7::convertDoubleToFloat):
1468         * assembler/MacroAssemblerX86Common.h:
1469         (JSC::MacroAssemblerX86Common::loadDouble):
1470         (JSC::MacroAssemblerX86Common::loadFloat):
1471         (JSC::MacroAssemblerX86Common::storeDouble):
1472         (JSC::MacroAssemblerX86Common::storeFloat):
1473         (JSC::MacroAssemblerX86Common::convertDoubleToFloat):
1474         (JSC::MacroAssemblerX86Common::convertFloatToDouble):
1475         * assembler/X86Assembler.h:
1476         (JSC::X86Assembler::cvtsd2ss_rr):
1477         (JSC::X86Assembler::cvtss2sd_rr):
1478         (JSC::X86Assembler::movsd_rm):
1479         (JSC::X86Assembler::movss_rm):
1480         (JSC::X86Assembler::movsd_mr):
1481         (JSC::X86Assembler::movss_mr):
1482         * dfg/DFGAbstractState.cpp:
1483         (JSC::DFG::AbstractState::execute):
1484         * dfg/DFGNode.h:
1485         (JSC::DFG::Node::shouldSpeculateFloat32Array):
1486         * dfg/DFGPropagator.cpp:
1487         (JSC::DFG::Propagator::propagateNodePredictions):
1488         * dfg/DFGSpeculativeJIT.cpp:
1489         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
1490         (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
1491         (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
1492         * dfg/DFGSpeculativeJIT.h:
1493         * dfg/DFGSpeculativeJIT32_64.cpp:
1494         (JSC::DFG::SpeculativeJIT::compile):
1495         * dfg/DFGSpeculativeJIT64.cpp:
1496         (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
1497         (JSC::DFG::SpeculativeJIT::compile):
1498
1499 2011-12-02  Sheriff Bot  <webkit.review.bot@gmail.com>
1500
1501         Unreviewed, rolling out r101801.
1502         http://trac.webkit.org/changeset/101801
1503         https://bugs.webkit.org/show_bug.cgi?id=73667
1504
1505         Build is still broken (Requested by Ossy on #webkit).
1506
1507         * assembler/SH4Assembler.h:
1508
1509 2011-12-01  Darin Adler  <darin@apple.com>
1510
1511         Prepare to deploy pass and peek types in the HashMap class
1512         https://bugs.webkit.org/show_bug.cgi?id=73477
1513
1514         Reviewed by Adam Roben.
1515
1516         This patch adds private typedefs inside the HashMap class,
1517         and uses them as appropriate. A future patch will actually
1518         tie those typedefs to hash traits, which will allow us to
1519         make HashMap work with OwnPtr mapped values and to optimize
1520         how HashMap works with RefPtr mapped values.
1521
1522         Also changed the hash translator and adapter struct templates
1523         to use template functions to simplify them and make them more
1524         flexible.
1525
1526         Also removed some unused template arguments.
1527
1528         This goes out of its way to not change behavior. Future patches
1529         will change the peek type to be a reference type, which will
1530         reduce reference count churn a bit for hash tables with RefPtr
1531         mapped values, and then do further optimizations for RefPtr
1532         and OwnPtr by getting types from the hash traits.
1533
1534         * wtf/HashMap.h: Added MappedPassInType, MappedPassOutType,
1535         and MappedPeekType typedefs, and used them for the arguments
1536         and return types of the get, set, add, take, and inlineAdd
1537         functions.
1538         (WTF::HashMapTranslator): Changed this struct template to take
1539         fewer arguments, and changed its member functions to be
1540         function templates instead. This allows the compiler to
1541         determine types more flexibly and also simplifies use of it.
1542         (WTF::HashMapTranslatorAdapter): Ditto.
1543         (WTF::HashMap::find): Updated to use new HashMapTranslatorAdapter.
1544         Also reduced the arguments passed to the HashTable function template.
1545         (WTF::HashMap::contains): Ditto.
1546         (WTF::HashMap::inlineAdd): Ditto. Also take MappedPassInType.
1547         (WTF::HashMap::set): Ditto.
1548         (WTF::HashMap::add): Ditto.
1549         (WTF::HashMap::inlineGet): Ditto, but return MappedPeekType.
1550         (WTF::HashMap::get): Ditto.
1551         (WTF::HashMap::take): Ditto, but return MappedPassOutType and use
1552         that type in the implementation.
1553         (WTF::deleteAllValues): Removed unneeded template arguments from
1554         call to deleteAllPairSeconds.
1555         (WTF::deleteAllKeys): Removed unneeded template arguments from
1556         call to deleteAllPairFirsts.
1557
1558         * wtf/HashSet.h:
1559         (WTF::IdentityExtractor): Changed this to be a struct rather than
1560         a struct template, and replaced the extract function with a function
1561         template. This allows the compiler to deduce the type.
1562         (WTF::HashSetTranslatorAdapter): Changed this struct template to take
1563         fewer arguments, and changed its member functions to be
1564         function templates instead. This allows the compiler to
1565         determine types more flexibly and also simplifies use of it.
1566         (WTF::HashSet::find): Updated to use new HashSetTranslatorAdapter.
1567         Also reduced the arguments passed to the HashTable function template.
1568         (WTF::HashSet::contains): Ditto.
1569         (WTF::HashSet::add): Ditto.
1570
1571         * wtf/HashTable.h:
1572         (WTF::IdentityHashTranslator): Changed this struct template to take
1573         fewer arguments, and changed its member functions to be
1574         function templates instead. This allows the compiler to
1575         determine types more flexibly and also simplifies use of it.
1576         (WTF::HashTable::add): Reduced arguments passed to the function template.
1577         (WTF::HashTable::find): Ditto, also reversed the template arguments so the
1578         translator comes first so the compiler can deduce the other type.
1579         (WTF::HashTable::contains): Ditto.
1580         (WTF::HashTable::lookup): Ditto.
1581         (WTF::HashTable::lookupForWriting): Ditto.
1582         (WTF::HashTable::checkKey): Ditto.
1583         (WTF::HashTable::fullLookupForWriting): Ditto.
1584         (WTF::HashTable::add): Ditto.
1585         (WTF::HashTable::addPassingHashCode): Ditto.
1586         (WTF::HashTable::find): Ditto.
1587         (WTF::HashTable::contains): Ditto.
1588
1589         * wtf/ListHashSet.h:
1590         (WTF::ListHashSetNodeHashFunctions): Changed this struct template to take
1591         fewer arguments, and changed its member functions to be function templates
1592         instead. This allows the compiler to determine types more flexibly and
1593         also simplifies use of it.
1594         (WTF::ListHashSet::find): Reduced the arguments passed to the HashTable
1595         functon template.
1596         (WTF::ListHashSetTranslatorAdapter): Changed this struct template in the
1597         same way we changed ListHashSetNodeHashFunctions above.
1598         (WTF::ListHashSetTranslatorAdapter::equal):
1599         (WTF::::contains):
1600         (WTF::::add):
1601         (WTF::::insertBefore):
1602
1603         * wtf/RefPtrHashMap.h: Updated comments. Removed the
1604         RefPtrHashMapRawKeyTranslator struct template; we can use the
1605         HashMapTranslator struct template from HashMap.h instead now that
1606         it is more flexible. Added MappedPassInType, MappedPassOutType,
1607         and MappedPeekType typedefs, and used them for the arguments
1608         and return types of the get, inlineGet, set, add, take, and inlineAdd
1609         functions. Changed the name of the RawKeyTranslator type to
1610         Translator since it's now a class that can handle both raw keys
1611         and conventional keys.
1612         (WTF::HashMap::find): Changed to use Translator instead of RawKeyTranslator.
1613         Reduced the arguments passed to the HashTable function template.
1614         (WTF::HashMap::contains): Ditto.
1615         (WTF::HashMap::inlineAdd): Ditto. Also take MappedPassInType.
1616         (WTF::HashMap::set): Ditto.
1617         (WTF::HashMap::add): Ditto.
1618         (WTF::HashMap::inlineGet): Ditto, but return MappedPeekType.
1619         (WTF::HashMap::get): Ditto.
1620         (WTF::HashMap::take): Ditto, but return MappedPassOutType and use
1621         that type in the implementation.
1622         (WTF::deleteAllValues): Removed unneeded template arguments from
1623         call to deleteAllPairSeconds.
1624         (WTF::deleteAllKeys): Removed unneeded template arguments from
1625         call to deleteAllPairFirsts.
1626
1627 2011-12-02  Zoltan Herczeg  <zherczeg@webkit.org>
1628
1629         MacroAssemblerSH4 does not implement readCallTarget
1630         https://bugs.webkit.org/show_bug.cgi?id=73434
1631
1632         Reviewed by Csaba Osztrogonác.
1633
1634         * assembler/SH4Assembler.h:
1635         (JSC::SH4Assembler::readCallTarget): Support for SH4.
1636
1637 2011-12-02  Hajime Morrita  <morrita@chromium.org>
1638
1639         Unreviewed, rolling out r101751 and r101775.
1640         http://trac.webkit.org/changeset/101751
1641         http://trac.webkit.org/changeset/101775
1642         https://bugs.webkit.org/show_bug.cgi?id=73191
1643
1644         breaks Windows build
1645
1646         * JavaScriptCore.xcodeproj/project.pbxproj:
1647         * config.h:
1648         * runtime/JSExportMacros.h: Removed.
1649         * wtf/ExportMacros.h:
1650         * wtf/Platform.h:
1651         * wtf/WTFThreadData.h:
1652         * wtf/text/AtomicString.h:
1653         * wtf/text/StringStatics.cpp:
1654
1655 2011-12-01  Hajime Morrita  <morrita@chromium.org>
1656
1657         JS_INLINE and WTF_INLINE should be visible from WebCore
1658         https://bugs.webkit.org/show_bug.cgi?id=73191
1659
1660         - Moved Export related macro definitions from config.h to ExportMacros.h and JSExportMacros.h.
1661         - Moved WTF_USE_JSC and WTF_USE_V8 from various config.h family to Platform.h.
1662         - Replaced JS_EXPORTDATA in wtf moudule with newly introduced WTF_EXPORTDATA.
1663
1664         Reviewed by Kevin Ollivier.
1665
1666         * JavaScriptCore.xcodeproj/project.pbxproj:
1667         * config.h:
1668         * runtime/JSExportMacros.h: Added.
1669         * wtf/ExportMacros.h:
1670         * wtf/Platform.h:
1671         * wtf/WTFThreadData.h:
1672         * wtf/text/AtomicString.h:
1673         * wtf/text/StringStatics.cpp:
1674
1675 2011-12-01  Michael Saboff  <msaboff@apple.com>
1676
1677         Changes proposed for 73457 slow down Kraken json-parse-financial
1678         https://bugs.webkit.org/show_bug.cgi?id=73584
1679
1680         Restructured StringImpl::equal to take advantage of 8 or 4 bytes
1681         at a time when possible.
1682
1683         This is worth ~3% on Kraken json-parse-financial. It provides 
1684         ~2% on SunSpider string-unpack-code.
1685
1686         Reviewed by Sam Weinig.
1687
1688         * wtf/text/StringImpl.cpp:
1689         (WTF::equal):
1690
1691 2011-12-01  Oliver Hunt  <oliver@apple.com>
1692
1693         Support integer typed arrays in the DFG JIT
1694         https://bugs.webkit.org/show_bug.cgi?id=73608
1695
1696         Reviewed by Filip Pizlo.
1697
1698         Add support for all the integral typed arrays in the DFG JIT.
1699         Currently this loads the contents of Uint32 arrays as doubles,
1700         which is clearly not as efficient as it could be, but this is
1701         still in the order of 10-20x faster than the existing behaviour.
1702
1703         This needed us to add support for writing 16bit values to the
1704         macroassembler, and also to support double<->unsigned conversion.
1705
1706         * assembler/ARMv7Assembler.h:
1707         (JSC::ARMv7Assembler::strh):
1708         (JSC::ARMv7Assembler::vcvt_floatingPointToUnsigned):
1709         * assembler/MacroAssemblerARMv7.h:
1710         (JSC::MacroAssemblerARMv7::store16):
1711         (JSC::MacroAssemblerARMv7::truncateDoubleToUint32):
1712         * assembler/MacroAssemblerX86Common.h:
1713         (JSC::MacroAssemblerX86Common::store16):
1714         (JSC::MacroAssemblerX86Common::truncateDoubleToUint32):
1715         * assembler/X86Assembler.h:
1716         (JSC::X86Assembler::movw_rm):
1717         (JSC::X86Assembler::cvttsd2siq_rr):
1718         * bytecode/PredictedType.cpp:
1719         (JSC::predictionToString):
1720         (JSC::predictionFromClassInfo):
1721         * bytecode/PredictedType.h:
1722         (JSC::isInt8ArrayPrediction):
1723         (JSC::isInt16ArrayPrediction):
1724         (JSC::isInt32ArrayPrediction):
1725         (JSC::isUint8ArrayPrediction):
1726         (JSC::isUint16ArrayPrediction):
1727         (JSC::isUint32ArrayPrediction):
1728         (JSC::isFloat32ArrayPrediction):
1729         (JSC::isFloat64ArrayPrediction):
1730         * dfg/DFGAbstractState.cpp:
1731         (JSC::DFG::AbstractState::initialize):
1732         (JSC::DFG::AbstractState::execute):
1733         * dfg/DFGNode.h:
1734         (JSC::DFG::Node::shouldSpeculateInt8Array):
1735         (JSC::DFG::Node::shouldSpeculateInt16Array):
1736         (JSC::DFG::Node::shouldSpeculateInt32Array):
1737         (JSC::DFG::Node::shouldSpeculateUint8Array):
1738         (JSC::DFG::Node::shouldSpeculateUint16Array):
1739         (JSC::DFG::Node::shouldSpeculateUint32Array):
1740         (JSC::DFG::Node::shouldSpeculateFloat32Array):
1741         (JSC::DFG::Node::shouldSpeculateFloat64Array):
1742         * dfg/DFGPropagator.cpp:
1743         (JSC::DFG::Propagator::propagateNodePredictions):
1744         (JSC::DFG::Propagator::fixupNode):
1745         (JSC::DFG::Propagator::performNodeCSE):
1746         * dfg/DFGSpeculativeJIT.cpp:
1747         (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
1748         (JSC::DFG::SpeculativeJIT::compileGetTypedArrayLength):
1749         (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
1750         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
1751         * dfg/DFGSpeculativeJIT.h:
1752         * dfg/DFGSpeculativeJIT32_64.cpp:
1753         (JSC::DFG::SpeculativeJIT::compile):
1754         * dfg/DFGSpeculativeJIT64.cpp:
1755         (JSC::DFG::SpeculativeJIT::compile):
1756         * runtime/JSGlobalData.h:
1757
1758 2011-12-01  Benjamin Poulain  <benjamin@webkit.org>
1759
1760         URLs are encoded in UTF-8, then decoded as if they are Latin1
1761         https://bugs.webkit.org/show_bug.cgi?id=71758
1762
1763         Reviewed by Darin Adler.
1764
1765         Add the operator == between a String and a Vector of char. The implementation
1766         is the same as the comparison of String and char* but adds the length as a
1767         parameter for comparing the strings.
1768
1769         * JavaScriptCore.exp:
1770         * wtf/text/StringImpl.h:
1771         (WTF::equal):
1772         * wtf/text/WTFString.h:
1773         (WTF::operator==):
1774         (WTF::operator!=):
1775
1776 2011-12-01  Martin Robinson  <mrobinson@igalia.com>
1777
1778         [GTK] Read fonts from the jhbuild root
1779         https://bugs.webkit.org/show_bug.cgi?id=73487
1780
1781         Reviewed by Gustavo Noronha Silva.
1782
1783         Read fonts from the jhbuild root instead of from the system. This will ensure
1784         that all testers use the same fonts instead of leaving this up to luck.
1785
1786         * wtf/gobject/GlibUtilities.h: Add Assertions.h which was required for the WebKit2TestRunner.
1787
1788 2011-12-01  Martin Robinson  <mrobinson@igalia.com>
1789
1790         [GTK] Add a helper function to find the current executable's path
1791         https://bugs.webkit.org/show_bug.cgi?id=73473
1792
1793         Reviewed by Gustavo Noronha Silva.
1794
1795         Add a WTF helper which gets the binary path. This is currently only used
1796         in WebKit2.
1797
1798         * GNUmakefile.list.am: Add the new file to the source list.
1799         * wtf/gobject/GlibUtilities.cpp: Added.
1800         (getCurrentExecutablePath):
1801         * wtf/gobject/GlibUtilities.h: Added.
1802
1803 2011-12-01  Sheriff Bot  <webkit.review.bot@gmail.com>
1804
1805         Unreviewed, rolling out r101691.
1806         http://trac.webkit.org/changeset/101691
1807         https://bugs.webkit.org/show_bug.cgi?id=73588
1808
1809         Tests fail on Chromium bots, early warning system warned
1810         committer, please adjust test_expectations in patch (Requested
1811         by scheib on #webkit).
1812
1813         * JavaScriptCore.exp:
1814         * wtf/text/StringImpl.h:
1815         * wtf/text/WTFString.h:
1816
1817 2011-12-01  Filip Pizlo  <fpizlo@apple.com>
1818
1819         ARMv7 only allows for one-shot patching of compact offsets, while the
1820         JIT expects to be able to repatch
1821         https://bugs.webkit.org/show_bug.cgi?id=73548
1822
1823         Reviewed by Oliver Hunt.
1824
1825         * assembler/ARMv7Assembler.h:
1826         (JSC::ARMv7Assembler::setUInt7ForLoad):
1827
1828 2011-11-30  Benjamin Poulain  <benjamin@webkit.org>
1829
1830         URLs are encoded in UTF-8, then decoded as if they are Latin1
1831         https://bugs.webkit.org/show_bug.cgi?id=71758
1832
1833         Reviewed by Darin Adler.
1834
1835         Add the operator == between a String and a Vector of char. The implementation
1836         is the same as the comparison of String and char* but adds the length as a
1837         parameter for comparing the strings.
1838
1839         * JavaScriptCore.exp:
1840         * wtf/text/StringImpl.h:
1841         (WTF::equal):
1842         * wtf/text/WTFString.h:
1843         (WTF::operator==):
1844         (WTF::operator!=):
1845
1846 2011-11-30  Dmitry Lomov  <dslomov@google.com>
1847
1848         https://bugs.webkit.org/show_bug.cgi?id=73503
1849         [Chromium][V8] Implement ArrayBuffer transfer in chromium.
1850         Portions of this patch come from Luke Zarko.
1851
1852         Reviewed by David Levin.
1853
1854         * wtf/ArrayBuffer.cpp:
1855         (WTF::ArrayBuffer::transfer): Changed prototype from pointers to RefPtr.
1856         * wtf/ArrayBuffer.h:
1857         (WTF::ArrayBufferContents::transfer): Changed prototype from pointers to RefPtr.
1858         (WTF::ArrayBuffer::isNeutered):
1859         * wtf/TypedArrayBase.h:
1860         (WTF::TypedArrayBase::neuter):
1861
1862 2011-12-01  Chao-ying Fu  <fu@mips.com>
1863
1864         MacroAssemblerMIPS does not implement readCallTarget
1865         https://bugs.webkit.org/show_bug.cgi?id=73432
1866
1867         Reviewed by Zoltan Herczeg.
1868
1869         * assembler/MIPSAssembler.h:
1870         (JSC::MIPSAssembler::readCallTarget):
1871         * assembler/MacroAssemblerMIPS.h:
1872         (JSC::MacroAssemblerMIPS::readCallTarget):
1873
1874 2011-12-01  Noel Gordon  <noel.gordon@gmail.com>
1875
1876         [chromium] Remove wtf/qt/ThreadingQt.cpp from the gyp projects
1877         https://bugs.webkit.org/show_bug.cgi?id=73527
1878
1879         Reviewed by Simon Hausmann.
1880
1881         wtf/qt/ThreadingQt.cpp was removed in r101477
1882
1883         * JavaScriptCore.gypi: remove wtf/qt/ThreadingQt.cpp
1884
1885 2011-12-01  Filip Pizlo  <fpizlo@apple.com>
1886
1887         BitVector isInline check could fail
1888         https://bugs.webkit.org/show_bug.cgi?id=70691
1889
1890         Reviewed by Gavin Barraclough.
1891         
1892         Switch back to using the high bit as the inline marker, to make
1893         all of the bit indexing operations simpler. Computing the size in
1894         words and in bytes of a bitvector, using the number of bits as
1895         input is error-prone enough; and with the current approach to
1896         solving the X86 bug we end up getting it wrong. Making it right
1897         seems hard.
1898         
1899         So instead, to solve the original problem (the high bit may be
1900         meaningful on 32-bit systems), the out-of-line storage pointer is
1901         right-shifted by 1. Compared to the original BitVector code, this
1902         is a much smaller change (just three lines).
1903         
1904         This solves a bug where the DFG was corrupting its call frame
1905         because BitVector lost track of some bits.
1906
1907         * wtf/BitVector.cpp:
1908         (WTF::BitVector::setSlow):
1909         (WTF::BitVector::resizeOutOfLine):
1910         * wtf/BitVector.h:
1911         (WTF::BitVector::quickGet):
1912         (WTF::BitVector::quickSet):
1913         (WTF::BitVector::quickClear):
1914         (WTF::BitVector::makeInlineBits):
1915         (WTF::BitVector::isInline):
1916         (WTF::BitVector::outOfLineBits):
1917
1918 2011-11-30  Filip Pizlo  <fpizlo@apple.com>
1919
1920         DFG should make it easier to notice node boundaries in disassembly
1921         https://bugs.webkit.org/show_bug.cgi?id=73509
1922
1923         Rubber-stamped by Gavin Barraclough
1924         
1925         If you set XOR_DEBUG_AID to 1 in DFGCommon.h, a pair of xor's will
1926         be emitted at node boundaries, where the immediate being xor'd is the
1927         node index.
1928
1929         * dfg/DFGCommon.h:
1930         * dfg/DFGSpeculativeJIT.cpp:
1931         (JSC::DFG::SpeculativeJIT::compile):
1932
1933 2011-11-30  Geoffrey Garen  <ggaren@apple.com>
1934
1935         Removed ArgList iterators.
1936
1937         Reviewed by Gavin Barraclough.
1938         
1939         Another step toward reversing the argument order.
1940
1941         * interpreter/Interpreter.cpp:
1942         (JSC::Interpreter::executeCall):
1943         (JSC::Interpreter::executeConstruct): Switched from iterator to int.
1944
1945         * runtime/ArgList.h:
1946         (JSC::ArgList::ArgList):
1947         (JSC::ArgList::isEmpty): Removed iterators.
1948
1949         * runtime/JSArray.cpp:
1950         (JSC::JSArray::finishCreation): Switched from iterator to int.
1951
1952 2011-11-30  Yuqiang Xian  <yuqiang.xian@intel.com>
1953
1954         32 bit DFG should handle logicalNot slow case instead of simply bailing out
1955         https://bugs.webkit.org/show_bug.cgi?id=73515
1956
1957         Reviewed by Filip Pizlo.
1958
1959         This improves Kraken performance by 14%, mainly due to ~3X improvement
1960         on imaging-desaturate.
1961
1962         * dfg/DFGSpeculativeJIT32_64.cpp:
1963         (JSC::DFG::SpeculativeJIT::compileLogicalNot):
1964
1965 2011-11-30  Max Vujovic  <mvujovic@adobe.com>
1966
1967         Some date values not handled consistently with IE/Firefox
1968         https://bugs.webkit.org/show_bug.cgi?id=14176
1969
1970         Reviewed by Gavin Barraclough.
1971
1972         Changed time zone offset parsing behavior to match IE/Firefox/Opera's in
1973         implementation dependent cases like "GMT-4".
1974
1975         * wtf/DateMath.cpp:
1976         (WTF::parseDateFromNullTerminatedCharacters):
1977
1978 2011-11-30  Mark Hahnenberg  <mhahnenberg@apple.com>
1979
1980         toStringCallback and valueOfCallback do not check the entire prototype chain for convertToType callback
1981         https://bugs.webkit.org/show_bug.cgi?id=73368
1982
1983         Reviewed by Darin Adler.
1984
1985         We need to search the entire prototype chain for the convertToType callback, rather than just calling whatever
1986         happens to be in the first class of the chain, which potentially could be null.
1987
1988         <rdar://problem/10493218>
1989
1990         * API/JSCallbackFunction.cpp:
1991         (JSC::JSCallbackFunction::toStringCallback):
1992         (JSC::JSCallbackFunction::valueOfCallback):
1993
1994 2011-11-29  Sam Weinig  <sam@webkit.org>
1995
1996         Add adoptCF and adoptNS convenience functions to RetainPtr.h
1997         https://bugs.webkit.org/show_bug.cgi?id=73399
1998
1999         Reviewed by Anders Carlsson.
2000
2001         * wtf/RetainPtr.h:
2002         (WTF::adoptCF):
2003         (WTF::adoptNS):
2004         These adoption functions match the pattern we use in other
2005         smart pointer classes.
2006
2007 2011-11-30  Adam Roben  <aroben@apple.com>
2008
2009         Fix RetainPtr's move assignment operators
2010
2011         Fixes <http://webkit.org/b/73449> RetainPtr's move assignment operators don't modify the
2012         pointer being assigned to
2013
2014         I didn't write a test for this because we don't have a way of unit testing C++11 code (see
2015         <http://webkit.org/b/73448>).
2016
2017         Reviewed by Anders Carlsson.
2018
2019         * wtf/RetainPtr.h:
2020         (WTF::RetainPtr::operator=): Adopt the passed-in RetainPtr's underlying pointer, not our own
2021         pointer.
2022
2023 2011-11-30  Csaba Osztrogonác  <ossy@webkit.org>
2024
2025         Unreviewed rolling out incorrect r101481.
2026
2027         * assembler/MIPSAssembler.h:
2028         * assembler/MacroAssemblerMIPS.h:
2029
2030 2011-11-30  Simon Hausmann  <simon.hausmann@nokia.com>
2031
2032         Fix compilation with MingW.
2033
2034         Reviewed by Csaba Osztrogonác.
2035
2036         * wtf/ThreadingWin.cpp:
2037         (WTF::initializeCurrentThreadInternal): MingW doesn't support MSVC exception handling, so for
2038         the time being make the thread name setting unimplemented for MingW.
2039
2040 2011-11-30  Simon Hausmann  <simon.hausmann@nokia.com>
2041
2042         Unreviewed propective build fix for Qt/Windows part 2 after r101477.
2043
2044         * wtf/ThreadSpecific.h: Fix the OS(WINDOWS) defines for the friend declaration for ThreadSpecific<T>::Data
2045
2046 2011-11-30  Simon Hausmann  <simon.hausmann@nokia.com>
2047
2048         Unreviewed propective build fix for Qt/Windows after r101477.
2049
2050         * wtf/ThreadSpecific.h: Use OS(WINDOWS) for declaring "destructor", as it's
2051         only referenced from within another OS(WINDOWS) section.
2052
2053 2011-11-30  Csaba Osztrogonác  <ossy@webkit.org>
2054
2055         Unreviewed speculative buildfix after r101457.
2056
2057         * assembler/MIPSAssembler.h:
2058         (JSC::MIPSAssembler::readCallTarget):
2059         * assembler/MacroAssemblerMIPS.h:
2060         (JSC::MacroAssemblerMIPS::readCallTarget):
2061
2062 2011-11-30  Andrew Wason  <rectalogic@rectalogic.com>
2063
2064         Replace Qt QThread threading back-end with pthread/Win32 threading back-ends
2065         https://bugs.webkit.org/show_bug.cgi?id=72155
2066
2067         Reviewed by Simon Hausmann.
2068
2069         Use ThreadingPthreads and ThreadingWin instead of ThreadingQt.
2070
2071         * heap/MachineStackMarker.cpp:
2072         * wtf/MainThread.cpp:
2073         (WTF::initializeMainThread):
2074         * wtf/Platform.h:
2075         * wtf/ThreadSpecific.h: Drop QThreadStorage related code.
2076         (WTF::::destroy):
2077         * wtf/ThreadingPrimitives.h:
2078         * wtf/qt/MainThreadQt.cpp: Drop Qt specific isMainThread().
2079         (WTF::initializeMainThreadPlatform): Initialize MainThreadInvoker on main thread to avoid infecting secondary thread with QAdoptedThread.
2080         (WTF::scheduleDispatchFunctionsOnMainThread):
2081         * wtf/qt/ThreadingQt.cpp: Removed.
2082         * wtf/wtf.pro:
2083
2084 2011-11-30  Csaba Osztrogonác  <ossy@webkit.org>
2085
2086         MacroAssemblerARM does not implement readCallTarget
2087         https://bugs.webkit.org/show_bug.cgi?id=73413
2088
2089         Based on Filip Pizlo's patch.
2090
2091         Buildfix. Rubber-stamped by Gabor Loki.
2092
2093         * assembler/ARMAssembler.h:
2094         (JSC::ARMAssembler::readCallTarget):
2095         * assembler/MacroAssemblerARM.h:
2096         (JSC::MacroAssemblerARM::readCallTarget):
2097
2098 2011-11-29  Filip Pizlo  <fpizlo@apple.com>
2099
2100         Resetting a put_by_id inline cache should preserve the "isDirect" bit
2101         https://bugs.webkit.org/show_bug.cgi?id=73375
2102
2103         Reviewed by Gavin Barraclough.
2104         
2105         For the replace case, we can find out if it was direct by looking at the
2106         slow call. For the transition case, we explicitly remember if it was
2107         direct.
2108
2109         * bytecode/CodeBlock.cpp:
2110         (JSC::printStructureStubInfo):
2111         * bytecode/StructureStubInfo.cpp:
2112         (JSC::StructureStubInfo::deref):
2113         (JSC::StructureStubInfo::visitWeakReferences):
2114         * bytecode/StructureStubInfo.h:
2115         (JSC::isPutByIdAccess):
2116         (JSC::StructureStubInfo::initPutByIdTransition):
2117         * dfg/DFGByteCodeParser.cpp:
2118         (JSC::DFG::ByteCodeParser::parseBlock):
2119         * dfg/DFGRepatch.cpp:
2120         (JSC::DFG::tryCachePutByID):
2121         * jit/JIT.h:
2122         * jit/JITPropertyAccess.cpp:
2123         (JSC::JIT::resetPatchPutById):
2124         (JSC::JIT::isDirectPutById):
2125         * jit/JITPropertyAccess32_64.cpp:
2126         (JSC::JIT::resetPatchPutById):
2127         * jit/JITStubs.cpp:
2128         (JSC::JITThunks::tryCachePutByID):
2129
2130 2011-11-29  Sam Weinig  <sam@webkit.org>
2131
2132         Remove RetainPtr::releaseRef
2133         https://bugs.webkit.org/show_bug.cgi?id=73396
2134
2135         Reviewed by Dan Bernstein.
2136
2137         * wtf/RetainPtr.h:
2138         Be gone releaseRef! Long live leakRef!
2139
2140 2011-11-29  Sam Weinig  <sam@webkit.org>
2141
2142         Add move semantics to RetainPtr
2143         https://bugs.webkit.org/show_bug.cgi?id=73393
2144
2145         Reviewed by Anders Carlsson.
2146
2147         * wtf/RetainPtr.h:
2148         (WTF::RetainPtr::RetainPtr):
2149         Add a move constructor and move enabled assignment operators
2150         to RetainPtr if the compiler being used supports rvalue
2151         references. If the compiler does not support it, we fallback
2152         to the copy semantics we have always had.
2153
2154 2011-11-29  Yuqiang Xian  <yuqiang.xian@intel.com>
2155
2156         DFG local CSE may cause incorrect reference counting for a node
2157         https://bugs.webkit.org/show_bug.cgi?id=73390
2158
2159         Reviewed by Filip Pizlo.
2160
2161         When performing a node substitution, the ref count of the replaced
2162         child will be increased, no matter whether the user node is skipped in
2163         code generation or not. This will cause the reference count of the
2164         replaced child never get the chance to become zero and so the
2165         registers occupied by it cannot be reused simply without spilling, if
2166         it's used by a "skipped" node.
2167         This is a 1% gain on V8 benchmark, tested on IA32 Linux.
2168
2169         * dfg/DFGPropagator.cpp:
2170         (JSC::DFG::Propagator::performSubstitution):
2171         (JSC::DFG::Propagator::performNodeCSE):
2172
2173 2011-11-29  David Levin  <levin@chromium.org>
2174
2175         Add a way to revert a variable to its previous value after leaving a scope.
2176         https://bugs.webkit.org/show_bug.cgi?id=73371
2177
2178         Reviewed by Adam Barth.
2179
2180         In case anyone from Chromium sees this, it is nearly identical to AutoReset
2181         but if the same name were used, it causes unnecessary ambiguity.
2182
2183         * JavaScriptCore.xcodeproj/project.pbxproj:
2184         * wtf/TemporarilyChange.h: Added.
2185         (WTF::TemporarilyChange::TemporarilyChange):
2186         (WTF::TemporarilyChange::~TemporarilyChange):
2187
2188 2011-11-29  Sam Weinig  <sam@webkit.org>
2189
2190         Add COMPILER_SUPPORTS macro to allow for compiler feature testing
2191         https://bugs.webkit.org/show_bug.cgi?id=73386
2192
2193         Reviewed by Anders Carlsson.
2194
2195         * wtf/Compiler.h:
2196         Add COMPILER_SUPPORTS and #defines for C++11 variadic templates and
2197         rvalue references for Clang.
2198
2199 2011-11-29  Oliver Hunt  <oliver@apple.com>
2200
2201         Allow WebCore to describe typed arrays to JSC
2202         https://bugs.webkit.org/show_bug.cgi?id=73355
2203
2204         Reviewed by Gavin Barraclough.
2205
2206         Allow globaldata to track the structure of typed arrays.
2207
2208         * runtime/JSGlobalData.h:
2209         (JSC::TypedArrayDescriptor::TypedArrayDescriptor):
2210
2211 2011-11-28  Filip Pizlo  <fpizlo@apple.com>
2212
2213         DFG debugCall() mechanism only works on X86 and X86-64
2214         https://bugs.webkit.org/show_bug.cgi?id=73282
2215
2216         Reviewed by Oliver Hunt.
2217
2218         * dfg/DFGAssemblyHelpers.h:
2219         (JSC::DFG::AssemblyHelpers::debugCall):
2220
2221 2011-11-28  Filip Pizlo  <fpizlo@apple.com>
2222
2223         DFG non-X86 ArithDiv does speculation failure after mutating state,
2224         without a value recovery
2225         https://bugs.webkit.org/show_bug.cgi?id=73286
2226
2227         Reviewed by Gavin Barraclough.
2228
2229         * dfg/DFGSpeculativeJIT32_64.cpp:
2230         (JSC::DFG::SpeculativeJIT::compile):
2231
2232 2011-11-28  Filip Pizlo  <fpizlo@apple.com>
2233
2234         Unreviewed build fixes for ARM.
2235
2236         * assembler/MacroAssemblerARMv7.h:
2237         (JSC::MacroAssemblerARMv7::readCallTarget):
2238         * dfg/DFGSpeculativeJIT.h:
2239         (JSC::DFG::SpeculativeJIT::setupArgumentsWithExecState):
2240
2241 2011-11-20  Roland Steiner  <rolandsteiner@chromium.org>
2242
2243         <style scoped>: add ENABLE(STYLE_SCOPED) flag to WebKit
2244         https://bugs.webkit.org/show_bug.cgi?id=72848
2245
2246         Add ENABLE_STYLE_SCOPED flag.
2247
2248         Reviewed by Dimitri Glazkov.
2249
2250         * Configurations/FeatureDefines.xcconfig:
2251
2252 2011-11-28  Jon Lee  <jonlee@apple.com>
2253
2254         Create skeleton framework for notifications support in WK2
2255         https://bugs.webkit.org/show_bug.cgi?id=73253
2256         <rdar://problem/10356943>
2257
2258         * Configurations/FeatureDefines.xcconfig: Split out ENABLE_NOTIFICATIONS based on platform.
2259
2260 2011-11-28  Oliver Hunt  <oliver@apple.com>
2261
2262         Fix windows build.
2263
2264         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2265
2266 2011-11-28  Oliver Hunt  <oliver@apple.com>
2267
2268         Fix gyp build
2269
2270         * JavaScriptCore.gypi:
2271
2272 2011-11-28  Filip Pizlo  <fpizlo@apple.com>
2273
2274         GetById should not always speculate cell
2275         https://bugs.webkit.org/show_bug.cgi?id=73181
2276
2277         Reviewed by Gavin Barraclough.
2278         
2279         GetById will now speculate cell if the predictions of the base are cell.
2280         Otherwise it will do like the old JIT (and like the old non-speculative
2281         DFG JIT): if not cell, go straight to slow-path but otherwise don't OSR
2282         out. This is a 1% speed-up on SunSpider.
2283
2284         * dfg/DFGAbstractState.cpp:
2285         (JSC::DFG::AbstractState::execute):
2286         * dfg/DFGOperations.cpp:
2287         * dfg/DFGOperations.h:
2288         * dfg/DFGSpeculativeJIT.h:
2289         (JSC::DFG::SpeculativeJIT::setupArgumentsWithExecState):
2290         (JSC::DFG::SpeculativeJIT::callOperation):
2291         * dfg/DFGSpeculativeJIT32_64.cpp:
2292         (JSC::DFG::SpeculativeJIT::cachedGetById):
2293         (JSC::DFG::SpeculativeJIT::compile):
2294         * dfg/DFGSpeculativeJIT64.cpp:
2295         (JSC::DFG::SpeculativeJIT::compile):
2296
2297 2011-11-28  Oliver Hunt  <oliver@apple.com>
2298
2299         Move typed array implementations into wtf
2300         https://bugs.webkit.org/show_bug.cgi?id=73248
2301
2302         Reviewed by Sam Weinig.
2303
2304         Move typed array implementation files from WebCore to wtf.  Inline the
2305         .cpp files for each of the array views to cut down on unnecessary exports
2306         and function call overhead for trivial operations.
2307
2308         Added files to all the project files.
2309
2310         * GNUmakefile.list.am:
2311         * JavaScriptCore.exp:
2312         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
2313         * JavaScriptCore.xcodeproj/project.pbxproj:
2314         * wtf/ArrayBuffer.cpp: Renamed from Source/WebCore/html/canvas/Float32Array.cpp.
2315         (WTF::ArrayBuffer::transfer):
2316         (WTF::ArrayBuffer::addView):
2317         (WTF::ArrayBuffer::removeView):
2318         * wtf/ArrayBuffer.h: Renamed from Source/WebCore/html/canvas/ArrayBuffer.cpp.
2319         (WTF::ArrayBufferContents::ArrayBufferContents):
2320         (WTF::ArrayBufferContents::data):
2321         (WTF::ArrayBufferContents::sizeInBytes):
2322         (WTF::ArrayBufferContents::transfer):
2323         (WTF::ArrayBuffer::~ArrayBuffer):
2324         (WTF::ArrayBuffer::clampValue):
2325         (WTF::ArrayBuffer::create):
2326         (WTF::ArrayBuffer::ArrayBuffer):
2327         (WTF::ArrayBuffer::data):
2328         (WTF::ArrayBuffer::byteLength):
2329         (WTF::ArrayBuffer::slice):
2330         (WTF::ArrayBuffer::sliceImpl):
2331         (WTF::ArrayBuffer::clampIndex):
2332         (WTF::ArrayBufferContents::tryAllocate):
2333         (WTF::ArrayBufferContents::~ArrayBufferContents):
2334         * wtf/ArrayBufferView.cpp: Copied from Source/WebCore/bindings/js/JSArrayBufferCustom.cpp.
2335         (WTF::ArrayBufferView::ArrayBufferView):
2336         (WTF::ArrayBufferView::~ArrayBufferView):
2337         (WTF::ArrayBufferView::neuter):
2338         * wtf/ArrayBufferView.h: Renamed from Source/WebCore/html/canvas/ArrayBufferView.h.
2339         (WTF::ArrayBufferView::isByteArray):
2340         (WTF::ArrayBufferView::isUnsignedByteArray):
2341         (WTF::ArrayBufferView::isShortArray):
2342         (WTF::ArrayBufferView::isUnsignedShortArray):
2343         (WTF::ArrayBufferView::isIntArray):
2344         (WTF::ArrayBufferView::isUnsignedIntArray):
2345         (WTF::ArrayBufferView::isFloatArray):
2346         (WTF::ArrayBufferView::isDoubleArray):
2347         (WTF::ArrayBufferView::isDataView):
2348         (WTF::ArrayBufferView::buffer):
2349         (WTF::ArrayBufferView::baseAddress):
2350         (WTF::ArrayBufferView::byteOffset):
2351         (WTF::ArrayBufferView::verifySubRange):
2352         (WTF::ArrayBufferView::clampOffsetAndNumElements):
2353         (WTF::ArrayBufferView::setImpl):
2354         (WTF::ArrayBufferView::setRangeImpl):
2355         (WTF::ArrayBufferView::zeroRangeImpl):
2356         (WTF::ArrayBufferView::calculateOffsetAndLength):
2357         * wtf/CMakeLists.txt:
2358         * wtf/Float32Array.h: Renamed from Source/WebCore/html/canvas/Float32Array.h.
2359         (WTF::Float32Array::set):
2360         (WTF::Float32Array::item):
2361         (WTF::Float32Array::isFloatArray):
2362         (WTF::Float32Array::create):
2363         (WTF::Float32Array::Float32Array):
2364         (WTF::Float32Array::subarray):
2365         * wtf/Float64Array.h: Renamed from Source/WebCore/html/canvas/Float64Array.h.
2366         (WTF::Float64Array::set):
2367         (WTF::Float64Array::item):
2368         (WTF::Float64Array::isDoubleArray):
2369         (WTF::Float64Array::create):
2370         (WTF::Float64Array::Float64Array):
2371         (WTF::Float64Array::subarray):
2372         * wtf/Int16Array.h: Renamed from Source/WebCore/html/canvas/Int16Array.cpp.
2373         (WTF::Int16Array::set):
2374         (WTF::Int16Array::isShortArray):
2375         (WTF::Int16Array::create):
2376         (WTF::Int16Array::Int16Array):
2377         (WTF::Int16Array::subarray):
2378         * wtf/Int32Array.h: Renamed from Source/WebCore/html/canvas/Int32Array.cpp.
2379         (WTF::Int32Array::set):
2380         (WTF::Int32Array::isIntArray):
2381         (WTF::Int32Array::create):
2382         (WTF::Int32Array::Int32Array):
2383         (WTF::Int32Array::subarray):
2384         * wtf/Int8Array.h: Renamed from Source/WebCore/html/canvas/Int8Array.cpp.
2385         (WTF::Int8Array::set):
2386         (WTF::Int8Array::isByteArray):
2387         (WTF::Int8Array::create):
2388         (WTF::Int8Array::Int8Array):
2389         (WTF::Int8Array::subarray):
2390         * wtf/IntegralTypedArrayBase.h: Renamed from Source/WebCore/html/canvas/IntegralTypedArrayBase.h.
2391         (WTF::IntegralTypedArrayBase::set):
2392         (WTF::IntegralTypedArrayBase::item):
2393         (WTF::IntegralTypedArrayBase::IntegralTypedArrayBase):
2394         * wtf/TypedArrayBase.h: Renamed from Source/WebCore/html/canvas/TypedArrayBase.h.
2395         (WTF::TypedArrayBase::data):
2396         (WTF::TypedArrayBase::set):
2397         (WTF::TypedArrayBase::setRange):
2398         (WTF::TypedArrayBase::zeroRange):
2399         (WTF::TypedArrayBase::length):
2400         (WTF::TypedArrayBase::byteLength):
2401         (WTF::TypedArrayBase::TypedArrayBase):
2402         (WTF::TypedArrayBase::create):
2403         (WTF::TypedArrayBase::subarrayImpl):
2404         * wtf/Uint16Array.h: Renamed from Source/WebCore/html/canvas/Uint16Array.cpp.
2405         (WTF::Uint16Array::set):
2406         (WTF::Uint16Array::isUnsignedShortArray):
2407         (WTF::Uint16Array::create):
2408         (WTF::Uint16Array::Uint16Array):
2409         (WTF::Uint16Array::subarray):
2410         * wtf/Uint32Array.h: Renamed from Source/WebCore/html/canvas/Uint32Array.cpp.
2411         (WTF::Uint32Array::set):
2412         (WTF::Uint32Array::isUnsignedIntArray):
2413         (WTF::Uint32Array::create):
2414         (WTF::Uint32Array::Uint32Array):
2415         (WTF::Uint32Array::subarray):
2416         * wtf/Uint8Array.h: Renamed from Source/WebCore/html/canvas/Uint8Array.h.
2417         (WTF::Uint8Array::set):
2418         (WTF::Uint8Array::isUnsignedByteArray):
2419         (WTF::Uint8Array::create):
2420         (WTF::Uint8Array::Uint8Array):
2421         (WTF::Uint8Array::subarray):
2422         * wtf/wtf.pro:
2423
2424 2011-11-27  Filip Pizlo  <fpizlo@apple.com>
2425
2426         Don't try to optimize huge code blocks
2427         https://bugs.webkit.org/show_bug.cgi?id=73187
2428
2429         Reviewed by Oliver Hunt.
2430         
2431         This unifies the heuristics used for deciding if a code block is too big
2432         to optimize, and sets this heuristic to 1000, which is intuitively better
2433         than numeric_limits<unsigned>::max(). It also results in what looks like
2434         a speed-up on both SunSpider and V8 (in Tools/Scripts/bencher).
2435
2436         * dfg/DFGCapabilities.h:
2437         (JSC::DFG::mightCompileEval):
2438         (JSC::DFG::mightCompileProgram):
2439         (JSC::DFG::mightCompileFunctionForCall):
2440         (JSC::DFG::mightCompileFunctionForConstruct):
2441         * runtime/Heuristics.cpp:
2442         (JSC::Heuristics::initializeHeuristics):
2443         * runtime/Heuristics.h:
2444
2445 2011-11-28  Filip Pizlo  <fpizlo@apple.com>
2446
2447         Either remove the GetMethod node from the DFG backend, or find a use for it
2448         https://bugs.webkit.org/show_bug.cgi?id=73178
2449
2450         Reviewed by Gavin Barraclough.
2451         
2452         More testing seemed to imply that the GetMethod code was indeed not profitable
2453         in any major test. So, it's probably best to just remove it.
2454
2455         * bytecode/CodeBlock.cpp:
2456         (JSC::MethodCallLinkInfo::reset):
2457         * dfg/DFGAbstractState.cpp:
2458         (JSC::DFG::AbstractState::execute):
2459         * dfg/DFGJITCompiler.cpp:
2460         (JSC::DFG::JITCompiler::link):
2461         * dfg/DFGJITCompiler.h:
2462         * dfg/DFGNode.h:
2463         (JSC::DFG::Node::hasIdentifier):
2464         (JSC::DFG::Node::hasHeapPrediction):
2465         * dfg/DFGOperations.cpp:
2466         * dfg/DFGOperations.h:
2467         * dfg/DFGPropagator.cpp:
2468         (JSC::DFG::Propagator::propagateNodePredictions):
2469         * dfg/DFGRepatch.cpp:
2470         * dfg/DFGRepatch.h:
2471         * dfg/DFGSpeculativeJIT.h:
2472         * dfg/DFGSpeculativeJIT32_64.cpp:
2473         (JSC::DFG::SpeculativeJIT::cachedGetById):
2474         (JSC::DFG::SpeculativeJIT::compile):
2475         * dfg/DFGSpeculativeJIT64.cpp:
2476         (JSC::DFG::SpeculativeJIT::cachedGetById):
2477         (JSC::DFG::SpeculativeJIT::compile):
2478
2479 2011-11-28  Michael Saboff  <msaboff@apple.com>
2480
2481         Change set 101187 from bug 73154 removed already lower case optimization
2482         https://bugs.webkit.org/show_bug.cgi?id=73174
2483
2484         Added back the "string is already lower case" optimization.
2485
2486         Reviewed by Geoffrey Garen.
2487
2488         * runtime/StringPrototype.cpp:
2489         (JSC::stringProtoFuncToLowerCase):
2490
2491 2011-11-28  Simon Hausmann  <simon.hausmann@nokia.com>
2492
2493         Unreviewed prospective build fix. Touch the file to trigger correct
2494         rebuild on the Qt mips/sh4/sl bot.
2495
2496         * wtf/unicode/qt4/UnicodeQt4.h:
2497
2498 2011-11-28  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
2499
2500         [Qt] Remove cruft from project file
2501
2502         Reviewed by Simon Hausmann.
2503
2504         * Target.pri:
2505
2506 2011-11-28  Simon Hausmann  <simon.hausmann@nokia.com>
2507
2508         [Qt] WTF should be built as separate static library
2509         https://bugs.webkit.org/show_bug.cgi?id=73201
2510
2511         Reviewed by Tor Arne Vestbø.
2512
2513         * Target.pri: Don't claim to build WTF, as that would cause
2514         the debug-with-shlibs build to not link in wtf.
2515         * jsc.pro: Require wtf.
2516         * wtf/wtf.pri: Removed.
2517         * wtf/wtf.pro: Added. Pro file to build wtf statically.
2518
2519 2011-11-28  Martin Robinson  <mrobinson@igalia.com>
2520
2521         [GTK] JavaScriptCore generated sources should build in the DerivedSources directory
2522         https://bugs.webkit.org/show_bug.cgi?id=73197
2523
2524         Reviewed by Philippe Normand.
2525
2526         Build all JavaScriptCore generated sources in DerivedSources.
2527
2528         * GNUmakefile.am: Update generation rules.
2529         * GNUmakefile.list.am: Update source lists.
2530
2531 2011-11-27  Filip Pizlo  <fpizlo@apple.com>
2532
2533         DFG should not emit GetMethod node
2534         https://bugs.webkit.org/show_bug.cgi?id=73175
2535
2536         Reviewed by Gavin Barraclough.
2537         
2538         Replaces all instances of the GetMethod node with GetById. This appears to
2539         be a slight win on V8. This patch leaves GetMethod support in the code-base,
2540         making this decision easy to reverse, for now.
2541
2542         * dfg/DFGByteCodeParser.cpp:
2543         (JSC::DFG::ByteCodeParser::parseBlock):
2544
2545 2011-11-26  Hajime Morrita  <morrita@chromium.org>
2546
2547         Needs WTF_INLINE and JS_INLINE
2548         https://bugs.webkit.org/show_bug.cgi?id=72853
2549
2550         Reviewed by Kevin Ollivier.
2551
2552         Added WTF_HIDDEN, WTF_INLINE and JS_INLINE which
2553         indirect __attribute__((visibility("hidden"))
2554
2555         * config.h:
2556         * wtf/ExportMacros.h:
2557
2558 2011-11-25  Michael Saboff  <msaboff@apple.com>
2559
2560         String.prototype.toLower should be optimized for 8 bit strings
2561         https://bugs.webkit.org/show_bug.cgi?id=73154
2562
2563         Changed stringProtoFuncToLowerCase to use StringImpl::lower() which has
2564         been optimized for 8 bit strings.
2565
2566         This is worth ~7% to sunspider string.tagcloud.
2567
2568         Reviewed by Filip Pizlo.
2569
2570         * runtime/StringPrototype.cpp:
2571         (JSC::stringProtoFuncToLowerCase):
2572
2573 2011-11-25  Michael Saboff  <msaboff@apple.com>
2574
2575         Array.toString always uses StringImpl::characters()
2576         https://bugs.webkit.org/show_bug.cgi?id=72969
2577
2578         If all component strings are 8 bit, create an 8 bit result string for toString().
2579
2580         This appears to be performance neutral to sunspider and v8.
2581
2582         Reviewed by Filip Pizlo.
2583
2584         * runtime/ArrayPrototype.cpp:
2585         (JSC::arrayProtoFuncToString):
2586
2587 2011-11-24  Michael Saboff  <msaboff@apple.com>
2588
2589         UString methods are not character size aware
2590         https://bugs.webkit.org/show_bug.cgi?id=72975
2591
2592         Changed the UString number constructors to build 8 bit strings.
2593         Modified the other methods to check string bitness and process
2594         with 8 bits wherre appropriate.
2595
2596         * runtime/UString.cpp:
2597         (JSC::UString::number):
2598         (JSC::operator==):
2599         (JSC::operator<):
2600         (JSC::UString::ascii):
2601
2602 2011-11-24  Michael Saboff  <msaboff@apple.com>
2603
2604         JavaScript string to number conversion functions use characters()
2605         https://bugs.webkit.org/show_bug.cgi?id=72974
2606
2607         Change the various JS to number routines to process strings
2608         using characters8() or characters16() as appropriate.
2609         Implemented using static template methods.
2610
2611         Reviewed by Filip Pizlo.
2612
2613         * runtime/JSGlobalObjectFunctions.cpp:
2614         (JSC::isInfinity):
2615         (JSC::jsHexIntegerLiteral):
2616         (JSC::jsStrDecimalLiteral):
2617         (JSC::toDouble):
2618         (JSC::jsToNumber):
2619
2620 2011-11-24  Michael Saboff  <msaboff@apple.com>
2621
2622         Empty JSStrings are created as 16 bit
2623         https://bugs.webkit.org/show_bug.cgi?id=72968
2624
2625         Clear m_is8Bit flag for empty strings.
2626
2627         Reviewed by Filip Pizlo.
2628
2629         * runtime/JSString.h:
2630         (JSC::RopeBuilder::finishCreation):
2631
2632 2011-11-24  Michael Saboff  <msaboff@apple.com>
2633
2634         Tune JSStringBuilder for 8 bit Strings
2635         https://bugs.webkit.org/show_bug.cgi?id=72683
2636
2637         Changed JSStringBuilder to use 8 bit buffers until 16 bit data is added.
2638         When 16 bit data is to be added, the 8 bit buffer is converted to 16 bit
2639         and building continues with a 16 bit buffer.
2640
2641         Reviewed by Filip Pizlo.
2642
2643         * runtime/JSStringBuilder.h:
2644         (JSC::JSStringBuilder::JSStringBuilder):
2645         (JSC::JSStringBuilder::append):
2646         (JSC::JSStringBuilder::upConvert):
2647         (JSC::JSStringBuilder::build):
2648         * runtime/UString.h:
2649         (JSC::UString::adopt):
2650         * wtf/text/StringImpl.h:
2651         (WTF::StringImpl::adopt):
2652
2653 2011-11-24  Zeno Albisser  <zeno@webkit.org>
2654
2655         [Qt]WK2][Mac] Use Mac port's IPC implementation instead of Unix sockets
2656         https://bugs.webkit.org/show_bug.cgi?id=72495
2657
2658         Update defines to not use Unix Domain Sockets for platform Qt on Mac.
2659         This enables Qt to reuse existing code for mach ports and Grand
2660         Central Dispatch based IPC.
2661
2662         Reviewed by Simon Hausmann.
2663
2664         * wtf/Platform.h:
2665
2666 2011-11-24  Simon Hausmann  <simon.hausmann@nokia.com>
2667
2668         [Qt] REGRESSION(r101131): WTF::scheduleDispatchFunctionsOnMainThread() doesn't work reliably
2669
2670         Reviewed by Andreas Kling.
2671
2672         We must make sure that the MainThreadInvoker object lives in the gui thread. There are a few
2673         ways of doing that and this fix seems like the least intrusive one by simply pushing the
2674         invoker to the gui thread if it's not there already.
2675
2676         * wtf/qt/MainThreadQt.cpp:
2677         (WTF::scheduleDispatchFunctionsOnMainThread):
2678
2679 2011-11-24  Patrick Gansterer  <paroga@webkit.org>
2680
2681         [Qt] Use QEvent for dispatchFunctionsFromMainThread()
2682         https://bugs.webkit.org/show_bug.cgi?id=72704
2683
2684         Reviewed by Simon Hausmann.
2685
2686         Replace QMetaObject::invokeMethod with QCoreApplication::postEvent.
2687         This is the same as what invokeMethod does internally, but reduces
2688         the dependency on some internal QThread stuff.
2689
2690         * wtf/qt/MainThreadQt.cpp:
2691         (WTF::MainThreadInvoker::MainThreadInvoker):
2692         (WTF::MainThreadInvoker::event):
2693         (WTF::scheduleDispatchFunctionsOnMainThread):
2694
2695 2011-11-23  George Staikos  <staikos@webkit.org>
2696
2697         Remove BlackBerry OS support from RandomNumberSeed, making QNX=UNIX.
2698         https://bugs.webkit.org/show_bug.cgi?id=73028
2699
2700         Reviewed by Daniel Bates.
2701
2702         * wtf/RandomNumberSeed.h:
2703         (WTF::initializeRandomNumberGenerator):
2704
2705 2011-11-23  Nikolas Zimmermann  <nzimmermann@rim.com>
2706
2707         Add flags/precision arguments to String::number(double) to allow fine-grained control over the result string
2708         https://bugs.webkit.org/show_bug.cgi?id=72793
2709
2710         Reviewed by Zoltan Herczeg.
2711
2712         This new code will be used in follow-up patches to replace the String::format("%.2f") usage in
2713         platform/text/TextStream.cpp, and String::format("%.6lg") usage in svg/SVGPathStringBuilder.cpp.
2714
2715         The String::number(double) currently calls String::format("%.6lg") in trunk. In order to replace
2716         this by a variant that properly rounds to six significant figures, JSC code could be refactored.
2717         JSCs Number.toPrecision/toFixed uses wtf/dtoa/double-conversion which provides all features we need,
2718         except truncating trailing zeros, needed to mimic the "g" format, which is either f or e but with
2719         trailing zeros removed, producing shorter results. Changed the default signature to:
2720
2721         "static String number(double, unsigned = ShouldRoundSignificantFigures | ShouldTruncateTrailingZeros, unsigned precision = 6);".
2722
2723         In WebCore we can now replace String::format() calls like this:
2724         String::format("%.2f", f) -> String::number(f, ShouldRoundDecimalPlaces, 2)
2725         String::format("%.6lg", f) -> String::number(f)
2726
2727         The default parameters for precison & flags exactly match the format of the string produced now, except that the result
2728         is rounded according to the rounding mode / formatting mode and precision. This paves the way towards reliable results
2729         in the d="" attribute dumps of SVG paths  across platforms. The dtoa rounding code enforces a unique zero, resolving
2730         all 0.0 vs. -0.0 issues currently seen on Windows, and some Gtk/Qt bots.
2731
2732         This patch needs a rebaseline of svg/dom/length-list-parser.html as we don't perfecly mimic the String::format() "lg" mode
2733         result for exponentials, we used to return eg. "e-7" and now return "e-07" - the trailing zero truncation hasn't been
2734         implemented for exponentials, as this really affects only this test and thus wasn't worth the trouble - in contrary the
2735         trailing zero truncation is needed for thousands of other results in "f" notation, and thus needed to match the DRT results.
2736
2737         Here's a performance comparision using a JSC release build and some arbitary numbers:
2738         Converting 123.456 using old approach took 95.527100ms. avg 0.000955ms/call.
2739         Converting 123.456 using new approach took 28.126953ms. avg 0.000281ms/call.
2740
2741         Converting 123 using old approach took 85.411133ms. avg 0.000854ms/call.
2742         Converting 123 using new approach took 24.190186ms. avg 0.000242ms/call.
2743
2744         Converting 0.1 using old approach took 92.622803ms. avg 0.000926ms/call.
2745         Converting 0.1 using new approach took 23.317871ms. avg 0.000233ms/call.
2746
2747         Converting 1/i using old approach took 106.893066ms. avg 0.001069ms/call.
2748         Converting 1/i using new approach took 27.164062ms. avg 0.000272ms/call.
2749
2750         For all numbers I've tested in RoundingSignificantFigures mode and 6 digit precision the speedup was at least 250%.
2751
2752         * JavaScriptCore.exp: Change String::number(double) signature.
2753         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Ditto.
2754         * runtime/NumberPrototype.cpp:
2755         (JSC::numberProtoFuncToFixed): Refactor this into numberToFixedPrecisionString(), move to wtf/dtoa.cpp.
2756         (JSC::numberProtoFuncToPrecision): Ditto, refactor this into numberToFixedWidthString.
2757         * wtf/dtoa.cpp: Moved fixedWidth/Precision helpers into dtoa, extend numberToFixedPrecisionString(). Add a mode which allows to truncate trailing zeros/decimal point.
2758                         to make it possible to use them to generate strings that match the output from String::format("%6.lg"), while using our dtoas rounding facilities.
2759         * wtf/dtoa.h:
2760         * wtf/dtoa/utils.h: Expose new helper method, which allows us to truncate the result, before generating the output const char*.
2761         (WTF::double_conversion::StringBuilder::SetPosition):
2762         * wtf/text/WTFString.cpp:
2763         (WTF::String::number): Remove String::format("%6.lg") usage! Switch to rounding to six significant figures, while matching the output of String::format.
2764         * wtf/text/WTFString.h:
2765
2766 2011-11-23  Hajime Morrita  <morrita@chromium.org>
2767
2768         WTF::String has extra WTF_EXPORT_PRIVATE
2769         https://bugs.webkit.org/show_bug.cgi?id=72858
2770
2771         Reviewed by Kevin Ollivier.
2772
2773         * wtf/text/WTFString.h:
2774         (WTF::String::String):
2775
2776 2011-11-23  Raphael Kubo da Costa  <kubo@profusion.mobi>
2777
2778         [CMake] Move the top-level logic to the top-level directory.
2779         https://bugs.webkit.org/show_bug.cgi?id=72685
2780
2781         Reviewed by Brent Fulgham.
2782
2783         * CMakeLists.txt: Point to the right Source/ directory.
2784         * wtf/CMakeLists.txt: Ditto.
2785
2786 2011-11-22  Yuqiang Xian  <yuqiang.xian@intel.com>
2787
2788         Strength reduction for Mul and Mod operations for known constants in DFG
2789         https://bugs.webkit.org/show_bug.cgi?id=72878
2790
2791         Reviewed by Filip Pizlo.
2792
2793         Also the code should be commonly shared by both 32_64 and 64.
2794
2795         * dfg/DFGNode.h:
2796         (JSC::DFG::nodeMayOverflow):
2797         * dfg/DFGSpeculativeJIT.cpp:
2798         (JSC::DFG::fmodAsDFGOperation):
2799         (JSC::DFG::SpeculativeJIT::compileInstanceOf):
2800         (JSC::DFG::isPowerOfTwo):
2801         (JSC::DFG::logTwo):
2802         (JSC::DFG::SpeculativeJIT::compileSoftModulo):
2803         (JSC::DFG::SpeculativeJIT::compileArithMul):
2804         (JSC::DFG::SpeculativeJIT::compileArithMod):
2805         * dfg/DFGSpeculativeJIT.h:
2806         * dfg/DFGSpeculativeJIT32_64.cpp:
2807         (JSC::DFG::SpeculativeJIT::compile):
2808         * dfg/DFGSpeculativeJIT64.cpp:
2809         (JSC::DFG::SpeculativeJIT::compile):
2810
2811 2011-11-22  Daniel Bates  <dbates@rim.com>
2812
2813         Add WTF infrastructure for the BlackBerry port
2814         https://bugs.webkit.org/show_bug.cgi?id=72970
2815
2816         Reviewed by Antonio Gomes.
2817
2818         * wtf/Assertions.cpp: Added BlackBerry-specific logging directive.
2819         * wtf/MathExtras.h:
2820         (abs): Added; stdlib doesn't contain abs() on QNX.
2821         * wtf/Platform.h: Define WTF_PLATFORM_BLACKBERRY and enable some platform features.
2822         * wtf/RandomNumberSeed.h:
2823         (WTF::initializeRandomNumberGenerator): For the BlackBerry port, we initialize
2824         the bad pseudo random number generator using time(3) before initializing the
2825         Mersenne Twister random number generator.
2826         * wtf/ThreadingPthreads.cpp:
2827         (WTF::createThreadInternal): Added.
2828         * wtf/blackberry: Added.
2829         * wtf/blackberry/MainThreadBlackBerry.cpp: Added.
2830         (WTF::initializeMainThreadPlatform):
2831         (WTF::scheduleDispatchFunctionsOnMainThread):
2832         * wtf/text/WTFString.h: Added constructor and conversion operator for
2833         BlackBerry WebString string object.
2834
2835 2011-11-22  Sheriff Bot  <webkit.review.bot@gmail.com>
2836
2837         Unreviewed, rolling out r100988.
2838         http://trac.webkit.org/changeset/100988
2839         https://bugs.webkit.org/show_bug.cgi?id=72941
2840
2841         "Broke pixel tests on Chromium-Linux" (Requested by kbalazs on
2842         #webkit).
2843
2844         * JavaScriptCore.gypi:
2845         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2846         * wtf/ParallelJobs.h:
2847         * wtf/ParallelJobsGeneric.cpp:
2848         * wtf/ParallelJobsGeneric.h:
2849         (WTF::ParallelEnvironment::ParallelEnvironment):
2850         (WTF::ParallelEnvironment::execute):
2851         * wtf/Platform.h:
2852
2853 2011-11-21  Balazs Kelemen  <kbalazs@webkit.org>
2854
2855         Enable ParallelJobs by default
2856         https://bugs.webkit.org/show_bug.cgi?id=70032
2857
2858         Reviewed by Zoltan Herczeg.
2859
2860         According to measurements on Mac and Linux it is a
2861         considerable speedup for SVG on multicore.
2862
2863         Remove the ENABLE(PARALLEL_JOBS) guard.
2864         Fix build on Windows and Chromium.
2865
2866         * JavaScriptCore.gypi:  Add the files to the build. It was
2867         missing for the gyp build system.
2868         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2869         Export symbols.
2870         * wtf/ParallelJobs.h:
2871         * wtf/ParallelJobsGeneric.cpp:
2872         (WTF::ParallelEnvironment::ParallelEnvironment):
2873         (WTF::ParallelEnvironment::execute):
2874         Deinline these to avoid exporting a lot of symbols.
2875         These are non-trivial and called only once on a given object
2876         so it doesn't seems to be worthwile to inline them.
2877         Additionally fix a signed-unsigned comparison in the constructor.
2878         * wtf/ParallelJobsGeneric.h:
2879         * wtf/Platform.h:
2880
2881 2011-11-21  Filip Pizlo  <fpizlo@apple.com>
2882
2883         DFG should have richer debug output for CFA and phi processing
2884         https://bugs.webkit.org/show_bug.cgi?id=72922
2885
2886         Reviewed by Gavin Barraclough.
2887         
2888         In the default verbose mode, we now print information about variable
2889         state at the bottom of basic blocks in addition to the top, and we
2890         also print local variable linking. In the verbose propagation mode,
2891         the state of phi processing is dumped more richly and CFA merging (the
2892         most subtle part of CFA) is traced as well.
2893
2894         * dfg/DFGAbstractState.cpp:
2895         (JSC::DFG::AbstractState::endBasicBlock):
2896         (JSC::DFG::AbstractState::mergeStateAtTail):
2897         * dfg/DFGAbstractValue.h:
2898         (JSC::DFG::StructureAbstractValue::dump):
2899         (JSC::DFG::AbstractValue::dump):
2900         * dfg/DFGByteCodeParser.cpp:
2901         (JSC::DFG::ByteCodeParser::processPhiStack):
2902         (JSC::DFG::ByteCodeParser::parse):
2903         * dfg/DFGCommon.h:
2904         (JSC::DFG::NodeIndexTraits::dump):
2905         * dfg/DFGDriver.cpp:
2906         (JSC::DFG::compile):
2907         * dfg/DFGGraph.cpp:
2908         (JSC::DFG::Graph::dump):
2909         * dfg/DFGNode.h:
2910         (JSC::DFG::Node::dumpChildren):
2911         * dfg/DFGOSRExitCompiler.cpp:
2912         * dfg/DFGOperands.h:
2913         (JSC::DFG::OperandValueTraits::dump):
2914         (JSC::DFG::dumpOperands):
2915
2916 2011-11-21  Filip Pizlo  <fpizlo@apple.com>
2917
2918         Showing the data overlay in OpenStreetMap doesn't work, zooming partially broken
2919         https://bugs.webkit.org/show_bug.cgi?id=71505
2920
2921         Reviewed by Gavin Barraclough.
2922         
2923         It turns out that we were corrupting phi nodes in case of overflow. The bug is
2924         really obvious, but producing a test case that causes the badness is hard. Even
2925         when the phi nodes do get corrupt, there's more that has to happen before it
2926         causes incorrect execution - and I wasn't able to reproduce in any kind of
2927         sensible reduced case.
2928
2929         * dfg/DFGByteCodeParser.cpp:
2930         (JSC::DFG::ByteCodeParser::processPhiStack):
2931
2932 2011-11-21  Simon Hausmann  <simon.hausmann@nokia.com>
2933
2934         [Qt] Speed up debug builds.
2935         https://bugs.webkit.org/show_bug.cgi?id=72882
2936
2937         Reviewed by Tor Arne Vestbø.
2938
2939         * Target.pri: Make BUILDING_JavaScriptCore available earlier, so it can be
2940         used by the build system.
2941
2942 2011-11-21  Sheriff Bot  <webkit.review.bot@gmail.com>
2943
2944         Unreviewed, rolling out r100913.
2945         http://trac.webkit.org/changeset/100913
2946         https://bugs.webkit.org/show_bug.cgi?id=72885
2947
2948         "Break Windows build" (Requested by kbalazs on #webkit).
2949
2950         * JavaScriptCore.gypi:
2951         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2952         * wtf/ParallelJobs.h:
2953         * wtf/ParallelJobsGeneric.cpp:
2954         * wtf/ParallelJobsGeneric.h:
2955         (WTF::ParallelEnvironment::ParallelEnvironment):
2956         (WTF::ParallelEnvironment::execute):
2957         * wtf/Platform.h:
2958
2959 2011-11-21  Balazs Kelemen  <kbalazs@webkit.org>
2960
2961         Enable ParallelJobs by default
2962         https://bugs.webkit.org/show_bug.cgi?id=70032
2963
2964         Reviewed by Zoltan Herczeg.
2965
2966         According to measurements on Mac and Linux it is a
2967         considerable speedup for SVG on multicore.
2968
2969         Remove the ENABLE(PARALLEL_JOBS) guard.
2970         Fix build on Windows and Chromium.
2971
2972         * JavaScriptCore.gypi:  Add the files to the build. It was
2973         missing for the gyp build system.
2974         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2975         Export symbols.
2976         * wtf/ParallelJobs.h:
2977         * wtf/ParallelJobsGeneric.cpp:
2978         (WTF::ParallelEnvironment::ParallelEnvironment):
2979         (WTF::ParallelEnvironment::execute):
2980         Deinline these to avoid exporting a lot of symbols.
2981         These are non-trivial and called only once on a given object
2982         so it doesn't seems to be worthwile to inline them.
2983         Additionally fix a signed-unsigned comparison in the constructor.
2984         * wtf/ParallelJobsGeneric.h:
2985         * wtf/Platform.h:
2986
2987 2011-11-21  Andy Wingo  <wingo@igalia.com>
2988
2989         Add .dir-locals.el file for better Emacs defaults
2990         https://bugs.webkit.org/show_bug.cgi?id=72483
2991
2992         Reviewed by Xan Lopez.
2993
2994         * .dir-locals.el: Set appropriate directory-local variables for Emacs.
2995
2996 2011-11-21  Filip Pizlo  <fpizlo@apple.com>
2997         
2998         Another attempt at a build fix.
2999
3000         * dfg/DFGRepatch.h:
3001         (JSC::DFG::dfgResetGetByID):
3002         (JSC::DFG::dfgResetPutByID):
3003
3004 2011-11-20  Filip Pizlo  <fpizlo@apple.com>
3005
3006         Unreviewed interpreter build fix.
3007
3008         * bytecode/CodeBlock.cpp:
3009         (JSC::CodeBlock::finalizeUnconditionally):
3010         * dfg/DFGRepatch.h:
3011
3012 2011-11-20  Yuqiang Xian  <yuqiang.xian@intel.com>
3013
3014         Improve modulo operation on 32bit platforms
3015         https://bugs.webkit.org/show_bug.cgi?id=72501
3016
3017         Reviewed by Filip Pizlo.
3018
3019         Extend softModulo to support X86 and MIPS in baseline JIT.
3020         Apply the same optimization to 32bit DFG JIT.
3021         1% gain on Kraken, tested on Linux Core i7 Nehalem 32bit.
3022
3023         * dfg/DFGSpeculativeJIT.h:
3024         * dfg/DFGSpeculativeJIT32_64.cpp:
3025         (JSC::DFG::SpeculativeJIT::compileSoftModulo):
3026         (JSC::DFG::SpeculativeJIT::compile):
3027         * jit/JITArithmetic32_64.cpp:
3028         (JSC::JIT::emit_op_mod):
3029         (JSC::JIT::emitSlow_op_mod):
3030         * jit/JITOpcodes32_64.cpp:
3031         (JSC::JIT::softModulo):
3032         * wtf/Platform.h:
3033
3034 2011-11-18  Filip Pizlo  <fpizlo@apple.com>
3035
3036         Inline caches that refer to otherwise dead objects should be cleared
3037         https://bugs.webkit.org/show_bug.cgi?id=72311
3038
3039         Reviewed by Geoff Garen.
3040
3041         DFG code blocks now participate in the weak reference harvester fixpoint
3042         so that they only consider themselves to be live if either they are
3043         currently executing, or their owner is live and all of their weak references
3044         are live. If not, the relevant code blocks are jettisoned.
3045
3046         Inline caches in both the old JIT and the DFG are now cleared if any of
3047         their references are not marked at the end of a GC.
3048
3049         This is performance-neutral on SunSpider, V8, and Kraken. With the clear-
3050         all-code-on-GC policy that we currently have, it shows a slight reduction
3051         in memory usage. If we turn that policy off, it's pretty easy to come up
3052         with an example program that will cause ToT to experience linear heap
3053         growth, while with this patch, the heap stays small and remains at a
3054         constant size.
3055
3056         * assembler/ARMv7Assembler.h:
3057         (JSC::ARMv7Assembler::readCallTarget):
3058         * assembler/MacroAssemblerARMv7.h:
3059         (JSC::MacroAssemblerARMv7::readCallTarget):
3060         * assembler/MacroAssemblerX86.h:
3061         (JSC::MacroAssemblerX86::readCallTarget):
3062         * assembler/MacroAssemblerX86_64.h:
3063         (JSC::MacroAssemblerX86_64::readCallTarget):
3064         * bytecode/CodeBlock.cpp:
3065         (JSC::CodeBlock::visitAggregate):
3066         (JSC::CodeBlock::performTracingFixpointIteration):
3067         (JSC::CodeBlock::visitWeakReferences):
3068         (JSC::CodeBlock::finalizeUnconditionally):
3069         (JSC::CodeBlock::stronglyVisitStrongReferences):
3070         (JSC::MethodCallLinkInfo::reset):
3071         (JSC::ProgramCodeBlock::jettison):
3072         (JSC::EvalCodeBlock::jettison):
3073         (JSC::FunctionCodeBlock::jettison):
3074         * bytecode/CodeBlock.h:
3075         (JSC::CodeBlock::reoptimize):
3076         (JSC::CodeBlock::shouldImmediatelyAssumeLivenessDuringScan):
3077         * bytecode/Instruction.h:
3078         (JSC::PolymorphicAccessStructureList::visitWeak):
3079         * bytecode/StructureStubInfo.cpp:
3080         (JSC::StructureStubInfo::visitWeakReferences):
3081         * bytecode/StructureStubInfo.h:
3082         (JSC::isGetByIdAccess):
3083         (JSC::isPutByIdAccess):
3084         (JSC::StructureStubInfo::reset):
3085         * dfg/DFGJITCompiler.cpp:
3086         (JSC::DFG::JITCompiler::link):
3087         * dfg/DFGOperations.cpp:
3088         * dfg/DFGRepatch.cpp:
3089         (JSC::DFG::dfgRepatchByIdSelfAccess):
3090         (JSC::DFG::dfgResetGetByID):
3091         (JSC::DFG::dfgResetPutByID):
3092         * dfg/DFGRepatch.h:
3093         (JSC::DFG::dfgResetGetByID):
3094         (JSC::DFG::dfgResetPutByID):
3095         * jit/JIT.h:
3096         * jit/JITPropertyAccess.cpp:
3097         (JSC::JIT::resetPatchGetById):
3098         (JSC::JIT::resetPatchPutById):
3099         * jit/JITPropertyAccess32_64.cpp:
3100         (JSC::JIT::resetPatchGetById):
3101         (JSC::JIT::resetPatchPutById):
3102         * jit/JITStubs.cpp:
3103         (JSC::DEFINE_STUB_FUNCTION):
3104         * jit/JITWriteBarrier.h:
3105         (JSC::JITWriteBarrierBase::clearToMaxUnsigned):
3106
3107 2011-11-20  Filip Pizlo  <fpizlo@apple.com>
3108
3109         Showing the data overlay in OpenStreetMap doesn't work, zooming partially broken
3110         https://bugs.webkit.org/show_bug.cgi?id=71505
3111
3112         Reviewed by Oliver Hunt.
3113         
3114         The bytecode generator was assuming that call_varargs never reuses the base register
3115         (i.e. the function being called) for the result. This is no longer true.
3116
3117         * bytecompiler/BytecodeGenerator.cpp:
3118         (JSC::BytecodeGenerator::emitCallVarargs):
3119         * bytecompiler/BytecodeGenerator.h:
3120         * bytecompiler/NodesCodegen.cpp:
3121         (JSC::ApplyFunctionCallDotNode::emitBytecode):
3122
3123 2011-11-20  Filip Pizlo  <fpizlo@apple.com>
3124
3125         DFG 32_64 should directly store double virtual registers on SetLocal
3126         https://bugs.webkit.org/show_bug.cgi?id=72845
3127
3128         Reviewed by Oliver Hunt.
3129         
3130         2% win on Kraken.
3131
3132         * dfg/DFGSpeculativeJIT32_64.cpp:
3133         (JSC::DFG::SpeculativeJIT::compile):
3134
3135 2011-11-20  Noel Gordon  <noel.gordon@gmail.com>
3136
3137         [chromium] Remove DFG::JITCodeGenerator from the gyp projects
3138         https://bugs.webkit.org/show_bug.cgi?id=72842
3139
3140         Reviewed by Filip Pizlo.
3141
3142         dfg/DFGJITCodeGenerator.{h,cpp} were removed in r100244
3143
3144         * JavaScriptCore.gypi: remove dfg/DFGJITCodeGenerator.{h,cpp}
3145
3146 2011-11-18  Daniel Bates  <dbates@rim.com>
3147
3148         Add CMake build infrastructure for the BlackBerry port
3149         https://bugs.webkit.org/show_bug.cgi?id=72768
3150
3151         Reviewed by Antonio Gomes.
3152
3153         * PlatformBlackBerry.cmake: Added.
3154         * shell/PlatformBlackBerry.cmake: Added.
3155         * wtf/PlatformBlackBerry.cmake: Added.
3156
3157 2011-11-18  Filip Pizlo  <fpizlo@apple.com>
3158
3159         DFG JIT fails speculation on InstanceOf if the base is not an object
3160         https://bugs.webkit.org/show_bug.cgi?id=72709
3161
3162         Reviewed by Geoff Garen.
3163         
3164         InstanceOf already leverages the fact that we only allow the default
3165         hasInstance implementation. So, if the base is predicted to possibly
3166         be not an object and the CFA has not yet proven otherwise, InstanceOf
3167         will abstain from speculating cell and instead return false if the
3168         base is not a cell.
3169         
3170         This appears to be a 1% speed-up on V8 on the V8 harness. 3-4% or so
3171         speed-up in earley-boyer. Neutral according to bencher on SunSpider,
3172         V8, and Kraken. In 32-bit, it's a 0.5% win on SunSpider and a 1.9%
3173         win on V8 even on my harness, due to a 12.5% win on earley-boyer.
3174         
3175         I also took this opportunity to make the code for InstanceOf common
3176         between the two JITs. This was partially successful, in that the
3177         "common code" has a bunch of #if's, but overall it seems like a code
3178         size reduction.
3179
3180         * dfg/DFGAbstractState.cpp:
3181         (JSC::DFG::AbstractState::execute):
3182         * dfg/DFGSpeculativeJIT.cpp:
3183         (JSC::DFG::SpeculativeJIT::compileInstanceOfForObject):
3184         (JSC::DFG::SpeculativeJIT::compileInstanceOf):
3185         * dfg/DFGSpeculativeJIT.h:
3186         * dfg/DFGSpeculativeJIT32_64.cpp:
3187         (JSC::DFG::SpeculativeJIT::compile):
3188         * dfg/DFGSpeculativeJIT64.cpp:
3189         (JSC::DFG::SpeculativeJIT::compile):
3190
3191 2011-11-18  Mark Hahnenberg  <mhahnenberg@apple.com>
3192
3193         Forgot to completely de-virtualize isDynamicScope
3194         https://bugs.webkit.org/show_bug.cgi?id=72763
3195
3196         Reviewed by Darin Adler.
3197
3198         * runtime/JSActivation.h: Removed virtual keyword.
3199
3200 2011-11-18  Filip Pizlo  <fpizlo@apple.com>
3201
3202         Crash in JSC::DFG::OSRExitCompiler::compileExit(JSC::DFG::OSRExit const&, JSC::DFG::SpeculationRecovery*)
3203         https://bugs.webkit.org/show_bug.cgi?id=72292
3204
3205         Reviewed by Darin Adler.
3206         
3207         Fix this for 32_64.
3208
3209         * dfg/DFGOSRExitCompiler32_64.cpp:
3210         (JSC::DFG::OSRExitCompiler::compileExit):
3211
3212 2011-11-18  Mark Hahnenberg  <mhahnenberg@apple.com>
3213
3214         De-virtualize ExecutableBase::intrinsic
3215         https://bugs.webkit.org/show_bug.cgi?id=72548
3216
3217         Reviewed by Oliver Hunt.
3218
3219         * runtime/Executable.cpp:
3220         (JSC::ExecutableBase::intrinsic): Dynamic cast to NativeExecutable. If successful, call intrinsic, otherwise return default value. 
3221         * runtime/Executable.h:
3222         * runtime/JSCell.h:
3223         (JSC::jsDynamicCast): Add jsDynamicCast that duplicates the functionality of dynamic_cast in C++ but uses ClassInfo
3224         rather than requiring C++ RTTI.
3225
3226 2011-11-18  Patrick Gansterer  <paroga@webkit.org>
3227
3228         [CMake] Remove duplicate dtoa files from CMakeLists.txt
3229         https://bugs.webkit.org/show_bug.cgi?id=72711
3230
3231         Reviewed by Brent Fulgham.
3232
3233         * wtf/CMakeLists.txt:
3234
3235 2011-11-17  Michael Saboff  <msaboff@apple.com>
3236
3237         [Qt] REGRESSION(r100510): Enable 8 Bit Strings in JavaScriptCore
3238         https://bugs.webkit.org/show_bug.cgi?id=72602
3239
3240         Fixed StringImpl::foldCase by adding return in the case we need to handle
3241         folding of 8 bit strings with Latin-1 characters.
3242
3243         Fixed case where StringImpl::replace was using a char temp instead of an
3244         LChar temp.
3245
3246         Because of the second change, I changed other uses of char or
3247         unsigned char to LChar.
3248
3249         Reviewed by Zoltan Herczeg.
3250
3251         * wtf/text/StringImpl.cpp:
3252         (WTF::StringImpl::upper):
3253         (WTF::StringImpl::foldCase):
3254         (WTF::equal):
3255         (WTF::equalIgnoringCase):
3256         (WTF::StringImpl::replace):
3257
3258 2011-11-17  Patrick Gansterer  <paroga@webkit.org>
3259
3260         [CMake] Move FAST_MALLOC specific lines from Platform*.cmake to CMakeLists.txt
3261         https://bugs.webkit.org/show_bug.cgi?id=72644
3262
3263         Reviewed by Brent Fulgham.
3264
3265         All ports need to do the same determination about fast malloc. Move the CMake code from
3266         platform specific files into the generic one, so that additional ports can reuse it.
3267
3268         * wtf/CMakeLists.txt:
3269         * wtf/PlatformEfl.cmake:
3270         * wtf/PlatformWinCE.cmake:
3271
3272 2011-11-17  Mark Hahnenberg  <mhahnenberg@apple.com>
3273
3274         Add finalizer to JSActivation
3275         https://bugs.webkit.org/show_bug.cgi?id=72575
3276
3277         Reviewed by Geoffrey Garen.
3278
3279         * runtime/JSActivation.cpp:
3280         (JSC::JSActivation::finishCreation): Attach finalize function to objects during creation.
3281         (JSC::JSActivation::finalize):
3282         * runtime/JSActivation.h: Replaced virtual destructor with static finalize function.
3283
3284 2011-11-15  Filip Pizlo  <fpizlo@apple.com>
3285
3286         Code block jettisoning should be part of the GC's transitive closure
3287         https://bugs.webkit.org/show_bug.cgi?id=72467
3288
3289         Reviewed by Geoff Garen.
3290         
3291         Replaced JettisonedCodeBlocks with DFGCodeBlocks. The latter knows about all
3292         DFG code blocks (i.e. those that may be jettisoned, and may have inlined weak
3293         references) and helps track what state each of those code blocks is in during
3294         GC. The state consists of two flags; mayBeExecuting, which tells if the code block
3295         is live from call frames; and isJettisoned, which tells if the code block is
3296         not owned by any executable and thus should be deleted as soon as it is not
3297         mayBeExecuting.
3298         
3299         - Not executing, Not jettisoned: The code block may or may not be reachable from
3300           any executables, but it is owned by an executable, and hence should be
3301           kept alive if its executable is live and if all of its weak references are
3302           live. Otherwise it should be deleted during the current GC cycle, and its
3303           outgoing references should not be scanned.
3304           
3305         - Not executing but jettisoned: The code block should be deleted as soon as
3306           possible and none of its outgoing references should be scanned.
3307           
3308         - Executing but not jettisoned: The code block should be kept alive during this
3309           GC cycle, and all of its outgoing references (including the weak ones)
3310           should be scanned and marked strongly. The mayBeExecuting bit will be cleared at
3311           the end of the GC cycle.
3312           
3313         - Executing and jettisoned: The code block should be kept alive during this
3314           GC cycle, and all of its outgoing references (including the weak ones)
3315           should be scanned and marked strongly. However, on the next GC cycle, it
3316           will have its mayBeExecuting bit cleared and hence it will become a candidate
3317           for immediate deletion provided it is not executing again.
3318
3319         This is performance-neutral.
3320
3321         * CMakeLists.txt:
3322         * GNUmakefile.list.am:
3323         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3324         * JavaScriptCore.xcodeproj/project.pbxproj:
3325         * Target.pri:
3326         * bytecode/CodeBlock.cpp:
3327         (JSC::CodeBlock::~CodeBlock):
3328         * bytecode/CodeBlock.h:
3329         (JSC::CodeBlock::setJITCode):
3330         (JSC::CodeBlock::DFGData::DFGData):
3331         (JSC::DFGCodeBlocks::mark):
3332         * heap/ConservativeRoots.cpp:
3333         (JSC::ConservativeRoots::add):
3334         * heap/ConservativeRoots.h:
3335         * heap/DFGCodeBlocks.cpp: Added.
3336         (JSC::DFGCodeBlocks::DFGCodeBlocks):
3337         (JSC::DFGCodeBlocks::~DFGCodeBlocks):
3338         (JSC::DFGCodeBlocks::jettison):
3339         (JSC::DFGCodeBlocks::clearMarks):
3340         (JSC::DFGCodeBlocks::deleteUnmarkedJettisonedCodeBlocks):
3341         (JSC::DFGCodeBlocks::traceMarkedCodeBlocks):
3342         * heap/DFGCodeBlocks.h: Added.
3343         * heap/Heap.cpp:
3344         (JSC::Heap::jettisonDFGCodeBlock):
3345         (JSC::Heap::markRoots):
3346         (JSC::Heap::collect):
3347         * heap/Heap.h:
3348         * heap/JettisonedCodeBlocks.cpp: Removed.
3349         * heap/JettisonedCodeBlocks.h: Removed.
3350         * interpreter/RegisterFile.cpp:
3351         (JSC::RegisterFile::gatherConservativeRoots):
3352         * interpreter/RegisterFile.h:
3353         * runtime/Executable.cpp:
3354         (JSC::jettisonCodeBlock):
3355
3356 2011-11-16  Filip Pizlo  <fpizlo@apple.com>
3357
3358         Unreviewed, build fix for 32-bit.
3359
3360         * dfg/DFGSpeculativeJIT32_64.cpp:
3361         (JSC::DFG::SpeculativeJIT::compile):
3362
3363 2011-11-16  Geoffrey Garen  <ggaren@apple.com>
3364
3365         Some CachedCall cleanup, in preparation for reversing argument order.
3366
3367         Reviewed by Gavin Barraclough.
3368
3369         * bytecode/CodeBlock.cpp:
3370         (JSC::CodeBlock::stronglyVisitWeakReferences): A build fix for the interpreter,
3371         so I can test it.
3372
3373         * interpreter/CachedCall.h:
3374         (JSC::CachedCall::CachedCall): Renamed argCount to argumentCount because
3375         we are not that desperate for character saving.
3376
3377         (JSC::CachedCall::setThis):
3378         (JSC::CachedCall::setArgument): Adopted new 0-based argument indexing for
3379         CallFrameClosure.
3380
3381         * interpreter/CallFrameClosure.h:
3382         (JSC::CallFrameClosure::setThis):
3383         (JSC::CallFrameClosure::setArgument):
3384         (JSC::CallFrameClosure::resetCallFrame): Provide 0-based argument indexing,
3385         with an explicit setter for 'this', since that's how most clients think.
3386
3387         * interpreter/Interpreter.cpp:
3388         (JSC::Interpreter::prepareForRepeatCall):
3389         * interpreter/Interpreter.h: Change argCount to argumentCountIncludingThis,
3390         for clarity.
3391
3392 2011-11-16  Mark Hahnenberg  <mhahnenberg@apple.com>
3393
3394         De-virtualize ScriptExecutable::unlinkCalls
3395         https://bugs.webkit.org/show_bug.cgi?id=72546
3396
3397         Reviewed by Geoffrey Garen.
3398
3399         * runtime/Executable.cpp:
3400         (JSC::FunctionExecutable::~FunctionExecutable): Added an empty explicit virtual destructor to prevent a very odd compilation error
3401         due to the fact that the compiler was trying to generate the implicit inline destructor in every translation unit, some of which 
3402         didn't have complete type information on the things that needed to be destructed in the implicit destructor.
3403         * runtime/Executable.h:
3404         (JSC::EvalExecutable::createStructure): Used new type value from JSType
3405         (JSC::ProgramExecutable::createStructure): Ditto
3406         (JSC::FunctionExecutable::createStructure): Ditto
3407         (JSC::ScriptExecutable::unlinkCalls): Condition upon the type value, cast and call the corresponding unlinkCalls implementation.
3408         * runtime/JSType.h: Added new values for EvalExecutable, ProgramExecutable, and FunctionExecutable.  Remove explicit numbers, since 
3409         that just adds noise to patches and they currently have no significance.
3410
3411 2011-11-16  Filip Pizlo  <fpizlo@apple.com>
3412
3413         JSC::CodeBlock should know which references generated by the DFG are weak
3414         https://bugs.webkit.org/show_bug.cgi?id=72563
3415
3416         Reviewed by Geoff Garen.
3417         
3418         CodeBlock::m_dfgData now tracks weak references and weak reference transitions
3419         (like ephemerons) generated by the DFG. The DFG makes sure to notify the
3420         CodeBlock of all uses of weak references and weak reference transitions.
3421         CodeBlock currently marks them strongly, since the weak marking logic is not
3422         in place, yet.
3423
3424         * bytecode/CodeBlock.cpp:
3425         (JSC::CodeBlock::visitAggregate):
3426         (JSC::CodeBlock::stronglyVisitWeakReferences):
3427         * bytecode/CodeBlock.h:
3428         (JSC::CodeBlock::appendWeakReference):
3429         (JSC::CodeBlock::shrinkWeakReferencesToFit):
3430         (JSC::CodeBlock::appendWeakReferenceTransition):
3431         (JSC::CodeBlock::shrinkWeakReferenceTransitionsToFit):
3432         (JSC::CodeBlock::WeakReferenceTransition::WeakReferenceTransition):
3433         * bytecode/CodeOrigin.h:
3434         (JSC::CodeOrigin::codeOriginOwner):
3435         * dfg/DFGByteCodeParser.cpp:
3436         (JSC::DFG::ByteCodeParser::handleCall):
3437         (JSC::DFG::ByteCodeParser::handleInlining):
3438         (JSC::DFG::ByteCodeParser::parseBlock):
3439         * dfg/DFGJITCompiler.cpp:
3440         (JSC::DFG::JITCompiler::link):
3441         * dfg/DFGJITCompiler.h:
3442         (JSC::DFG::JITCompiler::addWeakReference):
3443         (JSC::DFG::JITCompiler::addWeakReferenceTransition):
3444         (JSC::DFG::JITCompiler::branchWeakPtr):
3445         * dfg/DFGSpeculativeJIT.h:
3446         * dfg/DFGSpeculativeJIT32_64.cpp:
3447         (JSC::DFG::SpeculativeJIT::compile):
3448         * dfg/DFGSpeculativeJIT64.cpp:
3449         (JSC::DFG::SpeculativeJIT::fillJSValue):
3450         (JSC::DFG::SpeculativeJIT::compile):
3451
3452 2011-11-16  Michael Saboff  <msaboff@apple.com>
3453
3454         LayoutTests for Debug Builds Crashes in JavaScriptCore/yarr/YarrInterpreter.cpp(185)
3455         https://bugs.webkit.org/show_bug.cgi?id=72561
3456
3457         Removed #if USE(JSC) and therefore the ASSERT_NOT_REACHED().
3458         Simplified the code in the process.
3459
3460         Reviewed by James Robinson.
3461
3462         * yarr/YarrInterpreter.cpp:
3463         (JSC::Yarr::Interpreter::CharAccess::CharAccess):
3464         (JSC::Yarr::Interpreter::CharAccess::~CharAccess):
3465
3466 2011-11-16  Geoffrey Garen  <ggaren@apple.com>
3467
3468         Interpreter build fixes.
3469
3470         * bytecode/CodeBlock.h:
3471         * interpreter/Interpreter.cpp:
3472         (JSC::Interpreter::privateExecute):
3473
3474 2011-11-16  Patrick Gansterer  <paroga@webkit.org>
3475
3476         Unreviewed. Build fix for !ENABLE(JIT) after r100363.
3477
3478         * bytecode/CodeBlock.h:
3479
3480 2011-11-16  Geoffrey Garen  <ggaren@apple.com>
3481
3482         Rolled back in r100375 and r100385 with 32-bit build fixed.
3483
3484         * dfg/DFGOperations.cpp:
3485         * jit/JITStubs.cpp:
3486         (JSC::DEFINE_STUB_FUNCTION):
3487         * runtime/ArgList.cpp:
3488         (JSC::ArgList::getSlice):
3489         * runtime/ArgList.h:
3490         * runtime/JSArray.cpp:
3491         (JSC::JSArray::finishCreation):
3492         * runtime/JSArray.h:
3493         (JSC::JSArray::create):
3494         * runtime/JSGlobalObject.h:
3495         (JSC::constructArray):
3496
3497 2011-11-16  Filip Pizlo  <fpizlo@apple.com>
3498
3499         DFG global variable CSE mishandles the cross-global-object inlining corner case
3500         https://bugs.webkit.org/show_bug.cgi?id=72542
3501
3502         Reviewed by Geoff Garen.
3503         
3504         Moved code to get the global object for a code origin into CodeBlock, so it is
3505         more broadly accessible. Fixed CSE to compare both the variable number, and the
3506         global object, before deciding to perform elimination.
3507
3508         * bytecode/CodeBlock.h:
3509         (JSC::CodeBlock::globalObjectFor):
3510         * dfg/DFGAssemblyHelpers.h:
3511         (JSC::DFG::AssemblyHelpers::globalObjectFor):
3512         * dfg/DFGPropagator.cpp:
3513         (JSC::DFG::Propagator::globalVarLoadElimination):
3514         (JSC::DFG::Propagator::performNodeCSE):
3515
3516 2011-11-16  Michael Saboff  <msaboff@apple.com>
3517
3518         Enable 8 Bit Strings in JavaScriptCore
3519         https://bugs.webkit.org/show_bug.cgi?id=71337
3520
3521         This patch turns on 8 bit strings in StringImpl and enables
3522         their use in JavaScriptCore. Some of the changes are to
3523         turn on code that had been staged (Lexer.cpp, Identifier.cpp,
3524         SmallStrings.cpp and some of StringImpl.{h,cpp}).
3525         Other changes are minor fixes to make 8 bit strings work
3526         (UString.h, StringImpl::getData16SlowCase()).
3527         Changed StringBuffer to be a templated class based on character
3528         type.  This change rippled into WebCore code as well.
3529
3530         Reviewed by Geoffrey Garen.
3531
3532         * JavaScriptCore.exp:
3533         * parser/Lexer.cpp:
3534         (JSC::::append8): Changed to use 8 bit buffers.
3535         (JSC::::parseIdentifier): Changed to use 8 bit buffers.
3536         (JSC::::parseString): Changed to use 8 bit buffers.
3537         * runtime/Identifier.cpp:
3538         (JSC::IdentifierCStringTranslator::translate): 8 bit version keeps data 8 bit
3539         (JSC::Identifier::toUInt32FromCharacters): Templated helper.
3540         (JSC::Identifier::toUInt32): Added 8 bit optimized path.
3541         * runtime/SmallStrings.cpp:
3542         (JSC::SmallStringsStorage::SmallStringsStorage): Changed to be 8 bit strings
3543         * runtime/UString.h:
3544         (JSC::UString::characters): Now calls StringImpl::characters()
3545         * wtf/Forward.h:
3546         * wtf/text/StringBuffer.h: Made StringBuffer a template base on character type.
3547         (WTF::StringBuffer::StringBuffer):
3548         (WTF::StringBuffer::characters):
3549         (WTF::StringBuffer::release):
3550         * wtf/text/StringImpl.cpp:
3551         (WTF::StringImpl::create):
3552         (WTF::StringImpl::getData16SlowCase): Fixed null terminated case.
3553         (WTF::StringImpl::removeCharacters): Added 8 bit path.
3554         (WTF::StringImpl::simplifyMatchedCharactersToSpace):
3555         (WTF::StringImpl::simplifyWhiteSpace):
3556         (WTF::equal): Removed bug from code copied from null terminated version.
3557         (WTF::StringImpl::adopt): Added 8 bit path.
3558         (WTF::StringImpl::createWithTerminatingNullCharacter): Fixed 8 bi flag propagation.
3559         * wtf/text/StringImpl.h:
3560         (WTF::StringImpl::StringImpl): Added new 8 bit constructor.
3561         (WTF::StringImpl::characters8): Removed ASSERT_NOT_REACHED().
3562         (WTF::getCharacters<LChar>): Added templated accessor for 8 bit strings.
3563         (WTF::getCharacters<UChar>): Added templated accessor for 16 bit strings.
3564         * wtf/text/WTFString.h:
3565         (WTF::String::adopt): Changed to use StringBuffer template.
3566
3567 2011-11-16  Mark Hahnenberg  <mhahnenberg@apple.com>
3568
3569         De-virtualize ExecutableBase::clearCodeVirtual
3570         https://bugs.webkit.org/show_bug.cgi?id=72337
3571
3572         Reviewed by Darin Adler.
3573
3574         Added static finalize functions to the subclasses of ExecutableBase that provide an implementation 
3575         of clearCodeVirtual, changed all of the clearCodeVirtual methods to non-virtual clearCode method,
3576         and had the finalize functions call the corresponding clearCode methods.
3577
3578         * runtime/Executable.cpp:
3579         (JSC::ExecutableBase::clearCode):
3580         (JSC::NativeExecutable::finalize):
3581         (JSC::EvalExecutable::finalize):
3582         (JSC::EvalExecutable::clearCode):
3583         (JSC::ProgramExecutable::finalize):
3584         (JSC::ProgramExecutable::clearCode):
3585         (JSC::FunctionExecutable::discardCode):
3586         (JSC::FunctionExecutable::finalize):
3587         (JSC::FunctionExecutable::clearCode):
3588         * runtime/Executable.h:
3589         (JSC::ExecutableBase::finishCreation):
3590         (JSC::NativeExecutable::create):
3591         (JSC::EvalExecutable::create):
3592         (JSC::ProgramExecutable::create):
3593         (JSC::FunctionExecutable::create):
3594
3595 2011-11-16  Yusuke Suzuki  <utatane.tea@gmail.com>
3596
3597         String new RegExp('\n').toString() returns is invalid RegularExpressionLiteral
3598         https://bugs.webkit.org/show_bug.cgi?id=71572
3599
3600         Reviewed by Gavin Barraclough and Darin Adler.
3601
3602         * runtime/RegExpObject.cpp:
3603         (JSC::regExpObjectSource):
3604
3605 2011-11-16  Darin Adler  <darin@apple.com>
3606
3607         Specialize HashTraits for OwnPtr to use PassOwnPtr and raw pointer
3608         https://bugs.webkit.org/show_bug.cgi?id=72475
3609
3610         Reviewed by Adam Roben.
3611
3612         * wtf/HashTraits.h: Specialize HashTraits for OwnPtr.
3613         Do overloads so we can pass a nullptr and also be sure to get the
3614         raw pointer type from the OwnPtr template so we handle both forms
3615         of OwnPtr: OwnPtr<T> and OwnPtr<T*>.
3616
3617 2011-11-16  Simon Hausmann  <simon.hausmann@nokia.com>
3618
3619         [Qt] Centralize hide_symbols and ensure all libs are built with symbol visibility & bsymbolic_functions
3620
3621         Reviewed by Tor Arne Vestbø.
3622
3623         * Target.pri: Eliminate duplicated symbol stuff that lives now in default_post.prf.
3624
3625 2011-11-16  Simon Hausmann  <simon.hausmann@nokia.com>
3626
3627         Unreviewed, rolling out r100266.
3628         http://trac.webkit.org/changeset/100266
3629
3630         Broke WTR.
3631
3632         * Target.pri:
3633
3634 2011-11-16  Darin Adler  <darin@apple.com>
3635
3636         Add a "pass type" and "peek type" concept to HashTraits
3637         https://bugs.webkit.org/show_bug.cgi?id=72473
3638
3639         Reviewed by Filip Pizlo.
3640
3641         * wtf/HashTraits.h: Added the pass type and peek type.
3642         For OwnPtr, the pass type will be PassOwnPtr and the peek
3643         type will be a raw pointer.
3644
3645 2011-11-16  Darin Adler  <darin@apple.com>
3646
3647         Fix some hash traits that don't derive from the base hash traits
3648         https://bugs.webkit.org/show_bug.cgi?id=72470
3649
3650         Reviewed by Filip Pizlo.
3651
3652         Hash traits structures need to derive from the base hash traits in
3653         HashTraits.h, but some were not. This is needed for compatibility with
3654         some additional traits we will be adding to make OwnPtr work with HashMap.
3655
3656         * runtime/Identifier.h: Make IdentifierMapIndexHashTraits derive from
3657         HashTraits<int>. This enabled removal of all the members except for the
3658         ones that control the empty value, because this is otherwise the same
3659         as the standard int hash.
3660
3661         * runtime/SymbolTable.h: Changed SymbolTableIndexHashTraits to derive
3662         from HashTraits<SymbolTableEntry> and removed redundant members.
3663
3664 2011-11-15  Sheriff Bot  <webkit.review.bot@gmail.com>
3665
3666         Unreviewed, rolling out r100375 and r100385.
3667         http://trac.webkit.org/changeset/100375
3668         http://trac.webkit.org/changeset/100385
3669         https://bugs.webkit.org/show_bug.cgi?id=72465
3670
3671         They broke 32 bit builds on Qt (Requested by ossy on #webkit).
3672
3673         * dfg/DFGOperations.cpp:
3674         * jit/JITStubs.cpp:
3675         (JSC::DEFINE_STUB_FUNCTION):
3676         * runtime/ArgList.cpp:
3677         (JSC::ArgList::getSlice):
3678         * runtime/ArgList.h:
3679         (JSC::ArgList::ArgList):
3680         * runtime/JSArray.cpp:
3681         * runtime/JSArray.h:
3682         * runtime/JSGlobalObject.h:
3683
3684 2011-11-15  George Staikos  <staikos@webkit.org>
3685
3686         Remove the guard page from the addressable stack region on QNX.
3687         https://bugs.webkit.org/show_bug.cgi?id=72455
3688
3689         Reviewed by Daniel Bates.
3690
3691         * wtf/StackBounds.cpp:
3692         (WTF::StackBounds::initialize):
3693
3694 2011-11-15  Michael Saboff  <msaboff@apple.com>
3695
3696         Towards 8 bit Strings - Update utf8() and ascii() methods for 8 bit strings
3697         https://bugs.webkit.org/show_bug.cgi?id=72323
3698
3699         Added 8 bit optimized paths for String and UString ascii() and utf8() methods.
3700
3701         Added String::characters8(), characters16() and is8Bit() helper methods.
3702
3703         Added an new Unicode::convertLatin1ToUTF8() method that works on
3704         LChar (8 bit) strings that is a stripped down version of convertUTF16ToUTF8().
3705
3706         Reviewed by Geoff Garen.
3707
3708         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
3709         * runtime/UString.cpp:
3710         (JSC::UString::utf8):
3711         * wtf/text/WTFString.cpp:
3712         (WTF::String::ascii):
3713         (WTF::String::utf8):
3714         * wtf/text/WTFString.h:
3715         (WTF::String::characters8):
3716         (WTF::String::characters16):
3717         (WTF::String::is8Bit):
3718         (WTF::LChar):
3719         (WTF::UChar):
3720         * wtf/unicode/UTF8.cpp:
3721         (WTF::Unicode::convertLatin1ToUTF8):
3722         * wtf/unicode/UTF8.h:
3723         * wtf/unicode/Unicode.h:
3724
3725 2011-11-15  Darin Adler  <darin@apple.com>
3726
3727         REGRESSION (r98887): ParserArena and Keywords leaking
3728         https://bugs.webkit.org/show_bug.cgi?id=72428
3729
3730         Reviewed by Sam Weinig.
3731
3732         * parser/Lexer.h: Made Keywords destructor public since OwnPtr and PassOwnPtr
3733         need to be able to destroy it.
3734
3735         * parser/Parser.cpp:
3736         (JSC::Parser::Parser): Use get now that parserArena is an OwnPtr.
3737
3738         * runtime/JSGlobalData.cpp:
3739         (JSC::JSGlobalData::JSGlobalData): Use adoptPtr to initialize OwnPtr members.
3740
3741         * runtime/JSGlobalData.h: Make parserArena and keywords be OwnPtr.
3742
3743 2011-11-15  Geoffrey Garen  <ggaren@apple.com>
3744
3745         Removed another use of ArgList that baked in the assumption that arguments
3746         are forward in the regiter file.
3747
3748         Reviewed by Sam Weinig.
3749
3750         * dfg/DFGOperations.cpp:
3751         * jit/JITStubs.cpp:
3752         (JSC::DEFINE_STUB_FUNCTION): Use our new array creation API, instead of
3753         working through ArgList.
3754
3755         * runtime/ArgList.h: Removed!
3756
3757 2011-11-15  Geoffrey Garen  <ggaren@apple.com>
3758
3759         Removed a use of ArgList that baked in the assumption that arguments
3760         are forward in the regiter file.
3761
3762         Reviewed by Sam Weinig.
3763
3764         * dfg/DFGOperations.cpp:
3765         * jit/JITStubs.cpp:
3766         (JSC::DEFINE_STUB_FUNCTION): Use new API.
3767
3768         * runtime/ArgList.cpp:
3769         (JSC::ArgList::getSlice): No need to provide an arbitrary constructor --
3770         getSlice can do the right thing by using its rights to private data.
3771
3772         * runtime/ArgList.h: Removed constructor that took a forward-contiguous
3773         set of arguments.
3774
3775         * runtime/JSArray.cpp:
3776         (JSC::JSArray::finishCreation):
3777         * runtime/JSArray.h:
3778         (JSC::JSArray::create):
3779         * runtime/JSGlobalObject.h:
3780         (JSC::constructArray): Added explicit support for creating an array from
3781         a pre-allocated set of values, so we could stop relying on the ArgList
3782         API we want to remove.
3783
3784 2011-11-15  Filip Pizlo  <fpizlo@apple.com>
3785
3786         Crash in JSC::DFG::OSRExitCompiler::compileExit(JSC::DFG::OSRExit const&, JSC::DFG::SpeculationRecovery*)
3787         https://bugs.webkit.org/show_bug.cgi?id=72292
3788
3789         Reviewed by Geoff Garen.
3790         
3791         We need to be careful about how we look for the baseline CodeBlock if we're lazy-compiling
3792         an OSR exit after our CodeBlock has been jettisoned. In short, use CodeBlock::baselineVersion()
3793         instead of CodeBlock::alternative().
3794         
3795         No performance effect.
3796         
3797         No tests because all of our heuristics work very hard to make sure that this never happens in
3798         the first place. OSR exits are rare by design, and jettisoning of CodeBlocks (i.e. recompilation)
3799         is even rarer. Furthermore, OSR exits after a CodeBlock has been jettisoned is rarer still
3800         because the whole point of jettisoning is to bring the probability of future OSR exits to as
3801         close to zero as possible. But even that isn't enough to trigger this bug; it requires the OSR
3802         exit after a jettison to be the first of its kind; our whole design tries to ensure that
3803         CodeBlocks tend to OSR exit at a handful (i.e. 1 in most cases) of points, and since jettisoning
3804         is triggered by OSR, in most sane cases the OSR exits after jettison will not require lazy OSR
3805         compilation. So this is a truly evil case, and any test for it would be quite fragile.
3806
3807         * bytecode/CodeBlock.h:
3808         (JSC::CodeBlock::specializationKind):
3809         (JSC::CodeBlock::largeFailCountThreshold):
3810         (JSC::CodeBlock::largeFailCountThresholdForLoop):
3811         * dfg/DFGAssemblyHelpers.h:
3812         (JSC::DFG::AssemblyHelpers::AssemblyHelpers):
3813         (JSC::DFG::AssemblyHelpers::baselineCodeBlockFor):
3814         (JSC::DFG::AssemblyHelpers::baselineCodeBlock):
3815         * dfg/DFGDriver.cpp:
3816         (JSC::DFG::compile):
3817         * dfg/DFGOSRExitCompiler.cpp:
3818         * dfg/DFGOSRExitCompiler64.cpp:
3819         (JSC::DFG::OSRExitCompiler::compileExit):
3820
3821 2011-11-15  Geoffrey Garen  <ggaren@apple.com>
3822
3823         Use MarkedArgumentBuffer to avoid making assumptions about argument order
3824         https://bugs.webkit.org/show_bug.cgi?id=72418
3825
3826         Reviewed by Sam Weinig.
3827         
3828         A step toward reversing the argument order.
3829
3830         * runtime/JSONObject.cpp:
3831         (JSC::Stringifier::toJSON):
3832         (JSC::Stringifier::appendStringifiedValue):
3833         (JSC::Walker::callReviver): Don't assume that ArgList wants to point
3834         at arguments in forward order. Instead, use MarkedArgumentBuffer, which
3835         will make the decision for us.
3836
3837 2011-11-15  Filip Pizlo  <fpizlo@apple.com>
3838
3839         DFG should distinguish between constants in the constant pool and weak
3840         constants added as artifacts of code generation
3841         https://bugs.webkit.org/show_bug.cgi?id=72367
3842
3843         Reviewed by Geoff Garen.
3844         
3845         Added the notion of a WeakJSConstant, which is like a JSConstant except that
3846         it can only refer to JSCell*. Currently all WeakJSConstants are also backed
3847         by constants in the constant pool, since weak references originated from
3848         machine code are not yet properly handled.
3849         
3850         Replaced CheckMethod, and MethodCheckData, with a combination of WeakJSConstant
3851         and CheckStructure. This results in improved CSE, leading to a 1% win on V8.
3852
3853         * dfg/DFGAbstractState.cpp:
3854         (JSC::DFG::AbstractState::execute):
3855         * dfg/DFGByteCodeParser.cpp:
3856         (JSC::DFG::ByteCodeParser::cellConstant):
3857         (JSC::DFG::ByteCodeParser::prepareToParseBlock):
3858         (JSC::DFG::ByteCodeParser::parseBlock):
3859         * dfg/DFGGraph.cpp:
3860         (JSC::DFG::Graph::dump):
3861         * dfg/DFGGraph.h:
3862         (JSC::DFG::Graph::getJSConstantPrediction):
3863         (JSC::DFG::Graph::valueOfJSConstant):
3864         (JSC::DFG::Graph::valueOfInt32Constant):
3865         (JSC::DFG::Graph::valueOfNumberConstant):
3866         (JSC::DFG::Graph::valueOfBooleanConstant):
3867         * dfg/DFGNode.h:
3868         (JSC::DFG::Node::isWeakConstant):
3869         (JSC::DFG::Node::hasConstant):
3870         (JSC::DFG::Node::weakConstant):
3871         (JSC::DFG::Node::valueOfJSConstant):
3872         (JSC::DFG::Node::isInt32Constant):
3873         (JSC::DFG::Node::isDoubleConstant):
3874         (JSC::DFG::Node::isNumberConstant):
3875         (JSC::DFG::Node::isBooleanConstant):
3876         (JSC::DFG::Node::hasIdentifier):
3877         * dfg/DFGPropagator.cpp:
3878         (JSC::DFG::Propagator::propagateNodePredictions):
3879         (JSC::DFG::Propagator::performNodeCSE):
3880         * dfg/DFGSpeculativeJIT32_64.cpp:
3881         (JSC::DFG::SpeculativeJIT::compile):
3882         * dfg/DFGSpeculativeJIT64.cpp:
3883         (JSC::DFG::SpeculativeJIT::compile):
3884
3885 2011-11-15  Michael Saboff  <msaboff@apple.com>
3886
3887         Towards 8 bit Strings - Initial JS String Tuning
3888         https://bugs.webkit.org/show_bug.cgi?id=72326
3889
3890         Added 8 bit optimized paths for the methods below.
3891
3892         Reviewed by Geoffrey Garen.
3893
3894         * runtime/JSString.h:
3895         (JSC::jsSubstring8):
3896         * runtime/StringPrototype.cpp:
3897         (JSC::jsSpliceSubstrings):
3898         (JSC::jsSpliceSubstringsWithSeparators):
3899         (JSC::stringProtoFuncReplace):
3900         (JSC::stringProtoFuncCharCodeAt):
3901
3902 2011-11-15  Gavin Barraclough  <barraclough@apple.com>
3903
3904         Result of Error.prototype.toString not ES5 conformant
3905         https://bugs.webkit.org/show_bug.cgi?id=70889
3906
3907         Reviewed by Oliver Hunt.
3908
3909         * runtime/ErrorPrototype.cpp:
3910         (JSC::errorProtoFuncToString):
3911
3912 2011-11-15  Simon Hausmann  <simon.hausmann@nokia.com>
3913
3914         [Qt] Centralize hide_symbols and ensure all libs are built with symbol visibility & bsymbolic_functions
3915
3916         Reviewed by Tor Arne Vestbø.
3917
3918         * Target.pri: Eliminate duplicated symbol stuff that lives now in default_post.prf.
3919
3920 2011-11-15  Yuqiang Xian  <yuqiang.xian@intel.com>
3921
3922         Remove DFGJITCompilerInlineMethods
3923         https://bugs.webkit.org/show_bug.cgi?id=72366
3924
3925         Reviewed by Filip Pizlo.
3926
3927         Those methods are actually seldom used. Modify the few such places and
3928         remove DFGJITCompilerInlineMethods stuffs totally.
3929
3930         * GNUmakefile.list.am:
3931         * JavaScriptCore.xcodeproj/project.pbxproj:
3932         * dfg/DFGJITCompiler.h:
3933         (JSC::DFG::JITCompiler::addressOfDoubleConstant):
3934         * dfg/DFGJITCompilerInlineMethods.h: Removed.
3935         * dfg/DFGSpeculativeJIT.cpp:
3936         * dfg/DFGSpeculativeJIT.h:
3937         (JSC::DFG::SpeculativeJIT::silentFillFPR):
3938         * dfg/DFGSpeculativeJIT32_64.cpp:
3939         (JSC::DFG::SpeculativeJIT::fillJSValue):
3940         (JSC::DFG::SpeculativeJIT::cachedGetMethod):
3941
3942 2011-11-14  Filip Pizlo  <fpizlo@apple.com>
3943
3944         DFG::SpeculativeJIT and DFG::JITCodeGenerator should be combined
3945         https://bugs.webkit.org/show_bug.cgi?id=72348
3946
3947         Reviewed by Gavin Barraclough.
3948         
3949         Moved all of JITCodeGenerator into SpeculativeJIT.
3950
3951         * CMakeLists.txt:
3952         * GNUmakefile.list.am:
3953         * JavaScriptCore.xcodeproj/project.pbxproj:
3954         * Target.pri:
3955         * dfg/DFGJITCodeGenerator.cpp: Removed.
3956         * dfg/DFGJITCodeGenerator.h: Removed.
3957         * dfg/DFGJITCodeGenerator32_64.cpp: Removed.
3958         * dfg/DFGJITCodeGenerator64.cpp: Removed.
3959         * dfg/DFGJITCompiler.cpp:
3960         * dfg/DFGRepatch.cpp:
3961         (JSC::DFG::generateProtoChainAccessStub):
3962         (JSC::DFG::tryCacheGetByID):
3963         (JSC::DFG::tryCachePutByID):
3964         * dfg/DFGSpeculativeJIT.cpp:
3965         (JSC::DFG::SpeculativeJIT::clearGenerationInfo):
3966         (JSC::DFG::SpeculativeJIT::fillStorage):
3967         (JSC::DFG::SpeculativeJIT::useChildren):
3968         (JSC::DFG::SpeculativeJIT::isStrictInt32):
3969         (JSC::DFG::SpeculativeJIT::isKnownInteger):
3970         (JSC::DFG::SpeculativeJIT::isKnownNumeric):
3971         (JSC::DFG::SpeculativeJIT::isKnownCell):
3972         (JSC::DFG::SpeculativeJIT::isKnownNotCell):
3973         (JSC::DFG::SpeculativeJIT::isKnownNotInteger):
3974         (JSC::DFG::SpeculativeJIT::isKnownNotNumber):
3975         (JSC::DFG::SpeculativeJIT::isKnownBoolean):
3976         (JSC::DFG::SpeculativeJIT::writeBarrier):
3977         (JSC::DFG::SpeculativeJIT::markCellCard):
3978         (JSC::DFG::SpeculativeJIT::nonSpeculativeCompare):
3979         (JSC::DFG::SpeculativeJIT::nonSpeculativeStrictEq):
3980         (JSC::DFG::dataFormatString):
3981         (JSC::DFG::SpeculativeJIT::dump):
3982         (JSC::DFG::SpeculativeJIT::checkConsistency):
3983         (JSC::DFG::GPRTemporary::GPRTemporary):
3984         (JSC::DFG::GPRTemporary::adopt):
3985         (JSC::DFG::FPRTemporary::FPRTemporary):
3986         * dfg/DFGSpeculativeJIT.h:
3987         (JSC::DFG::SpeculativeJIT::at):
3988         (JSC::DFG::SpeculativeJIT::lock):
3989         (JSC::DFG::SpeculativeJIT::unlock):
3990         (JSC::DFG::SpeculativeJIT::canReuse):
3991         (JSC::DFG::SpeculativeJIT::reuse):
3992         (JSC::DFG::SpeculativeJIT::allocate):
3993         (JSC::DFG::SpeculativeJIT::tryAllocate):
3994         (JSC::DFG::SpeculativeJIT::fprAllocate):
3995         (JSC::DFG::SpeculativeJIT::isFilled):
3996         (JSC::DFG::SpeculativeJIT::isFilledDouble):
3997         (JSC::DFG::SpeculativeJIT::use):
3998         (JSC::DFG::SpeculativeJIT::selectScratchGPR):
3999         (JSC::DFG::SpeculativeJIT::silentSpillGPR):
4000         (JSC::DFG::SpeculativeJIT::silentSpillFPR):
4001         (JSC::DFG::SpeculativeJIT::silentFillGPR):
4002         (JSC::DFG::SpeculativeJIT::silentFillFPR):
4003         (JSC::DFG::SpeculativeJIT::silentSpillAllRegisters):
4004         (JSC::DFG::SpeculativeJIT::silentFillAllRegisters):
4005         (JSC::DFG::SpeculativeJIT::boxDouble):
4006         (JSC::DFG::SpeculativeJIT::unboxDouble):
4007         (JSC::DFG::SpeculativeJIT::spill):
4008         (JSC::DFG::SpeculativeJIT::isConstant):
4009         (JSC::DFG::SpeculativeJIT::isJSConstant):
4010         (JSC::DFG::SpeculativeJIT::isInt32Constant):
4011         (JSC::DFG::SpeculativeJIT::isDoubleConstant):
4012         (JSC::DFG::SpeculativeJIT::isNumberConstant):
4013         (JSC::DFG::SpeculativeJIT::isBooleanConstant):
4014         (JSC::DFG::SpeculativeJIT::isFunctionConstant):
4015         (JSC::DFG::SpeculativeJIT::valueOfInt32Constant):
4016         (JSC::DFG::SpeculativeJIT::valueOfNumberConstant):
4017         (JSC::DFG::SpeculativeJIT::addressOfDoubleConstant):
4018         (JSC::DFG::SpeculativeJIT::valueOfJSConstant):