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