d3d09fc7ad879bd2841657b39c043e9dd85de771
[WebKit-https.git] / JavaScriptCore / ChangeLog
1 2009-08-18  Xan Lopez  <xlopez@igalia.com>
2
3         Try to fix the GTK+ build.
4
5         * GNUmakefile.am:
6
7 2009-08-17  Gavin Barraclough  <barraclough@apple.com>
8
9         Reviewed by Sam Weinig.
10
11         No, silly runtime, AST nodes are not for you.
12
13         We still use AST nodes (ScopeNodes, particularly FunctionBodyNodes) within
14         the runtime, which means that these nodes must be persisted outside of the
15         arena, contain both parser & runtime data, etc.  This is all a bit of a mess.
16
17         Move functionality into a new FunctionExecutable class.
18
19         * API/JSCallbackFunction.cpp:
20         * API/JSObjectRef.cpp:
21         * JavaScriptCore.exp:
22         * JavaScriptCore.xcodeproj/project.pbxproj:
23         * bytecode/CodeBlock.cpp:
24         (JSC::CodeBlock::CodeBlock):
25         (JSC::CodeBlock::markAggregate):
26         (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
27         (JSC::CodeBlock::lineNumberForBytecodeOffset):
28         (JSC::CodeBlock::shrinkToFit):
29         * bytecode/CodeBlock.h:
30         (JSC::CodeBlock::getBytecodeIndex):
31         (JSC::CodeBlock::discardBytecode):
32         (JSC::CodeBlock::instructionCount):
33         (JSC::CodeBlock::getJITCode):
34         (JSC::CodeBlock::executablePool):
35         (JSC::CodeBlock::ownerExecutable):
36         (JSC::CodeBlock::extractExceptionInfo):
37         (JSC::CodeBlock::addFunctionDecl):
38         (JSC::CodeBlock::functionDecl):
39         (JSC::CodeBlock::numberOfFunctionDecls):
40         (JSC::CodeBlock::addFunctionExpr):
41         (JSC::CodeBlock::functionExpr):
42         (JSC::GlobalCodeBlock::GlobalCodeBlock):
43         (JSC::ProgramCodeBlock::ProgramCodeBlock):
44         (JSC::EvalCodeBlock::EvalCodeBlock):
45         (JSC::FunctionCodeBlock::FunctionCodeBlock):
46         (JSC::NativeCodeBlock::NativeCodeBlock):
47         * bytecode/EvalCodeCache.h:
48         * bytecode/SamplingTool.cpp:
49         (JSC::SamplingTool::doRun):
50         * bytecompiler/BytecodeGenerator.cpp:
51         (JSC::BytecodeGenerator::BytecodeGenerator):
52         (JSC::BytecodeGenerator::emitNewFunction):
53         (JSC::BytecodeGenerator::emitNewFunctionExpression):
54         * bytecompiler/BytecodeGenerator.h:
55         * debugger/Debugger.cpp:
56         (JSC::Debugger::recompileAllJSFunctions):
57         * interpreter/CachedCall.h:
58         (JSC::CachedCall::CachedCall):
59         * interpreter/CallFrameClosure.h:
60         * interpreter/Interpreter.cpp:
61         (JSC::Interpreter::unwindCallFrame):
62         (JSC::Interpreter::throwException):
63         (JSC::Interpreter::execute):
64         (JSC::Interpreter::prepareForRepeatCall):
65         (JSC::Interpreter::debug):
66         (JSC::Interpreter::privateExecute):
67         (JSC::Interpreter::retrieveLastCaller):
68         * interpreter/Interpreter.h:
69         * jit/JIT.cpp:
70         (JSC::JIT::privateCompile):
71         * jit/JIT.h:
72         (JSC::JIT::compile):
73         * jit/JITOpcodes.cpp:
74         (JSC::JIT::privateCompileCTIMachineTrampolines):
75         (JSC::JIT::emit_op_new_func):
76         (JSC::JIT::emit_op_new_func_exp):
77         * jit/JITStubs.cpp:
78         (JSC::DEFINE_STUB_FUNCTION):
79         * jit/JITStubs.h:
80         (JSC::):
81         * parser/Nodes.cpp:
82         (JSC::FunctionBodyNode::reparseDataIfNecessary):
83         * parser/Nodes.h:
84         (JSC::EvalNode::partialDestroyData):
85         * parser/Parser.h:
86         * profiler/ProfileGenerator.cpp:
87         * profiler/Profiler.cpp:
88         (JSC::Profiler::createCallIdentifier):
89         (JSC::createCallIdentifierFromFunctionImp):
90         * runtime/Arguments.h:
91         (JSC::Arguments::getArgumentsData):
92         (JSC::Arguments::Arguments):
93         (JSC::JSActivation::copyRegisters):
94         * runtime/ArrayPrototype.cpp:
95         (JSC::isNumericCompareFunction):
96         * runtime/CallData.h:
97         (JSC::):
98         * runtime/Collector.cpp:
99         (JSC::Heap::collect):
100         * runtime/ConstructData.h:
101         (JSC::):
102         * runtime/ExceptionHelpers.cpp:
103         (JSC::createUndefinedVariableError):
104         (JSC::createInvalidParamError):
105         (JSC::createNotAConstructorError):
106         (JSC::createNotAFunctionError):
107         (JSC::createNotAnObjectError):
108         * runtime/Executable.cpp: Added.
109         (JSC::EvalExecutable::generateBytecode):
110         (JSC::ProgramExecutable::generateBytecode):
111         (JSC::FunctionExecutable::generateBytecode):
112         (JSC::EvalExecutable::generateJITCode):
113         (JSC::ProgramExecutable::generateJITCode):
114         (JSC::FunctionExecutable::generateJITCode):
115         (JSC::FunctionExecutable::isHostFunction):
116         (JSC::FunctionExecutable::markAggregate):
117         (JSC::FunctionExecutable::reparseExceptionInfo):
118         (JSC::EvalExecutable::reparseExceptionInfo):
119         (JSC::FunctionExecutable::recompile):
120         (JSC::FunctionExecutable::FunctionExecutable):
121         * runtime/Executable.h:
122         (JSC::ExecutableBase::~ExecutableBase):
123         (JSC::ExecutableBase::ExecutableBase):
124         (JSC::ExecutableBase::source):
125         (JSC::ExecutableBase::sourceID):
126         (JSC::ExecutableBase::lastLine):
127         (JSC::ExecutableBase::usesEval):
128         (JSC::ExecutableBase::usesArguments):
129         (JSC::ExecutableBase::needsActivation):
130         (JSC::ExecutableBase::astNode):
131         (JSC::ExecutableBase::generatedJITCode):
132         (JSC::ExecutableBase::getExecutablePool):
133         (JSC::EvalExecutable::EvalExecutable):
134         (JSC::EvalExecutable::bytecode):
135         (JSC::EvalExecutable::varStack):
136         (JSC::EvalExecutable::evalNode):
137         (JSC::EvalExecutable::jitCode):
138         (JSC::ProgramExecutable::ProgramExecutable):
139         (JSC::ProgramExecutable::reparseExceptionInfo):
140         (JSC::ProgramExecutable::bytecode):
141         (JSC::ProgramExecutable::programNode):
142         (JSC::ProgramExecutable::jitCode):
143         (JSC::FunctionExecutable::FunctionExecutable):
144         (JSC::FunctionExecutable::name):
145         (JSC::FunctionExecutable::bytecode):
146         (JSC::FunctionExecutable::generatedBytecode):
147         (JSC::FunctionExecutable::usesEval):
148         (JSC::FunctionExecutable::usesArguments):
149         (JSC::FunctionExecutable::parameterCount):
150         (JSC::FunctionExecutable::paramString):
151         (JSC::FunctionExecutable::isGenerated):
152         (JSC::FunctionExecutable::body):
153         (JSC::FunctionExecutable::jitCode):
154         (JSC::FunctionExecutable::createNativeThunk):
155         * runtime/FunctionConstructor.cpp:
156         (JSC::constructFunction):
157         * runtime/FunctionPrototype.cpp:
158         (JSC::functionProtoFuncToString):
159         * runtime/JSActivation.cpp:
160         (JSC::JSActivation::JSActivation):
161         (JSC::JSActivation::markChildren):
162         (JSC::JSActivation::isDynamicScope):
163         (JSC::JSActivation::argumentsGetter):
164         * runtime/JSActivation.h:
165         (JSC::JSActivation::JSActivationData::JSActivationData):
166         * runtime/JSFunction.cpp:
167         (JSC::JSFunction::isHostFunction):
168         (JSC::JSFunction::JSFunction):
169         (JSC::JSFunction::~JSFunction):
170         (JSC::JSFunction::markChildren):
171         (JSC::JSFunction::getCallData):
172         (JSC::JSFunction::call):
173         (JSC::JSFunction::lengthGetter):
174         (JSC::JSFunction::getConstructData):
175         (JSC::JSFunction::construct):
176         * runtime/JSFunction.h:
177         (JSC::JSFunction::executable):
178         (JSC::FunctionExecutable::make):
179         * runtime/JSGlobalData.cpp:
180         (JSC::JSGlobalData::JSGlobalData):
181         (JSC::JSGlobalData::numericCompareFunction):
182         * runtime/JSGlobalData.h:
183
184 2009-08-17  Mark Rowe  <mrowe@apple.com>
185
186         Reviewed by Darin Adler.
187
188         Fix 300,000+ leaks seen during the regression tests.
189
190         EvalCodeCache::get was heap-allocating an EvalExecutable instance without adopting the initial reference.
191         While fixing this we noticed that EvalExecutable was a RefCounted type that was sometimes stack allocated.
192         To make this cleaner and to prevent clients from attempting to ref a stack-allocated instance, we move the
193         refcounting down to a new CacheableEvalExecutable class that derives from EvalExecutable. EvalCodeCache::get
194         now uses CacheableEvalExecutable::create and avoids the leak.
195
196         * bytecode/EvalCodeCache.h:
197         (JSC::EvalCodeCache::get):
198         * interpreter/Interpreter.cpp:
199         (JSC::Interpreter::callEval):
200         * runtime/Executable.h:
201         (JSC::CacheableEvalExecutable::create):
202         (JSC::CacheableEvalExecutable::CacheableEvalExecutable):
203
204 2009-08-17  Oliver Hunt  <oliver@apple.com>
205
206         RS=Mark Rowe.
207
208         REGRESSION (r47292): Prototype.js is broken by ES5 Arguments changes
209         https://bugs.webkit.org/show_bug.cgi?id=28341
210         <rdar://problem/7145615>
211
212         Reverting r47292.  Alas Prototype.js breaks with Arguments inheriting
213         from Array as ES5 attempted.  Prototype.js defines $A in terms of a 
214         function it places on (among other global objects) the Array prototype,
215         thus breaking $A for arrays.
216
217         * runtime/Arguments.h:
218         (JSC::Arguments::Arguments):
219         * runtime/JSGlobalObject.cpp:
220         (JSC::JSGlobalObject::reset):
221         (JSC::JSGlobalObject::markChildren):
222         * runtime/JSGlobalObject.h:
223         (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
224         * runtime/ObjectPrototype.cpp:
225         (JSC::ObjectPrototype::ObjectPrototype):
226         * runtime/ObjectPrototype.h:
227         * tests/mozilla/ecma_3/Function/arguments-001.js:
228
229 2009-08-17  Peter Kasting  <pkasting@google.com>
230
231         Reviewed by Steve Falkenburg.
232
233         https://bugs.webkit.org/show_bug.cgi?id=27323
234         Only add Cygwin to the path when it isn't already there.  This avoids
235         causing problems for people who purposefully have non-Cygwin versions of
236         executables like svn in front of the Cygwin ones in their paths.
237
238         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
239         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
240         * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
241         * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
242         * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops:
243
244 2009-08-17  Xan Lopez  <xlopez@igalia.com>
245
246         Reviewed by Mark Rowe.
247
248         Fix build with FAST_MALLOC_MATCH_VALIDATION enabled.
249
250         * wtf/FastMalloc.cpp:
251         (WTF::fastMalloc):
252         (WTF::fastCalloc):
253         (WTF::fastRealloc):
254
255 2009-08-16  Holger Hans Peter Freyther  <zecke@selfish.org>
256
257         Reviewed by Mark Rowe.
258
259         Fix crash on ./ecma_2/RegExp/exec-002.js.
260         https://bugs.webkit.org/show_bug.cgi?id=28353
261
262         Change the order of freeParenthesesDisjunctionContext and
263         popParenthesesDisjunctionContext on all call sites as the pop
264         method is accessing backTrack->lastContext which is the context
265         that is about to be freed.
266
267         * yarr/RegexInterpreter.cpp:
268         (JSC::Yarr::Interpreter::parenthesesDoBacktrack):
269         (JSC::Yarr::Interpreter::backtrackParentheses):
270
271 2009-08-16  Holger Hans Peter Freyther  <zecke@selfish.org>
272
273         Reviewed by Mark Rowe.
274
275         https://bugs.webkit.org/show_bug.cgi?id=28352
276
277         Fix coding style violations. Use m_ for C++ class members. Remove
278         trailing whitespace on empty lines.
279
280         * yarr/RegexInterpreter.cpp:
281         (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::ParenthesesDisjunctionContext):
282         (JSC::Yarr::Interpreter::tryConsumeCharacter):
283         (JSC::Yarr::Interpreter::tryConsumeBackReference):
284         (JSC::Yarr::Interpreter::parenthesesDoBacktrack):
285         (JSC::Yarr::Interpreter::backtrackParentheses):
286         (JSC::Yarr::ByteCompiler::ByteCompiler):
287         (JSC::Yarr::ByteCompiler::compile):
288         (JSC::Yarr::ByteCompiler::checkInput):
289         (JSC::Yarr::ByteCompiler::assertionBOL):
290         (JSC::Yarr::ByteCompiler::assertionEOL):
291         (JSC::Yarr::ByteCompiler::assertionWordBoundary):
292         (JSC::Yarr::ByteCompiler::atomPatternCharacter):
293         (JSC::Yarr::ByteCompiler::atomCharacterClass):
294         (JSC::Yarr::ByteCompiler::atomBackReference):
295         (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin):
296         (JSC::Yarr::ByteCompiler::atomParentheticalAssertionBegin):
297         (JSC::Yarr::ByteCompiler::popParenthesesStack):
298         (JSC::Yarr::ByteCompiler::closeAlternative):
299         (JSC::Yarr::ByteCompiler::closeBodyAlternative):
300         (JSC::Yarr::ByteCompiler::atomParenthesesEnd):
301         (JSC::Yarr::ByteCompiler::regexBegin):
302         (JSC::Yarr::ByteCompiler::alterantiveBodyDisjunction):
303         (JSC::Yarr::ByteCompiler::alterantiveDisjunction):
304         (JSC::Yarr::ByteCompiler::emitDisjunction):
305
306 2009-08-15  Mark Rowe  <mrowe@apple.com>
307
308         Fix the build with JIT disabled.
309
310         * runtime/Arguments.h: Only compile the jitCode method when the JIT is enabled.
311         * runtime/Executable.h: Include PrototypeFunction.h so the compiler knows what
312         NativeFunctionWrapper is when the JIT is disabled.
313
314 2009-08-15  Adam Bergkvist  <adam.bergkvist@ericsson.com>
315
316         Reviewed by Sam Weinig.
317
318         Added ENABLE_EVENTSOURCE flag.
319         https://bugs.webkit.org/show_bug.cgi?id=14997
320
321         * Configurations/FeatureDefines.xcconfig:
322
323 2009-08-14  Gavin Barraclough  <barraclough@apple.com>
324
325         Reviewed by NOBODY (build fix).
326
327         * parser/Parser.h:
328         (JSC::EvalExecutable::parse):
329         (JSC::ProgramExecutable::parse):
330         * runtime/Executable.h:
331
332 2009-08-14  Gavin Barraclough  <barraclough@apple.com>
333
334         Reviewed by Oliver Hunt.
335
336         Remove AST nodes from use within the Runtime (outside of parsing), stage 1
337         https://bugs.webkit.org/show_bug.cgi?id=28330
338
339         Remove the EvalNode and ProgramNode from use in the runtime.  They still exist
340         after this patch, but are hidden behind EvalExecutable and FunctionExecutable,
341         and are also still reachable behind CodeBlock::m_ownerNode.
342
343         The next step will be to beat back FunctionBodyNode in the same fashion.
344         Then remove the usage via CodeBlock, then only construct these nodes only on
345         demand during bytecode generation.
346
347         * JavaScriptCore.xcodeproj/project.pbxproj:
348         * bytecode/CodeBlock.h:
349         (JSC::GlobalCodeBlock::GlobalCodeBlock):
350         (JSC::GlobalCodeBlock::~GlobalCodeBlock):
351         (JSC::ProgramCodeBlock::ProgramCodeBlock):
352         (JSC::EvalCodeBlock::EvalCodeBlock):
353         (JSC::FunctionCodeBlock::FunctionCodeBlock):
354         (JSC::NativeCodeBlock::NativeCodeBlock):
355         * bytecode/EvalCodeCache.h:
356         (JSC::EvalCodeCache::get):
357         * debugger/Debugger.cpp:
358         (JSC::evaluateInGlobalCallFrame):
359         * debugger/DebuggerCallFrame.cpp:
360         (JSC::DebuggerCallFrame::evaluate):
361         * interpreter/Interpreter.cpp:
362         (JSC::Interpreter::callEval):
363         (JSC::Interpreter::execute):
364         * interpreter/Interpreter.h:
365         * parser/Nodes.cpp:
366         (JSC::FunctionBodyNode::createNativeThunk):
367         (JSC::FunctionBodyNode::generateBytecode):
368         (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse):
369         * parser/Parser.h:
370         (JSC::Parser::parse):
371         (JSC::Parser::reparse):
372         (JSC::Parser::parseFunctionFromGlobalCode):
373         (JSC::::parse):
374         * runtime/Completion.cpp:
375         (JSC::checkSyntax):
376         (JSC::evaluate):
377         * runtime/Error.cpp:
378         (JSC::throwError):
379         * runtime/Error.h:
380         * runtime/Executable.h: Added.
381         (JSC::TemplateExecutable::TemplateExecutable):
382         (JSC::TemplateExecutable::markAggregate):
383         (JSC::TemplateExecutable::sourceURL):
384         (JSC::TemplateExecutable::lineNo):
385         (JSC::TemplateExecutable::bytecode):
386         (JSC::TemplateExecutable::jitCode):
387         (JSC::EvalExecutable::EvalExecutable):
388         (JSC::ProgramExecutable::ProgramExecutable):
389         * runtime/FunctionConstructor.cpp:
390         (JSC::constructFunction):
391         * runtime/FunctionConstructor.h:
392         * runtime/JSGlobalData.cpp:
393         (JSC::JSGlobalData::numericCompareFunction):
394         * runtime/JSGlobalObject.cpp:
395         (JSC::JSGlobalObject::~JSGlobalObject):
396         (JSC::JSGlobalObject::markChildren):
397         * runtime/JSGlobalObject.h:
398         (JSC::JSGlobalObject::codeBlocks):
399         * runtime/JSGlobalObjectFunctions.cpp:
400         (JSC::globalFuncEval):
401
402 2009-08-14  Darin Adler  <darin@apple.com>
403
404         Reviewed by Sam Weinig.
405
406         Rename the confusing isObject(<class>) to inherits(<class>).
407         It still works on non-objects, returning false.
408
409         * runtime/ArrayConstructor.cpp:
410         (JSC::arrayConstructorIsArray): Removed unneeded isObject call
411         and updated remaining isObject call to new name, inherits.
412
413         * runtime/JSCell.h: Renamed isObject(<class>) to inherits(<class>)
414         but more importantly, made it non-virtual (it was already inline)
415         so it is now as fast as JSObject::inherits was.
416
417         * runtime/JSObject.h: Removed inherits function since the one
418         in the base class is fine as-is. Also made various JSCell functions
419         that should not be called on JSObject uncallable by making them
420         both private and not implemented.
421         (JSC::JSCell::inherits): Updated name.
422         (JSC::JSValue::inherits): Ditto.
423
424         * debugger/Debugger.cpp:
425         (JSC::Debugger::recompileAllJSFunctions):
426         * interpreter/Interpreter.cpp:
427         (JSC::Interpreter::unwindCallFrame):
428         * runtime/ArrayPrototype.cpp:
429         (JSC::arrayProtoFuncToString):
430         (JSC::arrayProtoFuncToLocaleString):
431         (JSC::arrayProtoFuncConcat):
432         * runtime/BooleanPrototype.cpp:
433         (JSC::booleanProtoFuncToString):
434         (JSC::booleanProtoFuncValueOf):
435         * runtime/DateConstructor.cpp:
436         (JSC::constructDate):
437         * runtime/DatePrototype.cpp:
438         (JSC::dateProtoFuncToString):
439         (JSC::dateProtoFuncToUTCString):
440         (JSC::dateProtoFuncToISOString):
441         (JSC::dateProtoFuncToDateString):
442         (JSC::dateProtoFuncToTimeString):
443         (JSC::dateProtoFuncToLocaleString):
444         (JSC::dateProtoFuncToLocaleDateString):
445         (JSC::dateProtoFuncToLocaleTimeString):
446         (JSC::dateProtoFuncGetTime):
447         (JSC::dateProtoFuncGetFullYear):
448         (JSC::dateProtoFuncGetUTCFullYear):
449         (JSC::dateProtoFuncToGMTString):
450         (JSC::dateProtoFuncGetMonth):
451         (JSC::dateProtoFuncGetUTCMonth):
452         (JSC::dateProtoFuncGetDate):
453         (JSC::dateProtoFuncGetUTCDate):
454         (JSC::dateProtoFuncGetDay):
455         (JSC::dateProtoFuncGetUTCDay):
456         (JSC::dateProtoFuncGetHours):
457         (JSC::dateProtoFuncGetUTCHours):
458         (JSC::dateProtoFuncGetMinutes):
459         (JSC::dateProtoFuncGetUTCMinutes):
460         (JSC::dateProtoFuncGetSeconds):
461         (JSC::dateProtoFuncGetUTCSeconds):
462         (JSC::dateProtoFuncGetMilliSeconds):
463         (JSC::dateProtoFuncGetUTCMilliseconds):
464         (JSC::dateProtoFuncGetTimezoneOffset):
465         (JSC::dateProtoFuncSetTime):
466         (JSC::setNewValueFromTimeArgs):
467         (JSC::setNewValueFromDateArgs):
468         (JSC::dateProtoFuncSetYear):
469         (JSC::dateProtoFuncGetYear):
470         * runtime/FunctionPrototype.cpp:
471         (JSC::functionProtoFuncToString):
472         * runtime/JSActivation.cpp:
473         (JSC::JSActivation::argumentsGetter):
474         * runtime/JSValue.h:
475         * runtime/RegExpConstructor.cpp:
476         (JSC::constructRegExp):
477         * runtime/RegExpPrototype.cpp:
478         (JSC::regExpProtoFuncTest):
479         (JSC::regExpProtoFuncExec):
480         (JSC::regExpProtoFuncCompile):
481         (JSC::regExpProtoFuncToString):
482         * runtime/ScopeChain.cpp:
483         (JSC::ScopeChain::localDepth):
484         * runtime/StringPrototype.cpp:
485         (JSC::stringProtoFuncReplace):
486         (JSC::stringProtoFuncToString):
487         (JSC::stringProtoFuncMatch):
488         (JSC::stringProtoFuncSearch):
489         (JSC::stringProtoFuncSplit):
490         Updated to new name, inherits, from old name, isObject.
491
492 2009-07-31  Harald Fernengel  <harald.fernengel@nokia.com>
493
494         Reviewed by Simon Hausmann.
495
496         Adding QNX as a platform. Currently only tested with Qt.
497
498         https://bugs.webkit.org/show_bug.cgi?id=27885
499
500         * JavaScriptCore/runtime/Collector.cpp: Added retrieving of stack base
501           since QNX doesn't have the pthread _nt functions
502         * JavaScriptCore/wtf/Platform.h: Added WTF_PLATFORM_QNX and corresponding
503           defines
504         * WebCore/bridge/npapi.h: Build fix for missing typedefs on QNX
505
506 2009-08-14  Gabor Loki  <loki@inf.u-szeged.hu>
507
508         Reviewed by Simon Hausmann.
509
510         Currently generic ARM and ARMv7 platforms work only with JSVALUE32
511         https://bugs.webkit.org/show_bug.cgi?id=28300
512
513         * wtf/Platform.h:
514
515 2009-08-14  Gabor Loki  <loki@inf.u-szeged.hu>
516
517         Reviewed by Simon Hausmann.
518
519         Enable JIT on ARM for QT by default
520         https://bugs.webkit.org/show_bug.cgi?id=28259
521
522         * wtf/Platform.h:
523
524 2009-08-14  Gabor Loki  <loki@inf.u-szeged.hu>
525
526         Reviewed by Simon Hausmann.
527
528         Enable YARR_JIT on ARM for QT by default
529         https://bugs.webkit.org/show_bug.cgi?id=28259
530
531         * wtf/Platform.h:
532
533 2009-08-14  Oliver Hunt  <oliver@apple.com>
534
535         Reviewed by Gavin Barraclough.
536
537         [ES5] Arguments object should inherit from Array
538         https://bugs.webkit.org/show_bug.cgi?id=28298
539
540         Make the Arguments object conform to the behaviour specified in ES5.
541         The simple portion of this is to make Arguments use Array.prototype
542         as its prototype rather than Object.prototype.
543
544         The spec then requires us to set instance.constructor to the pristine
545         Object constructor, and instance.toString and instance.toLocaleString
546         to the pristine versions from Object.prototype.  To do this we now 
547         make the ObjectPrototype constructor return its toString and
548         toLocaleString functions (similar to the call and apply functions
549         from FunctionPrototype).
550
551         Oddly enough this reports itself as a slight win, but given the code
552         isn't hit in the tests that claim to have improved I put this down to
553         code motion.
554
555         * runtime/Arguments.h:
556         (JSC::Arguments::Arguments):
557         (JSC::Arguments::initializeStandardProperties):
558         * runtime/JSGlobalObject.cpp:
559         (JSC::JSGlobalObject::reset):
560         (JSC::JSGlobalObject::markChildren):
561         * runtime/JSGlobalObject.h:
562         (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
563         (JSC::JSGlobalObject::objectConstructor):
564         (JSC::JSGlobalObject::objectToStringFunction):
565         (JSC::JSGlobalObject::objectToLocaleStringFunction):
566         * runtime/ObjectPrototype.cpp:
567         (JSC::ObjectPrototype::ObjectPrototype):
568         * runtime/ObjectPrototype.h:
569         * tests/mozilla/ecma_3/Function/arguments-001.js:
570           Update test to new es5 behaviour
571
572 2009-08-14  Oliver Hunt  <oliver@apple.com>
573
574         Reviewed by NOBODY (Build fix).
575
576         Remove MarkStack::drain from the JSC exports file
577
578         MarkStack::drain is now marked inline, the including it in the exports file
579         produces an ld warning
580
581         * JavaScriptCore.exp:
582
583 2009-08-13  Sam Weinig  <sam@webkit.org>
584
585         Reviewed by Oliver Hunt.
586
587         Remove accidentally left in debugging statement.
588
589         * runtime/JSArray.h:
590         (JSC::MarkStack::drain):
591
592 2009-08-13  Oliver Hunt  <oliver@apple.com>
593
594         Reviewed by Maciej Stachowiak.
595
596         [ES5] Implement Array.isArray
597         https://bugs.webkit.org/show_bug.cgi?id=28296
598
599         Add support for Array.isArray to the Array constructor
600
601         * runtime/ArrayConstructor.cpp:
602         (JSC::ArrayConstructor::ArrayConstructor):
603         (JSC::arrayConstructorIsArray):
604         * runtime/ArrayConstructor.h:
605         * runtime/CommonIdentifiers.h:
606         * runtime/JSArray.h:
607         (JSC::MarkStack::drain):
608         * runtime/JSGlobalObject.cpp:
609         (JSC::JSGlobalObject::reset):
610
611 2009-08-13  Oliver Hunt  <oliver@apple.com>
612
613         Reviewed by NOBODY (Buildfix).
614
615         Attempt to fix windows build
616
617         * runtime/Collector.cpp:
618
619 2009-08-13  Oliver Hunt  <oliver@apple.com>
620
621         Reviewed by Maciej Stachowiak.
622
623         Devirtualise marking
624         https://bugs.webkit.org/show_bug.cgi?id=28294
625
626         Add a bit to TypeInfo to indicate that an object uses the standard
627         JSObject::markChildren method.  This allows us to devirtualise marking
628         of most objects (though a branch is still needed).  We also add a branch
629         to identify arrays thus devirtualising marking in that case as well.
630
631         In order to make the best use of this devirtualisation I've also reworked
632         the MarkStack::drain() logic to make the iteration more efficient.
633
634         * API/JSCallbackConstructor.h:
635         (JSC::JSCallbackConstructor::createStructure):
636         * API/JSCallbackFunction.h:
637         (JSC::JSCallbackFunction::createStructure):
638         * JavaScriptCore.exp:
639         * runtime/BooleanObject.h:
640         (JSC::BooleanObject::createStructure):
641         * runtime/FunctionPrototype.h:
642         (JSC::FunctionPrototype::createStructure):
643         * runtime/InternalFunction.h:
644         (JSC::InternalFunction::createStructure):
645         * runtime/JSAPIValueWrapper.h:
646         (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
647         * runtime/JSArray.cpp:
648         (JSC::JSArray::markChildren):
649         * runtime/JSArray.h:
650         (JSC::JSArray::markChildrenDirect):
651         (JSC::MarkStack::drain):
652         * runtime/JSByteArray.cpp:
653         (JSC::JSByteArray::createStructure):
654         * runtime/JSCell.h:
655         (JSC::MarkStack::append):
656         * runtime/JSGlobalData.cpp:
657         (JSC::JSGlobalData::JSGlobalData):
658         * runtime/JSNumberCell.h:
659         (JSC::JSNumberCell::createStructure):
660         * runtime/JSONObject.h:
661         (JSC::JSONObject::createStructure):
662         * runtime/JSObject.cpp:
663         (JSC::JSObject::markChildren):
664         * runtime/JSObject.h:
665         (JSC::JSObject::markChildrenDirect):
666         (JSC::JSObject::createStructure):
667         * runtime/JSString.h:
668         (JSC::JSString::createStructure):
669         * runtime/JSType.h:
670         (JSC::):
671         * runtime/MarkStack.h:
672         (JSC::MarkStack::MarkStack):
673         (JSC::MarkStack::MarkSet::MarkSet):
674         (JSC::MarkStack::MarkStackArray::last):
675         * runtime/MathObject.h:
676         (JSC::MathObject::createStructure):
677         * runtime/NumberConstructor.h:
678         (JSC::NumberConstructor::createStructure):
679         * runtime/NumberObject.h:
680         (JSC::NumberObject::createStructure):
681         * runtime/RegExpConstructor.h:
682         (JSC::RegExpConstructor::createStructure):
683         * runtime/RegExpObject.h:
684         (JSC::RegExpObject::createStructure):
685         * runtime/StringObjectThatMasqueradesAsUndefined.h:
686         (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
687         * runtime/TypeInfo.h:
688         (JSC::TypeInfo::hasDefaultMark):
689
690 2009-08-13  Darin Adler  <darin@apple.com>
691
692         Reviewed by Mark Rowe.
693
694         Some small bits of housekeeping.
695
696         * JavaScriptCore.xcodeproj/project.pbxproj: Make Parser.h
697         project instead of private. Remove JSONObject.lut.h.
698
699         * assembler/ARMAssembler.h: Remove unneeded WTF prefix.
700         * assembler/AssemblerBufferWithConstantPool.h: Ditto.
701         * bytecompiler/BytecodeGenerator.h: Ditto.
702
703         * wtf/SegmentedVector.h: Add a "using" statement as we do
704         with the other WTF headers.
705
706 2009-08-13  Darin Adler  <darin@apple.com>
707
708         Fix Tiger build.
709
710         * parser/Grammar.y: Use a template function so we can compile
711         setStatementLocation even if it comes before YYLTYPE is defined.
712
713 2009-08-13  Darin Adler  <darin@apple.com>
714
715         Reviewed by George Staikos.
716
717         Too much use of void* in Grammar.y
718         https://bugs.webkit.org/show_bug.cgi?id=28287
719
720         * parser/Grammar.y: Changed all the helper functions to
721         take a JSGlobalData* instead of a void*. A couple formatting
722         tweaks that I missed when breaking this into pieces.
723
724 2009-08-13  Darin Adler  <darin@apple.com>
725
726         Reviewed by George Staikos.
727
728         Another part of https://bugs.webkit.org/show_bug.cgi?id=28287
729
730         * parser/Grammar.y: Reduced and sorted includes. Tweaked comment
731         format. Marked a few more functions inline.
732
733 2009-08-13  Darin Adler  <darin@apple.com>
734
735         Reviewed by George Staikos.
736
737         Another part of https://bugs.webkit.org/show_bug.cgi?id=28287
738
739         * parser/Grammar.y: Pass the number to the PropertyNode instead of
740         first turning it into an Identifier.
741
742         * parser/NodeConstructors.h:
743         (JSC::PropertyNode::PropertyNode): Add an overload that takes a double
744         so the code to convert to a string can be here instead of Grammar.y.
745         * parser/Nodes.h: Ditto.
746
747 2009-08-13  Darin Adler  <darin@apple.com>
748
749         Reviewed by George Staikos.
750
751         Another part of https://bugs.webkit.org/show_bug.cgi?id=28287
752
753         * parser/Grammar.y: Eliminate the DBG macro.
754
755 2009-08-13  Darin Adler  <darin@apple.com>
756
757         Reviewed by George Staikos.
758
759         Another part of https://bugs.webkit.org/show_bug.cgi?id=28287
760
761         * parser/Grammar.y: Eliminate the SET_EXCEPTION_LOCATION macro.
762
763 2009-08-13  Darin Adler  <darin@apple.com>
764
765         Reviewed by George Staikos.
766
767         George asked me to break the patch from
768         https://bugs.webkit.org/show_bug.cgi?id=28287
769         into smaller pieces and land it in stages.
770
771         * parser/Grammar.y: Eliminate the LEXER macro.
772
773 2009-08-13  Mark Rowe  <mrowe@apple.com>
774
775         Try some more to fix the Windows build.
776
777         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export a new symbol.
778         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Ditto.
779
780 2009-08-13  Mark Rowe  <mrowe@apple.com>
781
782         Try and fix the Windows build.
783
784         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export a new symbol.
785         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Ditto.
786
787 2009-08-13  Darin Adler  <darin@apple.com>
788
789         Reviewed by David Levin.
790
791         JavaScriptCore tweaks to get ready for the parser arena
792         https://bugs.webkit.org/show_bug.cgi?id=28243
793
794         Eliminate dependencies on Nodes.h outside JavaScriptCore,
795         and cut down on them inside JavaScriptCore.
796
797         Change regular expression parsing to use identifiers as
798         with other strings we parse.
799
800         Fix a couple things that are needed to use const Identifier
801         more, which will be part of the parser arena work.
802
803         * JavaScriptCore.exp: Resorted and updated.
804
805         * JavaScriptCore.xcodeproj/project.pbxproj: Changed
806         CollectorHeapIterator.h to be project-internal.
807
808         * bytecompiler/BytecodeGenerator.cpp:
809         (JSC::BytecodeGenerator::emitPushNewScope): Added const.
810         * bytecompiler/BytecodeGenerator.h: Ditto.
811
812         * debugger/Debugger.cpp:
813         (JSC::Debugger::recompileAllJSFunctions): Moved this function
814         here from WebCore. Here is better since it uses so many internals.
815         Removed unimportant optimization for the no listener case.
816         * debugger/Debugger.h: Ditto. Also removed unneeded include
817         and tweaked formatting and comments.
818
819         * debugger/DebuggerCallFrame.cpp:
820         (JSC::DebuggerCallFrame::functionName): Call asFunction instead
821         of doing the unchecked static_cast.
822         (JSC::DebuggerCallFrame::calculatedFunctionName): Ditto.
823
824         * jit/JITStubs.cpp:
825         (JSC::op_call_JSFunction): Call isHostFunction on the body rather
826         than on the JSFunction.
827         (JSC::vm_lazyLinkCall): Ditto.
828         (JSC::op_construct_JSConstruct): Ditto.
829
830         * parser/Grammar.y: Changed callers to use new scanRegExp with
831         out arguments instead of relying on state in the Lexer. And
832         callers that just want to skip a regular expression to use
833         skipRegExp.
834
835         * parser/Lexer.cpp:
836         (JSC::Lexer::scanRegExp): Changed to use out arguments, and to
837         add a prefix argument so we can add in the "=" character as needed.
838         Also rewrote to streamline the logic a bit inspired by suggestions
839         by David Levin.
840         (JSC::Lexer::skipRegExp): Added. Version of the function above that
841         does not actually put the regular expression into a string.
842         (JSC::Lexer::clear): Removed code to clear m_pattern and m_flags.
843         * parser/Lexer.h: Changed scanRegExp to have out arguments. Added
844         skipRegExp. Eliminated pattern, flags, m_pattern, and m_flags.
845
846         * parser/NodeConstructors.h:
847         (JSC::RegExpNode::RegExpNode): Changed to take const Identifier&.
848         * parser/Nodes.cpp:
849         (JSC::RegExpNode::emitBytecode): Changed since m_pattern and
850         m_flags are now Identifier instead of UString.
851         (JSC::FunctionBodyNode::make): Moved this function here instead
852         of putting it in the JSFunction.h header.
853         * parser/Nodes.h: Changed RegExpNode to use Identifier.
854
855         * profiler/Profiler.cpp:
856         (JSC::Profiler::createCallIdentifier): Changed to use isHostFunction
857         on the body instead of on the JSFunction object.
858         * runtime/FunctionPrototype.cpp:
859         (JSC::functionProtoFuncToString): Ditto.
860
861         * runtime/JSFunction.cpp:
862         (JSC::JSFunction::isHostFunction): Moved here from header.
863         (JSC::JSFunction::isHostFunctionNonInline): Added.
864         (JSC::JSFunction::JSFunction): Removed unneeded initialization of
865         m_body to 0.
866         (JSC::JSFunction::setBody): Moved here from header.
867
868         * runtime/JSFunction.h: Removed unneeded includes. Moved private
869         constructor down to the private section. Made virtual functions
870         private. Removed unneeded overload of setBody and moved the body
871         of the function into the .cpp file. Changed assertions to use
872         the non-inline version of isHostFunction.
873
874         * runtime/PropertySlot.cpp:
875         (JSC::PropertySlot::functionGetter): Use asFunction instead
876         of doing the unchecked static_cast.
877
878         * wtf/SegmentedVector.h:
879         (WTF::SegmentedVector::isEmpty): Added.
880
881 2009-08-13  Mark Rowe  <mrowe@apple.com>
882
883         Rubber-stamped by Darin Adler.
884
885         Use the version of operator new that takes a JSGlobalData when allocating FuncDeclNode and FuncExprNode
886         from within the grammar to prevent these nodes from being leaked.
887
888         * parser/Grammar.y:
889
890 2009-08-13  Simon Hausmann  <simon.hausmann@nokia.com>
891
892         Reviewed by Ariya Hidayat.
893
894         Remove the special-case for Qt wrt JSVALUE_32 introduced in
895         r46709. It must've been a dependency issue on the bot, as
896         after a manual build all the tests pass on amd64 and ia32.
897
898         * wtf/Platform.h:
899
900 2009-08-12  Gabor Loki  <loki@inf.u-szeged.hu>
901
902         Reviewed by Gavin Barraclough.
903
904         Add optimize call and property access support for ARM JIT.
905         https://bugs.webkit.org/show_bug.cgi?id=24986
906
907         For tightly coupled sequences the BEGIN_UNINTERRUPTED_SEQUENCE and
908         END_UNINTERRUPTED_SEQUENCE macros have been introduced which ensure
909         space for instructions and constants of the named sequence. This
910         method is vital for those architecture which are using constant pool.
911
912         The 'latePatch' method - which was linked to JmpSrc - is replaced with
913         a port specific solution (each calls are marked to place their address
914         on the constant pool).
915
916         * assembler/ARMAssembler.cpp:
917         (JSC::ARMAssembler::linkBranch):
918         (JSC::ARMAssembler::executableCopy): Add extra align for constant pool.
919         * assembler/ARMAssembler.h:
920         (JSC::ARMAssembler::JmpSrc::JmpSrc):
921         (JSC::ARMAssembler::sizeOfConstantPool):
922         (JSC::ARMAssembler::jmp):
923         (JSC::ARMAssembler::linkCall):
924         * assembler/ARMv7Assembler.h:
925         * assembler/AbstractMacroAssembler.h:
926         * assembler/AssemblerBufferWithConstantPool.h:
927         (JSC::AssemblerBufferWithConstantPool::flushIfNoSpaceFor): Fix the
928         computation of the remaining space.
929         * assembler/MacroAssemblerARM.h:
930         (JSC::MacroAssemblerARM::branch32):
931         (JSC::MacroAssemblerARM::nearCall):
932         (JSC::MacroAssemblerARM::call):
933         (JSC::MacroAssemblerARM::branchPtrWithPatch):
934         (JSC::MacroAssemblerARM::ensureSpace):
935         (JSC::MacroAssemblerARM::sizeOfConstantPool):
936         (JSC::MacroAssemblerARM::prepareCall):
937         * assembler/X86Assembler.h:
938         * jit/JIT.h:
939         * jit/JITCall.cpp:
940         (JSC::JIT::compileOpCall):
941         * jit/JITInlineMethods.h:
942         (JSC::JIT::beginUninterruptedSequence):
943         (JSC::JIT::endUninterruptedSequence):
944         * jit/JITPropertyAccess.cpp:
945         (JSC::JIT::emit_op_method_check):
946         (JSC::JIT::compileGetByIdHotPath):
947         (JSC::JIT::compileGetByIdSlowCase):
948         (JSC::JIT::emit_op_put_by_id):
949
950 2009-08-12  Gavin Barraclough  <barraclough@apple.com>
951
952         Rubber Stamped by Dave Kilzer.
953
954         Disable WTF_USE_JSVALUE32_64 on iPhone for now (support not yet added for ARMv7).
955
956         * wtf/Platform.h:
957
958 2009-08-12  Gavin Barraclough  <barraclough@apple.com>
959
960         Reviewed by Maciej Stachoviak.
961
962         Ooops - moved code that had been accidentally added to op_new_func instead of
963         op_new_func_exp, to where it shoulds be.
964
965         * interpreter/Interpreter.cpp:
966         (JSC::Interpreter::privateExecute):
967         * wtf/Platform.h:
968
969 2009-08-12  Ada Chan  <adachan@apple.com>
970
971         Added workaround for the limitation that VirtualFree with MEM_RELEASE
972         can only accept the base address returned by VirtualAlloc when the region
973         was reserved and it can only free the entire region, and not a part of it.
974
975         Reviewed by Oliver Hunt.
976
977         * runtime/MarkStack.h:
978         (JSC::MarkStack::MarkStackArray::shrinkAllocation):
979         * runtime/MarkStackWin.cpp:
980         (JSC::MarkStack::releaseStack):
981
982 2009-08-12  Balazs Kelemen  <kelemen.balazs.3@stud.u-szeged.hu>
983
984         Reviewed by Ariya Hidayat.
985
986         Build fix: use std::numeric_limits<long long>::min() instead of LLONG_MIN
987         since LLONG_MIN is not defined in standard c++.
988
989         * runtime/UString.cpp:
990         (JSC::UString::from):
991
992 2009-08-12  Benjamin Otte  <otte@gnome.org>
993
994         Reviewed by Jan Alonzo.
995
996         Buildfix for Gtk platforms debug builds.
997
998         * GNUmakefile.am: Choose MarkStackPosix.cpp or MarkStackWin.cpp
999         depending on platform.
1000
1001 2009-08-12  Simon Hausmann  <simon.hausmann@nokia.com>
1002
1003         Prospective build fix for Mac and 32-bit Windows.
1004
1005         * runtime/UString.cpp: Include wtf/StringExtras.h for snprintf.
1006         (JSC::UString::from): Use %lld instead of %I64d for snprintf
1007         on non-windows platforms.
1008
1009 2009-08-12  Prasanth Ullattil  <prasanth.ullattil@nokia.com>
1010
1011         Reviewed by Simon Hausmann.
1012
1013         Fix compile error on 64Bit Windows, when UString::from
1014         is called with an intptr_t.
1015
1016         Added new UString::From overload with long long parameter.
1017
1018         Thanks to Holger for the long long idea.
1019
1020         * runtime/UString.cpp:
1021         (JSC::UString::from):
1022         * runtime/UString.h:
1023
1024 2009-08-11  Oliver Hunt  <oliver@apple.com>
1025
1026         Reviewed by Mark Rowe.
1027
1028         Minor style fixes.
1029
1030         * runtime/UString.h:
1031         (JSC::UString::Rep::createEmptyBuffer):
1032         * wtf/FastMalloc.h:
1033         (WTF::TryMallocReturnValue::getValue):
1034
1035 2009-08-11  Oliver Hunt  <oliver@apple.com>
1036
1037         Reviewed by Gavin Barraclough.
1038
1039         Make it harder to misuse try* allocation routines
1040         https://bugs.webkit.org/show_bug.cgi?id=27469
1041
1042         Jump through a few hoops to make it much harder to accidentally
1043         miss null-checking of values returned by the try-* allocation
1044         routines.
1045
1046         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1047         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1048         * JavaScriptCore.xcodeproj/project.pbxproj:
1049         * runtime/JSArray.cpp:
1050         (JSC::JSArray::putSlowCase):
1051         (JSC::JSArray::increaseVectorLength):
1052         * runtime/StringPrototype.cpp:
1053         (JSC::stringProtoFuncFontsize):
1054         (JSC::stringProtoFuncLink):
1055         * runtime/UString.cpp:
1056         (JSC::allocChars):
1057         (JSC::reallocChars):
1058         (JSC::expandCapacity):
1059         (JSC::UString::Rep::reserveCapacity):
1060         (JSC::UString::expandPreCapacity):
1061         (JSC::createRep):
1062         (JSC::concatenate):
1063         (JSC::UString::spliceSubstringsWithSeparators):
1064         (JSC::UString::replaceRange):
1065         (JSC::UString::append):
1066         (JSC::UString::operator=):
1067         * runtime/UString.h:
1068         (JSC::UString::Rep::createEmptyBuffer):
1069         * wtf/FastMalloc.cpp:
1070         (WTF::tryFastZeroedMalloc):
1071         (WTF::tryFastMalloc):
1072         (WTF::tryFastCalloc):
1073         (WTF::tryFastRealloc):
1074         (WTF::TCMallocStats::tryFastMalloc):
1075         (WTF::TCMallocStats::tryFastCalloc):
1076         (WTF::TCMallocStats::tryFastRealloc):
1077         * wtf/FastMalloc.h:
1078         (WTF::TryMallocReturnValue::TryMallocReturnValue):
1079         (WTF::TryMallocReturnValue::~TryMallocReturnValue):
1080         (WTF::TryMallocReturnValue::operator PossiblyNull<T>):
1081         (WTF::TryMallocReturnValue::getValue):
1082         * wtf/Platform.h:
1083         * wtf/PossiblyNull.h: Added.
1084         (WTF::PossiblyNull::PossiblyNull):
1085         (WTF::PossiblyNull::~PossiblyNull):
1086         (WTF::::getValue):
1087
1088 2009-08-11  Gavin Barraclough  <barraclough@apple.com>
1089
1090         Reviewed by NOBODY (build fix part deux).
1091
1092         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1093         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1094
1095 2009-08-11  Gavin Barraclough  <barraclough@apple.com>
1096
1097         Reviewed by NOBODY (build fix).
1098
1099         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1100         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1101
1102 2009-08-11  Gavin Barraclough  <barraclough@apple.com>
1103
1104         Reviewed by Oliver Hunt.
1105
1106         Restrict use of FuncDeclNode & FuncExprNode to the parser.
1107         https://bugs.webkit.org/show_bug.cgi?id=28209
1108
1109         These objects were also being referenced from the CodeBlock.  By changing this
1110         to just retain pointers to FunctionBodyNodes these classes can be restricted to
1111         use during parsing.
1112
1113         No performance impact (or sub-percent progression).
1114
1115         * JavaScriptCore.exp:
1116             Update symbols.
1117
1118         * bytecode/CodeBlock.cpp:
1119         (JSC::CodeBlock::mark):
1120         (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
1121         (JSC::CodeBlock::shrinkToFit):
1122         * bytecode/CodeBlock.h:
1123         (JSC::CodeBlock::addFunction):
1124         (JSC::CodeBlock::function):
1125             Unify m_functions & m_functionExpressions into a single Vector<RefPtr<FuncExprNode> >.
1126
1127         * bytecompiler/BytecodeGenerator.cpp:
1128         (JSC::BytecodeGenerator::BytecodeGenerator):
1129         (JSC::BytecodeGenerator::addConstant):
1130         (JSC::BytecodeGenerator::emitNewFunction):
1131         (JSC::BytecodeGenerator::emitNewFunctionExpression):
1132         * bytecompiler/BytecodeGenerator.h:
1133             FunctionStacks now contain FunctionBodyNodes not FuncDeclNodes.
1134
1135         * interpreter/Interpreter.cpp:
1136         (JSC::Interpreter::execute):
1137         (JSC::Interpreter::privateExecute):
1138             Update to reflect chnages in CodeBlock.
1139
1140         * jit/JITOpcodes.cpp:
1141         (JSC::JIT::emit_op_new_func_exp):
1142         * jit/JITStubs.cpp:
1143         (JSC::DEFINE_STUB_FUNCTION):
1144         * jit/JITStubs.h:
1145         (JSC::):
1146             Update to reflect chnages in CodeBlock.
1147
1148         * parser/Grammar.y:
1149             FunctionStacks now contain FunctionBodyNodes not FuncDeclNodes.
1150
1151         * parser/NodeConstructors.h:
1152         (JSC::FuncExprNode::FuncExprNode):
1153         (JSC::FuncDeclNode::FuncDeclNode):
1154         * parser/Nodes.cpp:
1155         (JSC::ScopeNodeData::mark):
1156         (JSC::FunctionBodyNode::finishParsing):
1157         * parser/Nodes.h:
1158         (JSC::FunctionBodyNode::ident):
1159             Move m_ident & make methods from FuncDeclNode & FuncExprNode to FunctionBodyNode.
1160
1161         * runtime/JSFunction.h:
1162         (JSC::FunctionBodyNode::make):
1163             Make this method inline (was FuncDeclNode::makeFunction).
1164
1165 2009-08-11  Oliver Hunt  <oliver@apple.com>
1166
1167         Reviewed by Gavin Barraclough.
1168
1169         Native JSON.stringify does not omit functions
1170         https://bugs.webkit.org/show_bug.cgi?id=28117
1171
1172         Objects that are callable should be treated as undefined when
1173         serialising to JSON.
1174
1175         * runtime/JSONObject.cpp:
1176         (JSC::Stringifier::appendStringifiedValue):
1177
1178 2009-08-11  Oliver Hunt  <oliver@apple.com>
1179
1180         Reviewed by Geoff Garen.
1181
1182         REGRESSION: Hang/crash in BytecodeGenerator::constRegisterFor loading simple page
1183         https://bugs.webkit.org/show_bug.cgi?id=28169
1184
1185         Handle the case where someone has attempted to shadow a property
1186         on the global object with a constant.
1187
1188         * bytecompiler/BytecodeGenerator.cpp:
1189         (JSC::BytecodeGenerator::constRegisterFor):
1190         * parser/Nodes.cpp:
1191         (JSC::ConstDeclNode::emitCodeSingle):
1192
1193 2009-08-11  John Gregg  <johnnyg@google.com>
1194
1195         Reviewed by Maciej Stachowiak.
1196
1197         Desktop Notifications API
1198         https://bugs.webkit.org/show_bug.cgi?id=25463
1199
1200         Adds ENABLE_NOTIFICATION flag.
1201
1202         * Configurations/FeatureDefines.xcconfig:
1203         * wtf/Platform.h:
1204
1205 2009-08-11  Maxime Simon  <simon.maxime@gmail.com>
1206
1207         Reviewed by Eric Seidel.
1208
1209         Modifications on JavaScriptCore to allow Haiku port.
1210         https://bugs.webkit.org/show_bug.cgi?id=28121
1211
1212         * runtime/Collector.cpp: Haiku doesn't have sys/mman.h, using OS.h instead.
1213         (JSC::currentThreadStackBase): Haiku uses its own threading system.
1214         * wtf/Platform.h: Defining all Haiku platform values.
1215         * wtf/haiku/MainThreadHaiku.cpp: Adding a missing header (NotImplemented.h).
1216
1217 2009-08-11  Jessie Berlin  <jberlin@apple.com>
1218
1219         Reviewed by Adam Roben.
1220
1221         Fix windows build.
1222
1223         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1224
1225 2009-08-11  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>
1226
1227         Reviewed by Tor Arne Vestbø.
1228
1229         Buildfix for Qt-win platforms.
1230
1231         * JavaScriptCore.pri: Choose MarkStackPosix.cpp or MarkStackWin.cpp depend on platform.
1232
1233 2009-08-10  Oliver Hunt  <oliver@apple.com>
1234
1235         Reviewed by NOBODY (And another build fix).
1236
1237         Add new exports for MSVC
1238
1239         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1240         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1241         * JavaScriptCore.xcodeproj/project.pbxproj:
1242
1243 2009-08-10  Oliver Hunt  <oliver@apple.com>
1244
1245         Reviewed by NOBODY (yet another build fix).
1246
1247         Remove obsolete entries from MSVC exports file
1248
1249         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1250         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1251
1252 2009-08-10  Oliver Hunt  <oliver@apple.com>
1253
1254         Reviewed by NOBODY (Build fix).
1255
1256         Add includes needed for non-allinonefile builds
1257
1258         * runtime/GetterSetter.h:
1259         * runtime/ScopeChain.h:
1260
1261 2009-08-10  Oliver Hunt  <oliver@apple.com>
1262
1263         Reviewed by NOBODY (Build fix).
1264
1265         Fix export file for last build fix
1266
1267         * JavaScriptCore.exp:
1268
1269 2009-08-10  Oliver Hunt  <oliver@apple.com>
1270
1271         Reviewed by NOBODY (Build fix).
1272
1273         Hoist page size initialization into platform specific code.
1274
1275         * jit/ExecutableAllocatorPosix.cpp:
1276         * jit/ExecutableAllocatorWin.cpp:
1277         * runtime/MarkStack.h:
1278         (JSC::MarkStack::pageSize):
1279         * runtime/MarkStackPosix.cpp:
1280         (JSC::MarkStack::initializePagesize):
1281         * runtime/MarkStackWin.cpp:
1282         (JSC::MarkStack::initializePagesize):
1283
1284 2009-08-07  Oliver Hunt  <oliver@apple.com>
1285
1286         Reviewed by Gavin Barraclough.
1287
1288         Stack overflow crash in JavaScript garbage collector mark pass
1289         https://bugs.webkit.org/show_bug.cgi?id=12216
1290
1291         Make the GC mark phase iterative by using an explicit mark stack.
1292         To do this marking any single object is performed in multiple stages
1293           * The object is appended to the MarkStack, this sets the marked
1294             bit for the object using the new markDirect() function, and then
1295             returns
1296           * When the MarkStack is drain()ed the object is popped off the stack
1297             and markChildren(MarkStack&) is called on the object to collect 
1298             all of its children.  drain() then repeats until the stack is empty.
1299
1300         Additionally I renamed a number of methods from 'mark' to 'markAggregate'
1301         in order to make it more clear that marking of those object was not
1302         going to result in an actual recursive mark.
1303
1304         * GNUmakefile.am
1305         * JavaScriptCore.exp:
1306         * JavaScriptCore.gypi:
1307         * JavaScriptCore.pri:
1308         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1309         * JavaScriptCore.xcodeproj/project.pbxproj:
1310         * bytecode/CodeBlock.cpp:
1311         (JSC::CodeBlock::markAggregate):
1312         * bytecode/CodeBlock.h:
1313         * bytecode/EvalCodeCache.h:
1314         (JSC::EvalCodeCache::markAggregate):
1315         * debugger/DebuggerActivation.cpp:
1316         (JSC::DebuggerActivation::markChildren):
1317         * debugger/DebuggerActivation.h:
1318         * interpreter/Register.h:
1319         * interpreter/RegisterFile.h:
1320         (JSC::RegisterFile::markGlobals):
1321         (JSC::RegisterFile::markCallFrames):
1322         * parser/Nodes.cpp:
1323         (JSC::ScopeNodeData::markAggregate):
1324         (JSC::EvalNode::markAggregate):
1325         (JSC::FunctionBodyNode::markAggregate):
1326         * parser/Nodes.h:
1327         (JSC::ScopeNode::markAggregate):
1328         * runtime/ArgList.cpp:
1329         (JSC::MarkedArgumentBuffer::markLists):
1330         * runtime/ArgList.h:
1331         * runtime/Arguments.cpp:
1332         (JSC::Arguments::markChildren):
1333         * runtime/Arguments.h:
1334         * runtime/Collector.cpp:
1335         (JSC::Heap::markConservatively):
1336         (JSC::Heap::markCurrentThreadConservativelyInternal):
1337         (JSC::Heap::markCurrentThreadConservatively):
1338         (JSC::Heap::markOtherThreadConservatively):
1339         (JSC::Heap::markStackObjectsConservatively):
1340         (JSC::Heap::markProtectedObjects):
1341         (JSC::Heap::collect):
1342         * runtime/Collector.h:
1343         * runtime/GetterSetter.cpp:
1344         (JSC::GetterSetter::markChildren):
1345         * runtime/GetterSetter.h:
1346         (JSC::GetterSetter::GetterSetter):
1347         (JSC::GetterSetter::createStructure):
1348         * runtime/GlobalEvalFunction.cpp:
1349         (JSC::GlobalEvalFunction::markChildren):
1350         * runtime/GlobalEvalFunction.h:
1351         * runtime/JSActivation.cpp:
1352         (JSC::JSActivation::markChildren):
1353         * runtime/JSActivation.h:
1354         * runtime/JSArray.cpp:
1355         (JSC::JSArray::markChildren):
1356         * runtime/JSArray.h:
1357         * runtime/JSCell.h:
1358         (JSC::JSCell::markCellDirect):
1359         (JSC::JSCell::markChildren):
1360         (JSC::JSValue::markDirect):
1361         (JSC::JSValue::markChildren):
1362         (JSC::JSValue::hasChildren):
1363         (JSC::MarkStack::append):
1364         (JSC::MarkStack::drain):
1365         * runtime/JSFunction.cpp:
1366         (JSC::JSFunction::markChildren):
1367         * runtime/JSFunction.h:
1368         * runtime/JSGlobalData.cpp:
1369         (JSC::JSGlobalData::JSGlobalData):
1370         * runtime/JSGlobalData.h:
1371         * runtime/JSGlobalObject.cpp:
1372         (JSC::markIfNeeded):
1373         (JSC::JSGlobalObject::markChildren):
1374         * runtime/JSGlobalObject.h:
1375         * runtime/JSNotAnObject.cpp:
1376         (JSC::JSNotAnObject::markChildren):
1377         * runtime/JSNotAnObject.h:
1378         * runtime/JSONObject.cpp:
1379         (JSC::Stringifier::markAggregate):
1380         (JSC::JSONObject::markStringifiers):
1381         * runtime/JSONObject.h:
1382         * runtime/JSObject.cpp:
1383         (JSC::JSObject::markChildren):
1384         (JSC::JSObject::defineGetter):
1385         (JSC::JSObject::defineSetter):
1386         * runtime/JSObject.h:
1387         * runtime/JSPropertyNameIterator.cpp:
1388         (JSC::JSPropertyNameIterator::markChildren):
1389         * runtime/JSPropertyNameIterator.h:
1390         (JSC::JSPropertyNameIterator::createStructure):
1391         (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
1392         (JSC::JSPropertyNameIterator::create):
1393         * runtime/JSStaticScopeObject.cpp:
1394         (JSC::JSStaticScopeObject::markChildren):
1395         * runtime/JSStaticScopeObject.h:
1396         * runtime/JSType.h:
1397         (JSC::):
1398         * runtime/JSValue.h:
1399         * runtime/JSWrapperObject.cpp:
1400         (JSC::JSWrapperObject::markChildren):
1401         * runtime/JSWrapperObject.h:
1402         * runtime/MarkStack.cpp: Added.
1403         (JSC::MarkStack::compact):
1404         * runtime/MarkStack.h: Added.
1405         (JSC::):
1406         (JSC::MarkStack::MarkStack):
1407         (JSC::MarkStack::append):
1408         (JSC::MarkStack::appendValues):
1409         (JSC::MarkStack::~MarkStack):
1410         (JSC::MarkStack::MarkSet::MarkSet):
1411         (JSC::MarkStack::pageSize):
1412         
1413         MarkStackArray is a non-shrinking, mmap-based vector type
1414         used for storing objects to be marked.
1415         (JSC::MarkStack::MarkStackArray::MarkStackArray):
1416         (JSC::MarkStack::MarkStackArray::~MarkStackArray):
1417         (JSC::MarkStack::MarkStackArray::expand):
1418         (JSC::MarkStack::MarkStackArray::append):
1419         (JSC::MarkStack::MarkStackArray::removeLast):
1420         (JSC::MarkStack::MarkStackArray::isEmpty):
1421         (JSC::MarkStack::MarkStackArray::size):
1422         (JSC::MarkStack::MarkStackArray::shrinkAllocation):
1423         * runtime/MarkStackPosix.cpp: Added.
1424         (JSC::MarkStack::allocateStack):
1425         (JSC::MarkStack::releaseStack):
1426         * runtime/MarkStackWin.cpp: Added.
1427         (JSC::MarkStack::allocateStack):
1428         (JSC::MarkStack::releaseStack):
1429
1430         * runtime/ScopeChain.h:
1431         * runtime/ScopeChainMark.h:
1432         (JSC::ScopeChain::markAggregate):
1433         * runtime/SmallStrings.cpp:
1434         (JSC::SmallStrings::mark):
1435         * runtime/Structure.h:
1436         (JSC::Structure::markAggregate):
1437
1438 2009-08-10  Mark Rowe  <mrowe@apple.com>
1439         
1440         Reviewed by Darin Adler.
1441
1442         Fix hundreds of "pointer being freed was not allocated" errors seen on the build bot.
1443
1444         * wtf/FastMalloc.h: Implement nothrow variants of the delete and delete[] operators since
1445         we implement the nothrow variants of new and new[].  The nothrow variant of delete is called
1446         explicitly in the implementation of std::sort which was resulting in FastMalloc-allocated
1447         memory being passed to the system allocator to free.
1448
1449 2009-08-10  Jan Michael Alonzo  <jmalonzo@webkit.org>
1450
1451         [Gtk] Unreviewed build fix. Move JSAPIValueWrapper.cpp/.h in the debug
1452         section. This file is already part of AllInOneFile in Release builds.
1453
1454         * GNUmakefile.am:
1455
1456 2009-08-10  Darin Adler  <darin@apple.com>
1457
1458         * wtf/FastMalloc.h: Fix build.
1459
1460 2009-08-10  Darin Adler  <darin@apple.com>
1461
1462         Reviewed by Mark Rowe.
1463
1464         FastMalloc.h has cross-platform code but marked as WinCE-only
1465         https://bugs.webkit.org/show_bug.cgi?id=28160
1466
1467         1) The support for nothrow was inside #if PLATFORM(WINCE) even though it is
1468            not platform-specific.
1469         2) The code tried to override operator delete nothrow, which does not exist.
1470         3) The code in the header checks the value of USE_SYSTEM_MALLOC, but the code
1471            in FastMalloc.cpp checks only if the macro is defined.
1472
1473         * wtf/FastMalloc.h: See above.
1474         * wtf/FastMalloc.cpp: Ditto.
1475
1476 2009-08-10  Sam Weinig  <sam@webkit.org>
1477
1478         Reviewed by Anders Carlsson.
1479
1480         Fix an annoying indentation issue.
1481
1482         * runtime/DateConstructor.cpp:
1483         (JSC::constructDate):
1484
1485 2009-08-10  Xan Lopez  <xlopez@igalia.com>
1486
1487         Unreviewed build fix.
1488
1489         Add new files to makefile.
1490
1491         * GNUmakefile.am:
1492
1493 2009-08-10  Simon Hausmann  <simon.hausmann@nokia.com>
1494
1495         Fix compilation with the interpreter instead of the JIT by including
1496         PrototypeFunction.h as forward-declared through NativeFunctionWrapper.h.
1497
1498         * runtime/ObjectConstructor.cpp:
1499
1500 2009-08-09  Oliver Hunt  <oliver@apple.com>
1501
1502         Reviewed by George Staikos.
1503
1504         JSON.stringify replacer returning undefined does not omit object properties
1505         https://bugs.webkit.org/show_bug.cgi?id=28118
1506
1507         Correct behaviour of stringify when using a replacer function that returns
1508         undefined.  This is a simple change to move the undefined value check to
1509         after the replacer function is called.  This means that the replacer function
1510         is now called for properties with the value undefined, however i've confirmed
1511         that this behaviour is correct.
1512         
1513         In addition I've made the cyclic object exception have a more useful error
1514         message.
1515
1516         * runtime/JSONObject.cpp:
1517         (JSC::Stringifier::appendStringifiedValue):
1518
1519 2009-08-08  Oliver Hunt  <oliver@apple.com>
1520
1521         Reviewed by Eric Seidel and Sam Weinig.
1522
1523         [ES5] Implement Object.getPrototypeOf
1524         https://bugs.webkit.org/show_bug.cgi?id=28114
1525
1526         Implement getPrototypeOf
1527
1528         * runtime/CommonIdentifiers.h:
1529         * runtime/JSGlobalObject.cpp:
1530         (JSC::JSGlobalObject::reset):
1531         * runtime/ObjectConstructor.cpp:
1532         (JSC::ObjectConstructor::ObjectConstructor):
1533         (JSC::objectConsGetPrototypeOf):
1534         * runtime/ObjectConstructor.h:
1535
1536 2009-08-07  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>
1537
1538         Reviewed by Eric Seidel.
1539
1540         Allow custom memory allocation control for Noncopyable class
1541         https://bugs.webkit.org/show_bug.cgi?id=27879
1542
1543         Several classes which are inherited from Noncopyable are instantiated by
1544         operator new, so Noncopyable class has been inherited from FastAllocBase.
1545
1546         * wtf/Noncopyable.h:
1547
1548 2009-08-07  George Staikos <george.staikos@torchmobile.com> 
1549
1550         Reviewed by Eric Seidel.
1551
1552         https://bugs.webkit.org/show_bug.cgi?id=27305
1553         Implement WinCE-specific unicode layer.
1554         Written by George Staikos <george.staikos@torchmobile.com>
1555         with bug fixes by Yong Li <yong.li@torchmobile.com>
1556         refactored by Joe Mason <joe.mason@torchmobile.com> 
1557
1558         * wtf/Platform.h:
1559         * wtf/unicode/Unicode.h:
1560         * wtf/unicode/wince/UnicodeWince.cpp: Added.
1561         (WTF::Unicode::toLower):
1562         (WTF::Unicode::toUpper):
1563         (WTF::Unicode::foldCase):
1564         (WTF::Unicode::isPrintableChar):
1565         (WTF::Unicode::isSpace):
1566         (WTF::Unicode::isLetter):
1567         (WTF::Unicode::isUpper):
1568         (WTF::Unicode::isLower):
1569         (WTF::Unicode::isDigit):
1570         (WTF::Unicode::isPunct):
1571         (WTF::Unicode::toTitleCase):
1572         (WTF::Unicode::direction):
1573         (WTF::Unicode::category):
1574         (WTF::Unicode::decompositionType):
1575         (WTF::Unicode::combiningClass):
1576         (WTF::Unicode::mirroredChar):
1577         (WTF::Unicode::digitValue):
1578         * wtf/unicode/wince/UnicodeWince.h: Added.
1579         (WTF::Unicode::):
1580         (WTF::Unicode::isSeparatorSpace):
1581         (WTF::Unicode::isHighSurrogate):
1582         (WTF::Unicode::isLowSurrogate):
1583         (WTF::Unicode::isArabicChar):
1584         (WTF::Unicode::hasLineBreakingPropertyComplexContext):
1585         (WTF::Unicode::umemcasecmp):
1586         (WTF::Unicode::surrogateToUcs4):
1587
1588 2009-08-07  Yongjun Zhang  <yongjun.zhang@nokia.com>
1589
1590         Reviewed by Eric Seidel.
1591
1592         https://bugs.webkit.org/show_bug.cgi?id=28069
1593
1594         Add inline to help winscw compiler resolve specialized argument in 
1595         templated functions.  
1596
1597         * runtime/LiteralParser.cpp:
1598         (JSC::LiteralParser::Lexer::lexString):
1599
1600 2009-08-07  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>
1601
1602         Reviewed by Eric Seidel.
1603
1604         Allow custom memory allocation control for RegExpObjectData struct
1605         http://bugs.webkit.org/show_bug.cgi?id=26750
1606
1607         Inherits RegExpObjectData struct from FastAllocBase because
1608         it has been instantiated by 'new' in JavaScriptCore/runtime/RegExpObject.cpp:62
1609
1610         * runtime/RegExpObject.h:
1611
1612 2009-08-06  Norbert Leser  <norbert.leser@nokia.com>
1613
1614         Reviewed by Darin Adler.
1615
1616         Updated patch for bug #27059:
1617         Symbian platform always uses little endian encoding,
1618         regardless of compiler.
1619         We need to make sure that we correctly detect EABI architecture
1620         for armv5 targets on Symbian,
1621         where __EABI__ is set but not __ARM_EABI__
1622
1623         * wtf/Platform.h:
1624
1625 2009-08-06  Adam Barth  <abarth@webkit.org>
1626
1627         Unreviewed revert.
1628
1629         http://bugs.webkit.org/show_bug.cgi?id=27879
1630
1631         Revert 46877 because it broke GTK.
1632
1633         * wtf/Noncopyable.h:
1634
1635 2009-08-06  Gavin Barraclough  <barraclough@apple.com>
1636
1637         Reviewed by Oliver Hunt.
1638
1639         Make get_by_id/put_by_id/method_check/call defer optimization using a data flag rather than a code modification.
1640         ( https://bugs.webkit.org/show_bug.cgi?id=27635 )
1641
1642         This improves performance of ENABLE(ASSEMBLER_WX_EXCLUSIVE) builds by 2-2.5%, reducing the overhead to about 2.5%.
1643         (No performance impact with ASSEMBLER_WX_EXCLUSIVE disabled).
1644
1645         * bytecode/CodeBlock.cpp:
1646         (JSC::printStructureStubInfo):
1647             - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.
1648
1649         * bytecode/CodeBlock.h:
1650         (JSC::):
1651         (JSC::CallLinkInfo::seenOnce):
1652         (JSC::CallLinkInfo::setSeen):
1653         (JSC::MethodCallLinkInfo::seenOnce):
1654         (JSC::MethodCallLinkInfo::setSeen):
1655             - Change a pointer in CallLinkInfo/MethodCallLinkInfo to use a PtrAndFlags, use a flag to track when an op has been executed once.
1656
1657         * bytecode/StructureStubInfo.cpp:
1658         (JSC::StructureStubInfo::deref):
1659             - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.
1660
1661         * bytecode/StructureStubInfo.h:
1662         (JSC::StructureStubInfo::StructureStubInfo):
1663         (JSC::StructureStubInfo::initGetByIdSelf):
1664         (JSC::StructureStubInfo::initGetByIdProto):
1665         (JSC::StructureStubInfo::initGetByIdChain):
1666         (JSC::StructureStubInfo::initGetByIdSelfList):
1667         (JSC::StructureStubInfo::initGetByIdProtoList):
1668         (JSC::StructureStubInfo::initPutByIdTransition):
1669         (JSC::StructureStubInfo::initPutByIdReplace):
1670         (JSC::StructureStubInfo::seenOnce):
1671         (JSC::StructureStubInfo::setSeen):
1672             - Make StructureStubInfo store the type as an integer, rather than an OpcodeID, add a flag to track when an op has been executed once.
1673
1674         * bytecompiler/BytecodeGenerator.cpp:
1675         (JSC::BytecodeGenerator::emitGetById):
1676         (JSC::BytecodeGenerator::emitPutById):
1677             - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.
1678
1679         * jit/JIT.cpp:
1680         (JSC::JIT::privateCompileCTIMachineTrampolines):
1681         (JSC::JIT::unlinkCall):
1682             - Remove the "don't lazy link" stage of calls.
1683
1684         * jit/JIT.h:
1685         (JSC::JIT::compileCTIMachineTrampolines):
1686             - Remove the "don't lazy link" stage of calls.
1687
1688         * jit/JITCall.cpp:
1689         (JSC::JIT::compileOpCallSlowCase):
1690             - Remove the "don't lazy link" stage of calls.
1691
1692         * jit/JITStubs.cpp:
1693         (JSC::JITThunks::JITThunks):
1694         (JSC::JITThunks::tryCachePutByID):
1695         (JSC::JITThunks::tryCacheGetByID):
1696         (JSC::JITStubs::DEFINE_STUB_FUNCTION):
1697         (JSC::JITStubs::getPolymorphicAccessStructureListSlot):
1698             - Remove the "don't lazy link" stage of calls, and the "_second" stage of get_by_id/put_by_id/method_check.
1699
1700         * jit/JITStubs.h:
1701         (JSC::JITThunks::ctiStringLengthTrampoline):
1702         (JSC::JITStubs::):
1703             - Remove the "don't lazy link" stage of calls, and the "_second" stage of get_by_id/put_by_id/method_check.
1704
1705         * wtf/PtrAndFlags.h:
1706         (WTF::PtrAndFlags::PtrAndFlags):
1707         (WTF::PtrAndFlags::operator!):
1708         (WTF::PtrAndFlags::operator->):
1709             - Add ! and -> operators, add constuctor with pointer argument.
1710
1711 2009-08-06  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>
1712
1713         Reviewed by Adam Barth.
1714
1715         Allow custom memory allocation control for Noncopyable class
1716         https://bugs.webkit.org/show_bug.cgi?id=27879
1717
1718         Several classes which inherited from Noncopyable are instantiated by
1719         operator new, so Noncopyable class has been inherited from FastAllocBase.
1720
1721         * wtf/Noncopyable.h:
1722
1723 2009-08-06  Mark Rowe  <mrowe@apple.com>
1724
1725         Rubber-stamped by Sam Weinig.
1726
1727         Add explicit dependencies for our build verification scripts to ensure that they always run after linking has completed.
1728
1729         * JavaScriptCore.xcodeproj/project.pbxproj:
1730
1731 2009-08-06  Mark Rowe  <mrowe@apple.com>
1732
1733         Bring a little order to our otherwise out of control lives.
1734
1735         * JavaScriptCore.xcodeproj/project.pbxproj:
1736
1737 2009-08-06  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>
1738
1739         Reviewed by Darin Adler.
1740
1741         Allow custom memory allocation control for JavaScriptCore's PolymorphicAccessStructureList struct
1742         https://bugs.webkit.org/show_bug.cgi?id=27877
1743
1744         Inherits PolymorphicAccessStructureList struct from FastAllocBase because it has been instantiated by
1745         'new' in JavaScriptCore/jit/JITStubs.cpp:1229.
1746
1747         * bytecode/Instruction.h:
1748
1749 2009-08-05  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>
1750
1751         Reviewed by Darin Adler.
1752
1753         Allow custom memory allocation control for JavaScriptCore's ScopeNodeData struct
1754         https://bugs.webkit.org/show_bug.cgi?id=27875
1755
1756         Inherits ScopeNodeData struct from FastAllocBase because it has been instantiated by
1757         'new' in JavaScriptCore/parser/Nodes.cpp:1848.
1758
1759         * parser/Nodes.h:
1760
1761 2009-08-05  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>
1762
1763         Reviewed by Gavin Barraclough.
1764
1765         Add floating point support for generic ARM port.
1766         https://bugs.webkit.org/show_bug.cgi?id=24986
1767
1768         * assembler/ARMAssembler.cpp:
1769         (JSC::ARMAssembler::doubleTransfer):
1770         * assembler/ARMAssembler.h:
1771         (JSC::ARM::):
1772         (JSC::ARMAssembler::):
1773         (JSC::ARMAssembler::faddd_r):
1774         (JSC::ARMAssembler::fsubd_r):
1775         (JSC::ARMAssembler::fmuld_r):
1776         (JSC::ARMAssembler::fcmpd_r):
1777         (JSC::ARMAssembler::fdtr_u):
1778         (JSC::ARMAssembler::fdtr_d):
1779         (JSC::ARMAssembler::fmsr_r):
1780         (JSC::ARMAssembler::fsitod_r):
1781         (JSC::ARMAssembler::fmstat):
1782         * assembler/MacroAssemblerARM.h:
1783         (JSC::MacroAssemblerARM::):
1784         (JSC::MacroAssemblerARM::supportsFloatingPoint):
1785         (JSC::MacroAssemblerARM::loadDouble):
1786         (JSC::MacroAssemblerARM::storeDouble):
1787         (JSC::MacroAssemblerARM::addDouble):
1788         (JSC::MacroAssemblerARM::subDouble):
1789         (JSC::MacroAssemblerARM::mulDouble):
1790         (JSC::MacroAssemblerARM::convertInt32ToDouble):
1791         (JSC::MacroAssemblerARM::branchDouble):
1792         * jit/JIT.h:
1793
1794 2009-08-05  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>
1795
1796         Reviewed by Gavin Barraclough.
1797
1798         Add JIT support for generic ARM port without optimizations.
1799         https://bugs.webkit.org/show_bug.cgi?id=24986
1800
1801         All JIT optimizations are disabled.
1802
1803         Signed off by Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
1804         Signed off by Gabor Loki <loki@inf.u-szeged.hu>
1805
1806         * assembler/ARMAssembler.cpp:
1807         (JSC::ARMAssembler::baseIndexTransfer32):
1808         * assembler/AbstractMacroAssembler.h:
1809         (JSC::AbstractMacroAssembler::Imm32::Imm32):
1810         * assembler/MacroAssemblerARM.h:
1811         (JSC::MacroAssemblerARM::store32):
1812         (JSC::MacroAssemblerARM::move):
1813         (JSC::MacroAssemblerARM::branch32):
1814         (JSC::MacroAssemblerARM::add32):
1815         (JSC::MacroAssemblerARM::sub32):
1816         (JSC::MacroAssemblerARM::load32):
1817         * bytecode/CodeBlock.h:
1818         (JSC::CodeBlock::getBytecodeIndex):
1819         * jit/JIT.h:
1820         * jit/JITInlineMethods.h:
1821         (JSC::JIT::restoreArgumentReference):
1822         * jit/JITOpcodes.cpp:
1823         * jit/JITStubs.cpp:
1824         * jit/JITStubs.h:
1825         (JSC::JITStackFrame::returnAddressSlot):
1826         * wtf/Platform.h:
1827
1828 2009-08-04  Gavin Barraclough  <barraclough@apple.com>
1829
1830         Rubber Stamped by Oiver Hunt.
1831
1832         Revert r46643 since this breaks the Yarr::Interpreter running the v8 tests.
1833         https://bugs.webkit.org/show_bug.cgi?id=27874
1834
1835         * yarr/RegexInterpreter.cpp:
1836         (JSC::Yarr::Interpreter::allocDisjunctionContext):
1837         (JSC::Yarr::Interpreter::freeDisjunctionContext):
1838         (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext):
1839         (JSC::Yarr::Interpreter::freeParenthesesDisjunctionContext):
1840
1841 2009-08-04  Oliver Hunt  <oliver@apple.com>
1842
1843         Reviewed by NOBODY (build fix).
1844
1845         PPC64 Build fix
1846
1847         * wtf/Platform.h:
1848
1849 2009-08-04  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>
1850
1851         Reviewed by Adam Treat
1852
1853         Explicitly include limits.h header when using INT_MAX and INT_MIN
1854
1855         * interpreter/Interpreter.cpp
1856
1857 2009-08-03  Harald Fernengel  <harald.fernengel@nokia.com>
1858
1859         Reviewed by Darin Adler.
1860
1861         Fix compile error for ambigous call to abs()
1862         https://bugs.webkit.org/show_bug.cgi?id=27873
1863
1864         Fix ambiguity in abs(long int) call by calling labs() instead
1865
1866         * wtf/DateMath.cpp: replace call to abs() with labs()
1867
1868 2009-08-03  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
1869
1870         Reviewed by Eric Seidel.
1871
1872         [Qt] Consolidate common gcc flags to WebKit.pri
1873         https://bugs.webkit.org/show_bug.cgi?id=27934
1874
1875         * JavaScriptCore.pro:
1876
1877 2009-08-03  Ada Chan  <adachan@apple.com>
1878
1879         Fixed the Tiger build.
1880
1881         * wtf/FastMalloc.cpp:
1882
1883 2009-08-03  Ada Chan  <adachan@apple.com>
1884
1885         Reviewed by Darin Adler.
1886
1887         Don't use background thread to scavenge memory on Tiger until we figure out why it causes a crash.
1888         https://bugs.webkit.org/show_bug.cgi?id=27900
1889
1890         * wtf/FastMalloc.cpp:
1891
1892 2009-08-03  Fumitoshi Ukai  <ukai@chromium.org>
1893
1894         Reviewed by Jan Alonzo.
1895
1896         Fix build break on Gtk/x86_64.
1897         https://bugs.webkit.org/show_bug.cgi?id=27936
1898
1899         Use JSVALUE64 for X86_64 LINUX, except Qt.
1900
1901         * wtf/Platform.h:
1902
1903 2009-08-02  Xan Lopez  <xlopez@igalia.com>
1904
1905         Fix the GTK+ build.
1906
1907         * wtf/Platform.h:
1908
1909 2009-08-02  Geoffrey Garen  <ggaren@apple.com>
1910
1911         Reviewed by Sam Weinig.
1912
1913         Disabled JSVALUE32_64 on Qt builds, since all layout tests mysteriously
1914         crash with it enabled.
1915
1916         * wtf/Platform.h:
1917
1918 2009-08-02  Geoffrey Garen  <ggaren@apple.com>
1919
1920         Qt build fix.
1921
1922         Added JSAPIValueWrapper.cpp to the build.
1923
1924         * JavaScriptCore.pri:
1925
1926 2009-08-02  Geoffrey Garen  <ggaren@apple.com>
1927
1928         Windows build fix.
1929
1930         Exported symbols for JSAPIValueWrapper.
1931
1932         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1933         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1934
1935 2009-08-02  Geoffrey Garen  <ggaren@apple.com>
1936
1937         GTK build fix.
1938
1939         * jit/JITStubs.cpp: #include <stdarg.h>, for a definition of va_start.
1940
1941 2009-08-02  Geoffrey Garen  <ggaren@apple.com>
1942
1943         Qt build fix.
1944         
1945         * runtime/Collector.cpp: #include <limits.h>, for a definition of ULONG_MAX.
1946
1947 2009-08-02  Geoffrey Garen  <ggaren@apple.com>
1948
1949         Windows build fix: Nixed JSImmediate::prototype, JSImmediate::toObject,
1950         and JSImmediate::toThisObject, and removed their exported symbols.
1951
1952         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1953         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1954         * runtime/JSImmediate.cpp:
1955         * runtime/JSImmediate.h:
1956
1957 2009-08-02  Geoffrey Garen  <ggaren@apple.com>
1958
1959         Reviewed by Mark Rowe.
1960
1961         Enabled JSVALUE32_64 by default on all platforms other than x86_64 (which uses JSVALUE64).
1962
1963         * wtf/Platform.h:
1964
1965 2009-08-02  Kevin Ollivier  <kevino@theolliviers.com>
1966
1967         Reviewed by Jan Alonzo.
1968
1969         Script for building the JavaScriptCore library for wx.
1970         https://bugs.webkit.org/show_bug.cgi?id=27619
1971
1972         * wscript: Added.
1973
1974 2009-08-02  Yong Li  <yong.li@torchmobile.com>
1975
1976         Reviewed by George Staikos.
1977
1978         DateMath depends on strftime and localtime, which need to be imported manually on WinCE
1979         https://bugs.webkit.org/show_bug.cgi?id=26558
1980
1981         * wtf/DateMath.cpp:
1982
1983 2009-08-01  David Kilzer  <ddkilzer@apple.com>
1984
1985         wtf/Threading.h: added include of Platform.h
1986
1987         Reviewed by Mark Rowe.
1988
1989         * wtf/Threading.h: Added #include "Platform.h" since this header
1990         uses PLATFORM() and other macros.
1991
1992 2009-08-01  Mark Rowe  <mrowe@apple.com>
1993
1994         Rubber-stamped by Oliver Hunt.
1995
1996         Roll out r46668 as it was misinformed.  ScopeChain is only used with placement new.
1997
1998         * runtime/ScopeChain.h:
1999
2000 2009-08-01  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>
2001
2002         Allow custom memory allocation control for JavaScriptCore's HashMap class
2003         http://bugs.webkit.org/show_bug.cgi?id=27871
2004
2005         Inherits HashMap class from FastAllocBase because it has been
2006         instantiated by 'new' in JavaScriptCore/API/JSClassRef.cpp:148.
2007
2008         * wtf/RefPtrHashMap.h:
2009         (WTF::):
2010
2011 2009-08-01  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>
2012
2013         Allow custom memory allocation control for JavaScriptCore's ScopeChain class
2014         https://bugs.webkit.org/show_bug.cgi?id=27834
2015
2016         Inherits ScopeChain class from FastAllocBase because it has been
2017         instantiated by 'new' in JavaScriptCore/runtime/JSFunction.h:109.
2018
2019         * runtime/ScopeChain.h:
2020
2021 2009-08-01  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>
2022
2023         Reviewed by Darin Adler.
2024
2025         Allow custom memory allocation control for JavaScriptCore's RegExpConstructorPrivate struct 
2026         https://bugs.webkit.org/show_bug.cgi?id=27833
2027
2028         Inherits RegExpConstructorPrivate class from FastAllocBase because it has been
2029         instantiated by 'new' in JavaScriptCore/runtime/RegExpConstructor.cpp:152.
2030
2031         * runtime/RegExpConstructor.cpp:
2032
2033 2009-07-31  Yong Li  <yong.li@torchmobile.com>
2034
2035         Reviewed by George Staikos.
2036
2037         Resurrect the old GetTickCount implementation of currentTime, controlled by WTF_USE_QUERY_PERFORMANCE_COUNTER
2038         currentSystemTime taken from older WebKit; currentTime written by Yong Li <yong.li@torchmobile.com>; cleanup by Joe Mason <joe.mason@torchmobile.com>
2039         https://bugs.webkit.org/show_bug.cgi?id=27848
2040
2041         * wtf/CurrentTime.cpp:
2042         (WTF::currentSystemTime): get current time with GetCurrentFT
2043         (WTF::currentTime): track msec elapsed since first currentSystemTime call using GetTickCount
2044         * wtf/Platform.h:
2045
2046 2009-07-31  Ada Chan  <adachan@apple.com>
2047
2048         Fixes the Windows release-PGO build.
2049
2050         Reviewed by Jon Honeycutt.
2051
2052         * JavaScriptCore.vcproj/WTF/WTF.vcproj: Suppresses the warning about unreachable code that we get by adding "return 0" to WTF::TCMalloc_PageHeap::runScavengerThread().
2053         * wtf/FastMalloc.cpp:
2054         (WTF::TCMalloc_PageHeap::runScavengerThread): Fixes the error about the method not returning a value in the release-PGO build.
2055
2056 2009-07-31  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>
2057
2058         Change malloc to fastMalloc and free to fastFree in Yarr's RegexInterpreter.cpp
2059         https://bugs.webkit.org/show_bug.cgi?id=27874
2060
2061         Use fastMalloc and fastFree instead of malloc and free in RegexInterpreter.cpp's methods.
2062
2063         * yarr/RegexInterpreter.cpp:
2064         (JSC::Yarr::Interpreter::allocDisjunctionContext):
2065         (JSC::Yarr::Interpreter::freeDisjunctionContext):
2066         (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext):
2067         (JSC::Yarr::Interpreter::freeParenthesesDisjunctionContext):
2068
2069 2009-07-30  Xan Lopez  <xlopez@igalia.com>
2070
2071         Reviewed by Jan Alonzo.
2072
2073         Fix compiler warning.
2074
2075         GCC does not like C++-style comments in preprocessor directives.
2076
2077         * wtf/Platform.h:
2078
2079 2009-07-30  John McCall  <rjmccall@apple.com>
2080
2081         Reviewed by Gavin Barraclough.
2082
2083         Optimize the X86_64 trampolines: avoid the need for filler arguments
2084         and move the stub-args area closer to the stack pointer.
2085
2086         * jit/JIT.h: adjust patch offsets because of slight code-size change 
2087         * jit/JITCode.h:
2088         (JSC::JITCode::execute): don't pass filler args
2089         * jit/JITStubs.cpp:
2090         (ctiTrampoline): (X86_64): push args onto stack, use args directly
2091         (ctiVMThrowTrampoline): (X86_64): adjust %rsp by correct displacement
2092         (ctiOpThrowNotCaught): (X86_64): adjust %rsp by correct displacement
2093         * jit/JITStubs.h:
2094         (JITStackFrame): (X86_64): move args area earlier
2095         (ctiTrampoline): remove filler args from prototype
2096
2097 2009-07-30  Gavin Barraclough  <barraclough@apple.com>
2098
2099         Reviewed by NOBODY (build fix).
2100
2101         Temporarily revert r46618 since this is b0rking on Linux.
2102
2103 2009-07-23  Gavin Barraclough  <barraclough@apple.com>
2104
2105         Reviewed by Oliver Hunt.
2106
2107         Make get_by_id/put_by_id/method_check/call defer optimization using a data flag rather than a code modification.
2108         ( https://bugs.webkit.org/show_bug.cgi?id=27635 )
2109
2110         This improves performance of ENABLE(ASSEMBLER_WX_EXCLUSIVE) builds by 2-2.5%, reducing the overhead to about 2.5%.
2111         (No performance impact with ASSEMBLER_WX_EXCLUSIVE disabled).
2112
2113         * bytecode/CodeBlock.cpp:
2114         (JSC::printStructureStubInfo):
2115             - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.
2116
2117         * bytecode/CodeBlock.h:
2118         (JSC::):
2119         (JSC::CallLinkInfo::seenOnce):
2120         (JSC::CallLinkInfo::setSeen):
2121         (JSC::MethodCallLinkInfo::seenOnce):
2122         (JSC::MethodCallLinkInfo::setSeen):
2123             - Change a pointer in CallLinkInfo/MethodCallLinkInfo to use a PtrAndFlags, use a flag to track when an op has been executed once.
2124
2125         * bytecode/StructureStubInfo.cpp:
2126         (JSC::StructureStubInfo::deref):
2127             - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.
2128
2129         * bytecode/StructureStubInfo.h:
2130         (JSC::StructureStubInfo::StructureStubInfo):
2131         (JSC::StructureStubInfo::initGetByIdSelf):
2132         (JSC::StructureStubInfo::initGetByIdProto):
2133         (JSC::StructureStubInfo::initGetByIdChain):
2134         (JSC::StructureStubInfo::initGetByIdSelfList):
2135         (JSC::StructureStubInfo::initGetByIdProtoList):
2136         (JSC::StructureStubInfo::initPutByIdTransition):
2137         (JSC::StructureStubInfo::initPutByIdReplace):
2138         (JSC::StructureStubInfo::seenOnce):
2139         (JSC::StructureStubInfo::setSeen):
2140             - Make StructureStubInfo store the type as an integer, rather than an OpcodeID, add a flag to track when an op has been executed once.
2141
2142         * bytecompiler/BytecodeGenerator.cpp:
2143         (JSC::BytecodeGenerator::emitGetById):
2144         (JSC::BytecodeGenerator::emitPutById):
2145             - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.
2146
2147         * jit/JIT.cpp:
2148         (JSC::JIT::privateCompileCTIMachineTrampolines):
2149         (JSC::JIT::unlinkCall):
2150             - Remove the "don't lazy link" stage of calls.
2151
2152         * jit/JIT.h:
2153         (JSC::JIT::compileCTIMachineTrampolines):
2154             - Remove the "don't lazy link" stage of calls.
2155
2156         * jit/JITCall.cpp:
2157         (JSC::JIT::compileOpCallSlowCase):
2158             - Remove the "don't lazy link" stage of calls.
2159
2160         * jit/JITStubs.cpp:
2161         (JSC::JITThunks::JITThunks):
2162         (JSC::JITThunks::tryCachePutByID):
2163         (JSC::JITThunks::tryCacheGetByID):
2164         (JSC::JITStubs::DEFINE_STUB_FUNCTION):
2165         (JSC::JITStubs::getPolymorphicAccessStructureListSlot):
2166             - Remove the "don't lazy link" stage of calls, and the "_second" stage of get_by_id/put_by_id/method_check.
2167
2168         * jit/JITStubs.h:
2169         (JSC::JITThunks::ctiStringLengthTrampoline):
2170         (JSC::JITStubs::):
2171             - Remove the "don't lazy link" stage of calls, and the "_second" stage of get_by_id/put_by_id/method_check.
2172
2173         * wtf/PtrAndFlags.h:
2174         (WTF::PtrAndFlags::PtrAndFlags):
2175         (WTF::PtrAndFlags::operator!):
2176         (WTF::PtrAndFlags::operator->):
2177             - Add ! and -> operators, add constuctor with pointer argument.
2178
2179 2009-07-30  Geoffrey Garen  <ggaren@apple.com>
2180
2181         Reviewed by Gavin Barraclough.
2182
2183         Fixed failing tests seen on Windows buildbot.
2184
2185         * jit/JITStubs.cpp:
2186         (JSC::DEFINE_STUB_FUNCTION):
2187         * jit/JITStubs.h:
2188         (JSC::): Use "int" instead of "bool" to guarantee a 32-bit result,
2189         regardless of compiler. gcc on mac uses 32-bit values for bool,
2190         but gcc on linux and MSVC on Windows use 8-bit values.
2191
2192 2009-07-30  Geoffrey Garen  <ggaren@apple.com>
2193
2194         Windows build fix: added missing symbols on Windows.
2195
2196         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2197         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
2198
2199 2009-07-30  Geoffrey Garen  <ggaren@apple.com>
2200
2201         Windows build fix: removed stale symbols on Windows.
2202
2203         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2204         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
2205
2206 === End merge of nitro-extreme branch 2009-07-30 ===
2207
2208 2009-07-20  Geoffrey Garen  <ggaren@apple.com>
2209
2210         Fixed a post-review typo in r46066 that caused tons of test failures.
2211         
2212         SunSpider reports no change.
2213
2214         * runtime/JSArray.cpp:
2215         (JSC::JSArray::JSArray): Initialize the full vector capacity, to avoid
2216         uninitialized members at the end.
2217
2218 2009-07-20  Geoffrey Garen  <ggaren@apple.com>
2219
2220         Windows WebKit build fix: Added some missing exports.
2221
2222         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2223         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
2224
2225 2009-07-17  Geoffrey Garen  <ggaren@apple.com>
2226
2227         Reviewed by Sam Weinig.
2228
2229         Get the branch working on windows.
2230         https://bugs.webkit.org/show_bug.cgi?id=27391
2231         
2232         SunSpider says 0.3% faster.
2233
2234         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2235         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Updated
2236         MSVC export lists to fix linker errors.
2237
2238         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added / removed
2239         new / old project files.
2240
2241         * jit/JIT.cpp:
2242         (JSC::JIT::privateCompileCTIMachineTrampolines): Used #pragma pack to tell
2243         MSVC that these structures represent actual memory layout, and should not be
2244         automatically aligned. Changed the return value load to load a 64bit quantity
2245         into the canonical registers.
2246
2247         * jit/JIT.h: Moved OBJECT_OFFSETOF definition to StdLibExtras.h because
2248         it's needed by more than just the JIT, and it supplements a standard library
2249         macro (offsetof).
2250
2251         * jit/JITCall.cpp:
2252         (JSC::JIT::compileOpCallInitializeCallFrame): Fixed an incorrectly signed
2253         cast to resolve an MSVC warning.
2254
2255         * jit/JITStubs.h: Used #pragma pack to tell MSVC that these structures
2256         represent actual memory layout, and should not be automatically aligned. 
2257
2258         * runtime/JSArray.cpp:
2259         (JSC::JSArray::JSArray): Replaced memset_pattern8 with a for loop, since
2260         memset_pattern8 is not portable. (I verified that this version of the loop
2261         gives the best performance / generated code in GCC.)
2262
2263         * runtime/JSObject.h:
2264         (JSC::JSObject::JSObject): Removed accidental usage of FIELD_OFFSET --
2265         OBJECT_OFFSETOF is our new macro name. (FIELD_OFFSET conflicts with a
2266         definition in winnt.h.)
2267
2268         * runtime/JSValue.cpp: Added some headers needed by non-all-in-one builds.
2269         
2270         * runtime/JSValue.h:
2271         (JSC::JSValue::): Made the tag signed, to match MSVC's signed enum values.
2272         (GCC doesn't seem to care one way or the other.)
2273
2274         * wtf/MainThread.cpp: Moved the StdLibExtras.h #include -- I did this a
2275         while ago to resolve a conflict with winnt.h. I can't remember if it's truly
2276         still needed, but what the heck.
2277
2278         * wtf/StdLibExtras.h: Moved OBJECT_OFFSETOF definition here.
2279
2280 2009-07-06  Geoffrey Garen  <ggaren@apple.com>
2281
2282         Reviewed by Sam Weinig (?).
2283         
2284         Fixed an assertion seen during the stress test.
2285         
2286         Don't assume that, if op1 is constant, op2 is not, and vice versa. Sadly,
2287         not all constants get folded.
2288
2289         * jit/JITArithmetic.cpp:
2290         (JSC::JIT::emit_op_jnless):
2291         (JSC::JIT::emitSlow_op_jnless):
2292         (JSC::JIT::emit_op_jnlesseq):
2293         (JSC::JIT::emitSlow_op_jnlesseq):
2294
2295 2009-07-06  Geoffrey Garen  <ggaren@apple.com>
2296
2297         Reviewed by Sam Weinig.
2298         
2299         Include op_convert_this in result caching.
2300         
2301         No change on SunSpider or v8.
2302
2303         * jit/JITOpcodes.cpp:
2304         (JSC::JIT::emit_op_convert_this):
2305
2306         * jit/JITStubs.cpp:
2307         (JSC::DEFINE_STUB_FUNCTION):
2308         * jit/JITStubs.h:
2309         (JSC::): Made the op_convert_this JIT stub return an EncodedJSValue, so
2310         to maintain the result caching contract that { tag, payload } can be
2311         found in { regT1, regT0 }.
2312
2313 2009-07-06  Geoffrey Garen  <ggaren@apple.com>
2314
2315         Reviewed by Sam Weinig.
2316         
2317         Implemented result chaining.
2318         
2319         1% faster on SunSpider. 4%-5% faster on v8.
2320
2321         * assembler/MacroAssemblerX86Common.h:
2322         (JSC::MacroAssemblerX86Common::move):
2323         * assembler/X86Assembler.h:
2324         (JSC::X86Assembler::movl_rr): Added an optimization to eliminate
2325         no-op mov instructions, to simplify chaining.
2326
2327         * jit/JIT.cpp:
2328         (JSC::JIT::JIT):
2329         * jit/JIT.h: Added data members and helper functions for recording
2330         chained results. We record both a mapping from virtual to machine register
2331         and the opcode for which the mapping is valid, to help ensure that the
2332         mapping isn't used after the mapped register has been stomped by other
2333         instructions.
2334
2335         * jit/JITCall.cpp:
2336         (JSC::JIT::compileOpCallVarargs):
2337         (JSC::JIT::compileOpCallVarargsSlowCase):
2338         (JSC::JIT::emit_op_ret):
2339         (JSC::JIT::emit_op_construct_verify):
2340         (JSC::JIT::compileOpCall):
2341         (JSC::JIT::compileOpCallSlowCase): Chain function call results.
2342
2343         * jit/JITInlineMethods.h:
2344         (JSC::JIT::emitLoadTag):
2345         (JSC::JIT::emitLoadPayload):
2346         (JSC::JIT::emitLoad):
2347         (JSC::JIT::emitLoad2):
2348         (JSC::JIT::isLabeled):
2349         (JSC::JIT::map):
2350         (JSC::JIT::unmap):
2351         (JSC::JIT::isMapped):
2352         (JSC::JIT::getMappedPayload):
2353         (JSC::JIT::getMappedTag): Use helper functions when loading virtual
2354         registers into machine registers, in case the loads can be eliminated
2355         by chaining.
2356
2357         * jit/JITOpcodes.cpp:
2358         (JSC::JIT::emit_op_mov):
2359         (JSC::JIT::emit_op_end):
2360         (JSC::JIT::emit_op_instanceof):
2361         (JSC::JIT::emit_op_get_global_var):
2362         (JSC::JIT::emit_op_put_global_var):
2363         (JSC::JIT::emit_op_get_scoped_var):
2364         (JSC::JIT::emit_op_put_scoped_var):
2365         (JSC::JIT::emit_op_to_primitive):
2366         (JSC::JIT::emit_op_resolve_global):
2367         (JSC::JIT::emit_op_jneq_ptr):
2368         (JSC::JIT::emit_op_next_pname):
2369         (JSC::JIT::emit_op_to_jsnumber):
2370         (JSC::JIT::emit_op_catch): Chain results from these opcodes.
2371
2372         (JSC::JIT::emit_op_profile_will_call):
2373         (JSC::JIT::emit_op_profile_did_call): Load the profiler into regT2 to
2374         avoid stomping a chained result.
2375
2376         * jit/JITPropertyAccess.cpp:
2377         (JSC::JIT::emit_op_method_check):
2378         (JSC::JIT::emit_op_get_by_val):
2379         (JSC::JIT::emit_op_get_by_id): Chain results from these opcodes.
2380
2381         * jit/JITStubCall.h:
2382         (JSC::JITStubCall::addArgument): Always use { regT1, regT0 }, to facilitate
2383         chaining.
2384
2385         (JSC::JITStubCall::call): Unmap all mapped registers, since our callee
2386         stub might stomp them.
2387
2388 2009-07-01  Sam Weinig  <sam@webkit.org>
2389
2390         Reviewed by Gavin Barraclough.
2391
2392         Don't reload values in emitBinaryDoubleOp.
2393
2394         SunSpider reports a 0.6% progression. 
2395
2396         * jit/JIT.h:
2397         * jit/JITArithmetic.cpp:
2398         (JSC::JIT::emit_op_jnless):
2399         (JSC::JIT::emit_op_jnlesseq):
2400         (JSC::JIT::emitBinaryDoubleOp):
2401
2402 2009-07-01  Sam Weinig  <sam@webkit.org>
2403
2404         Reviewed by Geoffrey Garen.
2405
2406         Convert op_div to load op1 and op2 up front.
2407
2408         * jit/JITArithmetic.cpp:
2409         (JSC::JIT::emit_op_div):
2410
2411 2009-07-01  Sam Weinig  <sam@webkit.org>
2412
2413         Reviewed by Geoffrey Garen.
2414
2415         Don't emit code in emitBinaryDoubleOp if code is unreachable, observable
2416         via an empty (unlinked) jumplist passed in.  This only effects op_jnless
2417         and op_jnlesseq at present.
2418
2419         * jit/JITArithmetic.cpp:
2420         (JSC::JIT::emitSlow_op_jnless):
2421         (JSC::JIT::emitSlow_op_jnlesseq):
2422         (JSC::JIT::emitBinaryDoubleOp):
2423
2424 2009-07-01  Geoffrey Garen  <ggaren@apple.com>
2425
2426         Reviewed by Sam Weinig.
2427
2428         Converted op_mod to put { tag, payload } in { regT1, regT0 }, and
2429         tidied up its constant case.
2430         
2431         SunSpider reports a 0.2% regression, but a micro-benchmark of op_mod
2432         shows a 12% speedup, and the SunSpider test that uses op_mod most should
2433         benefit a lot from result caching in the end, since it almost always
2434         performs (expression) % constant.
2435
2436         * jit/JITArithmetic.cpp:
2437         (JSC::JIT::emit_op_mod):
2438         (JSC::JIT::emitSlow_op_mod):
2439
2440 2009-06-30  Sam Weinig  <sam@webkit.org>
2441
2442         Reviewed by Geoffrey Garen.
2443
2444         Converted some more arithmetic ops to put { tag, payload } in
2445         { regT1, regT0 }.
2446
2447         * jit/JITArithmetic.cpp:
2448         (JSC::JIT::emit_op_mul):
2449         (JSC::JIT::emitSlow_op_mul):
2450
2451 2009-06-30  Geoffrey Garen  <ggaren@apple.com>
2452
2453         Reviewed by Sam Weinig.
2454
2455         Converted some more arithmetic ops to put { tag, payload } in
2456         { regT1, regT0 }, and added a case for subtract constant.
2457         
2458         SunSpider says no change. v8 says 0.3% slower.
2459
2460         * jit/JIT.h:
2461         * jit/JITArithmetic.cpp:
2462         (JSC::JIT::emit_op_add):
2463         (JSC::JIT::emitAdd32Constant):
2464         (JSC::JIT::emitSlow_op_add):
2465         (JSC::JIT::emit_op_sub):
2466         (JSC::JIT::emitSub32Constant):
2467         (JSC::JIT::emitSlow_op_sub):
2468
2469 2009-06-30  Gavin Barraclough  <barraclough@apple.com>
2470
2471         Reviewed by Sam Weinig.
2472
2473         Remove more uses of addressFor(), load double constants directly from
2474         the constantpool in the CodeBlock, rather than from the register file.
2475
2476         * jit/JITArithmetic.cpp:
2477         (JSC::JIT::emitAdd32Constant):
2478         (JSC::JIT::emitBinaryDoubleOp):
2479
2480 2009-06-30  Geoffrey Garen  <ggaren@apple.com>
2481
2482         Reviewed by Sam Weinig.
2483         
2484         Fixed a bug in postfix ops, where we would treat x = x++ and x = x--
2485         as a no-op, even if x were not an int, and the ++/-- could have side-effects.
2486
2487         * jit/JITArithmetic.cpp:
2488         (JSC::JIT::emit_op_post_inc):
2489         (JSC::JIT::emitSlow_op_post_inc):
2490         (JSC::JIT::emit_op_post_dec):
2491         (JSC::JIT::emitSlow_op_post_dec):
2492
2493 2009-06-30  Geoffrey Garen  <ggaren@apple.com>
2494
2495         Reviewed by Sam Weinig.
2496         
2497         Converted some arithmetic ops to put { tag, payload } in
2498         { regT1, regT0 }.
2499         
2500         SunSpider says 0.7% faster. v8 says no change.
2501
2502         * jit/JIT.h:
2503         * jit/JITArithmetic.cpp:
2504         (JSC::JIT::emit_op_jnless):
2505         (JSC::JIT::emit_op_jnlesseq):
2506         (JSC::JIT::emit_op_lshift):
2507         (JSC::JIT::emit_op_rshift):
2508         (JSC::JIT::emit_op_bitand):
2509         (JSC::JIT::emit_op_bitor):
2510         (JSC::JIT::emit_op_bitxor):
2511         * jit/JITInlineMethods.h:
2512         (JSC::JIT::isOperandConstantImmediateInt):
2513         (JSC::JIT::getOperandConstantImmediateInt):
2514
2515 2009-06-30  Gavin Barraclough  <barraclough@apple.com>
2516
2517         Reviewed by Sam Weinig.
2518
2519         Start removing cases of addressFor().
2520
2521         * jit/JIT.h:
2522         * jit/JITArithmetic.cpp:
2523         (JSC::JIT::emitAdd32Constant):
2524         (JSC::JIT::emitBinaryDoubleOp):
2525         (JSC::JIT::emit_op_div):
2526         * jit/JITInlineMethods.h:
2527         (JSC::JIT::emitLoadDouble):
2528         (JSC::JIT::emitLoadInt32ToDouble):
2529         (JSC::JIT::emitStoreDouble):
2530         * jit/JITOpcodes.cpp:
2531         (JSC::JIT::emit_op_jfalse):
2532         (JSC::JIT::emit_op_jtrue):
2533
2534 2009-06-30  Geoffrey Garen  <ggaren@apple.com>
2535
2536         Rolled back in my last patch with regression fixed.
2537
2538         * jit/JIT.cpp:
2539         (JSC::JIT::privateCompileSlowCases):
2540         * jit/JIT.h:
2541         * jit/JITOpcodes.cpp:
2542         (JSC::JIT::emit_op_loop_if_less):
2543         (JSC::JIT::emit_op_loop_if_lesseq):
2544         (JSC::JIT::emit_op_resolve_global):
2545         (JSC::JIT::emitSlow_op_resolve_global):
2546         (JSC::JIT::emit_op_eq):
2547         (JSC::JIT::emitSlow_op_eq):
2548         (JSC::JIT::emit_op_neq):
2549         (JSC::JIT::emitSlow_op_neq):
2550
2551 2009-06-30  Geoffrey Garen  <ggaren@apple.com>
2552
2553         Rolled out my last patch because it was a 2% SunSpider regression.
2554
2555         * jit/JIT.cpp:
2556         (JSC::JIT::privateCompileSlowCases):
2557         * jit/JIT.h:
2558         * jit/JITOpcodes.cpp:
2559         (JSC::JIT::emit_op_loop_if_less):
2560         (JSC::JIT::emit_op_loop_if_lesseq):
2561         (JSC::JIT::emit_op_resolve_global):
2562         (JSC::JIT::emit_op_eq):
2563         (JSC::JIT::emitSlow_op_eq):
2564         (JSC::JIT::emit_op_neq):
2565         (JSC::JIT::emitSlow_op_neq):
2566
2567 2009-06-30  Geoffrey Garen  <ggaren@apple.com>
2568
2569         Reviewed by Gavin "Sam Weinig" Barraclough.
2570         
2571         Standardized the rest of our opcodes to put { tag, payload } in
2572         { regT1, regT0 } where possible.
2573
2574         * jit/JIT.cpp:
2575         (JSC::JIT::privateCompileSlowCases):
2576         * jit/JIT.h:
2577         * jit/JITOpcodes.cpp:
2578         (JSC::JIT::emit_op_loop_if_less):
2579         (JSC::JIT::emit_op_loop_if_lesseq):
2580         (JSC::JIT::emit_op_resolve_global):
2581         (JSC::JIT::emitSlow_op_resolve_global):
2582         (JSC::JIT::emit_op_eq):
2583         (JSC::JIT::emitSlow_op_eq):
2584         (JSC::JIT::emit_op_neq):
2585         (JSC::JIT::emitSlow_op_neq):
2586
2587 2009-06-30  Gavin Barraclough  <barraclough@apple.com>
2588
2589         Reviewed by Geoffrey Garen.
2590
2591         Replace calls to store32(tagFor()) and store32(payloadFor())
2592         with emitStoreInt32(), emitStoreBool(), and emitStoreCell().
2593
2594         * jit/JIT.h:
2595         * jit/JITArithmetic.cpp:
2596         (JSC::JIT::emit_op_negate):
2597         (JSC::JIT::emit_op_lshift):
2598         (JSC::JIT::emit_op_rshift):
2599         (JSC::JIT::emit_op_bitand):
2600         (JSC::JIT::emitBitAnd32Constant):
2601         (JSC::JIT::emit_op_bitor):
2602         (JSC::JIT::emitBitOr32Constant):
2603         (JSC::JIT::emit_op_bitxor):
2604         (JSC::JIT::emitBitXor32Constant):
2605         (JSC::JIT::emit_op_bitnot):
2606         (JSC::JIT::emit_op_post_inc):
2607         (JSC::JIT::emit_op_post_dec):
2608         (JSC::JIT::emit_op_pre_inc):
2609         (JSC::JIT::emit_op_pre_dec):
2610         (JSC::JIT::emit_op_add):
2611         (JSC::JIT::emitAdd32Constant):
2612         (JSC::JIT::emit_op_sub):
2613         (JSC::JIT::emitSub32ConstantLeft):
2614         (JSC::JIT::emitSub32ConstantRight):
2615         (JSC::JIT::emit_op_mul):
2616         (JSC::JIT::emitSlow_op_mul):
2617         (JSC::JIT::emit_op_div):
2618         (JSC::JIT::emit_op_mod):
2619         * jit/JITCall.cpp:
2620         (JSC::JIT::emit_op_load_varargs):
2621         * jit/JITInlineMethods.h:
2622         (JSC::JIT::emitStoreInt32):
2623         (JSC::JIT::emitStoreCell):
2624         (JSC::JIT::emitStoreBool):
2625         (JSC::JIT::emitStore):
2626         * jit/JITOpcodes.cpp:
2627         (JSC::JIT::emit_op_instanceof):
2628         (JSC::JIT::emit_op_not):
2629         (JSC::JIT::emit_op_eq):
2630         (JSC::JIT::emitSlow_op_eq):
2631         (JSC::JIT::emit_op_neq):
2632         (JSC::JIT::emitSlow_op_neq):
2633         (JSC::JIT::compileOpStrictEq):
2634         (JSC::JIT::emit_op_eq_null):
2635         (JSC::JIT::emit_op_neq_null):
2636         * jit/JITStubCall.h:
2637         (JSC::JITStubCall::call):
2638
2639 2009-06-30  Geoffrey Garen  <ggaren@apple.com>
2640
2641         Reviewed by Sam Weinig.
2642         
2643         Standardized the rest of the property access instructions to put { tag,
2644         payload } in { regT1, regT0 }.
2645
2646         Small v8 speedup, 0.2% SunSpider slowdown.
2647
2648         * jit/JIT.h:
2649         * jit/JITInlineMethods.h:
2650         (JSC::JIT::emitLoad):
2651         (JSC::JIT::emitLoad2):
2652         * jit/JITPropertyAccess.cpp:
2653         (JSC::JIT::emit_op_get_by_val):
2654         (JSC::JIT::emitSlow_op_get_by_val):
2655         (JSC::JIT::emit_op_put_by_val):
2656         (JSC::JIT::emitSlow_op_put_by_val):
2657         (JSC::JIT::emit_op_put_by_id):
2658         (JSC::JIT::emitSlow_op_put_by_id):
2659         (JSC::JIT::patchPutByIdReplace):
2660
2661 2009-06-29  Sam Weinig  <sam@webkit.org>
2662
2663         Reviewed by Gavin Barraclough.
2664
2665         Various cleanups.
2666         - Use fpRegT* instead of X86::xmm*.
2667         - Use a switch statement in emitBinaryDoubleOp instead of a bunch of
2668           if/elses.
2669
2670         * jit/JITArithmetic.cpp:
2671         (JSC::JIT::emitAdd32Constant):
2672         (JSC::JIT::emitBinaryDoubleOp):
2673         (JSC::JIT::emit_op_div):
2674
2675 2009-06-29  Sam Weinig  <sam@webkit.org>
2676
2677         Reviewed by Geoffrey Garen.
2678
2679         Add inline code dealing with doubles for op_jfalse and op_jtrue.
2680
2681         * assembler/MacroAssemblerX86Common.h:
2682         (JSC::MacroAssemblerX86Common::):
2683         (JSC::MacroAssemblerX86Common::zeroDouble):
2684         * jit/JITOpcodes.cpp:
2685         (JSC::JIT::emit_op_jfalse):
2686         (JSC::JIT::emit_op_jtrue):
2687
2688 2009-06-28  Geoffrey Garen  <ggaren@apple.com>
2689
2690         Reviewed by Sam Weinig.
2691
2692         Standardized op_get_by_id to put { tag, payload } in { regT1, regT0 }.
2693         
2694         SunSpider and v8 report maybe 0.2%-0.4% regressions, but the optimization
2695         this enables will win much more than that back.
2696
2697         * jit/JIT.cpp:
2698         (JSC::JIT::privateCompileCTIMachineTrampolines):
2699         * jit/JIT.h:
2700         * jit/JITPropertyAccess.cpp:
2701         (JSC::JIT::emit_op_method_check):
2702         (JSC::JIT::emit_op_get_by_id):
2703         (JSC::JIT::compileGetByIdHotPath):
2704         (JSC::JIT::compileGetByIdSlowCase):
2705         (JSC::JIT::patchGetByIdSelf):
2706         (JSC::JIT::privateCompilePatchGetArrayLength):
2707         (JSC::JIT::privateCompileGetByIdProto):
2708         (JSC::JIT::privateCompileGetByIdSelfList):
2709         (JSC::JIT::privateCompileGetByIdProtoList):
2710         (JSC::JIT::privateCompileGetByIdChainList):
2711         (JSC::JIT::privateCompileGetByIdChain):
2712
2713 2009-06-26  Geoffrey Garen  <ggaren@apple.com>
2714
2715         Reviewed by Maciej Stachowiak.
2716         
2717         Standardized op_call to put { tag, payload } in { regT1, regT0 }.
2718         
2719         SunSpider and v8 report no change.
2720
2721         * jit/JIT.cpp:
2722         (JSC::JIT::privateCompileCTIMachineTrampolines):
2723         * jit/JITCall.cpp:
2724         (JSC::JIT::compileOpCallInitializeCallFrame):
2725         (JSC::JIT::compileOpCallSetupArgs):
2726         (JSC::JIT::compileOpConstructSetupArgs):
2727         (JSC::JIT::compileOpCallVarargsSetupArgs):
2728         (JSC::JIT::compileOpCallVarargs):
2729         (JSC::JIT::compileOpCall):
2730         (JSC::JIT::compileOpCallSlowCase):
2731
2732 2009-06-26  Sam Weinig  <sam@webkit.org>
2733
2734         Reviewed by Geoffrey Garen.
2735
2736         Handle multiplying by zero a little better by
2737         inlining the case that both operands are non-negative
2738         into the slowpath.
2739
2740         * assembler/MacroAssemblerX86Common.h:
2741         (JSC::MacroAssemblerX86Common::branchOr32):
2742         * jit/JITArithmetic.cpp:
2743         (JSC::JIT::emit_op_mul):
2744         (JSC::JIT::emitSlow_op_mul):
2745
2746 2009-06-25  Geoffrey Garen  <ggaren@apple.com>
2747
2748         Reviewed by Sam Weinig.
2749         
2750         Optimize x++ to ++x inside for loops.
2751         
2752         Sadly, no measurable speedup, but this should help with result chaining.
2753
2754         * parser/Nodes.cpp:
2755         (JSC::ForNode::emitBytecode):
2756
2757 2009-06-25  Geoffrey Garen  <ggaren@apple.com>
2758
2759         Reviewed by Sam Weinig.
2760         
2761         Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }.
2762
2763         * jit/JITArithmetic.cpp:
2764         (JSC::JIT::emitSlow_op_bitnot):
2765         (JSC::JIT::emit_op_post_inc):
2766
2767 2009-06-25  Geoffrey Garen  <ggaren@apple.com>
2768
2769         Reviewed by Sam Weinig.
2770         
2771         Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }.
2772
2773         * jit/JITArithmetic.cpp:
2774         (JSC::JIT::emit_op_bitnot):
2775         (JSC::JIT::emit_op_post_dec):
2776         (JSC::JIT::emit_op_pre_inc):
2777         (JSC::JIT::emitSlow_op_pre_inc):
2778         (JSC::JIT::emit_op_pre_dec):
2779         (JSC::JIT::emitSlow_op_pre_dec):
2780
2781 2009-06-25  Geoffrey Garen  <ggaren@apple.com>
2782
2783         Reviewed by Sam Weinig.
2784         
2785         Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }.
2786
2787         * jit/JITArithmetic.cpp:
2788         (JSC::JIT::emit_op_negate):
2789         (JSC::JIT::emitSlow_op_negate):
2790         * jit/JITCall.cpp:
2791         (JSC::JIT::emit_op_construct_verify):
2792         (JSC::JIT::emitSlow_op_construct_verify):
2793
2794 2009-06-25  Geoffrey Garen  <ggaren@apple.com>
2795
2796         Reviewed by Sam Weinig.
2797         
2798         Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }.
2799
2800         * jit/JITOpcodes.cpp:
2801         (JSC::JIT::emit_op_loop_if_true):
2802         (JSC::JIT::emit_op_jfalse):
2803         (JSC::JIT::emit_op_jtrue):
2804         (JSC::JIT::emit_op_jeq_null):
2805         (JSC::JIT::emit_op_jneq_null):
2806         (JSC::JIT::emit_op_eq_null):
2807         (JSC::JIT::emit_op_neq_null):
2808
2809 2009-06-25  Geoffrey Garen  <ggaren@apple.com>
2810
2811         Reviewed by Sam Weinig (sort of, maybe).
2812         
2813         Fixed some ASSERTs in http/tests/security.
2814         
2815         These ASSERTs were introduced by http://trac.webkit.org/changeset/45057,
2816         but the underlying problem was actually older. http://trac.webkit.org/changeset/45057
2817         just exposed the problem by enabling optimization in more cases.
2818         
2819         The ASSERTs fired because we tested PropertySlot::slotBase() for validity,
2820         but slotBase() ASSERTs if it's invalid, so we would ASSERT before
2821         the test could happen. Solution: Remove the ASSERT. Maybe it was valid
2822         once, but it clearly goes against a pattern we've deployed of late.
2823         
2824         The underlying problem was that WebCore would re-use a PropertySlot in
2825         the case of a forwarding access, and the second use would not completely
2826         overwrite the first use. Solution: Make sure to overwrite m_offset when
2827         setting a value on a PropertySlot. (Other values already get implicitly
2828         overwritten during reuse.)
2829
2830         * runtime/PropertySlot.h:
2831         (JSC::PropertySlot::PropertySlot):
2832         (JSC::PropertySlot::setValueSlot):
2833         (JSC::PropertySlot::setValue):
2834         (JSC::PropertySlot::setRegisterSlot):
2835         (JSC::PropertySlot::setUndefined):
2836         (JSC::PropertySlot::slotBase):
2837         (JSC::PropertySlot::clearOffset):
2838
2839 2009-06-24  Gavin Barraclough  <barraclough@apple.com>
2840
2841         Reviewed by Geoff Garen.
2842
2843         Enable JIT_OPTIMIZE_METHOD_CALLS on the branch, implementation matches current implemenatation in ToT.
2844
2845         * jit/JIT.h:
2846         * jit/JITPropertyAccess.cpp:
2847         (JSC::JIT::emit_op_method_check):
2848         (JSC::JIT::emitSlow_op_method_check):
2849         (JSC::JIT::emit_op_get_by_id):
2850         (JSC::JIT::compileGetByIdHotPath):
2851         (JSC::JIT::emitSlow_op_get_by_id):
2852         (JSC::JIT::compileGetByIdSlowCase):
2853
2854 2009-06-23  Geoffrey Garen  <ggaren@apple.com>
2855
2856         Reviewed by Sam Weinig.
2857
2858         Bit off a tiny bit more of standardizing opcode behavior to help with result
2859         caching.
2860         
2861         SunSpider reports no change, v8 maybe a tiny speedup.
2862
2863         * jit/JITOpcodes.cpp:
2864         (JSC::JIT::emit_op_to_jsnumber):
2865         (JSC::JIT::emitSlow_op_to_jsnumber):
2866         (JSC::JIT::emit_op_convert_this):
2867         (JSC::JIT::emitSlow_op_convert_this):
2868
2869 2009-06-23  Geoffrey Garen  <ggaren@apple.com>
2870
2871         Reviewed by Sam Weinig.
2872
2873         Bit off a tiny bit more of standardizing opcode behavior to help with result
2874         caching -- including removing my old enemy, op_resolve_function, because
2875         it was non-standard, and removing it felt better than helping it limp along.
2876         
2877         SunSpider reports no change, v8 maybe a tiny speedup.
2878         
2879         * bytecode/CodeBlock.cpp:
2880         (JSC::CodeBlock::dump):
2881         * bytecode/Opcode.h:
2882         * bytecompiler/BytecodeGenerator.cpp:
2883         * bytecompiler/BytecodeGenerator.h:
2884         * interpreter/Interpreter.cpp:
2885         (JSC::Interpreter::privateExecute):
2886         * jit/JIT.cpp:
2887         (JSC::JIT::privateCompileMainPass):
2888         * jit/JIT.h:
2889         * jit/JITOpcodes.cpp:
2890         (JSC::JIT::emit_op_get_scoped_var):
2891         (JSC::JIT::emit_op_put_scoped_var):
2892         (JSC::JIT::emit_op_to_primitive):
2893         (JSC::JIT::emitSlow_op_to_primitive):
2894         * jit/JITStubs.cpp:
2895         * jit/JITStubs.h:
2896         * parser/Nodes.cpp:
2897         (JSC::FunctionCallResolveNode::emitBytecode):
2898
2899 2009-06-23  Geoffrey Garen  <ggaren@apple.com>
2900
2901         Reviewed by Sam Weinig.
2902         
2903         Bit off a tiny bit of standardizing opcode behavior to help with result
2904         caching.
2905         
2906         0.6% SunSpider speedup. 0.3% v8 speedup.
2907
2908         * jit/JITInlineMethods.h:
2909         (JSC::JIT::emitLoad): Accomodate a base register that overlaps with payload
2910         by loading tag before payload, to avoid stomping base/payload.
2911
2912         * jit/JITOpcodes.cpp:
2913         (JSC::JIT::emit_op_mov): Abide by the standard "tag in regT1, payload in
2914         regT0" semantics.
2915
2916         (JSC::JIT::emit_op_get_global_var):
2917         (JSC::JIT::emit_op_put_global_var): Ditto. Also, removed some irrelevent
2918         loads while I was at it. The global object's "d" pointer never changes
2919         after construction.
2920
2921 2009-06-23  Gavin Barraclough  <barraclough@apple.com>
2922
2923         Reviewed by Sam Weinig.
2924
2925         Remove 'arguments' field from Register union (again).
2926         This time do so without breaking tests (radical, I know).
2927
2928         * interpreter/CallFrame.h:
2929         (JSC::ExecState::optionalCalleeArguments):
2930         (JSC::ExecState::setArgumentCount):
2931         (JSC::ExecState::init):
2932         * interpreter/Interpreter.cpp:
2933         (JSC::Interpreter::dumpRegisters):
2934         (JSC::Interpreter::unwindCallFrame):
2935         (JSC::Interpreter::privateExecute):
2936         (JSC::Interpreter::retrieveArguments):
2937         * interpreter/Register.h:
2938         (JSC::Register::withInt):
2939         (JSC::Register::):
2940         (JSC::Register::Register):
2941         (JSC::Register::i):
2942         * jit/JITStubs.cpp:
2943         (JSC::JITStubs::cti_op_tear_off_arguments):
2944         * runtime/Arguments.h:
2945         (JSC::JSActivation::copyRegisters):
2946         (JSC::Register::arguments):
2947         * runtime/JSActivation.cpp:
2948         (JSC::JSActivation::argumentsGetter):
2949         * runtime/JSActivation.h:
2950
2951 2009-06-23  Geoffrey Garen  <ggaren@apple.com>
2952
2953         Reviewed by Sam Weinig.
2954         
2955         Removed some result register tracking cruft in preparation for a new
2956         result tracking mechanism.
2957         
2958         SunSpider reports no change.
2959
2960         * assembler/AbstractMacroAssembler.h:
2961         * assembler/X86Assembler.h:
2962         (JSC::X86Assembler::JmpDst::JmpDst): No need to track jump targets in
2963         machine code; we already do this in bytecode.
2964
2965         * jit/JIT.cpp:
2966         (JSC::JIT::JIT):
2967         (JSC::JIT::emitTimeoutCheck): Make sure to save and restore the result
2968         registers, so an opcode with a timeout check can still benefit from result
2969         register caching.
2970
2971         (JSC::JIT::privateCompileMainPass):
2972         (JSC::JIT::privateCompileSlowCases): Removed calls to killLastResultRegister()
2973         in preparation for something new.
2974
2975         * jit/JIT.h:
2976         * jit/JITArithmetic.cpp:
2977         (JSC::JIT::emit_op_jnless):
2978         (JSC::JIT::emit_op_jnlesseq):
2979         * jit/JITInlineMethods.h:
2980         (JSC::JIT::emitGetFromCallFrameHeaderPtr):
2981         (JSC::JIT::emitGetFromCallFrameHeader32):
2982         * jit/JITOpcodes.cpp:
2983         (JSC::JIT::emit_op_jmp):
2984         (JSC::JIT::emit_op_jfalse):
2985         (JSC::JIT::emit_op_jtrue):
2986         (JSC::JIT::emit_op_jeq_null):
2987         (JSC::JIT::emit_op_jneq_null):
2988         (JSC::JIT::emit_op_jneq_ptr):
2989         (JSC::JIT::emit_op_jsr):
2990         (JSC::JIT::emit_op_sret):
2991         (JSC::JIT::emit_op_jmp_scopes): ditto
2992
2993         * jit/JITStubCall.h:
2994         (JSC::JITStubCall::JITStubCall):
2995         (JSC::JITStubCall::getArgument): added a mechanism for reloading an argument
2996         you passed to a JIT stub, for use in emitTimeoutCheck.
2997
2998 2009-06-23  Sam Weinig  <sam@webkit.org>
2999
3000         Reviewed by Geoffrey Garen.
3001
3002         Remove now-useless inplace variants of binary ops.
3003
3004         * jit/JIT.h:
3005         * jit/JITArithmetic.cpp:
3006         (JSC::JIT::emit_op_bitand):
3007         (JSC::JIT::emit_op_bitor):
3008         (JSC::JIT::emit_op_bitxor):
3009         (JSC::JIT::emit_op_add):
3010         (JSC::JIT::emit_op_sub):
3011         (JSC::JIT::emit_op_mul):
3012
3013 2009-06-23  Sam Weinig  <sam@webkit.org>
3014
3015         Reviewed by Geoffrey Garen.
3016
3017         Move off memory operands to aid in re-enabling result caching.
3018
3019         - No regression measured.
3020
3021         * jit/JIT.h:
3022         * jit/JITArithmetic.cpp:
3023         (JSC::JIT::emit_op_negate):
3024         (JSC::JIT::emit_op_jnless):
3025         (JSC::JIT::emit_op_jnlesseq):
3026         (JSC::JIT::emit_op_lshift):
3027         (JSC::JIT::emit_op_rshift):
3028         (JSC::JIT::emit_op_bitand):
3029         (JSC::JIT::emitBitAnd32Constant):
3030         (JSC::JIT::emitBitAnd32InPlace):
3031         (JSC::JIT::emit_op_bitor):
3032         (JSC::JIT::emitBitOr32Constant):
3033         (JSC::JIT::emitBitOr32InPlace):
3034         (JSC::JIT::emit_op_bitxor):
3035         (JSC::JIT::emitBitXor32Constant):
3036         (JSC::JIT::emitBitXor32InPlace):
3037         (JSC::JIT::emit_op_bitnot):
3038         (JSC::JIT::emit_op_post_inc):
3039         (JSC::JIT::emit_op_post_dec):
3040         (JSC::JIT::emit_op_pre_inc):
3041         (JSC::JIT::emitSlow_op_pre_inc):
3042         (JSC::JIT::emit_op_pre_dec):
3043         (JSC::JIT::emitSlow_op_pre_dec):
3044         (JSC::JIT::emit_op_add):
3045         (JSC::JIT::emitAdd32Constant):
3046         (JSC::JIT::emitAdd32InPlace):
3047         (JSC::JIT::emitSlow_op_add):
3048         (JSC::JIT::emitSlowAdd32Constant):
3049         (JSC::JIT::emit_op_sub):
3050         (JSC::JIT::emitSlow_op_sub):
3051         (JSC::JIT::emitSub32ConstantLeft):
3052         (JSC::JIT::emitSub32ConstantRight):
3053         (JSC::JIT::emitSub32InPlaceLeft):
3054         (JSC::JIT::emitSub32InPlaceRight):
3055         (JSC::JIT::emitBinaryDoubleOp):
3056         (JSC::JIT::emit_op_mul):
3057         (JSC::JIT::emitMul32InPlace):
3058         (JSC::JIT::emit_op_div):
3059         (JSC::JIT::emit_op_mod):
3060         * jit/JITCall.cpp:
3061         (JSC::JIT::compileOpCallVarargs):
3062         * jit/JITOpcodes.cpp:
3063         (JSC::JIT::emit_op_loop_if_less):
3064         (JSC::JIT::emit_op_loop_if_lesseq):
3065         (JSC::JIT::emit_op_instanceof):
3066         (JSC::JIT::emit_op_to_primitive):
3067         (JSC::JIT::emit_op_not):
3068         (JSC::JIT::emit_op_jneq_ptr):
3069         (JSC::JIT::emit_op_eq):
3070         (JSC::JIT::emit_op_neq):
3071         (JSC::JIT::emit_op_to_jsnumber):
3072         * jit/JITPropertyAccess.cpp:
3073         (JSC::JIT::emit_op_get_by_val):
3074         (JSC::JIT::emit_op_put_by_val):
3075
3076 2009-06-23  Geoffrey Garen  <ggaren@apple.com>
3077
3078         Reviewed by Sam Weinig.
3079         
3080         Fixed some missing and/or misplaced labels in bytecode generation, so
3081         we don't have to work around them in JIT code generation.
3082
3083         * bytecompiler/BytecodeGenerator.cpp:
3084         (JSC::BytecodeGenerator::emitJumpSubroutine):
3085         * parser/Nodes.cpp:
3086         (JSC::TryNode::emitBytecode):
3087
3088 2009-06-22  Geoffrey Garen  <ggaren@apple.com>
3089
3090         Reviewed by Sam Weinig.
3091         
3092         For member function calls, emit "this" directly into the "this" slot
3093         for the function call, instead of moving it there later. This reduces
3094         time spent in op_mov during certain calls, like "a.b.c()".
3095         
3096         1%-2% speedup on v8, mostly richards and delta-blue.
3097
3098         * parser/Nodes.cpp:
3099         (JSC::FunctionCallDotNode::emitBytecode):
3100
3101 2009-06-22  Gavin Barraclough  <barraclough@apple.com>
3102
3103         Reviewed by Sam Weinig.
3104
3105         Remove 'arguments' field from Register union.  Having JSCell derived types in the union is
3106         dangerous since it opens the possibility for the field to be written as a raw pointer but
3107         then read as a JSValue.  This will lead to statle data being read for the tag, which may
3108         be dangerous.  Having removed Arguments* types form Register, all arguments objects must
3109         always explicitly be stored in the register file as JSValues.
3110
3111         * interpreter/CallFrame.h:
3112         (JSC::ExecState::optionalCalleeArguments):
3113         * interpreter/Interpreter.cpp:
3114         (JSC::Interpreter::unwindCallFrame):
3115         (JSC::Interpreter::privateExecute):
3116         (JSC::Interpreter::retrieveArguments):
3117         * interpreter/Register.h:
3118         (JSC::Register::):
3119         * jit/JITStubs.cpp:
3120         (JSC::JITStubs::cti_op_tear_off_arguments):
3121         * runtime/Arguments.h:
3122         (JSC::JSActivation::copyRegisters):
3123         * runtime/JSActivation.cpp:
3124         (JSC::JSActivation::argumentsGetter):
3125         * runtime/JSActivation.h:
3126
3127 2009-06-03  Sam Weinig  <sam@webkit.org>
3128
3129         Reviewed by Geoffrey Garen.
3130
3131         Add back known this value optimization by abstracting
3132         slow case if not JSCell jumps.
3133
3134         * jit/JIT.h:
3135         * jit/JITCall.cpp:
3136         (JSC::JIT::compileOpCallVarargs):
3137         (JSC::JIT::compileOpCallVarargsSlowCase):
3138         (JSC::JIT::compileOpCall):
3139         (JSC::JIT::compileOpCallSlowCase):
3140         * jit/JITInlineMethods.h:
3141         (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
3142         (JSC::JIT::linkSlowCaseIfNotJSCell):
3143         * jit/JITOpcodes.cpp:
3144         (JSC::JIT::emit_op_instanceof):
3145         (JSC::JIT::emitSlow_op_instanceof):
3146         * jit/JITPropertyAccess.cpp:
3147         (JSC::JIT::emit_op_get_by_val):
3148         (JSC::JIT::emitSlow_op_get_by_val):
3149         (JSC::JIT::emit_op_put_by_val):
3150         (JSC::JIT::emitSlow_op_put_by_val):
3151         (JSC::JIT::emit_op_get_by_id):
3152         (JSC::JIT::emitSlow_op_get_by_id):
3153         (JSC::JIT::emit_op_put_by_id):
3154         (JSC::JIT::emitSlow_op_put_by_id):
3155
3156 2009-06-01  Geoffrey Garen  <ggaren@apple.com>
3157
3158         Reviewed by Sam Weinig.
3159         
3160         Fixed some of the regression in crypto-aes.js. (8.5% speedup in
3161         crypto-aes.js.)
3162         
3163         SunSpider reports no change overall.
3164         
3165         Division was producing double results, which took the slow path through
3166         array access code.
3167         
3168         Strangely, all my attempts at versions of this patch that modified array
3169         access code to accept ints encoded as doubles along the fast or slow paths
3170         were regressions. So I did this instead.
3171
3172         * jit/JITArithmetic.cpp:
3173         (JSC::JIT::emit_op_div): When dividing an int by an int, go ahead and try
3174         to turn the result into an int. Don't just do int division, though, because
3175         testing shows it to be slower than SSE double division, and the corner
3176         cases are pretty complicated / lengthy on top of that. Also, don't try
3177         to canonicalize division of known tiny numerators into ints, since that's a
3178         waste of time.
3179
3180 2009-05-26  Geoffrey Garen  <ggaren@apple.com>
3181
3182         Reviewed by Oliver Hunt.
3183         
3184         Fixed a regression caused by my recent fix for NaN.
3185
3186         * jit/JITArithmetic.cpp:
3187         (JSC::JIT::emitBinaryDoubleOp): Actually do the comparison in reverse
3188         order, like the ChangeLog said we would, bokay?
3189
3190 2009-05-26  Geoffrey Garen  <ggaren@apple.com>
3191
3192         Reviewed by Sam Weinig and Oliver Hunt.
3193         
3194         Fixed two edge cases in %:
3195         
3196         - Don't do -2147483648 % x as a fast case, since you might do -2147483648 % -1,
3197         which will signal a hardware exception due to overflow.
3198
3199         - In the case of a zero remainder, be sure to store negative zero if the
3200         dividend was zero.
3201         
3202         SunSpider reports no change.
3203
3204         * jit/JITArithmetic.cpp:
3205         (JSC::JIT::emit_op_mod):
3206         (JSC::JIT::emitSlow_op_mod):
3207
3208 2009-05-25  Geoffrey Garen  <ggaren@apple.com>
3209
3210         Reviewed by Maciej Stachowiak.
3211         
3212         Fixed a regression when comparing to NaN.
3213
3214         * jit/JITArithmetic.cpp:
3215         (JSC::JIT::emitBinaryDoubleOp): For op_jnless and op_jnless_eq, do the
3216         comparison in reverse order, and jump if the result is below or 
3217         below-or-equal. This ensures that we do jump in the case of NaN.
3218
3219 2009-05-25  Geoffrey Garen  <ggaren@apple.com>
3220
3221         Reviewed by Oliver Hunt.
3222         
3223         SunSpider says no change.
3224         
3225         Fixed regressions in fast/js/var-declarations-shadowing.html and
3226         fast/js/equality.html, caused by recent == and != optimizations.
3227
3228         * jit/JITStubs.cpp:
3229         (JSC::JITStubs::cti_op_eq): Don't treat "compare to string" as always
3230         numeric or string comparison. If the second operand is an object, you
3231         need to ToPrimitive it, and start all over again. Also, I wrote out each
3232         of the possible cases explicitly, to cut down on redundant branching.
3233
3234 2009-05-25  Sam Weinig  <sam@webkit.org>
3235
3236         Reviewed by Mark Rowe.
3237
3238         Fix bug in fast/js/constant-folding.html where we were not negating
3239         -0 properly.
3240
3241         * jit/JITArithmetic.cpp:
3242         (JSC::JIT::emit_op_negate):
3243
3244 2009-05-23  Geoffrey Garen  <ggaren@apple.com>
3245
3246         Reviewed by Oliver Hunt.
3247         
3248         Refactored new slow case codegen for == and !=.
3249         
3250         SunSpider reports no change, maybe a tiny speedup.
3251
3252         * jit/JITOpcodes.cpp:
3253         (JSC::JIT::emitSlow_op_eq):
3254         (JSC::JIT::emitSlow_op_neq): Made a vptr comparison a *Ptr operation,
3255         instead of *32, to make it portable to 64bit. Reorganized the string
3256         and generic cases to make their control flow a little clearer.
3257
3258 2009-05-23  Geoffrey Garen  <ggaren@apple.com>
3259
3260         Reviewed by Maciej Stachowiak.
3261         
3262         Optimized == and != for our new value representation -- especially for strings.
3263         
3264         14% speedup on date-format-tofte.
3265
3266         * jit/JITOpcodes.cpp:
3267         (JSC::JIT::emit_op_eq):
3268         (JSC::JIT::emitSlow_op_eq):
3269         (JSC::JIT::emit_op_neq):
3270         (JSC::JIT::emitSlow_op_neq):
3271         * jit/JITStubCall.h:
3272         (JSC::JITStubCall::JITStubCall):
3273         * jit/JITStubs.cpp:
3274         (JSC::JITStubs::cti_op_eq):
3275         (JSC::JITStubs::cti_op_eq_strings):
3276         (JSC::JITStubs::cti_op_call_eval):
3277         * jit/JITStubs.h:
3278         (JSC::):
3279         * runtime/JSValue.h:
3280
3281 2009-05-22  Sam Weinig  <sam@webkit.org>
3282
3283         Reviewed by Gavin Barraclough.
3284
3285         Fix non-SSE enabled builds.
3286
3287         * jit/JITArithmetic.cpp:
3288         (JSC::JIT::emitSlow_op_add): Don't early return here, we still need to call the JIT stub.
3289         (JSC::JIT::emitSlow_op_sub): Ditto.
3290
3291 2009-05-22  Geoffrey Garen  <ggaren@apple.com>
3292
3293         Reviewed by Sam Weinig.
3294         
3295         Here's a thought: let's not take a jit stub call just to multiply by 1,
3296         bokay?
3297         
3298         imul doesn't set the zero flag, so to test for a zero result, we need
3299         an explicit instruction. (Luckily, it does set the overflow flag, so
3300         we can still use that.)
3301
3302         * jit/JIT.h:
3303         * jit/JITArithmetic.cpp:
3304         (JSC::JIT::emit_op_mul):
3305         (JSC::JIT::emitSlow_op_mul):
3306         (JSC::JIT::emitMul32InPlace):
3307
3308 2009-05-22  Sam Weinig  <sam@webkit.org>
3309
3310         Reviewed by Geoffrey "Premature Commit" Garen.
3311
3312         Add back constant integer cases for op_add.
3313
3314         * jit/JIT.h:
3315         * jit/JITArithmetic.cpp:
3316         (JSC::JIT::emit_op_add):
3317         (JSC::JIT::emitAdd32Constant):
3318         (JSC::JIT::emitSlow_op_add):
3319         (JSC::JIT::emitSlowAdd32Constant):
3320         * jit/JITInlineMethods.h:
3321         (JSC::JIT::getConstantOperandImmediateDouble):
3322         (JSC::JIT::isOperandConstantImmediateDouble):
3323
3324 2009-05-22  Geoffrey Garen  <ggaren@apple.com>
3325
3326         Reviewed by Sam Weinig.
3327         
3328         Added fast double cases for op_jnless and op_jnlesseq.
3329
3330         * assembler/AbstractMacroAssembler.h:
3331         (JSC::AbstractMacroAssembler::JumpList::jumps): New accesor, used by
3332         addSlowCase.
3333
3334         * assembler/X86Assembler.h:
3335         (JSC::X86Assembler::ucomisd_rm): New method for comparing register to
3336         memory.
3337
3338         * jit/JIT.h:
3339         * jit/JITArithmetic.cpp:
3340         (JSC::JIT::emit_op_jnless):
3341         (JSC::JIT::emitSlow_op_jnless):
3342         (JSC::JIT::emit_op_jnlesseq):
3343         (JSC::JIT::emitSlow_op_jnlesseq):
3344         (JSC::JIT::emit_op_add):
3345         (JSC::JIT::emit_op_sub):
3346         (JSC::JIT::emitBinaryDoubleOp):
3347         (JSC::JIT::emit_op_mul):
3348         (JSC::JIT::emit_op_div): Modified emitBinaryDoubleOp to accept comparison/jump
3349         operations in addition to operations with explicit result registers.
3350
3351         * jit/JITInlineMethods.h:
3352         (JSC::JIT::addSlowCase): Added an "addSlowCase" for JumpLists, so clients
3353         can track multiple jumps to the same slow case condition together.
3354
3355 2009-05-21  Sam Weinig  <sam@webkit.org>
3356
3357         Reviewed by Gavin Barraclough.
3358
3359         Implement op_negate inline fast cases.
3360
3361         * assembler/MacroAssemblerX86Common.h:
3362         (JSC::MacroAssemblerX86Common::neg32):
3363         * assembler/X86Assembler.h:
3364         (JSC::X86Assembler::):
3365         (JSC::X86Assembler::negl_m):
3366         (JSC::X86Assembler::xorpd_rr):
3367         * jit/JIT.cpp:
3368         (JSC::JIT::privateCompileMainPass):
3369         (JSC::JIT::privateCompileSlowCases):
3370         * jit/JIT.h:
3371         * jit/JITArithmetic.cpp:
3372         (JSC::JIT::emit_op_negate):
3373         (JSC::JIT::emitSlow_op_negate):
3374
3375 2009-05-20  Sam Weinig  <sam@webkit.org>
3376
3377         Reviewed by Gavin Barraclough.
3378
3379         Update the patchOffsetGetByIdSlowCaseCall constant for the
3380         case that OPCODE_SAMPLING is enabled.
3381
3382         * jit/JIT.h:
3383
3384 2009-05-20  Geoffrey Garen  <ggaren@apple.com>
3385
3386         Reviewed by Sam Weinig.
3387
3388         Added support for inline subtraction of doubles.
3389
3390         * jit/JITArithmetic.cpp:
3391         (JSC::JIT::emit_op_sub):
3392         (JSC::JIT::emitSlow_op_sub):
3393         (JSC::JIT::emitSlowSub32InPlaceLeft):
3394         (JSC::JIT::emitBinaryDoubleOp):
3395
3396 2009-05-20  Sam Weinig  <sam@webkit.org>
3397
3398         Reviewed by Geoffrey Garen.
3399
3400         Added support for inline division.
3401
3402         * assembler/X86Assembler.h:
3403         (JSC::X86Assembler::):
3404         (JSC::X86Assembler::divsd_rr):
3405         (JSC::X86Assembler::divsd_mr):
3406         * bytecode/CodeBlock.cpp:
3407         (JSC::CodeBlock::dump):
3408         * bytecode/Opcode.h:
3409         * bytecompiler/BytecodeGenerator.cpp:
3410         (JSC::BytecodeGenerator::emitBinaryOp):
3411         * interpreter/Interpreter.cpp:
3412         (JSC::Interpreter::privateExecute):
3413         * jit/JIT.cpp:
3414         (JSC::JIT::privateCompileMainPass):
3415         (JSC::JIT::privateCompileSlowCases):
3416         * jit/JIT.h:
3417         * jit/JITArithmetic.cpp:
3418         (JSC::JIT::emitBinaryDoubleOp):
3419         (JSC::JIT::emit_op_div):
3420         (JSC::JIT::emitSlow_op_div):
3421
3422 2009-05-20  Geoffrey Garen  <ggaren@apple.com>
3423
3424         Reviewed by Sam Weinig.
3425
3426         Added support for inline addition of doubles.
3427
3428         * jit/JITArithmetic.cpp:
3429         (JSC::JIT::emit_op_add):
3430         (JSC::JIT::emitSlow_op_add):
3431         (JSC::JIT::emitSlowAdd32InPlace):
3432         (JSC::JIT::emitBinaryDoubleOp):
3433         (JSC::JIT::emit_op_mul):
3434         (JSC::JIT::emitSlow_op_mul):
3435
3436 2009-05-20  Geoffrey Garen  <ggaren@apple.com>
3437
3438         Reviewed by Sam Weinig.
3439         
3440         Factored inline double operations into a helper function, so that we
3441         can reuse this code for other math operations.
3442
3443         * jit/JIT.h:
3444         * jit/JITArithmetic.cpp:
3445         (JSC::JIT::emitBinaryDoubleOp):
3446         (JSC::JIT::emit_op_mul):
3447         * jit/JITCall.cpp:
3448         (JSC::JIT::compileOpCallInitializeCallFrame):
3449
3450 2009-05-20  Geoffrey Garen  <ggaren@apple.com>
3451
3452         Reviewed by Sam Weinig.
3453         
3454         Added support for inline multiplication of doubles.
3455
3456         * assembler/X86Assembler.h:
3457         (JSC::X86Assembler::cvtsi2sd_mr): New function, useful for loading an
3458         int32 into a double register.
3459
3460         * jit/JITArithmetic.cpp:
3461         (JSC::JIT::emit_op_mul):
3462         (JSC::JIT::emitSlow_op_mul): Filled out these cases for double arithmetic.
3463
3464         * jit/JIT.h:
3465         * jit/JITInlineMethods.h:
3466         (JSC::JIT::addressFor): New function, useful for addressing a JSValue's
3467         full 64bits as a double.
3468
3469 2009-05-19  Sam Weinig  <sam@webkit.org>
3470
3471         Reviewed by Geoffrey Garen.
3472
3473         Implement and enable optimized calls.
3474
3475         * jit/JIT.cpp:
3476         (JSC::JIT::privateCompileCTIMachineTrampolines): Add ENABLE(JIT_OPTIMIZE_CALL) guards
3477         around the the optimize call only trampolines (virtualCallPreLink and virtualCallLink).
3478         Update the trampolines to account for the new JSValue representation.
3479         (JSC::JIT::unlinkCall): Use NULL instead of JSValue noValue. 
3480
3481         * jit/JITCall.cpp:
3482         (JSC::JIT::compileOpCall): Update to account for the new JSValue representation
3483         (JSC::JIT::compileOpCallSlowCase): Ditto.
3484
3485         * jit/JITStubs.h: Remove incorrect !ENABLE(JIT_OPTIMIZE_CALL) guard.
3486
3487         * wtf/Platform.h: Enable ENABLE_JIT_OPTIMIZE_CALL.
3488
3489 2009-05-19  Sam Weinig  <sam@webkit.org>
3490
3491         Reviewed by Geoffrey Garen.
3492
3493         Implement and enable optimized property access.
3494
3495         * assembler/AbstractMacroAssembler.h: Fix comment.
3496         * jit/JIT.cpp:
3497         (JSC::JIT::privateCompileCTIMachineTrampolines): Remove array length trampoline
3498         and implement the string length trampoline.
3499         * jit/JIT.h: Add new constants for patch offsets.
3500         * jit/JITInlineMethods.h: Remove FIELD_OFFSET which is now in StdLibExtras.h.
3501         * jit/JITPropertyAccess.cpp: 
3502         (JSC::JIT::emit_op_get_by_id):
3503         (JSC::JIT::emitSlow_op_get_by_id):
3504         (JSC::JIT::emit_op_put_by_id):
3505         (JSC::JIT::emitSlow_op_put_by_id):
3506         (JSC::JIT::compilePutDirectOffset):
3507         (JSC::JIT::compileGetDirectOffset):
3508         (JSC::JIT::privateCompilePutByIdTransition):
3509         (JSC::JIT::patchGetByIdSelf):
3510         (JSC::JIT::patchPutByIdReplace):
3511         (JSC::JIT::privateCompilePatchGetArrayLength):
3512         (JSC::JIT::privateCompileGetByIdProto):
3513         (JSC::JIT::privateCompileGetByIdSelfList):
3514         (JSC::JIT::privateCompileGetByIdProtoList):
3515         (JSC::JIT::privateCompileGetByIdChainList):
3516         (JSC::JIT::privateCompileGetByIdChain):
3517         * jit/JITStubCall.h:
3518         (JSC::JITStubCall::addArgument): Add version of addArgument that takes
3519         two registers for the tag and payload.
3520         * jit/JITStubs.cpp:
3521         (JSC::JITStubs::JITStubs): Remove array length trampoline pointer.
3522         (JSC::JITStubs::cti_op_get_by_id_self_fail): 
3523         * jit/JITStubs.h:
3524         * runtime/JSObject.h:
3525         (JSC::JSObject::JSObject): Move m_inheritorID below the property storage
3526         to align it to a 16 byte boundary.
3527         * wtf/Platform.h: Enable ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS
3528         * wtf/StdLibExtras.h: Move FIELD_OFFSET here.
3529
3530 2009-05-17  Sam Weinig  <sam@webkit.org>
3531
3532         Reviewed by Geoffrey Garen.
3533
3534         Remove unneeded ExecState parameter from the number JSValue constructors.
3535
3536         * runtime/JSValue.h:
3537         (JSC::jsNumber):
3538         (JSC::jsNaN):
3539         (JSC::JSValue::JSValue):
3540
3541 2009-05-15  Sam Weinig  <sam@webkit.org>
3542
3543         Reviewed by Geoffrey Garen.
3544
3545         Implemented fast path for op_put_by_val when putting to arrays.
3546
3547         * jit/JITPropertyAccess.cpp:
3548         (JSC::JIT::emit_op_put_by_val):
3549         (JSC::JIT::emitSlow_op_put_by_val):
3550
3551 2009-05-15  Geoffrey Garen  <ggaren@apple.com> (Mostly by Sam)
3552
3553         Reviewed by Sam Weinig.
3554         
3555         Implemented fast path for op_get_by_val when accessing array.
3556
3557         * jit/JIT.cpp:
3558         * jit/JITPropertyAccess.cpp:
3559         (JSC::JIT::emit_op_get_by_val):
3560         (JSC::JIT::emitSlow_op_get_by_val):
3561
3562 2009-05-14  Geoffrey Garen  <ggaren@apple.com>
3563
3564         Reviewed by Sam Weinig.
3565         
3566         Fixed a failure in fast/js/math-transforms.html caused by failing to
3567         preserve -0 in multiplication.
3568
3569         * assembler/X86Assembler.h:
3570         (JSC::X86Assembler::jz):
3571         * jit/JITArithmetic.cpp:
3572         (JSC::JIT::emit_op_mul):
3573         (JSC::JIT::emitSlow_op_mul):
3574         (JSC::JIT::emitMul32Constant):
3575         (JSC::JIT::emitMul32InPlace): Check both for overflow and for zero when
3576         doing multiplication. Use a slow case to get these right.
3577
3578 2009-05-14  Geoffrey Garen  <ggaren@apple.com>
3579
3580         Reviewed by Sam Weinig.
3581         
3582         Fixed a bug in the varargs calling convention.
3583
3584         * jit/JITCall.cpp:
3585         (JSC::JIT::compileOpCallVarargs): Move the argument count into regT1,
3586         since that's where ctiVirtualCall expects it to be.
3587
3588 2009-05-14  Geoffrey Garen  <ggaren@apple.com>
3589
3590         Reviewed by Sam Weinig.
3591
3592         Fixed a small bug in instanceof's looping code.
3593
3594         * jit/JITOpcodes.cpp:
3595         (JSC::JIT::emit_op_instanceof): NULL means the object has no prototype,
3596         so only loop when *not* equal to NULL.
3597
3598 2009-05-14  Geoffrey Garen  <ggaren@apple.com>
3599
3600         Reviewed by Sam Weinig.
3601         
3602         Fixed a small bug in instanceof's result writing code.
3603
3604         * jit/JITOpcodes.cpp:
3605         (JSC::JIT::emit_op_instanceof): Make sure to fill out the payload bits
3606         in all cases.
3607
3608 2009-05-14  Sam Weinig  <sam@webkit.org>
3609
3610         Reviewed by Geoffrey Garen.
3611
3612         Removed an invalid assertion in cti_op_urshift which
3613         depended on a fast path for op_urshift which has
3614         never existed.
3615
3616         * jit/JITStubs.cpp:
3617         (JSC::JITStubs::cti_op_urshift):
3618
3619 2009-05-14  Geoffrey Garen  <ggaren@apple.com>
3620
3621         Reviewed by Sam Weinig.
3622         
3623         Fixed loop_if_true, which had the same reversed test that jtrue had.
3624
3625         * jit/JITOpcodes.cpp:
3626         (JSC::JIT::emit_op_loop_if_true):
3627
3628 2009-05-14  Sam Weinig  <sam@webkit.org>
3629
3630         Reviewed by Geoffrey Garen.
3631
3632         In op_neq, we apparently want to check that one value
3633         does *not* equal another.  Go figure.
3634
3635         * jit/JITOpcodes.cpp:
3636         (JSC::JIT::emit_op_neq):
3637
3638 2009-05-14  Sam Weinig  <sam@webkit.org>
3639
3640         Reviewed by Geoffrey Garen.
3641
3642         The slow case of op_mod should call op_mod's jit stub,
3643         not op_mul.  That would be dumb.
3644
3645         * jit/JITArithmetic.cpp:
3646         (JSC::JIT::emitSlow_op_mod):
3647
3648 2009-05-14  Geoffrey Garen  <ggaren@apple.com>
3649
3650         Reviewed by Sam Weinig.
3651         
3652         Fixed problems when using 'arguments' due to a half-initialized register.
3653
3654         * interpreter/CallFrame.h:
3655         (JSC::ExecState::setCalleeArguments):
3656         (JSC::ExecState::init): Require a full JSValue when setting up the 
3657         'arguments' virtual register, since this register is accessible from JIT
3658         code and bytecode, and needs to be a true JSValue.
3659
3660         * interpreter/CallFrameClosure.h:
3661         (JSC::CallFrameClosure::resetCallFrame): ditto
3662
3663         * interpreter/Interpreter.cpp:
3664         (JSC::Interpreter::privateExecute): ditto
3665
3666         * interpreter/Register.h: Removed the constructor that allowed assignment
3667         of a JSArguments* to a register. That is not safe. See above.
3668
3669         * jit/JITStubs.cpp:
3670         (JSC::JITStubs::cti_op_create_arguments):
3671         (JSC::JITStubs::cti_op_create_arguments_no_params): ditto
3672
3673 2009-05-14  Sam Weinig  <sam@webkit.org>
3674
3675         Reviewed by Geoffrey Garen.
3676
3677         We really want to go to the slow case in op_jfalse and
3678         op_jtrue if the value is *not* boolean. 
3679
3680         * jit/JITOpcodes.cpp:
3681         (JSC::JIT::emit_op_jfalse):
3682         (JSC::JIT::emit_op_jtrue):
3683
3684 2009-05-14  Sam Weinig  <sam@webkit.org>
3685
3686         Reviewed by Geoffrey Garen.
3687
3688         Flipped the condition when emitting a an op_loop_if_less or op_loop_if_lesseq
3689         if the first operand is a constant.
3690
3691         * jit/JITOpcodes.cpp:
3692         (JSC::JIT::emit_op_loop_if_less):
3693         (JSC::JIT::emit_op_loop_if_lesseq):
3694
3695 2009-05-14  Sam Weinig  <sam@webkit.org>
3696
3697         Reviewed by Geoffrey Garen.
3698
3699         Added missing return in op_jnless and op_jnlesseq. 
3700
3701         * jit/JITArithmetic.cpp:
3702         (JSC::JIT::emit_op_jnless):
3703         (JSC::JIT::emit_op_jnlesseq):
3704
3705 2009-05-14  Sam Weinig  <sam@webkit.org>
3706
3707         Reviewed by Geoffrey Garen.
3708
3709         Load constants into the the register file as a temporary measure to
3710         aid bring up.  This allows us to use to treat constants like any
3711         other virtual register.
3712
3713         * jit/JITOpcodes.cpp:
3714         (JSC::JIT::emit_op_enter):
3715         (JSC::JIT::emit_op_enter_with_activation):
3716
3717 2009-05-14  Geoffrey Garen  <ggaren@apple.com>
3718
3719         Reviewed by Sam Weinig.
3720         
3721         Implemented op_strict_eq. Original patch by Snowy, by way of Sam and Gavin.
3722
3723         * assembler/MacroAssemblerX86Common.h:
3724         (JSC::MacroAssemblerX86Common::set8): Added set8, since it's slightly
3725         faster than set32, and the new value representation usually doesn't
3726         need set32.
3727
3728         * jit/JIT.cpp:
3729         * jit/JIT.h:
3730         * jit/JITInlineMethods.h:
3731         (JSC::JIT::emitLoadTag):
3732         (JSC::JIT::emitLoadPayload): Added helper functions for dealing with
3733         constants. Eventually, we should write special cases for all constants,
3734         but these are helpful in the short term.
3735
3736         * jit/JITOpcodes.cpp:
3737         (JSC::JIT::compileOpStrictEq):
3738         (JSC::JIT::emitSlow_op_stricteq):
3739         (JSC::JIT::emitSlow_op_nstricteq): teh opcodez.
3740
3741         * runtime/JSValue.h:
3742         (JSC::JSValue::):
3743         (JSC::JSValue::isDouble): Added a LowestTag for clarity.
3744
3745 2009-05-13  Geoffrey Garen  <ggaren@apple.com>
3746
3747         Reviewed by Sam Weinig.
3748         
3749         Fixed some bugs in host function calls.
3750         
3751         testapi now passes!
3752
3753         * jit/JIT.cpp: Changed some registers around to avoid overwriting edx:eax,
3754         which is how JSValues are now returned. Also changed the code that
3755         passes thisValue to pass the full 64bits of the value. Also added
3756         an #error compiler directive to other platform builds, since the JSValue
3757         return signature probably won't return in edx:eax on those platforms,
3758         and we'll have to investigate a solution.
3759
3760 2009-05-13  Geoffrey Garen  <ggaren@apple.com>
3761
3762         Reviewed by Sam Weinig.
3763         
3764         Removed parameters from functions that are intended never to use their
3765         parameters.
3766
3767         * jit/JITPropertyAccess.cpp:
3768         (JSC::JIT::emitSlow_op_get_by_val):
3769         (JSC::JIT::emitSlow_op_put_by_val):
3770
3771 2009-05-13  Geoffrey Garen  <ggaren@apple.com>
3772
3773         Reviewed by Sam Weinig.
3774         
3775         Ported op_instance_of from TOT. It's basically the same, but some register
3776         stuff changed to memory stuff.
3777
3778         * jit/JITInlineMethods.h:
3779         (JSC::JIT::emitPutJITStubArgFromVirtualRegister):
3780         (JSC::JIT::emitStore): Changed to use helper functions.
3781
3782         * jit/JITOpcodes.cpp:
3783         (JSC::JIT::emit_op_instanceof):
3784         (JSC::JIT::emitSlow_op_instanceof): Ported from TOT.
3785
3786 2009-05-13  Geoffrey Garen  <ggaren@apple.com>
3787
3788         Reviewed by Gavin Barraclough.
3789         
3790         Added a comment to explain an exception-handling subtelty that we found
3791         hard to remember when reviewing my last patch.
3792
3793         * jit/JITOpcodes.cpp:
3794         (JSC::JIT::emit_op_catch):
3795
3796 2009-05-13  Geoffrey Garen  <ggaren@apple.com>
3797
3798         Reviewed by Sam Weinig.
3799         
3800         Implemented try/catch.
3801
3802         * jit/JITOpcodes.cpp:
3803         (JSC::JIT::emit_op_throw): Updated to use JITStackFrame abstraction.
3804         (JSC::JIT::emit_op_catch): Filled out.
3805
3806 2009-05-13  Sam Weinig  <sam@webkit.org>
3807
3808         Reviewed by Geoffrey Garen.
3809
3810         Implemented op_loop_if_true, op_jfalse, op_jtrue, op_jeq_null and op_jneq_null
3811
3812         * jit/JITOpcodes.cpp:
3813         (JSC::JIT::emitSlow_op_instanceof): Moved from below to be next to its
3814         fast brother.
3815
3816         (JSC::JIT::emit_op_loop_if_true): Similar to the old version
3817         in that it tries to do the integer case first and reduce the
3818         number of jumps you might need to take.
3819         (JSC::JIT::emitSlow_op_loop_if_true):
3820
3821         (JSC::JIT::emit_op_jfalse): Very similar to op_loop_if_true, only
3822         the inverse and without a timeout check.
3823         (JSC::JIT::emitSlow_op_jfalse):
3824
3825         (JSC::JIT::emit_op_jtrue): Very similar to op_loop_if_true except
3826         without the timeout check.
3827         (JSC::JIT::emitSlow_op_jtrue):
3828
3829         (JSC::JIT::emit_op_jeq_null): Very similar to the implementation
3830         of op_eq, except it takes jumps instead of copying the condition
3831         to a dst.
3832         (JSC::JIT::emit_op_jneq_null): Ditto but for op_neq.
3833
3834 2009-05-13  Geoffrey Garen  <ggaren@apple.com>
3835
3836         Reviewed by Sam Weinig.
3837         
3838         Implemented op_call_varargs.
3839
3840         * jit/JITCall.cpp:
3841         (JSC::JIT::compileOpCallVarargsSetupArgs):
3842         (JSC::JIT::compileOpCallVarargs):
3843         (JSC::JIT::emit_op_call):
3844         (JSC::JIT::emit_op_call_eval):
3845         (JSC::JIT::emit_op_load_varargs):
3846         (JSC::JIT::emit_op_call_varargs):
3847         (JSC::JIT::emit_op_construct):
3848         * jit/JITOpcodes.cpp:
3849         (JSC::JIT::emit_op_jneq_ptr):
3850
3851 2009-05-13  Geoffrey Garen  <ggaren@apple.com>
3852
3853         Reviewed by Sam Weinig.
3854         
3855         Implemented op_call_eval.
3856
3857         * jit/JITCall.cpp:
3858         (JSC::JIT::compileOpCallVarargsSetupArgs):
3859         (JSC::JIT::compileOpCall):
3860         * jit/JITStubCall.h:
3861         (JSC::CallEvalJITStub::CallEvalJITStub):
3862
3863 2009-05-13  Sam Weinig  <sam@webkit.org>
3864
3865         Reviewed by Gavin Barraclough.
3866
3867         Implemented op_not. (Gavin did most of the work!)
3868
3869         * jit/JITOpcodes.cpp:
3870         (JSC::JIT::emit_op_not):
3871         (JSC::JIT::emitSlow_op_not):
3872
3873 2009-05-13  Geoffrey Garen  <ggaren@apple.com>
3874
3875         Reviewed by Sam Weinig.
3876         
3877         Implemented op_global_resolve.
3878
3879         * jit/JITOpcodes.cpp:
3880         (JSC::JIT::emit_op_loop_if_less):
3881         (JSC::JIT::emit_op_loop_if_lesseq): Added back accidentally removed
3882         early returns. 
3883
3884         (JSC::JIT::emit_op_resolve_global):
3885         * jit/JITStubs.cpp:
3886         (JSC::JITStubs::cti_op_resolve_global): Pretty similar to the old code,
3887         but we need two reads and a TimesEight step in order to account for the
3888         64bit value size.
3889
3890         * jit/JITStubs.h:
3891         (JSC::): Slightly tweaked this code to specialize for a JSGlobalObject*,
3892         to avoid having to pass an irrelevant tag pointer to the stub.
3893
3894 2009-05-13  Sam Weinig  <sam@webkit.org>
3895
3896         Reviewed by Geoffrey Garen.
3897
3898         Implemented op_to_jsnumber.
3899
3900         * jit/JITOpcodes.cpp:
3901         (JSC::JIT::emit_op_to_jsnumber):
3902         (JSC::JIT::emitSlow_op_to_jsnumber):
3903
3904 2009-05-13  Sam Weinig  <sam@webkit.org>
3905
3906         Reviewed by Geoffrey Garen.
3907
3908         Implemented op_convert_this.
3909
3910         * jit/JITOpcodes.cpp:
3911         (JSC::JIT::emit_op_convert_this):
3912         (JSC::JIT::emitSlow_op_convert_this):
3913
3914 2009-05-13  Geoffrey Garen  <ggaren@apple.com>
3915
3916         Reviewed by Sam Weinig.
3917         
3918         Got basic JS function and constructor calls working.
3919
3920         * jit/JIT.cpp:
3921         (JSC::JIT::privateCompileCTIMachineTrampolines):
3922         * jit/JIT.h:
3923         * jit/JITCall.cpp:
3924         (JSC::JIT::compileOpCallSetupArgs):
3925         (JSC::JIT::compileOpCallVarargsSetupArgs):
3926         (JSC::JIT::compileOpConstructSetupArgs):
3927         (JSC::JIT::emit_op_ret):
3928         (JSC::JIT::emit_op_construct_verify):
3929         (JSC::JIT::emitSlow_op_construct_verify):
3930         (JSC::JIT::emitSlow_op_call):
3931         (JSC::JIT::emitSlow_op_call_eval):
3932         (JSC::JIT::emitSlow_op_call_varargs):
3933         (JSC::JIT::emitSlow_op_construct):
3934         (JSC::JIT::compileOpCall): Filled out these cases, with call_eval #if'd out.
3935
3936         * jit/JITInlineMethods.h:
3937         (JSC::JIT::emitPutJITStubArgFromVirtualRegister):
3938         (JSC::JIT::emitLoad): Restored some legacy "*CTIArg*" functions,
3939         since I wanted to avoid the complexity of revamping the API here while
3940         trying to bring it up. Eventually, we should re-remove all of these functions.
3941
3942         (JSC::JIT::recordJumpTarget): Removed unnecessary macro cruft. You will
3943         not silence me, Sam Weinig! The world will know that you are a crufty,
3944         crufty, crufty programmer!!!
3945
3946         * jit/JITOpcodes.cpp:
3947         * jit/JITStubs.cpp:
3948         (JSC::):
3949         * jit/JITStubs.h: Changed up some offsets in the JITStackFrame class, since
3950         and off-by-one error was causing stack misalignment.
3951
3952 2009-05-13  Sam Weinig  <sam@webkit.org>
3953
3954         Reviewed by Geoffrey Garen.
3955
3956         Implement op_eq_null and op_neq_null.
3957
3958         * assembler/MacroAssemblerX86Common.h:
3959         (JSC::MacroAssemblerX86Common::set8):
3960         (JSC::MacroAssemblerX86Common::setTest8):
3961         * jit/JITOpcodes.cpp:
3962         (JSC::JIT::emit_op_stricteq):
3963         (JSC::JIT::emitSlow_op_stricteq):
3964         (JSC::JIT::emit_op_nstricteq):
3965         (JSC::JIT::emitSlow_op_nstricteq):
3966         (JSC::JIT::emit_op_eq_null):
3967         (JSC::JIT::emit_op_neq_null):
3968         * jsc.cpp:
3969
3970 2009-05-12  Sam Weinig  <sam@webkit.org>
3971
3972         Reviewed by Geoffrey Garen.
3973
3974         Implement op_new_error.
3975
3976         * jit/JITOpcodes.cpp:
3977         (JSC::JIT::emit_op_new_error):
3978         * jit/JITStubCall.h:
3979         (JSC::JITStubCall::addArgument): Add a version of addArgument
3980         that takes a constant JSValue.
3981
3982 2009-05-12  Sam Weinig  <sam@webkit.org>
3983
3984         Reviewed by Geoffrey Garen.
3985
3986         Remove now unused emitGetVariableObjectRegister and emitPutVariableObjectRegister.
3987
3988         * jit/JIT.cpp:
3989         * jit/JIT.h:
3990
3991 2009-05-12  Sam Weinig  <sam@webkit.org>
3992
3993         Reviewed by Geoffrey Garen.
3994
3995         Implement op_to_primitive and op_next_pname.
3996
3997         * jit/JITOpcodes.cpp:
3998         (JSC::JIT::emitSlow_op_construct_verify):
3999         (JSC::JIT::emit_op_to_primitive):
4000         (JSC::JIT::emitSlow_op_to_primitive):
4001         (JSC::JIT::emitSlow_op_loop_if_true):
4002         (JSC::JIT::emit_op_jtrue):
4003         (JSC::JIT::emit_op_next_pname):
4004
4005 2009-05-12  Sam Weinig  <sam@webkit.org>
4006
4007         Reviewed by Geoffrey Garen.
4008
4009         Add op_get_global_var, op_put_global_var, emit_op_get_scoped_var, emit_op_put_scoped_var and
4010         op_unexpected_load.
4011
4012         * jit/JIT.h:
4013         * jit/JITInlineMethods.h:
4014         (JSC::JIT::tagFor):
4015         (JSC::JIT::payloadFor):
4016         (JSC::JIT::emitLoad):
4017         (JSC::JIT::emitStore):
4018         (JSC::JIT::emitLoadReturnValue):
4019         * jit/JITOpcodes.cpp:
4020         (JSC::JIT::emit_op_get_global_var):
4021         (JSC::JIT::emit_op_put_global_var):
4022         (JSC::JIT::emit_op_get_scoped_var):
4023         (JSC::JIT::emit_op_put_scoped_var):
4024         (JSC::JIT::emit_op_unexpected_load):
4025
4026 2009-05-12  Geoffrey Garen  <ggaren@apple.com>
4027
4028         Reviewed by Sam Weinig.
4029
4030         Added overflow handling to op_sub.
4031
4032         * jit/JIT.h:
4033         * jit/JITArithmetic.cpp:
4034         (JSC::JIT::emitSlow_op_sub):
4035         (JSC::JIT::emitSlowSub32InPlaceLeft):
4036
4037 2009-05-12  Sam Weinig  <sam@webkit.org>
4038
4039         Reviewed by Geoffrey Garen.
4040
4041         Remove a function call by folding op_get_by_id and op_put_by_id into
4042         their respective compile functions.
4043
4044         * jit/JIT.h:
4045         * jit/JITPropertyAccess.cpp:
4046         (JSC::JIT::emit_op_get_by_id):
4047         (JSC::JIT::emitSlow_op_get_by_id):
4048         (JSC::JIT::emit_op_put_by_id):
4049         (JSC::JIT::emitSlow_op_put_by_id):
4050
4051 2009-05-12  Sam Weinig  <sam@webkit.org>
4052
4053         Reviewed by Geoffrey Garen.
4054
4055         Make JITStubCall work in 64bit by making the stack index
4056         step dependent on the size of void*.
4057
4058         * jit/JITStubCall.h:
4059         (JSC::JITStubCall::JITStubCall):
4060         (JSC::JITStubCall::addArgument):
4061
4062 2009-05-12  Sam Weinig  <sam@webkit.org>
4063
4064         Reviewed by Geoffrey Garen.
4065
4066         Implement simple version of property access opcodes
4067         which just call a stub functions.
4068
4069         * jit/JITOpcodes.cpp:
4070         * jit/JITPropertyAccess.cpp:
4071         (JSC::JIT::emitSlow_op_put_by_id):
4072         (JSC::JIT::emitSlow_op_get_by_id):
4073         (JSC::JIT::emit_op_get_by_val):
4074         (JSC::JIT::emitSlow_op_get_by_val):
4075         (JSC::JIT::emit_op_put_by_val):
4076         (JSC::JIT::emitSlow_op_put_by_val):
4077         (JSC::JIT::emit_op_put_by_index):
4078         (JSC::JIT::emit_op_put_getter):
4079         (JSC::JIT::emit_op_put_setter):
4080         (JSC::JIT::emit_op_del_by_id):
4081         (JSC::JIT::compileGetByIdHotPath):
4082         (JSC::JIT::compilePutByIdHotPath):
4083         * jit/JITStubCall.h:
4084         (JSC::JITStubCall::addArgument):
4085         * jsc.cpp:
4086
4087 2009-05-12  Geoffrey Garen  <ggaren@apple.com>
4088
4089         Reviewed by Sam Weinig.
4090         
4091         Added work-around for XCode debugging echo problem.
4092
4093         * jsc.cpp:
4094         (runInteractive):
4095
4096 2009-05-12  Geoffrey Garen  <ggaren@apple.com>
4097
4098         Reviewed by Sam Weinig.
4099         
4100         Added overflow handling to op_add.
4101
4102         * jit/JIT.h:
4103         * jit/JITArithmetic.cpp:
4104         (JSC::JIT::emitSlow_op_add):
4105         (JSC::JIT::emitSlowAdd32InPlace):
4106
4107 2009-05-12  Sam Weinig  <sam@webkit.org>
4108
4109         Reviewed by Geoffrey Garen.
4110
4111         Add slow cases for op_jnless or emit_op_jnlesseq.
4112
4113         * jit/JITArithmetic.cpp:
4114         (JSC::JIT::emitSlow_op_jnless):
4115         (JSC::JIT::emitSlow_op_jnlesseq):
4116
4117 2009-05-12  Sam Weinig  <sam@webkit.org>
4118
4119         Reviewed by Geoffrey Garen.
4120
4121         Add implementations for op_jnless, emit_op_jnlesseq, op_loop_if_less and op_loop_if_lesseq.
4122         No slow cases for op_jnless or emit_op_jnlesseq yet.
4123
4124         * jit/JITArithmetic.cpp:
4125         (JSC::JIT::emit_op_jnless):
4126         (JSC::JIT::emitSlow_op_jnless):
4127         (JSC::JIT::emit_op_jnlesseq):
4128         (JSC::JIT::emitSlow_op_jnlesseq):
4129         * jit/JITOpcodes.cpp:
4130         (JSC::JIT::emit_op_loop_if_less):
4131         (JSC::JIT::emitSlow_op_loop_if_less):
4132         (JSC::JIT::emit_op_loop_if_lesseq):
4133         (JSC::JIT::emitSlow_op_loop_if_lesseq):
4134
4135 2009-05-12  Sam Weinig  <sam@webkit.org>
4136
4137         Reviewed by Geoffrey Garen.
4138
4139         Turn the RECORD_JUMP_TARGET macro into an inline function.
4140
4141         * jit/JIT.h:
4142         * jit/JITInlineMethods.h:
4143         (JSC::JIT::recordJumpTarget):
4144         * jit/JITOpcodes.cpp:
4145         (JSC::JIT::emit_op_jmp):
4146         (JSC::JIT::emit_op_jsr):
4147         (JSC::JIT::emit_op_jmp_scopes):
4148
4149 2009-05-12  Sam Weinig  <sam@webkit.org>
4150
4151         Add MacroAssemblerX86Common::set8 to fix the build.
4152
4153         * assembler/MacroAssemblerX86Common.h:
4154         (JSC::MacroAssemblerX86Common::set8):
4155
4156 2009-05-12  Geoffrey Garen  <ggaren@apple.com>
4157
4158         Reviewed by Sam Weinig.
4159         
4160         Added overflow recovery for pre_inc and pre_dec.
4161         
4162         Turned some short-circuit code into early returns, as is the WebKit style.
4163
4164         * jit/JITArithmetic.cpp:
4165         (JSC::JIT::emit_op_post_inc):
4166         (JSC::JIT::emitSlow_op_post_inc):
4167         (JSC::JIT::emit_op_post_dec):
4168         (JSC::JIT::emitSlow_op_post_dec):
4169         (JSC::JIT::emitSlow_op_pre_inc):
4170         (JSC::JIT::emitSlow_op_pre_dec):
4171
4172 2009-05-12  Sam Weinig  <sam@webkit.org>
4173
4174         Reviewed by Geoffrey Garen.
4175
4176         Implement op_jmp, op_loop, op_eq and op_neq.
4177
4178         * jit/JITOpcodes.cpp:
4179         (JSC::JIT::emit_op_jmp):
4180         (JSC::JIT::emit_op_loop):
4181         (JSC::JIT::emit_op_eq):
4182         (JSC::JIT::emitSlow_op_eq):
4183         (JSC::JIT::emit_op_neq):
4184         (JSC::JIT::emitSlow_op_neq):
4185         (JSC::JIT::emit_op_enter):
4186         (JSC::JIT::emit_op_enter_with_activation):
4187
4188 2009-05-12  Sam Weinig  <sam@webkit.org>
4189
4190         Reviewed by Geoffrey Garen.
4191
4192         Implement the slow cases for arithmetic opcodes.
4193
4194         * jit/JITArithmetic.cpp:
4195         (JSC::JIT::emitSlow_op_lshift):
4196         (JSC::JIT::emitSlow_op_rshift):
4197         (JSC::JIT::emitSlow_op_bitand):
4198         (JSC::JIT::emitSlow_op_bitor):
4199         (JSC::JIT::emitSlow_op_bitxor):
4200         (JSC::JIT::emitSlow_op_bitnot):
4201         (JSC::JIT::emitSlow_op_sub):
4202         (JSC::JIT::emitSlow_op_mul):
4203         (JSC::JIT::emitSlow_op_mod):
4204         (JSC::JIT::emit_op_mod):
4205
4206 2009-05-12  Sam Weinig  <sam@webkit.org>
4207
4208         Reviewed by Geoffrey Garen.
4209
4210         Implement op_bitnot.
4211
4212         * assembler/MacroAssemblerX86Common.h:
4213         (JSC::MacroAssemblerX86Common::not32):
4214         * assembler/X86Assembler.h:
4215         (JSC::X86Assembler::notl_m):
4216         * jit/JITArithmetic.cpp:
4217         (JSC::JIT::emit_op_bitnot):
4218
4219 2009-05-12  Sam Weinig  <sam@webkit.org>
4220
4221         Reviewed by Geoffrey Garen.
4222
4223         Add arithmetic opcode implementations from the old nitro-extreme branch.
4224
4225         * jit/JIT.h:
4226         * jit/JITArithmetic.cpp:
4227         (JSC::JIT::emit_op_jnless):
4228         (JSC::JIT::emitSlow_op_jnless):
4229         (JSC::JIT::emit_op_jnlesseq):
4230         (JSC::JIT::emitSlow_op_jnlesseq):
4231         (JSC::JIT::emit_op_lshift):
4232         (JSC::JIT::emitSlow_op_lshift):
4233         (JSC::JIT::emit_op_rshift):
4234         (JSC::JIT::emitSlow_op_rshift):
4235         (JSC::JIT::emit_op_bitand):
4236         (JSC::JIT::emitBitAnd32Constant):
4237         (JSC::JIT::emitBitAnd32InPlace):
4238         (JSC::JIT::emit_op_bitor):
4239         (JSC::JIT::emitSlow_op_bitor):
4240         (JSC::JIT::emitBitOr32Constant):
4241         (JSC::JIT::emitBitOr32InPlace):
4242         (JSC::JIT::emit_op_bitxor):
4243         (JSC::JIT::emitSlow_op_bitxor):
4244         (JSC::JIT::emitBitXor32Constant):
4245         (JSC::JIT::emitBitXor32InPlace):
4246         (JSC::JIT::emit_op_bitnot):
4247         (JSC::JIT::emitSlow_op_bitnot):
4248         (JSC::JIT::emit_op_post_inc):
4249         (JSC::JIT::emitSlow_op_post_inc):
4250         (JSC::JIT::emit_op_post_dec):
4251         (JSC::JIT::emitSlow_op_post_dec):
4252         (JSC::JIT::emit_op_pre_inc):
4253         (JSC::JIT::emitSlow_op_pre_inc):
4254         (JSC::JIT::emit_op_pre_dec):
4255         (JSC::JIT::emitSlow_op_pre_dec):
4256         (JSC::JI