| 2010-02-01 Mark Rowe <mrowe@apple.com> |
| |
| Merge r51976. |
| |
| 2009-12-10 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Incorrect caching of prototype lookup with dictionary base |
| https://bugs.webkit.org/show_bug.cgi?id=32402 |
| |
| Make sure we don't add cached prototype lookup to the proto_list |
| lookup chain if the top level object is a dictionary. |
| |
| * jit/JITStubs.cpp: |
| (JSC::JITThunks::tryCacheGetByID): |
| |
| 2010-01-25 Mark Rowe <mrowe@apple.com> |
| |
| Merge r53089. |
| |
| 2010-01-11 Steve Falkenburg <sfalken@apple.com> |
| |
| https://bugs.webkit.org/show_bug.cgi?id=33480 |
| |
| Improve debugging reliability for WTF on Windows. |
| Store WTF static library's PDB file into a better location. |
| |
| * JavaScriptCore.vcproj/WTF/WTF.vcproj: |
| |
| 2010-01-25 Mark Rowe <mrowe@apple.com> |
| |
| Merge r52749. |
| |
| 2010-01-04 Dan Bernstein <mitz@apple.com> |
| |
| Reviewed by Ada Chan and Mark Rowe. |
| |
| Updated copyright string |
| |
| * Info.plist: |
| * JavaScriptCore.vcproj/JavaScriptCore.resources/Info.plist: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.rc: |
| |
| 2009-11-03 Mark Rowe <mrowe@apple.com> |
| |
| Merge r50443. |
| |
| 2009-11-02 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| REGRESSION (r48573): JSC may incorrectly cache chain lookups with a dictionary at the head of the chain |
| https://bugs.webkit.org/show_bug.cgi?id=31045 |
| |
| Add guards to prevent caching of prototype chain lookups with dictionaries at the |
| head of the chain. Also add a few tighter assertions to cached prototype lookups |
| to catch this in future. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::tryCacheGetByID): |
| (JSC::Interpreter::privateExecute): |
| * jit/JITStubs.cpp: |
| (JSC::JITThunks::tryCacheGetByID): |
| |
| 2009-10-15 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46777. |
| |
| 2009-08-04 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by NOBODY (build fix). |
| |
| PPC64 Build fix |
| |
| * wtf/Platform.h: |
| |
| 2009-10-14 Mark Rowe <mrowe@apple.com> |
| |
| Merge r47620. |
| |
| 2009-08-20 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| REGRESSION: fast/profiler/call.html is crashing occasionally |
| https://bugs.webkit.org/show_bug.cgi?id=28476 |
| |
| Using the codeblock for information about how many parameters and |
| locals a function has is unsafe in certain circumstances. The |
| basic scenario is all function code being cleared in response to |
| the debugger or profiler being enabled, and then an activation is |
| marked before its associated function is re-executed. |
| |
| To deal with this scenario we store the variable count of a function |
| directly in the FunctionExecutable, and then use that information. |
| |
| * runtime/Arguments.h: |
| (JSC::Arguments::getArgumentsData): |
| * runtime/Executable.cpp: |
| (JSC::FunctionExecutable::generateBytecode): |
| * runtime/Executable.h: |
| (JSC::FunctionExecutable::FunctionExecutable): |
| (JSC::FunctionExecutable::variableCount): |
| * runtime/JSActivation.cpp: |
| (JSC::JSActivation::markChildren): |
| |
| 2009-10-13 Mark Rowe <mrowe@apple.com> |
| |
| Merge r48733. |
| |
| 2009-09-24 Mark Rowe <mrowe@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| <rdar://problem/7215058> FastMalloc scavenging thread should be named |
| |
| * wtf/FastMalloc.cpp: |
| (WTF::TCMalloc_PageHeap::scavengerThread): Set the thread name. |
| * wtf/Platform.h: Move the knowledge of whether pthread_setname_np exists to here as HAVE(PTHREAD_SETNAME_NP). |
| * wtf/ThreadingPthreads.cpp: |
| (WTF::setThreadNameInternal): Use HAVE(PTHREAD_SETNAME_NP). |
| |
| 2009-10-13 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46725. |
| |
| 2009-08-03 Ada Chan <adachan@apple.com> |
| |
| Fixed the Tiger build. |
| |
| * wtf/FastMalloc.cpp: |
| |
| 2009-10-13 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46724. |
| |
| 2009-08-03 Ada Chan <adachan@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| Don't use background thread to scavenge memory on Tiger until we figure out why it causes a crash. |
| https://bugs.webkit.org/show_bug.cgi?id=27900 |
| |
| * wtf/FastMalloc.cpp: |
| |
| 2009-10-13 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46648. |
| |
| 2009-07-31 Ada Chan <adachan@apple.com> |
| |
| Fixes the Windows release-PGO build. |
| |
| Reviewed by Jon Honeycutt. |
| |
| * JavaScriptCore.vcproj/WTF/WTF.vcproj: Suppresses the warning about unreachable code that we get by adding "return 0" to WTF::TCMalloc_PageHeap::runScavengerThread(). |
| * wtf/FastMalloc.cpp: |
| (WTF::TCMalloc_PageHeap::runScavengerThread): Fixes the error about the method not returning a value in the release-PGO build. |
| |
| 2009-10-13 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46511. |
| |
| 2009-07-28 Ada Chan <adachan@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=27236 |
| - Implement TCMalloc_SystemRelease and TCMalloc_SystemCommit for Windows. |
| - Use a background thread to periodically scavenge memory to release back to the system. |
| |
| * wtf/FastMalloc.cpp: |
| (WTF::TCMalloc_PageHeap::init): |
| (WTF::TCMalloc_PageHeap::runScavengerThread): |
| (WTF::TCMalloc_PageHeap::scavenge): |
| (WTF::TCMalloc_PageHeap::shouldContinueScavenging): |
| (WTF::TCMalloc_PageHeap::New): |
| (WTF::TCMalloc_PageHeap::AllocLarge): |
| (WTF::TCMalloc_PageHeap::Delete): |
| (WTF::TCMalloc_PageHeap::GrowHeap): |
| (WTF::sleep): |
| (WTF::TCMalloc_PageHeap::scavengerThread): |
| * wtf/TCSystemAlloc.cpp: |
| (TCMalloc_SystemRelease): |
| (TCMalloc_SystemCommit): |
| * wtf/TCSystemAlloc.h: |
| |
| 2009-10-13 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46387. |
| |
| 2009-07-24 Ada Chan <adachan@apple.com> |
| |
| In preparation for https://bugs.webkit.org/show_bug.cgi?id=27236: |
| Remove TCMALLOC_TRACK_DECOMMITED_SPANS. We'll always track decommitted spans. |
| We have tested this and show it has little impact on performance. |
| |
| Reviewed by Mark Rowe. |
| |
| * wtf/FastMalloc.cpp: |
| (WTF::TCMalloc_PageHeap::New): |
| (WTF::TCMalloc_PageHeap::AllocLarge): |
| (WTF::propagateDecommittedState): |
| (WTF::mergeDecommittedStates): |
| (WTF::TCMalloc_PageHeap::Delete): |
| (WTF::TCMalloc_PageHeap::IncrementalScavenge): |
| |
| 2009-10-13 Mark Rowe <mrowe@apple.com> |
| |
| Merge r48590. |
| |
| 2009-09-21 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| REGRESSION (r48582): Crash in StructureStubInfo::initPutByIdTransition when reloading trac.webkit.org |
| https://bugs.webkit.org/show_bug.cgi?id=29599 |
| |
| It is unsafe to attempt to cache new property transitions on |
| dictionaries of any type. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::tryCachePutByID): |
| * jit/JITStubs.cpp: |
| (JSC::JITThunks::tryCachePutByID): |
| |
| 2009-10-13 Mark Rowe <mrowe@apple.com> |
| |
| Merge r49026. |
| |
| 2009-10-02 Steve Falkenburg <sfalken@apple.com> |
| |
| Reviewed by Mark Rowe. |
| |
| <https://bugs.webkit.org/show_bug.cgi?id=29989> |
| Safari version number shouldn't be exposed in WebKit code |
| |
| For a WebKit version of 532.3.4: |
| Product version is: 5.32.3.4 (was 4.0.3.0) |
| File version is: 5.32.3.4 (was 4.532.3.4) |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.rc: |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r48582. |
| |
| 2009-09-21 Oliver Hunt <oliver@apple.com> |
| |
| RS=Maciej Stachowiak. |
| |
| Re-land SNES fix with corrected assertion. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::resolveGlobal): |
| (JSC::Interpreter::tryCachePutByID): |
| (JSC::Interpreter::tryCacheGetByID): |
| * jit/JITStubs.cpp: |
| (JSC::JITThunks::tryCachePutByID): |
| (JSC::JITThunks::tryCacheGetByID): |
| (JSC::DEFINE_STUB_FUNCTION): |
| * runtime/BatchedTransitionOptimizer.h: |
| (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer): |
| * runtime/JSObject.cpp: |
| (JSC::JSObject::removeDirect): |
| * runtime/Structure.cpp: |
| (JSC::Structure::Structure): |
| (JSC::Structure::getEnumerablePropertyNames): |
| (JSC::Structure::despecifyDictionaryFunction): |
| (JSC::Structure::addPropertyTransitionToExistingStructure): |
| (JSC::Structure::addPropertyTransition): |
| (JSC::Structure::removePropertyTransition): |
| (JSC::Structure::toDictionaryTransition): |
| (JSC::Structure::toCacheableDictionaryTransition): |
| (JSC::Structure::toUncacheableDictionaryTransition): |
| (JSC::Structure::fromDictionaryTransition): |
| (JSC::Structure::removePropertyWithoutTransition): |
| * runtime/Structure.h: |
| (JSC::Structure::isDictionary): |
| (JSC::Structure::isUncacheableDictionary): |
| (JSC::Structure::): |
| * runtime/StructureChain.cpp: |
| (JSC::StructureChain::isCacheable): |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r47605. |
| |
| 2009-08-20 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| REGRESSION: significant slowdown on Celtic Kane "AJAX declaration" subtest |
| https://bugs.webkit.org/show_bug.cgi?id=28332 |
| |
| Follow up style fixes that were missed in review. |
| |
| * runtime/Structure.cpp: |
| (JSC::Structure::hasTransition): |
| * runtime/Structure.h: |
| (JSC::Structure::get): |
| (JSC::StructureTransitionTable::contains): |
| * runtime/StructureTransitionTable.h: |
| (JSC::StructureTransitionTable::add): |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r47604. |
| |
| 2009-08-20 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by NOBODY (Build fix). |
| |
| Add new exports to windows jsc build |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r47601. |
| |
| 2009-08-20 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| REGRESSION: significant slowdown on Celtic Kane "AJAX declaration" subtest |
| https://bugs.webkit.org/show_bug.cgi?id=28332 |
| |
| The method check optimisation made transitions aware of the value being |
| assigned when a transition was assigning a function. This had the side |
| effect of making every assignment of a function expression result in a |
| new transition, and thus a new Structure. The net result of this is that |
| the common JS idiom of |
| |
| function MyObject() { |
| this.myFunction = function(...){...}; |
| } |
| new MyObject(); |
| |
| Will produce a unique structure on every iteration, meaning that all |
| caching is defeated and there is a significant amount of structure churn. |
| |
| The fix is to return the transition to its original form where it is |
| keyed off a property name + attributes tuple, but have each transition |
| support an optional transition on a specific value. |
| |
| * JavaScriptCore.exp: |
| * runtime/JSObject.h: |
| (JSC::JSObject::putDirectInternal): |
| * runtime/Structure.cpp: |
| (JSC::Structure::~Structure): |
| (JSC::Structure::addPropertyTransitionToExistingStructure): |
| (JSC::Structure::addPropertyTransition): |
| (JSC::Structure::hasTransition): |
| * runtime/Structure.h: |
| (JSC::Structure::transitionedFor): |
| (JSC::Structure::hasTransition): |
| (JSC::Structure::): |
| (JSC::StructureTransitionTable::contains): |
| (JSC::StructureTransitionTable::get): |
| * runtime/StructureTransitionTable.h: |
| (JSC::StructureTransitionTableHashTraits::emptyValue): |
| (JSC::StructureTransitionTable::hasTransition): |
| (JSC::StructureTransitionTable::remove): |
| (JSC::StructureTransitionTable::add): |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r47474. |
| |
| 2009-08-18 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Assigning a function to an object should always use the existing transition, even if the transition is not specialized |
| https://bugs.webkit.org/show_bug.cgi?id=28442 |
| |
| Check for an unspecialized transition as an alternative to always failing if specialisation does not match. |
| |
| * runtime/Structure.cpp: |
| (JSC::Structure::addPropertyTransitionToExistingStructure): |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r48830. |
| |
| 2009-09-28 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Hard dependency on SSE2 instruction set with JIT |
| https://bugs.webkit.org/show_bug.cgi?id=29779 |
| |
| Add floating point support checks to op_jfalse and op_jtrue, and |
| fix the logic for the slow case of op_add |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emitSlow_op_add): |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_jfalse): |
| (JSC::JIT::emit_op_jtrue): |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46706. |
| |
| 2009-08-02 Geoffrey Garen <ggaren@apple.com> |
| |
| Qt build fix. |
| |
| Added JSAPIValueWrapper.cpp to the build. |
| |
| * JavaScriptCore.pri: |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46705. |
| |
| 2009-08-02 Geoffrey Garen <ggaren@apple.com> |
| |
| Windows build fix. |
| |
| Exported symbols for JSAPIValueWrapper. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46704. |
| |
| 2009-08-02 Geoffrey Garen <ggaren@apple.com> |
| |
| GTK build fix. |
| |
| * jit/JITStubs.cpp: #include <stdarg.h>, for a definition of va_start. |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46703. |
| |
| 2009-08-02 Geoffrey Garen <ggaren@apple.com> |
| |
| Qt build fix. |
| |
| * runtime/Collector.cpp: #include <limits.h>, for a definition of ULONG_MAX. |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46702. |
| |
| 2009-08-02 Geoffrey Garen <ggaren@apple.com> |
| |
| Windows build fix: Nixed JSImmediate::prototype, JSImmediate::toObject, |
| and JSImmediate::toThisObject, and removed their exported symbols. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: |
| * runtime/JSImmediate.cpp: |
| * runtime/JSImmediate.h: |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46701. |
| |
| 2009-08-02 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Mark Rowe. |
| |
| Enabled JSVALUE32_64 by default on all platforms other than x86_64 (which uses JSVALUE64). |
| |
| * wtf/Platform.h: |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46610. |
| |
| 2009-07-30 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Fixed failing tests seen on Windows buildbot. |
| |
| * jit/JITStubs.cpp: |
| (JSC::DEFINE_STUB_FUNCTION): |
| * jit/JITStubs.h: |
| (JSC::): Use "int" instead of "bool" to guarantee a 32-bit result, |
| regardless of compiler. gcc on mac uses 32-bit values for bool, |
| but gcc on linux and MSVC on Windows use 8-bit values. |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46601. |
| |
| 2009-07-30 Geoffrey Garen <ggaren@apple.com> |
| |
| Windows build fix: added missing symbols on Windows. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46599. |
| |
| 2009-07-30 Geoffrey Garen <ggaren@apple.com> |
| |
| Windows build fix: removed stale symbols on Windows. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46598. |
| |
| === End merge of nitro-extreme branch 2009-07-30 === |
| |
| 2009-07-20 Geoffrey Garen <ggaren@apple.com> |
| |
| Fixed a post-review typo in r46066 that caused tons of test failures. |
| |
| SunSpider reports no change. |
| |
| * runtime/JSArray.cpp: |
| (JSC::JSArray::JSArray): Initialize the full vector capacity, to avoid |
| uninitialized members at the end. |
| |
| 2009-07-20 Geoffrey Garen <ggaren@apple.com> |
| |
| Windows WebKit build fix: Added some missing exports. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: |
| |
| 2009-07-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Get the branch working on windows. |
| https://bugs.webkit.org/show_bug.cgi?id=27391 |
| |
| SunSpider says 0.3% faster. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Updated |
| MSVC export lists to fix linker errors. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added / removed |
| new / old project files. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileCTIMachineTrampolines): Used #pragma pack to tell |
| MSVC that these structures represent actual memory layout, and should not be |
| automatically aligned. Changed the return value load to load a 64bit quantity |
| into the canonical registers. |
| |
| * jit/JIT.h: Moved OBJECT_OFFSETOF definition to StdLibExtras.h because |
| it's needed by more than just the JIT, and it supplements a standard library |
| macro (offsetof). |
| |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCallInitializeCallFrame): Fixed an incorrectly signed |
| cast to resolve an MSVC warning. |
| |
| * jit/JITStubs.h: Used #pragma pack to tell MSVC that these structures |
| represent actual memory layout, and should not be automatically aligned. |
| |
| * runtime/JSArray.cpp: |
| (JSC::JSArray::JSArray): Replaced memset_pattern8 with a for loop, since |
| memset_pattern8 is not portable. (I verified that this version of the loop |
| gives the best performance / generated code in GCC.) |
| |
| * runtime/JSObject.h: |
| (JSC::JSObject::JSObject): Removed accidental usage of FIELD_OFFSET -- |
| OBJECT_OFFSETOF is our new macro name. (FIELD_OFFSET conflicts with a |
| definition in winnt.h.) |
| |
| * runtime/JSValue.cpp: Added some headers needed by non-all-in-one builds. |
| |
| * runtime/JSValue.h: |
| (JSC::JSValue::): Made the tag signed, to match MSVC's signed enum values. |
| (GCC doesn't seem to care one way or the other.) |
| |
| * wtf/MainThread.cpp: Moved the StdLibExtras.h #include -- I did this a |
| while ago to resolve a conflict with winnt.h. I can't remember if it's truly |
| still needed, but what the heck. |
| |
| * wtf/StdLibExtras.h: Moved OBJECT_OFFSETOF definition here. |
| |
| 2009-07-06 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig (?). |
| |
| Fixed an assertion seen during the stress test. |
| |
| Don't assume that, if op1 is constant, op2 is not, and vice versa. Sadly, |
| not all constants get folded. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_jnless): |
| (JSC::JIT::emitSlow_op_jnless): |
| (JSC::JIT::emit_op_jnlesseq): |
| (JSC::JIT::emitSlow_op_jnlesseq): |
| |
| 2009-07-06 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Include op_convert_this in result caching. |
| |
| No change on SunSpider or v8. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_convert_this): |
| |
| * jit/JITStubs.cpp: |
| (JSC::DEFINE_STUB_FUNCTION): |
| * jit/JITStubs.h: |
| (JSC::): Made the op_convert_this JIT stub return an EncodedJSValue, so |
| to maintain the result caching contract that { tag, payload } can be |
| found in { regT1, regT0 }. |
| |
| 2009-07-06 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Implemented result chaining. |
| |
| 1% faster on SunSpider. 4%-5% faster on v8. |
| |
| * assembler/MacroAssemblerX86Common.h: |
| (JSC::MacroAssemblerX86Common::move): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::movl_rr): Added an optimization to eliminate |
| no-op mov instructions, to simplify chaining. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::JIT): |
| * jit/JIT.h: Added data members and helper functions for recording |
| chained results. We record both a mapping from virtual to machine register |
| and the opcode for which the mapping is valid, to help ensure that the |
| mapping isn't used after the mapped register has been stomped by other |
| instructions. |
| |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCallVarargs): |
| (JSC::JIT::compileOpCallVarargsSlowCase): |
| (JSC::JIT::emit_op_ret): |
| (JSC::JIT::emit_op_construct_verify): |
| (JSC::JIT::compileOpCall): |
| (JSC::JIT::compileOpCallSlowCase): Chain function call results. |
| |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitLoadTag): |
| (JSC::JIT::emitLoadPayload): |
| (JSC::JIT::emitLoad): |
| (JSC::JIT::emitLoad2): |
| (JSC::JIT::isLabeled): |
| (JSC::JIT::map): |
| (JSC::JIT::unmap): |
| (JSC::JIT::isMapped): |
| (JSC::JIT::getMappedPayload): |
| (JSC::JIT::getMappedTag): Use helper functions when loading virtual |
| registers into machine registers, in case the loads can be eliminated |
| by chaining. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_mov): |
| (JSC::JIT::emit_op_end): |
| (JSC::JIT::emit_op_instanceof): |
| (JSC::JIT::emit_op_get_global_var): |
| (JSC::JIT::emit_op_put_global_var): |
| (JSC::JIT::emit_op_get_scoped_var): |
| (JSC::JIT::emit_op_put_scoped_var): |
| (JSC::JIT::emit_op_to_primitive): |
| (JSC::JIT::emit_op_resolve_global): |
| (JSC::JIT::emit_op_jneq_ptr): |
| (JSC::JIT::emit_op_next_pname): |
| (JSC::JIT::emit_op_to_jsnumber): |
| (JSC::JIT::emit_op_catch): Chain results from these opcodes. |
| |
| (JSC::JIT::emit_op_profile_will_call): |
| (JSC::JIT::emit_op_profile_did_call): Load the profiler into regT2 to |
| avoid stomping a chained result. |
| |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::emit_op_method_check): |
| (JSC::JIT::emit_op_get_by_val): |
| (JSC::JIT::emit_op_get_by_id): Chain results from these opcodes. |
| |
| * jit/JITStubCall.h: |
| (JSC::JITStubCall::addArgument): Always use { regT1, regT0 }, to facilitate |
| chaining. |
| |
| (JSC::JITStubCall::call): Unmap all mapped registers, since our callee |
| stub might stomp them. |
| |
| 2009-07-01 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Don't reload values in emitBinaryDoubleOp. |
| |
| SunSpider reports a 0.6% progression. |
| |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_jnless): |
| (JSC::JIT::emit_op_jnlesseq): |
| (JSC::JIT::emitBinaryDoubleOp): |
| |
| 2009-07-01 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Convert op_div to load op1 and op2 up front. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_div): |
| |
| 2009-07-01 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Don't emit code in emitBinaryDoubleOp if code is unreachable, observable |
| via an empty (unlinked) jumplist passed in. This only effects op_jnless |
| and op_jnlesseq at present. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emitSlow_op_jnless): |
| (JSC::JIT::emitSlow_op_jnlesseq): |
| (JSC::JIT::emitBinaryDoubleOp): |
| |
| 2009-07-01 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Converted op_mod to put { tag, payload } in { regT1, regT0 }, and |
| tidied up its constant case. |
| |
| SunSpider reports a 0.2% regression, but a micro-benchmark of op_mod |
| shows a 12% speedup, and the SunSpider test that uses op_mod most should |
| benefit a lot from result caching in the end, since it almost always |
| performs (expression) % constant. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_mod): |
| (JSC::JIT::emitSlow_op_mod): |
| |
| 2009-06-30 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Converted some more arithmetic ops to put { tag, payload } in |
| { regT1, regT0 }. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_mul): |
| (JSC::JIT::emitSlow_op_mul): |
| |
| 2009-06-30 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Converted some more arithmetic ops to put { tag, payload } in |
| { regT1, regT0 }, and added a case for subtract constant. |
| |
| SunSpider says no change. v8 says 0.3% slower. |
| |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_add): |
| (JSC::JIT::emitAdd32Constant): |
| (JSC::JIT::emitSlow_op_add): |
| (JSC::JIT::emit_op_sub): |
| (JSC::JIT::emitSub32Constant): |
| (JSC::JIT::emitSlow_op_sub): |
| |
| 2009-06-30 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Remove more uses of addressFor(), load double constants directly from |
| the constantpool in the CodeBlock, rather than from the register file. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emitAdd32Constant): |
| (JSC::JIT::emitBinaryDoubleOp): |
| |
| 2009-06-30 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Fixed a bug in postfix ops, where we would treat x = x++ and x = x-- |
| as a no-op, even if x were not an int, and the ++/-- could have side-effects. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_post_inc): |
| (JSC::JIT::emitSlow_op_post_inc): |
| (JSC::JIT::emit_op_post_dec): |
| (JSC::JIT::emitSlow_op_post_dec): |
| |
| 2009-06-30 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Converted some arithmetic ops to put { tag, payload } in |
| { regT1, regT0 }. |
| |
| SunSpider says 0.7% faster. v8 says no change. |
| |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_jnless): |
| (JSC::JIT::emit_op_jnlesseq): |
| (JSC::JIT::emit_op_lshift): |
| (JSC::JIT::emit_op_rshift): |
| (JSC::JIT::emit_op_bitand): |
| (JSC::JIT::emit_op_bitor): |
| (JSC::JIT::emit_op_bitxor): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::isOperandConstantImmediateInt): |
| (JSC::JIT::getOperandConstantImmediateInt): |
| |
| 2009-06-30 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Start removing cases of addressFor(). |
| |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emitAdd32Constant): |
| (JSC::JIT::emitBinaryDoubleOp): |
| (JSC::JIT::emit_op_div): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitLoadDouble): |
| (JSC::JIT::emitLoadInt32ToDouble): |
| (JSC::JIT::emitStoreDouble): |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_jfalse): |
| (JSC::JIT::emit_op_jtrue): |
| |
| 2009-06-30 Geoffrey Garen <ggaren@apple.com> |
| |
| Rolled back in my last patch with regression fixed. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileSlowCases): |
| * jit/JIT.h: |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_loop_if_less): |
| (JSC::JIT::emit_op_loop_if_lesseq): |
| (JSC::JIT::emit_op_resolve_global): |
| (JSC::JIT::emitSlow_op_resolve_global): |
| (JSC::JIT::emit_op_eq): |
| (JSC::JIT::emitSlow_op_eq): |
| (JSC::JIT::emit_op_neq): |
| (JSC::JIT::emitSlow_op_neq): |
| |
| 2009-06-30 Geoffrey Garen <ggaren@apple.com> |
| |
| Rolled out my last patch because it was a 2% SunSpider regression. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileSlowCases): |
| * jit/JIT.h: |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_loop_if_less): |
| (JSC::JIT::emit_op_loop_if_lesseq): |
| (JSC::JIT::emit_op_resolve_global): |
| (JSC::JIT::emit_op_eq): |
| (JSC::JIT::emitSlow_op_eq): |
| (JSC::JIT::emit_op_neq): |
| (JSC::JIT::emitSlow_op_neq): |
| |
| 2009-06-30 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Gavin "Sam Weinig" Barraclough. |
| |
| Standardized the rest of our opcodes to put { tag, payload } in |
| { regT1, regT0 } where possible. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileSlowCases): |
| * jit/JIT.h: |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_loop_if_less): |
| (JSC::JIT::emit_op_loop_if_lesseq): |
| (JSC::JIT::emit_op_resolve_global): |
| (JSC::JIT::emitSlow_op_resolve_global): |
| (JSC::JIT::emit_op_eq): |
| (JSC::JIT::emitSlow_op_eq): |
| (JSC::JIT::emit_op_neq): |
| (JSC::JIT::emitSlow_op_neq): |
| |
| 2009-06-30 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Replace calls to store32(tagFor()) and store32(payloadFor()) |
| with emitStoreInt32(), emitStoreBool(), and emitStoreCell(). |
| |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_negate): |
| (JSC::JIT::emit_op_lshift): |
| (JSC::JIT::emit_op_rshift): |
| (JSC::JIT::emit_op_bitand): |
| (JSC::JIT::emitBitAnd32Constant): |
| (JSC::JIT::emit_op_bitor): |
| (JSC::JIT::emitBitOr32Constant): |
| (JSC::JIT::emit_op_bitxor): |
| (JSC::JIT::emitBitXor32Constant): |
| (JSC::JIT::emit_op_bitnot): |
| (JSC::JIT::emit_op_post_inc): |
| (JSC::JIT::emit_op_post_dec): |
| (JSC::JIT::emit_op_pre_inc): |
| (JSC::JIT::emit_op_pre_dec): |
| (JSC::JIT::emit_op_add): |
| (JSC::JIT::emitAdd32Constant): |
| (JSC::JIT::emit_op_sub): |
| (JSC::JIT::emitSub32ConstantLeft): |
| (JSC::JIT::emitSub32ConstantRight): |
| (JSC::JIT::emit_op_mul): |
| (JSC::JIT::emitSlow_op_mul): |
| (JSC::JIT::emit_op_div): |
| (JSC::JIT::emit_op_mod): |
| * jit/JITCall.cpp: |
| (JSC::JIT::emit_op_load_varargs): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitStoreInt32): |
| (JSC::JIT::emitStoreCell): |
| (JSC::JIT::emitStoreBool): |
| (JSC::JIT::emitStore): |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_instanceof): |
| (JSC::JIT::emit_op_not): |
| (JSC::JIT::emit_op_eq): |
| (JSC::JIT::emitSlow_op_eq): |
| (JSC::JIT::emit_op_neq): |
| (JSC::JIT::emitSlow_op_neq): |
| (JSC::JIT::compileOpStrictEq): |
| (JSC::JIT::emit_op_eq_null): |
| (JSC::JIT::emit_op_neq_null): |
| * jit/JITStubCall.h: |
| (JSC::JITStubCall::call): |
| |
| 2009-06-30 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Standardized the rest of the property access instructions to put { tag, |
| payload } in { regT1, regT0 }. |
| |
| Small v8 speedup, 0.2% SunSpider slowdown. |
| |
| * jit/JIT.h: |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitLoad): |
| (JSC::JIT::emitLoad2): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::emit_op_get_by_val): |
| (JSC::JIT::emitSlow_op_get_by_val): |
| (JSC::JIT::emit_op_put_by_val): |
| (JSC::JIT::emitSlow_op_put_by_val): |
| (JSC::JIT::emit_op_put_by_id): |
| (JSC::JIT::emitSlow_op_put_by_id): |
| (JSC::JIT::patchPutByIdReplace): |
| |
| 2009-06-29 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Various cleanups. |
| - Use fpRegT* instead of X86::xmm*. |
| - Use a switch statement in emitBinaryDoubleOp instead of a bunch of |
| if/elses. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emitAdd32Constant): |
| (JSC::JIT::emitBinaryDoubleOp): |
| (JSC::JIT::emit_op_div): |
| |
| 2009-06-29 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Add inline code dealing with doubles for op_jfalse and op_jtrue. |
| |
| * assembler/MacroAssemblerX86Common.h: |
| (JSC::MacroAssemblerX86Common::): |
| (JSC::MacroAssemblerX86Common::zeroDouble): |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_jfalse): |
| (JSC::JIT::emit_op_jtrue): |
| |
| 2009-06-28 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Standardized op_get_by_id to put { tag, payload } in { regT1, regT0 }. |
| |
| SunSpider and v8 report maybe 0.2%-0.4% regressions, but the optimization |
| this enables will win much more than that back. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JIT.h: |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::emit_op_method_check): |
| (JSC::JIT::emit_op_get_by_id): |
| (JSC::JIT::compileGetByIdHotPath): |
| (JSC::JIT::compileGetByIdSlowCase): |
| (JSC::JIT::patchGetByIdSelf): |
| (JSC::JIT::privateCompilePatchGetArrayLength): |
| (JSC::JIT::privateCompileGetByIdProto): |
| (JSC::JIT::privateCompileGetByIdSelfList): |
| (JSC::JIT::privateCompileGetByIdProtoList): |
| (JSC::JIT::privateCompileGetByIdChainList): |
| (JSC::JIT::privateCompileGetByIdChain): |
| |
| 2009-06-26 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Maciej Stachowiak. |
| |
| Standardized op_call to put { tag, payload } in { regT1, regT0 }. |
| |
| SunSpider and v8 report no change. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCallInitializeCallFrame): |
| (JSC::JIT::compileOpCallSetupArgs): |
| (JSC::JIT::compileOpConstructSetupArgs): |
| (JSC::JIT::compileOpCallVarargsSetupArgs): |
| (JSC::JIT::compileOpCallVarargs): |
| (JSC::JIT::compileOpCall): |
| (JSC::JIT::compileOpCallSlowCase): |
| |
| 2009-06-26 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Handle multiplying by zero a little better by |
| inlining the case that both operands are non-negative |
| into the slowpath. |
| |
| * assembler/MacroAssemblerX86Common.h: |
| (JSC::MacroAssemblerX86Common::branchOr32): |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_mul): |
| (JSC::JIT::emitSlow_op_mul): |
| |
| 2009-06-25 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Optimize x++ to ++x inside for loops. |
| |
| Sadly, no measurable speedup, but this should help with result chaining. |
| |
| * parser/Nodes.cpp: |
| (JSC::ForNode::emitBytecode): |
| |
| 2009-06-25 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emitSlow_op_bitnot): |
| (JSC::JIT::emit_op_post_inc): |
| |
| 2009-06-25 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_bitnot): |
| (JSC::JIT::emit_op_post_dec): |
| (JSC::JIT::emit_op_pre_inc): |
| (JSC::JIT::emitSlow_op_pre_inc): |
| (JSC::JIT::emit_op_pre_dec): |
| (JSC::JIT::emitSlow_op_pre_dec): |
| |
| 2009-06-25 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_negate): |
| (JSC::JIT::emitSlow_op_negate): |
| * jit/JITCall.cpp: |
| (JSC::JIT::emit_op_construct_verify): |
| (JSC::JIT::emitSlow_op_construct_verify): |
| |
| 2009-06-25 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_loop_if_true): |
| (JSC::JIT::emit_op_jfalse): |
| (JSC::JIT::emit_op_jtrue): |
| (JSC::JIT::emit_op_jeq_null): |
| (JSC::JIT::emit_op_jneq_null): |
| (JSC::JIT::emit_op_eq_null): |
| (JSC::JIT::emit_op_neq_null): |
| |
| 2009-06-25 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig (sort of, maybe). |
| |
| Fixed some ASSERTs in http/tests/security. |
| |
| These ASSERTs were introduced by http://trac.webkit.org/changeset/45057, |
| but the underlying problem was actually older. http://trac.webkit.org/changeset/45057 |
| just exposed the problem by enabling optimization in more cases. |
| |
| The ASSERTs fired because we tested PropertySlot::slotBase() for validity, |
| but slotBase() ASSERTs if it's invalid, so we would ASSERT before |
| the test could happen. Solution: Remove the ASSERT. Maybe it was valid |
| once, but it clearly goes against a pattern we've deployed of late. |
| |
| The underlying problem was that WebCore would re-use a PropertySlot in |
| the case of a forwarding access, and the second use would not completely |
| overwrite the first use. Solution: Make sure to overwrite m_offset when |
| setting a value on a PropertySlot. (Other values already get implicitly |
| overwritten during reuse.) |
| |
| * runtime/PropertySlot.h: |
| (JSC::PropertySlot::PropertySlot): |
| (JSC::PropertySlot::setValueSlot): |
| (JSC::PropertySlot::setValue): |
| (JSC::PropertySlot::setRegisterSlot): |
| (JSC::PropertySlot::setUndefined): |
| (JSC::PropertySlot::slotBase): |
| (JSC::PropertySlot::clearOffset): |
| |
| 2009-06-24 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Enable JIT_OPTIMIZE_METHOD_CALLS on the branch, implementation matches current implemenatation in ToT. |
| |
| * jit/JIT.h: |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::emit_op_method_check): |
| (JSC::JIT::emitSlow_op_method_check): |
| (JSC::JIT::emit_op_get_by_id): |
| (JSC::JIT::compileGetByIdHotPath): |
| (JSC::JIT::emitSlow_op_get_by_id): |
| (JSC::JIT::compileGetByIdSlowCase): |
| |
| 2009-06-23 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Bit off a tiny bit more of standardizing opcode behavior to help with result |
| caching. |
| |
| SunSpider reports no change, v8 maybe a tiny speedup. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_to_jsnumber): |
| (JSC::JIT::emitSlow_op_to_jsnumber): |
| (JSC::JIT::emit_op_convert_this): |
| (JSC::JIT::emitSlow_op_convert_this): |
| |
| 2009-06-23 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Bit off a tiny bit more of standardizing opcode behavior to help with result |
| caching -- including removing my old enemy, op_resolve_function, because |
| it was non-standard, and removing it felt better than helping it limp along. |
| |
| SunSpider reports no change, v8 maybe a tiny speedup. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::dump): |
| * bytecode/Opcode.h: |
| * bytecompiler/BytecodeGenerator.cpp: |
| * bytecompiler/BytecodeGenerator.h: |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::privateExecute): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| * jit/JIT.h: |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_get_scoped_var): |
| (JSC::JIT::emit_op_put_scoped_var): |
| (JSC::JIT::emit_op_to_primitive): |
| (JSC::JIT::emitSlow_op_to_primitive): |
| * jit/JITStubs.cpp: |
| * jit/JITStubs.h: |
| * parser/Nodes.cpp: |
| (JSC::FunctionCallResolveNode::emitBytecode): |
| |
| 2009-06-23 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Bit off a tiny bit of standardizing opcode behavior to help with result |
| caching. |
| |
| 0.6% SunSpider speedup. 0.3% v8 speedup. |
| |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitLoad): Accomodate a base register that overlaps with payload |
| by loading tag before payload, to avoid stomping base/payload. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_mov): Abide by the standard "tag in regT1, payload in |
| regT0" semantics. |
| |
| (JSC::JIT::emit_op_get_global_var): |
| (JSC::JIT::emit_op_put_global_var): Ditto. Also, removed some irrelevent |
| loads while I was at it. The global object's "d" pointer never changes |
| after construction. |
| |
| 2009-06-23 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Remove 'arguments' field from Register union (again). |
| This time do so without breaking tests (radical, I know). |
| |
| * interpreter/CallFrame.h: |
| (JSC::ExecState::optionalCalleeArguments): |
| (JSC::ExecState::setArgumentCount): |
| (JSC::ExecState::init): |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::dumpRegisters): |
| (JSC::Interpreter::unwindCallFrame): |
| (JSC::Interpreter::privateExecute): |
| (JSC::Interpreter::retrieveArguments): |
| * interpreter/Register.h: |
| (JSC::Register::withInt): |
| (JSC::Register::): |
| (JSC::Register::Register): |
| (JSC::Register::i): |
| * jit/JITStubs.cpp: |
| (JSC::JITStubs::cti_op_tear_off_arguments): |
| * runtime/Arguments.h: |
| (JSC::JSActivation::copyRegisters): |
| (JSC::Register::arguments): |
| * runtime/JSActivation.cpp: |
| (JSC::JSActivation::argumentsGetter): |
| * runtime/JSActivation.h: |
| |
| 2009-06-23 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Removed some result register tracking cruft in preparation for a new |
| result tracking mechanism. |
| |
| SunSpider reports no change. |
| |
| * assembler/AbstractMacroAssembler.h: |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::JmpDst::JmpDst): No need to track jump targets in |
| machine code; we already do this in bytecode. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::JIT): |
| (JSC::JIT::emitTimeoutCheck): Make sure to save and restore the result |
| registers, so an opcode with a timeout check can still benefit from result |
| register caching. |
| |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): Removed calls to killLastResultRegister() |
| in preparation for something new. |
| |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_jnless): |
| (JSC::JIT::emit_op_jnlesseq): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitGetFromCallFrameHeaderPtr): |
| (JSC::JIT::emitGetFromCallFrameHeader32): |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_jmp): |
| (JSC::JIT::emit_op_jfalse): |
| (JSC::JIT::emit_op_jtrue): |
| (JSC::JIT::emit_op_jeq_null): |
| (JSC::JIT::emit_op_jneq_null): |
| (JSC::JIT::emit_op_jneq_ptr): |
| (JSC::JIT::emit_op_jsr): |
| (JSC::JIT::emit_op_sret): |
| (JSC::JIT::emit_op_jmp_scopes): ditto |
| |
| * jit/JITStubCall.h: |
| (JSC::JITStubCall::JITStubCall): |
| (JSC::JITStubCall::getArgument): added a mechanism for reloading an argument |
| you passed to a JIT stub, for use in emitTimeoutCheck. |
| |
| 2009-06-23 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Remove now-useless inplace variants of binary ops. |
| |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_bitand): |
| (JSC::JIT::emit_op_bitor): |
| (JSC::JIT::emit_op_bitxor): |
| (JSC::JIT::emit_op_add): |
| (JSC::JIT::emit_op_sub): |
| (JSC::JIT::emit_op_mul): |
| |
| 2009-06-23 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Move off memory operands to aid in re-enabling result caching. |
| |
| - No regression measured. |
| |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_negate): |
| (JSC::JIT::emit_op_jnless): |
| (JSC::JIT::emit_op_jnlesseq): |
| (JSC::JIT::emit_op_lshift): |
| (JSC::JIT::emit_op_rshift): |
| (JSC::JIT::emit_op_bitand): |
| (JSC::JIT::emitBitAnd32Constant): |
| (JSC::JIT::emitBitAnd32InPlace): |
| (JSC::JIT::emit_op_bitor): |
| (JSC::JIT::emitBitOr32Constant): |
| (JSC::JIT::emitBitOr32InPlace): |
| (JSC::JIT::emit_op_bitxor): |
| (JSC::JIT::emitBitXor32Constant): |
| (JSC::JIT::emitBitXor32InPlace): |
| (JSC::JIT::emit_op_bitnot): |
| (JSC::JIT::emit_op_post_inc): |
| (JSC::JIT::emit_op_post_dec): |
| (JSC::JIT::emit_op_pre_inc): |
| (JSC::JIT::emitSlow_op_pre_inc): |
| (JSC::JIT::emit_op_pre_dec): |
| (JSC::JIT::emitSlow_op_pre_dec): |
| (JSC::JIT::emit_op_add): |
| (JSC::JIT::emitAdd32Constant): |
| (JSC::JIT::emitAdd32InPlace): |
| (JSC::JIT::emitSlow_op_add): |
| (JSC::JIT::emitSlowAdd32Constant): |
| (JSC::JIT::emit_op_sub): |
| (JSC::JIT::emitSlow_op_sub): |
| (JSC::JIT::emitSub32ConstantLeft): |
| (JSC::JIT::emitSub32ConstantRight): |
| (JSC::JIT::emitSub32InPlaceLeft): |
| (JSC::JIT::emitSub32InPlaceRight): |
| (JSC::JIT::emitBinaryDoubleOp): |
| (JSC::JIT::emit_op_mul): |
| (JSC::JIT::emitMul32InPlace): |
| (JSC::JIT::emit_op_div): |
| (JSC::JIT::emit_op_mod): |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCallVarargs): |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_loop_if_less): |
| (JSC::JIT::emit_op_loop_if_lesseq): |
| (JSC::JIT::emit_op_instanceof): |
| (JSC::JIT::emit_op_to_primitive): |
| (JSC::JIT::emit_op_not): |
| (JSC::JIT::emit_op_jneq_ptr): |
| (JSC::JIT::emit_op_eq): |
| (JSC::JIT::emit_op_neq): |
| (JSC::JIT::emit_op_to_jsnumber): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::emit_op_get_by_val): |
| (JSC::JIT::emit_op_put_by_val): |
| |
| 2009-06-23 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Fixed some missing and/or misplaced labels in bytecode generation, so |
| we don't have to work around them in JIT code generation. |
| |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::emitJumpSubroutine): |
| * parser/Nodes.cpp: |
| (JSC::TryNode::emitBytecode): |
| |
| 2009-06-22 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| For member function calls, emit "this" directly into the "this" slot |
| for the function call, instead of moving it there later. This reduces |
| time spent in op_mov during certain calls, like "a.b.c()". |
| |
| 1%-2% speedup on v8, mostly richards and delta-blue. |
| |
| * parser/Nodes.cpp: |
| (JSC::FunctionCallDotNode::emitBytecode): |
| |
| 2009-06-22 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Remove 'arguments' field from Register union. Having JSCell derived types in the union is |
| dangerous since it opens the possibility for the field to be written as a raw pointer but |
| then read as a JSValue. This will lead to statle data being read for the tag, which may |
| be dangerous. Having removed Arguments* types form Register, all arguments objects must |
| always explicitly be stored in the register file as JSValues. |
| |
| * interpreter/CallFrame.h: |
| (JSC::ExecState::optionalCalleeArguments): |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::unwindCallFrame): |
| (JSC::Interpreter::privateExecute): |
| (JSC::Interpreter::retrieveArguments): |
| * interpreter/Register.h: |
| (JSC::Register::): |
| * jit/JITStubs.cpp: |
| (JSC::JITStubs::cti_op_tear_off_arguments): |
| * runtime/Arguments.h: |
| (JSC::JSActivation::copyRegisters): |
| * runtime/JSActivation.cpp: |
| (JSC::JSActivation::argumentsGetter): |
| * runtime/JSActivation.h: |
| |
| 2009-06-03 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Add back known this value optimization by abstracting |
| slow case if not JSCell jumps. |
| |
| * jit/JIT.h: |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCallVarargs): |
| (JSC::JIT::compileOpCallVarargsSlowCase): |
| (JSC::JIT::compileOpCall): |
| (JSC::JIT::compileOpCallSlowCase): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitJumpSlowCaseIfNotJSCell): |
| (JSC::JIT::linkSlowCaseIfNotJSCell): |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_instanceof): |
| (JSC::JIT::emitSlow_op_instanceof): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::emit_op_get_by_val): |
| (JSC::JIT::emitSlow_op_get_by_val): |
| (JSC::JIT::emit_op_put_by_val): |
| (JSC::JIT::emitSlow_op_put_by_val): |
| (JSC::JIT::emit_op_get_by_id): |
| (JSC::JIT::emitSlow_op_get_by_id): |
| (JSC::JIT::emit_op_put_by_id): |
| (JSC::JIT::emitSlow_op_put_by_id): |
| |
| 2009-06-01 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Fixed some of the regression in crypto-aes.js. (8.5% speedup in |
| crypto-aes.js.) |
| |
| SunSpider reports no change overall. |
| |
| Division was producing double results, which took the slow path through |
| array access code. |
| |
| Strangely, all my attempts at versions of this patch that modified array |
| access code to accept ints encoded as doubles along the fast or slow paths |
| were regressions. So I did this instead. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_div): When dividing an int by an int, go ahead and try |
| to turn the result into an int. Don't just do int division, though, because |
| testing shows it to be slower than SSE double division, and the corner |
| cases are pretty complicated / lengthy on top of that. Also, don't try |
| to canonicalize division of known tiny numerators into ints, since that's a |
| waste of time. |
| |
| 2009-05-26 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Fixed a regression caused by my recent fix for NaN. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emitBinaryDoubleOp): Actually do the comparison in reverse |
| order, like the ChangeLog said we would, bokay? |
| |
| 2009-05-26 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig and Oliver Hunt. |
| |
| Fixed two edge cases in %: |
| |
| - Don't do -2147483648 % x as a fast case, since you might do -2147483648 % -1, |
| which will signal a hardware exception due to overflow. |
| |
| - In the case of a zero remainder, be sure to store negative zero if the |
| dividend was zero. |
| |
| SunSpider reports no change. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_mod): |
| (JSC::JIT::emitSlow_op_mod): |
| |
| 2009-05-25 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Maciej Stachowiak. |
| |
| Fixed a regression when comparing to NaN. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emitBinaryDoubleOp): For op_jnless and op_jnless_eq, do the |
| comparison in reverse order, and jump if the result is below or |
| below-or-equal. This ensures that we do jump in the case of NaN. |
| |
| 2009-05-25 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| SunSpider says no change. |
| |
| Fixed regressions in fast/js/var-declarations-shadowing.html and |
| fast/js/equality.html, caused by recent == and != optimizations. |
| |
| * jit/JITStubs.cpp: |
| (JSC::JITStubs::cti_op_eq): Don't treat "compare to string" as always |
| numeric or string comparison. If the second operand is an object, you |
| need to ToPrimitive it, and start all over again. Also, I wrote out each |
| of the possible cases explicitly, to cut down on redundant branching. |
| |
| 2009-05-25 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Mark Rowe. |
| |
| Fix bug in fast/js/constant-folding.html where we were not negating |
| -0 properly. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_negate): |
| |
| 2009-05-23 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Refactored new slow case codegen for == and !=. |
| |
| SunSpider reports no change, maybe a tiny speedup. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emitSlow_op_eq): |
| (JSC::JIT::emitSlow_op_neq): Made a vptr comparison a *Ptr operation, |
| instead of *32, to make it portable to 64bit. Reorganized the string |
| and generic cases to make their control flow a little clearer. |
| |
| 2009-05-23 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Maciej Stachowiak. |
| |
| Optimized == and != for our new value representation -- especially for strings. |
| |
| 14% speedup on date-format-tofte. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_eq): |
| (JSC::JIT::emitSlow_op_eq): |
| (JSC::JIT::emit_op_neq): |
| (JSC::JIT::emitSlow_op_neq): |
| * jit/JITStubCall.h: |
| (JSC::JITStubCall::JITStubCall): |
| * jit/JITStubs.cpp: |
| (JSC::JITStubs::cti_op_eq): |
| (JSC::JITStubs::cti_op_eq_strings): |
| (JSC::JITStubs::cti_op_call_eval): |
| * jit/JITStubs.h: |
| (JSC::): |
| * runtime/JSValue.h: |
| |
| 2009-05-22 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Fix non-SSE enabled builds. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emitSlow_op_add): Don't early return here, we still need to call the JIT stub. |
| (JSC::JIT::emitSlow_op_sub): Ditto. |
| |
| 2009-05-22 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Here's a thought: let's not take a jit stub call just to multiply by 1, |
| bokay? |
| |
| imul doesn't set the zero flag, so to test for a zero result, we need |
| an explicit instruction. (Luckily, it does set the overflow flag, so |
| we can still use that.) |
| |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_mul): |
| (JSC::JIT::emitSlow_op_mul): |
| (JSC::JIT::emitMul32InPlace): |
| |
| 2009-05-22 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey "Premature Commit" Garen. |
| |
| Add back constant integer cases for op_add. |
| |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_add): |
| (JSC::JIT::emitAdd32Constant): |
| (JSC::JIT::emitSlow_op_add): |
| (JSC::JIT::emitSlowAdd32Constant): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::getConstantOperandImmediateDouble): |
| (JSC::JIT::isOperandConstantImmediateDouble): |
| |
| 2009-05-22 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Added fast double cases for op_jnless and op_jnlesseq. |
| |
| * assembler/AbstractMacroAssembler.h: |
| (JSC::AbstractMacroAssembler::JumpList::jumps): New accesor, used by |
| addSlowCase. |
| |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::ucomisd_rm): New method for comparing register to |
| memory. |
| |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_jnless): |
| (JSC::JIT::emitSlow_op_jnless): |
| (JSC::JIT::emit_op_jnlesseq): |
| (JSC::JIT::emitSlow_op_jnlesseq): |
| (JSC::JIT::emit_op_add): |
| (JSC::JIT::emit_op_sub): |
| (JSC::JIT::emitBinaryDoubleOp): |
| (JSC::JIT::emit_op_mul): |
| (JSC::JIT::emit_op_div): Modified emitBinaryDoubleOp to accept comparison/jump |
| operations in addition to operations with explicit result registers. |
| |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::addSlowCase): Added an "addSlowCase" for JumpLists, so clients |
| can track multiple jumps to the same slow case condition together. |
| |
| 2009-05-21 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Implement op_negate inline fast cases. |
| |
| * assembler/MacroAssemblerX86Common.h: |
| (JSC::MacroAssemblerX86Common::neg32): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::): |
| (JSC::X86Assembler::negl_m): |
| (JSC::X86Assembler::xorpd_rr): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_negate): |
| (JSC::JIT::emitSlow_op_negate): |
| |
| 2009-05-20 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Update the patchOffsetGetByIdSlowCaseCall constant for the |
| case that OPCODE_SAMPLING is enabled. |
| |
| * jit/JIT.h: |
| |
| 2009-05-20 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Added support for inline subtraction of doubles. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_sub): |
| (JSC::JIT::emitSlow_op_sub): |
| (JSC::JIT::emitSlowSub32InPlaceLeft): |
| (JSC::JIT::emitBinaryDoubleOp): |
| |
| 2009-05-20 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Added support for inline division. |
| |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::): |
| (JSC::X86Assembler::divsd_rr): |
| (JSC::X86Assembler::divsd_mr): |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::dump): |
| * bytecode/Opcode.h: |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::emitBinaryOp): |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::privateExecute): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emitBinaryDoubleOp): |
| (JSC::JIT::emit_op_div): |
| (JSC::JIT::emitSlow_op_div): |
| |
| 2009-05-20 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Added support for inline addition of doubles. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_add): |
| (JSC::JIT::emitSlow_op_add): |
| (JSC::JIT::emitSlowAdd32InPlace): |
| (JSC::JIT::emitBinaryDoubleOp): |
| (JSC::JIT::emit_op_mul): |
| (JSC::JIT::emitSlow_op_mul): |
| |
| 2009-05-20 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Factored inline double operations into a helper function, so that we |
| can reuse this code for other math operations. |
| |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emitBinaryDoubleOp): |
| (JSC::JIT::emit_op_mul): |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCallInitializeCallFrame): |
| |
| 2009-05-20 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Added support for inline multiplication of doubles. |
| |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::cvtsi2sd_mr): New function, useful for loading an |
| int32 into a double register. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_mul): |
| (JSC::JIT::emitSlow_op_mul): Filled out these cases for double arithmetic. |
| |
| * jit/JIT.h: |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::addressFor): New function, useful for addressing a JSValue's |
| full 64bits as a double. |
| |
| 2009-05-19 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Implement and enable optimized calls. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileCTIMachineTrampolines): Add ENABLE(JIT_OPTIMIZE_CALL) guards |
| around the the optimize call only trampolines (virtualCallPreLink and virtualCallLink). |
| Update the trampolines to account for the new JSValue representation. |
| (JSC::JIT::unlinkCall): Use NULL instead of JSValue noValue. |
| |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCall): Update to account for the new JSValue representation |
| (JSC::JIT::compileOpCallSlowCase): Ditto. |
| |
| * jit/JITStubs.h: Remove incorrect !ENABLE(JIT_OPTIMIZE_CALL) guard. |
| |
| * wtf/Platform.h: Enable ENABLE_JIT_OPTIMIZE_CALL. |
| |
| 2009-05-19 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Implement and enable optimized property access. |
| |
| * assembler/AbstractMacroAssembler.h: Fix comment. |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileCTIMachineTrampolines): Remove array length trampoline |
| and implement the string length trampoline. |
| * jit/JIT.h: Add new constants for patch offsets. |
| * jit/JITInlineMethods.h: Remove FIELD_OFFSET which is now in StdLibExtras.h. |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::emit_op_get_by_id): |
| (JSC::JIT::emitSlow_op_get_by_id): |
| (JSC::JIT::emit_op_put_by_id): |
| (JSC::JIT::emitSlow_op_put_by_id): |
| (JSC::JIT::compilePutDirectOffset): |
| (JSC::JIT::compileGetDirectOffset): |
| (JSC::JIT::privateCompilePutByIdTransition): |
| (JSC::JIT::patchGetByIdSelf): |
| (JSC::JIT::patchPutByIdReplace): |
| (JSC::JIT::privateCompilePatchGetArrayLength): |
| (JSC::JIT::privateCompileGetByIdProto): |
| (JSC::JIT::privateCompileGetByIdSelfList): |
| (JSC::JIT::privateCompileGetByIdProtoList): |
| (JSC::JIT::privateCompileGetByIdChainList): |
| (JSC::JIT::privateCompileGetByIdChain): |
| * jit/JITStubCall.h: |
| (JSC::JITStubCall::addArgument): Add version of addArgument that takes |
| two registers for the tag and payload. |
| * jit/JITStubs.cpp: |
| (JSC::JITStubs::JITStubs): Remove array length trampoline pointer. |
| (JSC::JITStubs::cti_op_get_by_id_self_fail): |
| * jit/JITStubs.h: |
| * runtime/JSObject.h: |
| (JSC::JSObject::JSObject): Move m_inheritorID below the property storage |
| to align it to a 16 byte boundary. |
| * wtf/Platform.h: Enable ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS |
| * wtf/StdLibExtras.h: Move FIELD_OFFSET here. |
| |
| 2009-05-17 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Remove unneeded ExecState parameter from the number JSValue constructors. |
| |
| * runtime/JSValue.h: |
| (JSC::jsNumber): |
| (JSC::jsNaN): |
| (JSC::JSValue::JSValue): |
| |
| 2009-05-15 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Implemented fast path for op_put_by_val when putting to arrays. |
| |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::emit_op_put_by_val): |
| (JSC::JIT::emitSlow_op_put_by_val): |
| |
| 2009-05-15 Geoffrey Garen <ggaren@apple.com> (Mostly by Sam) |
| |
| Reviewed by Sam Weinig. |
| |
| Implemented fast path for op_get_by_val when accessing array. |
| |
| * jit/JIT.cpp: |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::emit_op_get_by_val): |
| (JSC::JIT::emitSlow_op_get_by_val): |
| |
| 2009-05-14 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Fixed a failure in fast/js/math-transforms.html caused by failing to |
| preserve -0 in multiplication. |
| |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::jz): |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_mul): |
| (JSC::JIT::emitSlow_op_mul): |
| (JSC::JIT::emitMul32Constant): |
| (JSC::JIT::emitMul32InPlace): Check both for overflow and for zero when |
| doing multiplication. Use a slow case to get these right. |
| |
| 2009-05-14 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Fixed a bug in the varargs calling convention. |
| |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCallVarargs): Move the argument count into regT1, |
| since that's where ctiVirtualCall expects it to be. |
| |
| 2009-05-14 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Fixed a small bug in instanceof's looping code. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_instanceof): NULL means the object has no prototype, |
| so only loop when *not* equal to NULL. |
| |
| 2009-05-14 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Fixed a small bug in instanceof's result writing code. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_instanceof): Make sure to fill out the payload bits |
| in all cases. |
| |
| 2009-05-14 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Removed an invalid assertion in cti_op_urshift which |
| depended on a fast path for op_urshift which has |
| never existed. |
| |
| * jit/JITStubs.cpp: |
| (JSC::JITStubs::cti_op_urshift): |
| |
| 2009-05-14 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Fixed loop_if_true, which had the same reversed test that jtrue had. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_loop_if_true): |
| |
| 2009-05-14 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| In op_neq, we apparently want to check that one value |
| does *not* equal another. Go figure. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_neq): |
| |
| 2009-05-14 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| The slow case of op_mod should call op_mod's jit stub, |
| not op_mul. That would be dumb. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emitSlow_op_mod): |
| |
| 2009-05-14 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Fixed problems when using 'arguments' due to a half-initialized register. |
| |
| * interpreter/CallFrame.h: |
| (JSC::ExecState::setCalleeArguments): |
| (JSC::ExecState::init): Require a full JSValue when setting up the |
| 'arguments' virtual register, since this register is accessible from JIT |
| code and bytecode, and needs to be a true JSValue. |
| |
| * interpreter/CallFrameClosure.h: |
| (JSC::CallFrameClosure::resetCallFrame): ditto |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::privateExecute): ditto |
| |
| * interpreter/Register.h: Removed the constructor that allowed assignment |
| of a JSArguments* to a register. That is not safe. See above. |
| |
| * jit/JITStubs.cpp: |
| (JSC::JITStubs::cti_op_create_arguments): |
| (JSC::JITStubs::cti_op_create_arguments_no_params): ditto |
| |
| 2009-05-14 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| We really want to go to the slow case in op_jfalse and |
| op_jtrue if the value is *not* boolean. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_jfalse): |
| (JSC::JIT::emit_op_jtrue): |
| |
| 2009-05-14 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Flipped the condition when emitting a an op_loop_if_less or op_loop_if_lesseq |
| if the first operand is a constant. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_loop_if_less): |
| (JSC::JIT::emit_op_loop_if_lesseq): |
| |
| 2009-05-14 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Added missing return in op_jnless and op_jnlesseq. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_jnless): |
| (JSC::JIT::emit_op_jnlesseq): |
| |
| 2009-05-14 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Load constants into the the register file as a temporary measure to |
| aid bring up. This allows us to use to treat constants like any |
| other virtual register. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_enter): |
| (JSC::JIT::emit_op_enter_with_activation): |
| |
| 2009-05-14 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Implemented op_strict_eq. Original patch by Snowy, by way of Sam and Gavin. |
| |
| * assembler/MacroAssemblerX86Common.h: |
| (JSC::MacroAssemblerX86Common::set8): Added set8, since it's slightly |
| faster than set32, and the new value representation usually doesn't |
| need set32. |
| |
| * jit/JIT.cpp: |
| * jit/JIT.h: |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitLoadTag): |
| (JSC::JIT::emitLoadPayload): Added helper functions for dealing with |
| constants. Eventually, we should write special cases for all constants, |
| but these are helpful in the short term. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::compileOpStrictEq): |
| (JSC::JIT::emitSlow_op_stricteq): |
| (JSC::JIT::emitSlow_op_nstricteq): teh opcodez. |
| |
| * runtime/JSValue.h: |
| (JSC::JSValue::): |
| (JSC::JSValue::isDouble): Added a LowestTag for clarity. |
| |
| 2009-05-13 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Fixed some bugs in host function calls. |
| |
| testapi now passes! |
| |
| * jit/JIT.cpp: Changed some registers around to avoid overwriting edx:eax, |
| which is how JSValues are now returned. Also changed the code that |
| passes thisValue to pass the full 64bits of the value. Also added |
| an #error compiler directive to other platform builds, since the JSValue |
| return signature probably won't return in edx:eax on those platforms, |
| and we'll have to investigate a solution. |
| |
| 2009-05-13 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Removed parameters from functions that are intended never to use their |
| parameters. |
| |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::emitSlow_op_get_by_val): |
| (JSC::JIT::emitSlow_op_put_by_val): |
| |
| 2009-05-13 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Ported op_instance_of from TOT. It's basically the same, but some register |
| stuff changed to memory stuff. |
| |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitPutJITStubArgFromVirtualRegister): |
| (JSC::JIT::emitStore): Changed to use helper functions. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_instanceof): |
| (JSC::JIT::emitSlow_op_instanceof): Ported from TOT. |
| |
| 2009-05-13 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Added a comment to explain an exception-handling subtelty that we found |
| hard to remember when reviewing my last patch. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_catch): |
| |
| 2009-05-13 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Implemented try/catch. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_throw): Updated to use JITStackFrame abstraction. |
| (JSC::JIT::emit_op_catch): Filled out. |
| |
| 2009-05-13 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Implemented op_loop_if_true, op_jfalse, op_jtrue, op_jeq_null and op_jneq_null |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emitSlow_op_instanceof): Moved from below to be next to its |
| fast brother. |
| |
| (JSC::JIT::emit_op_loop_if_true): Similar to the old version |
| in that it tries to do the integer case first and reduce the |
| number of jumps you might need to take. |
| (JSC::JIT::emitSlow_op_loop_if_true): |
| |
| (JSC::JIT::emit_op_jfalse): Very similar to op_loop_if_true, only |
| the inverse and without a timeout check. |
| (JSC::JIT::emitSlow_op_jfalse): |
| |
| (JSC::JIT::emit_op_jtrue): Very similar to op_loop_if_true except |
| without the timeout check. |
| (JSC::JIT::emitSlow_op_jtrue): |
| |
| (JSC::JIT::emit_op_jeq_null): Very similar to the implementation |
| of op_eq, except it takes jumps instead of copying the condition |
| to a dst. |
| (JSC::JIT::emit_op_jneq_null): Ditto but for op_neq. |
| |
| 2009-05-13 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Implemented op_call_varargs. |
| |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCallVarargsSetupArgs): |
| (JSC::JIT::compileOpCallVarargs): |
| (JSC::JIT::emit_op_call): |
| (JSC::JIT::emit_op_call_eval): |
| (JSC::JIT::emit_op_load_varargs): |
| (JSC::JIT::emit_op_call_varargs): |
| (JSC::JIT::emit_op_construct): |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_jneq_ptr): |
| |
| 2009-05-13 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Implemented op_call_eval. |
| |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCallVarargsSetupArgs): |
| (JSC::JIT::compileOpCall): |
| * jit/JITStubCall.h: |
| (JSC::CallEvalJITStub::CallEvalJITStub): |
| |
| 2009-05-13 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Implemented op_not. (Gavin did most of the work!) |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_not): |
| (JSC::JIT::emitSlow_op_not): |
| |
| 2009-05-13 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Implemented op_global_resolve. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_loop_if_less): |
| (JSC::JIT::emit_op_loop_if_lesseq): Added back accidentally removed |
| early returns. |
| |
| (JSC::JIT::emit_op_resolve_global): |
| * jit/JITStubs.cpp: |
| (JSC::JITStubs::cti_op_resolve_global): Pretty similar to the old code, |
| but we need two reads and a TimesEight step in order to account for the |
| 64bit value size. |
| |
| * jit/JITStubs.h: |
| (JSC::): Slightly tweaked this code to specialize for a JSGlobalObject*, |
| to avoid having to pass an irrelevant tag pointer to the stub. |
| |
| 2009-05-13 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Implemented op_to_jsnumber. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_to_jsnumber): |
| (JSC::JIT::emitSlow_op_to_jsnumber): |
| |
| 2009-05-13 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Implemented op_convert_this. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_convert_this): |
| (JSC::JIT::emitSlow_op_convert_this): |
| |
| 2009-05-13 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Got basic JS function and constructor calls working. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JIT.h: |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCallSetupArgs): |
| (JSC::JIT::compileOpCallVarargsSetupArgs): |
| (JSC::JIT::compileOpConstructSetupArgs): |
| (JSC::JIT::emit_op_ret): |
| (JSC::JIT::emit_op_construct_verify): |
| (JSC::JIT::emitSlow_op_construct_verify): |
| (JSC::JIT::emitSlow_op_call): |
| (JSC::JIT::emitSlow_op_call_eval): |
| (JSC::JIT::emitSlow_op_call_varargs): |
| (JSC::JIT::emitSlow_op_construct): |
| (JSC::JIT::compileOpCall): Filled out these cases, with call_eval #if'd out. |
| |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitPutJITStubArgFromVirtualRegister): |
| (JSC::JIT::emitLoad): Restored some legacy "*CTIArg*" functions, |
| since I wanted to avoid the complexity of revamping the API here while |
| trying to bring it up. Eventually, we should re-remove all of these functions. |
| |
| (JSC::JIT::recordJumpTarget): Removed unnecessary macro cruft. You will |
| not silence me, Sam Weinig! The world will know that you are a crufty, |
| crufty, crufty programmer!!! |
| |
| * jit/JITOpcodes.cpp: |
| * jit/JITStubs.cpp: |
| (JSC::): |
| * jit/JITStubs.h: Changed up some offsets in the JITStackFrame class, since |
| and off-by-one error was causing stack misalignment. |
| |
| 2009-05-13 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Implement op_eq_null and op_neq_null. |
| |
| * assembler/MacroAssemblerX86Common.h: |
| (JSC::MacroAssemblerX86Common::set8): |
| (JSC::MacroAssemblerX86Common::setTest8): |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_stricteq): |
| (JSC::JIT::emitSlow_op_stricteq): |
| (JSC::JIT::emit_op_nstricteq): |
| (JSC::JIT::emitSlow_op_nstricteq): |
| (JSC::JIT::emit_op_eq_null): |
| (JSC::JIT::emit_op_neq_null): |
| * jsc.cpp: |
| |
| 2009-05-12 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Implement op_new_error. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_new_error): |
| * jit/JITStubCall.h: |
| (JSC::JITStubCall::addArgument): Add a version of addArgument |
| that takes a constant JSValue. |
| |
| 2009-05-12 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Remove now unused emitGetVariableObjectRegister and emitPutVariableObjectRegister. |
| |
| * jit/JIT.cpp: |
| * jit/JIT.h: |
| |
| 2009-05-12 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Implement op_to_primitive and op_next_pname. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emitSlow_op_construct_verify): |
| (JSC::JIT::emit_op_to_primitive): |
| (JSC::JIT::emitSlow_op_to_primitive): |
| (JSC::JIT::emitSlow_op_loop_if_true): |
| (JSC::JIT::emit_op_jtrue): |
| (JSC::JIT::emit_op_next_pname): |
| |
| 2009-05-12 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Add op_get_global_var, op_put_global_var, emit_op_get_scoped_var, emit_op_put_scoped_var and |
| op_unexpected_load. |
| |
| * jit/JIT.h: |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::tagFor): |
| (JSC::JIT::payloadFor): |
| (JSC::JIT::emitLoad): |
| (JSC::JIT::emitStore): |
| (JSC::JIT::emitLoadReturnValue): |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_get_global_var): |
| (JSC::JIT::emit_op_put_global_var): |
| (JSC::JIT::emit_op_get_scoped_var): |
| (JSC::JIT::emit_op_put_scoped_var): |
| (JSC::JIT::emit_op_unexpected_load): |
| |
| 2009-05-12 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Added overflow handling to op_sub. |
| |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emitSlow_op_sub): |
| (JSC::JIT::emitSlowSub32InPlaceLeft): |
| |
| 2009-05-12 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Remove a function call by folding op_get_by_id and op_put_by_id into |
| their respective compile functions. |
| |
| * jit/JIT.h: |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::emit_op_get_by_id): |
| (JSC::JIT::emitSlow_op_get_by_id): |
| (JSC::JIT::emit_op_put_by_id): |
| (JSC::JIT::emitSlow_op_put_by_id): |
| |
| 2009-05-12 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Make JITStubCall work in 64bit by making the stack index |
| step dependent on the size of void*. |
| |
| * jit/JITStubCall.h: |
| (JSC::JITStubCall::JITStubCall): |
| (JSC::JITStubCall::addArgument): |
| |
| 2009-05-12 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Implement simple version of property access opcodes |
| which just call a stub functions. |
| |
| * jit/JITOpcodes.cpp: |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::emitSlow_op_put_by_id): |
| (JSC::JIT::emitSlow_op_get_by_id): |
| (JSC::JIT::emit_op_get_by_val): |
| (JSC::JIT::emitSlow_op_get_by_val): |
| (JSC::JIT::emit_op_put_by_val): |
| (JSC::JIT::emitSlow_op_put_by_val): |
| (JSC::JIT::emit_op_put_by_index): |
| (JSC::JIT::emit_op_put_getter): |
| (JSC::JIT::emit_op_put_setter): |
| (JSC::JIT::emit_op_del_by_id): |
| (JSC::JIT::compileGetByIdHotPath): |
| (JSC::JIT::compilePutByIdHotPath): |
| * jit/JITStubCall.h: |
| (JSC::JITStubCall::addArgument): |
| * jsc.cpp: |
| |
| 2009-05-12 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Added work-around for XCode debugging echo problem. |
| |
| * jsc.cpp: |
| (runInteractive): |
| |
| 2009-05-12 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Added overflow handling to op_add. |
| |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emitSlow_op_add): |
| (JSC::JIT::emitSlowAdd32InPlace): |
| |
| 2009-05-12 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Add slow cases for op_jnless or emit_op_jnlesseq. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emitSlow_op_jnless): |
| (JSC::JIT::emitSlow_op_jnlesseq): |
| |
| 2009-05-12 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Add implementations for op_jnless, emit_op_jnlesseq, op_loop_if_less and op_loop_if_lesseq. |
| No slow cases for op_jnless or emit_op_jnlesseq yet. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_jnless): |
| (JSC::JIT::emitSlow_op_jnless): |
| (JSC::JIT::emit_op_jnlesseq): |
| (JSC::JIT::emitSlow_op_jnlesseq): |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_loop_if_less): |
| (JSC::JIT::emitSlow_op_loop_if_less): |
| (JSC::JIT::emit_op_loop_if_lesseq): |
| (JSC::JIT::emitSlow_op_loop_if_lesseq): |
| |
| 2009-05-12 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Turn the RECORD_JUMP_TARGET macro into an inline function. |
| |
| * jit/JIT.h: |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::recordJumpTarget): |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_jmp): |
| (JSC::JIT::emit_op_jsr): |
| (JSC::JIT::emit_op_jmp_scopes): |
| |
| 2009-05-12 Sam Weinig <sam@webkit.org> |
| |
| Add MacroAssemblerX86Common::set8 to fix the build. |
| |
| * assembler/MacroAssemblerX86Common.h: |
| (JSC::MacroAssemblerX86Common::set8): |
| |
| 2009-05-12 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Added overflow recovery for pre_inc and pre_dec. |
| |
| Turned some short-circuit code into early returns, as is the WebKit style. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_post_inc): |
| (JSC::JIT::emitSlow_op_post_inc): |
| (JSC::JIT::emit_op_post_dec): |
| (JSC::JIT::emitSlow_op_post_dec): |
| (JSC::JIT::emitSlow_op_pre_inc): |
| (JSC::JIT::emitSlow_op_pre_dec): |
| |
| 2009-05-12 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Implement op_jmp, op_loop, op_eq and op_neq. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_jmp): |
| (JSC::JIT::emit_op_loop): |
| (JSC::JIT::emit_op_eq): |
| (JSC::JIT::emitSlow_op_eq): |
| (JSC::JIT::emit_op_neq): |
| (JSC::JIT::emitSlow_op_neq): |
| (JSC::JIT::emit_op_enter): |
| (JSC::JIT::emit_op_enter_with_activation): |
| |
| 2009-05-12 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Implement the slow cases for arithmetic opcodes. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emitSlow_op_lshift): |
| (JSC::JIT::emitSlow_op_rshift): |
| (JSC::JIT::emitSlow_op_bitand): |
| (JSC::JIT::emitSlow_op_bitor): |
| (JSC::JIT::emitSlow_op_bitxor): |
| (JSC::JIT::emitSlow_op_bitnot): |
| (JSC::JIT::emitSlow_op_sub): |
| (JSC::JIT::emitSlow_op_mul): |
| (JSC::JIT::emitSlow_op_mod): |
| (JSC::JIT::emit_op_mod): |
| |
| 2009-05-12 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Implement op_bitnot. |
| |
| * assembler/MacroAssemblerX86Common.h: |
| (JSC::MacroAssemblerX86Common::not32): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::notl_m): |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_bitnot): |
| |
| 2009-05-12 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Add arithmetic opcode implementations from the old nitro-extreme branch. |
| |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_jnless): |
| (JSC::JIT::emitSlow_op_jnless): |
| (JSC::JIT::emit_op_jnlesseq): |
| (JSC::JIT::emitSlow_op_jnlesseq): |
| (JSC::JIT::emit_op_lshift): |
| (JSC::JIT::emitSlow_op_lshift): |
| (JSC::JIT::emit_op_rshift): |
| (JSC::JIT::emitSlow_op_rshift): |
| (JSC::JIT::emit_op_bitand): |
| (JSC::JIT::emitBitAnd32Constant): |
| (JSC::JIT::emitBitAnd32InPlace): |
| (JSC::JIT::emit_op_bitor): |
| (JSC::JIT::emitSlow_op_bitor): |
| (JSC::JIT::emitBitOr32Constant): |
| (JSC::JIT::emitBitOr32InPlace): |
| (JSC::JIT::emit_op_bitxor): |
| (JSC::JIT::emitSlow_op_bitxor): |
| (JSC::JIT::emitBitXor32Constant): |
| (JSC::JIT::emitBitXor32InPlace): |
| (JSC::JIT::emit_op_bitnot): |
| (JSC::JIT::emitSlow_op_bitnot): |
| (JSC::JIT::emit_op_post_inc): |
| (JSC::JIT::emitSlow_op_post_inc): |
| (JSC::JIT::emit_op_post_dec): |
| (JSC::JIT::emitSlow_op_post_dec): |
| (JSC::JIT::emit_op_pre_inc): |
| (JSC::JIT::emitSlow_op_pre_inc): |
| (JSC::JIT::emit_op_pre_dec): |
| (JSC::JIT::emitSlow_op_pre_dec): |
| (JSC::JIT::emit_op_add): |
| (JSC::JIT::emitAdd32Constant): |
| (JSC::JIT::emitAdd32InPlace): |
| (JSC::JIT::emitSlow_op_add): |
| (JSC::JIT::emit_op_sub): |
| (JSC::JIT::emitSlow_op_sub): |
| (JSC::JIT::emitSub32ConstantLeft): |
| (JSC::JIT::emitSub32ConstantRight): |
| (JSC::JIT::emitSub32InPlaceLeft): |
| (JSC::JIT::emitSub32InPlaceRight): |
| (JSC::JIT::emit_op_mul): |
| (JSC::JIT::emitSlow_op_mul): |
| (JSC::JIT::emitMul32Constant): |
| (JSC::JIT::emitMul32InPlace): |
| (JSC::JIT::emit_op_mod): |
| (JSC::JIT::emitSlow_op_mod): |
| * jit/JITOpcodes.cpp: |
| |
| 2009-05-12 Geoffrey Garen <ggaren@apple.com> |
| |
| Removed JIT_OPTIMIZE_ARITHMETIC setting, since it was all about 32bit |
| value representations. |
| |
| Added JSAPIValueWrapper to the repository. |
| |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| * runtime/JSAPIValueWrapper.cpp: Added. |
| (JSC::JSAPIValueWrapper::toPrimitive): |
| (JSC::JSAPIValueWrapper::getPrimitiveNumber): |
| (JSC::JSAPIValueWrapper::toBoolean): |
| (JSC::JSAPIValueWrapper::toNumber): |
| (JSC::JSAPIValueWrapper::toString): |
| (JSC::JSAPIValueWrapper::toObject): |
| * runtime/JSAPIValueWrapper.h: Added. |
| (JSC::JSAPIValueWrapper::value): |
| (JSC::JSAPIValueWrapper::isAPIValueWrapper): |
| (JSC::JSAPIValueWrapper::JSAPIValueWrapper): |
| (JSC::jsAPIValueWrapper): |
| * wtf/Platform.h: |
| |
| 2009-05-12 Geoffrey Garen <ggaren@apple.com> |
| |
| Turned on the JIT and got it building and running the most trivial of |
| programs. |
| |
| All configurable optimizations are turned off, and a few opcodes are ad |
| hoc #if'd out. |
| |
| So far, I've only merged op_mov and op_end, but some stub-reliant |
| opcodes work as-is from TOT. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::~CodeBlock): |
| * bytecode/CodeBlock.h: |
| * jit/JIT.cpp: |
| (JSC::JIT::compileOpStrictEq): |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_lshift): |
| (JSC::JIT::emitSlow_op_lshift): |
| (JSC::JIT::emit_op_rshift): |
| (JSC::JIT::emitSlow_op_rshift): |
| (JSC::JIT::emit_op_jnless): |
| (JSC::JIT::emitSlow_op_jnless): |
| (JSC::JIT::emit_op_jnlesseq): |
| (JSC::JIT::emitSlow_op_jnlesseq): |
| (JSC::JIT::emit_op_bitand): |
| (JSC::JIT::emitSlow_op_bitand): |
| (JSC::JIT::emit_op_post_inc): |
| (JSC::JIT::emitSlow_op_post_inc): |
| (JSC::JIT::emit_op_post_dec): |
| (JSC::JIT::emitSlow_op_post_dec): |
| (JSC::JIT::emit_op_pre_inc): |
| (JSC::JIT::emitSlow_op_pre_inc): |
| (JSC::JIT::emit_op_pre_dec): |
| (JSC::JIT::emitSlow_op_pre_dec): |
| (JSC::JIT::emit_op_mod): |
| (JSC::JIT::emitSlow_op_mod): |
| (JSC::JIT::emit_op_add): |
| (JSC::JIT::emit_op_mul): |
| (JSC::JIT::emit_op_sub): |
| (JSC::JIT::compileBinaryArithOpSlowCase): |
| (JSC::JIT::emitSlow_op_add): |
| (JSC::JIT::emitSlow_op_mul): |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCallInitializeCallFrame): |
| (JSC::JIT::compileOpConstructSetupArgs): |
| (JSC::JIT::compileOpCallVarargs): |
| (JSC::JIT::compileOpCall): |
| (JSC::JIT::compileOpCallSlowCase): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::getConstantOperandImmediateInt): |
| (JSC::JIT::isOperandConstantImmediateInt): |
| (JSC::JIT::emitInitRegister): |
| (JSC::JIT::addSlowCase): |
| (JSC::JIT::addJump): |
| (JSC::JIT::emitJumpSlowToHot): |
| (JSC::JIT::tagFor): |
| (JSC::JIT::payloadFor): |
| (JSC::JIT::emitLoad): |
| (JSC::JIT::emitLoadReturnValue): |
| (JSC::JIT::emitStore): |
| (JSC::JIT::emitStoreReturnValue): |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_mov): |
| (JSC::JIT::emit_op_end): |
| (JSC::JIT::emit_op_jmp): |
| (JSC::JIT::emit_op_loop): |
| (JSC::JIT::emit_op_loop_if_less): |
| (JSC::JIT::emit_op_loop_if_lesseq): |
| (JSC::JIT::emit_op_instanceof): |
| (JSC::JIT::emit_op_get_global_var): |
| (JSC::JIT::emit_op_put_global_var): |
| (JSC::JIT::emit_op_get_scoped_var): |
| (JSC::JIT::emit_op_put_scoped_var): |
| (JSC::JIT::emit_op_tear_off_activation): |
| (JSC::JIT::emit_op_ret): |
| (JSC::JIT::emit_op_construct_verify): |
| (JSC::JIT::emit_op_to_primitive): |
| (JSC::JIT::emit_op_loop_if_true): |
| (JSC::JIT::emit_op_resolve_global): |
| (JSC::JIT::emit_op_not): |
| (JSC::JIT::emit_op_jfalse): |
| (JSC::JIT::emit_op_jeq_null): |
| (JSC::JIT::emit_op_jneq_null): |
| (JSC::JIT::emit_op_jneq_ptr): |
| (JSC::JIT::emit_op_unexpected_load): |
| (JSC::JIT::emit_op_eq): |
| (JSC::JIT::emit_op_bitnot): |
| (JSC::JIT::emit_op_jtrue): |
| (JSC::JIT::emit_op_neq): |
| (JSC::JIT::emit_op_bitxor): |
| (JSC::JIT::emit_op_bitor): |
| (JSC::JIT::emit_op_throw): |
| (JSC::JIT::emit_op_next_pname): |
| (JSC::JIT::emit_op_push_scope): |
| (JSC::JIT::emit_op_to_jsnumber): |
| (JSC::JIT::emit_op_push_new_scope): |
| (JSC::JIT::emit_op_catch): |
| (JSC::JIT::emit_op_switch_imm): |
| (JSC::JIT::emit_op_switch_char): |
| (JSC::JIT::emit_op_switch_string): |
| (JSC::JIT::emit_op_new_error): |
| (JSC::JIT::emit_op_eq_null): |
| (JSC::JIT::emit_op_neq_null): |
| (JSC::JIT::emit_op_convert_this): |
| (JSC::JIT::emit_op_profile_will_call): |
| (JSC::JIT::emit_op_profile_did_call): |
| (JSC::JIT::emitSlow_op_construct_verify): |
| (JSC::JIT::emitSlow_op_get_by_val): |
| (JSC::JIT::emitSlow_op_loop_if_less): |
| (JSC::JIT::emitSlow_op_loop_if_lesseq): |
| (JSC::JIT::emitSlow_op_put_by_val): |
| (JSC::JIT::emitSlow_op_not): |
| (JSC::JIT::emitSlow_op_instanceof): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::emit_op_get_by_val): |
| (JSC::JIT::emit_op_put_by_val): |
| (JSC::JIT::emit_op_put_by_index): |
| (JSC::JIT::emit_op_put_getter): |
| (JSC::JIT::emit_op_put_setter): |
| (JSC::JIT::emit_op_del_by_id): |
| (JSC::JIT::compileGetByIdHotPath): |
| (JSC::JIT::compilePutByIdHotPath): |
| * jit/JITStubCall.h: |
| (JSC::JITStubCall::JITStubCall): |
| (JSC::JITStubCall::addArgument): |
| (JSC::JITStubCall::call): |
| (JSC::JITStubCall::): |
| (JSC::CallEvalJITStub::CallEvalJITStub): |
| * jit/JITStubs.cpp: |
| (JSC::): |
| (JSC::JITStubs::cti_op_add): |
| (JSC::JITStubs::cti_op_pre_inc): |
| (JSC::JITStubs::cti_op_mul): |
| (JSC::JITStubs::cti_op_get_by_val): |
| (JSC::JITStubs::cti_op_get_by_val_string): |
| (JSC::JITStubs::cti_op_get_by_val_byte_array): |
| (JSC::JITStubs::cti_op_sub): |
| (JSC::JITStubs::cti_op_put_by_val): |
| (JSC::JITStubs::cti_op_put_by_val_array): |
| (JSC::JITStubs::cti_op_put_by_val_byte_array): |
| (JSC::JITStubs::cti_op_negate): |
| (JSC::JITStubs::cti_op_div): |
| (JSC::JITStubs::cti_op_pre_dec): |
| (JSC::JITStubs::cti_op_post_inc): |
| (JSC::JITStubs::cti_op_eq): |
| (JSC::JITStubs::cti_op_lshift): |
| (JSC::JITStubs::cti_op_bitand): |
| (JSC::JITStubs::cti_op_rshift): |
| (JSC::JITStubs::cti_op_bitnot): |
| (JSC::JITStubs::cti_op_mod): |
| (JSC::JITStubs::cti_op_neq): |
| (JSC::JITStubs::cti_op_post_dec): |
| (JSC::JITStubs::cti_op_urshift): |
| (JSC::JITStubs::cti_op_bitxor): |
| (JSC::JITStubs::cti_op_bitor): |
| (JSC::JITStubs::cti_op_switch_imm): |
| * jit/JITStubs.h: |
| * runtime/JSArray.cpp: |
| (JSC::JSArray::JSArray): |
| * runtime/JSFunction.cpp: |
| (JSC::JSFunction::~JSFunction): |
| * runtime/JSValue.h: |
| (JSC::JSValue::payload): |
| * wtf/Platform.h: |
| |
| 2009-05-07 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Add some new MacroAssembler and assembler functions that will be needed shortly. |
| |
| * assembler/MacroAssemblerX86Common.h: |
| (JSC::MacroAssemblerX86Common::add32): |
| (JSC::MacroAssemblerX86Common::and32): |
| (JSC::MacroAssemblerX86Common::mul32): |
| (JSC::MacroAssemblerX86Common::neg32): |
| (JSC::MacroAssemblerX86Common::or32): |
| (JSC::MacroAssemblerX86Common::sub32): |
| (JSC::MacroAssemblerX86Common::xor32): |
| (JSC::MacroAssemblerX86Common::branchAdd32): |
| (JSC::MacroAssemblerX86Common::branchMul32): |
| (JSC::MacroAssemblerX86Common::branchSub32): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::): |
| (JSC::X86Assembler::addl_rm): |
| (JSC::X86Assembler::andl_mr): |
| (JSC::X86Assembler::andl_rm): |
| (JSC::X86Assembler::andl_im): |
| (JSC::X86Assembler::negl_r): |
| (JSC::X86Assembler::notl_r): |
| (JSC::X86Assembler::orl_rm): |
| (JSC::X86Assembler::orl_im): |
| (JSC::X86Assembler::subl_rm): |
| (JSC::X86Assembler::xorl_mr): |
| (JSC::X86Assembler::xorl_rm): |
| (JSC::X86Assembler::xorl_im): |
| (JSC::X86Assembler::imull_mr): |
| |
| 2009-05-11 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Remove the NumberHeap. |
| |
| * JavaScriptCore.exp: |
| * runtime/Collector.cpp: |
| (JSC::Heap::Heap): |
| (JSC::Heap::destroy): |
| (JSC::Heap::recordExtraCost): |
| (JSC::Heap::heapAllocate): |
| (JSC::Heap::markConservatively): |
| (JSC::Heap::sweep): |
| (JSC::Heap::collect): |
| (JSC::Heap::objectCount): |
| (JSC::Heap::statistics): |
| (JSC::typeName): |
| (JSC::Heap::isBusy): |
| * runtime/Collector.h: |
| (JSC::Heap::globalData): |
| * runtime/JSCell.h: |
| |
| 2009-05-11 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Land initial commit of new number representation for 32 bit platforms, |
| with JIT disabled. |
| |
| * API/APICast.h: |
| (toJS): |
| (toRef): |
| * API/JSCallbackObjectFunctions.h: |
| (JSC::::hasInstance): |
| (JSC::::toNumber): |
| (JSC::::toString): |
| * API/tests/testapi.c: |
| (EvilExceptionObject_convertToType): |
| * AllInOneFile.cpp: |
| * JavaScriptCore.exp: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * bytecode/CodeBlock.cpp: |
| (JSC::valueToSourceString): |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::emitLoad): |
| (JSC::BytecodeGenerator::emitUnexpectedLoad): |
| (JSC::keyForImmediateSwitch): |
| * bytecompiler/BytecodeGenerator.h: |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::dumpRegisters): |
| (JSC::Interpreter::privateExecute): |
| * parser/Nodes.cpp: |
| (JSC::ArrayNode::emitBytecode): |
| (JSC::processClauseList): |
| * runtime/ArgList.h: |
| * runtime/Collector.h: |
| (JSC::sizeof): |
| * runtime/DateMath.cpp: |
| * runtime/ExceptionHelpers.h: |
| * runtime/InitializeThreading.cpp: |
| * runtime/JSArray.cpp: |
| (JSC::JSArray::JSArray): |
| * runtime/JSCell.cpp: |
| * runtime/JSCell.h: |
| (JSC::JSCell::isAPIValueWrapper): |
| (JSC::JSValue::isString): |
| (JSC::JSValue::isGetterSetter): |
| (JSC::JSValue::isObject): |
| (JSC::JSValue::getString): |
| (JSC::JSValue::getObject): |
| (JSC::JSValue::getCallData): |
| (JSC::JSValue::getConstructData): |
| (JSC::JSValue::getUInt32): |
| (JSC::JSValue::marked): |
| (JSC::JSValue::toPrimitive): |
| (JSC::JSValue::getPrimitiveNumber): |
| (JSC::JSValue::toBoolean): |
| (JSC::JSValue::toNumber): |
| (JSC::JSValue::toString): |
| (JSC::JSValue::needsThisConversion): |
| (JSC::JSValue::toThisString): |
| (JSC::JSValue::getJSNumber): |
| (JSC::JSValue::toObject): |
| (JSC::JSValue::toThisObject): |
| * runtime/JSGlobalData.cpp: |
| (JSC::JSGlobalData::JSGlobalData): |
| * runtime/JSGlobalData.h: |
| * runtime/JSGlobalObject.h: |
| (JSC::Structure::prototypeForLookup): |
| * runtime/JSGlobalObjectFunctions.cpp: |
| (JSC::globalFuncParseInt): |
| * runtime/JSImmediate.h: |
| * runtime/JSNumberCell.cpp: Removed. |
| * runtime/JSNumberCell.h: Removed. |
| * runtime/JSObject.h: |
| (JSC::JSValue::get): |
| (JSC::JSValue::put): |
| * runtime/JSString.h: |
| (JSC::JSValue::toThisJSString): |
| * runtime/JSValue.cpp: |
| (JSC::JSValue::toInteger): |
| (JSC::JSValue::toIntegerPreserveNaN): |
| (JSC::JSValue::toObjectSlowCase): |
| (JSC::JSValue::toThisObjectSlowCase): |
| (JSC::JSValue::synthesizeObject): |
| (JSC::JSValue::synthesizePrototype): |
| (JSC::JSValue::description): |
| (JSC::nonInlineNaN): |
| * runtime/JSValue.h: |
| (JSC::JSValue::): |
| (JSC::EncodedJSValueHashTraits::emptyValue): |
| (JSC::jsNaN): |
| (JSC::operator==): |
| (JSC::operator!=): |
| (JSC::toInt32): |
| (JSC::toUInt32): |
| (JSC::JSValue::encode): |
| (JSC::JSValue::decode): |
| (JSC::JSValue::JSValue): |
| (JSC::JSValue::operator bool): |
| (JSC::JSValue::operator==): |
| (JSC::JSValue::operator!=): |
| (JSC::JSValue::isUndefined): |
| (JSC::JSValue::isNull): |
| (JSC::JSValue::isUndefinedOrNull): |
| (JSC::JSValue::isCell): |
| (JSC::JSValue::isInt32): |
| (JSC::JSValue::isUInt32): |
| (JSC::JSValue::isDouble): |
| (JSC::JSValue::isTrue): |
| (JSC::JSValue::isFalse): |
| (JSC::JSValue::tag): |
| (JSC::JSValue::asInt32): |
| (JSC::JSValue::asUInt32): |
| (JSC::JSValue::asDouble): |
| (JSC::JSValue::asCell): |
| (JSC::JSValue::isNumber): |
| (JSC::JSValue::isBoolean): |
| (JSC::JSValue::getBoolean): |
| (JSC::JSValue::uncheckedGetNumber): |
| (JSC::JSValue::toJSNumber): |
| (JSC::JSValue::getNumber): |
| (JSC::JSValue::toInt32): |
| (JSC::JSValue::toUInt32): |
| * runtime/Operations.h: |
| (JSC::JSValue::equal): |
| (JSC::JSValue::equalSlowCaseInline): |
| (JSC::JSValue::strictEqual): |
| (JSC::JSValue::strictEqualSlowCaseInline): |
| (JSC::jsLess): |
| (JSC::jsLessEq): |
| (JSC::jsAdd): |
| * runtime/PropertySlot.h: |
| * runtime/StringPrototype.cpp: |
| (JSC::stringProtoFuncCharAt): |
| (JSC::stringProtoFuncCharCodeAt): |
| (JSC::stringProtoFuncIndexOf): |
| * wtf/Platform.h: |
| |
| === Start merge of nitro-extreme branch 2009-07-30 === |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46438. |
| |
| 2009-07-27 Gavin Barraclough <barraclough@apple.com> |
| |
| Rubber stamped by Oliver Hunt. |
| |
| Fix tyop in JIT, renamed preverveReturnAddressAfterCall -> preserveReturnAddressAfterCall. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompile): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JIT.h: |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::preserveReturnAddressAfterCall): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::privateCompilePutByIdTransition): |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46347. |
| |
| 2009-07-24 Csaba Osztrogonac <oszi@inf.u-szeged.hu> |
| |
| Reviewed by Darin Adler and Adam Barth. |
| |
| Build fix for x86 platforms. |
| https://bugs.webkit.org/show_bug.cgi?id=27602 |
| |
| * jit/JIT.cpp: |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46247. |
| |
| 2009-07-22 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| With ENABLE(ASSEMBLER_WX_EXCLUSIVE), only change permissions once per repatch event. |
| ( https://bugs.webkit.org/show_bug.cgi?id=27564 ) |
| |
| Currently we change permissions forwards and backwards for each instruction modified, |
| instead we should only change permissions once per complete repatching event. |
| |
| 2.5% progression running with ENABLE(ASSEMBLER_WX_EXCLUSIVE) enabled, |
| which recoups 1/3 of the penalty of running with this mode enabled. |
| |
| * assembler/ARMAssembler.cpp: |
| (JSC::ARMAssembler::linkBranch): |
| - Replace usage of MakeWritable with cacheFlush. |
| |
| * assembler/ARMAssembler.h: |
| (JSC::ARMAssembler::patchPointerInternal): |
| (JSC::ARMAssembler::repatchLoadPtrToLEA): |
| - Replace usage of MakeWritable with cacheFlush. |
| |
| * assembler/ARMv7Assembler.h: |
| (JSC::ARMv7Assembler::relinkJump): |
| (JSC::ARMv7Assembler::relinkCall): |
| (JSC::ARMv7Assembler::repatchInt32): |
| (JSC::ARMv7Assembler::repatchPointer): |
| (JSC::ARMv7Assembler::repatchLoadPtrToLEA): |
| (JSC::ARMv7Assembler::setInt32): |
| - Replace usage of MakeWritable with cacheFlush. |
| |
| * assembler/LinkBuffer.h: |
| (JSC::LinkBuffer::performFinalization): |
| - Make explicit call to cacheFlush. |
| |
| * assembler/MacroAssemblerCodeRef.h: |
| (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef): |
| - Make size always available. |
| |
| * assembler/RepatchBuffer.h: |
| (JSC::RepatchBuffer::RepatchBuffer): |
| (JSC::RepatchBuffer::~RepatchBuffer): |
| - Add calls to MakeWritable & makeExecutable. |
| |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::relinkJump): |
| (JSC::X86Assembler::relinkCall): |
| (JSC::X86Assembler::repatchInt32): |
| (JSC::X86Assembler::repatchPointer): |
| (JSC::X86Assembler::repatchLoadPtrToLEA): |
| - Remove usage of MakeWritable. |
| |
| * bytecode/CodeBlock.h: |
| (JSC::CodeBlock::getJITCode): |
| - Provide access to CodeBlock's JITCode. |
| |
| * jit/ExecutableAllocator.h: |
| (JSC::ExecutableAllocator::makeExecutable): |
| (JSC::ExecutableAllocator::cacheFlush): |
| - Remove MakeWritable, make cacheFlush public. |
| |
| * jit/JIT.cpp: |
| (JSC::ctiPatchNearCallByReturnAddress): |
| (JSC::ctiPatchCallByReturnAddress): |
| (JSC::JIT::privateCompile): |
| (JSC::JIT::unlinkCall): |
| (JSC::JIT::linkCall): |
| - Add CodeBlock argument to RepatchBuffer. |
| |
| * jit/JIT.h: |
| - Pass CodeBlock argument for use by RepatchBuffer. |
| |
| * jit/JITCode.h: |
| (JSC::JITCode::start): |
| (JSC::JITCode::size): |
| - Provide access to code start & size. |
| |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::privateCompilePutByIdTransition): |
| (JSC::JIT::patchGetByIdSelf): |
| (JSC::JIT::patchMethodCallProto): |
| (JSC::JIT::patchPutByIdReplace): |
| (JSC::JIT::privateCompilePatchGetArrayLength): |
| (JSC::JIT::privateCompileGetByIdProto): |
| (JSC::JIT::privateCompileGetByIdSelfList): |
| (JSC::JIT::privateCompileGetByIdProtoList): |
| (JSC::JIT::privateCompileGetByIdChainList): |
| (JSC::JIT::privateCompileGetByIdChain): |
| - Add CodeBlock argument to RepatchBuffer. |
| |
| * jit/JITStubs.cpp: |
| (JSC::JITThunks::tryCachePutByID): |
| (JSC::JITThunks::tryCacheGetByID): |
| (JSC::JITStubs::DEFINE_STUB_FUNCTION): |
| - Pass CodeBlock argument for use by RepatchBuffer. |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46210. |
| |
| 2009-07-21 Zoltan Herczeg <zherczeg@inf.u-szeged.hu> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Cache not only the structure of the method, but the |
| structure of its prototype as well. |
| https://bugs.webkit.org/show_bug.cgi?id=27077 |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::~CodeBlock): |
| * bytecode/CodeBlock.h: |
| (JSC::MethodCallLinkInfo::MethodCallLinkInfo): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::patchMethodCallProto): |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46209. |
| |
| 2009-07-21 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Move call linking / repatching down from AbstractMacroAssembler into MacroAssemblerARCH classes. |
| ( https://bugs.webkit.org/show_bug.cgi?id=27527 ) |
| |
| This allows the implementation to be defined per architecture. Specifically this addresses the |
| fact that x86-64 MacroAssembler implements far calls as a load to register, followed by a call |
| to register. Patching the call actually requires the pointer load to be patched, rather than |
| the call to be patched. This is implementation detail specific to MacroAssemblerX86_64, and as |
| such is best handled there. |
| |
| * assembler/AbstractMacroAssembler.h: |
| * assembler/MacroAssemblerARM.h: |
| (JSC::MacroAssemblerARM::linkCall): |
| (JSC::MacroAssemblerARM::repatchCall): |
| * assembler/MacroAssemblerARMv7.h: |
| (JSC::MacroAssemblerARMv7::linkCall): |
| (JSC::MacroAssemblerARMv7::repatchCall): |
| * assembler/MacroAssemblerX86.h: |
| (JSC::MacroAssemblerX86::linkCall): |
| (JSC::MacroAssemblerX86::repatchCall): |
| * assembler/MacroAssemblerX86_64.h: |
| (JSC::MacroAssemblerX86_64::linkCall): |
| (JSC::MacroAssemblerX86_64::repatchCall): |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46202. |
| |
| 2009-07-21 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Move LinkBuffer/RepatchBuffer out of AbstractMacroAssembler. |
| ( https://bugs.webkit.org/show_bug.cgi?id=27485 ) |
| |
| This change is the first step in a process to move code that should be in |
| the architecture-specific MacroAssembler classes up out of Assmbler and |
| AbstractMacroAssembler. |
| |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| - added new files |
| |
| * assembler/ARMAssembler.h: |
| (JSC::ARMAssembler::linkPointer): |
| - rename patchPointer to bring it in line with the current link/repatch naming scheme |
| |
| * assembler/ARMv7Assembler.h: |
| (JSC::ARMv7Assembler::linkCall): |
| (JSC::ARMv7Assembler::linkPointer): |
| (JSC::ARMv7Assembler::relinkCall): |
| (JSC::ARMv7Assembler::repatchInt32): |
| (JSC::ARMv7Assembler::repatchPointer): |
| (JSC::ARMv7Assembler::setInt32): |
| (JSC::ARMv7Assembler::setPointer): |
| - rename patchPointer to bring it in line with the current link/repatch naming scheme |
| |
| * assembler/AbstractMacroAssembler.h: |
| (JSC::AbstractMacroAssembler::linkJump): |
| (JSC::AbstractMacroAssembler::linkCall): |
| (JSC::AbstractMacroAssembler::linkPointer): |
| (JSC::AbstractMacroAssembler::getLinkerAddress): |
| (JSC::AbstractMacroAssembler::getLinkerCallReturnOffset): |
| (JSC::AbstractMacroAssembler::repatchJump): |
| (JSC::AbstractMacroAssembler::repatchCall): |
| (JSC::AbstractMacroAssembler::repatchNearCall): |
| (JSC::AbstractMacroAssembler::repatchInt32): |
| (JSC::AbstractMacroAssembler::repatchPointer): |
| (JSC::AbstractMacroAssembler::repatchLoadPtrToLEA): |
| - remove the LinkBuffer/RepatchBuffer classes, but leave a set of (private, friended) methods to interface to the Assembler |
| |
| * assembler/LinkBuffer.h: Added. |
| (JSC::LinkBuffer::LinkBuffer): |
| (JSC::LinkBuffer::~LinkBuffer): |
| (JSC::LinkBuffer::link): |
| (JSC::LinkBuffer::patch): |
| (JSC::LinkBuffer::locationOf): |
| (JSC::LinkBuffer::locationOfNearCall): |
| (JSC::LinkBuffer::returnAddressOffset): |
| (JSC::LinkBuffer::finalizeCode): |
| (JSC::LinkBuffer::finalizeCodeAddendum): |
| (JSC::LinkBuffer::code): |
| (JSC::LinkBuffer::performFinalization): |
| - new file containing the LinkBuffer class, previously a member of AbstractMacroAssembler |
| |
| * assembler/RepatchBuffer.h: Added. |
| (JSC::RepatchBuffer::RepatchBuffer): |
| (JSC::RepatchBuffer::relink): |
| (JSC::RepatchBuffer::repatch): |
| (JSC::RepatchBuffer::repatchLoadPtrToLEA): |
| (JSC::RepatchBuffer::relinkCallerToTrampoline): |
| (JSC::RepatchBuffer::relinkCallerToFunction): |
| (JSC::RepatchBuffer::relinkNearCallerToTrampoline): |
| - new file containing the RepatchBuffer class, previously a member of AbstractMacroAssembler |
| |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::linkJump): |
| (JSC::X86Assembler::linkCall): |
| (JSC::X86Assembler::linkPointerForCall): |
| (JSC::X86Assembler::linkPointer): |
| (JSC::X86Assembler::relinkJump): |
| (JSC::X86Assembler::relinkCall): |
| (JSC::X86Assembler::repatchInt32): |
| (JSC::X86Assembler::repatchPointer): |
| (JSC::X86Assembler::setPointer): |
| (JSC::X86Assembler::setInt32): |
| (JSC::X86Assembler::setRel32): |
| - rename patchPointer to bring it in line with the current link/repatch naming scheme |
| |
| * jit/JIT.cpp: |
| (JSC::ctiPatchNearCallByReturnAddress): |
| (JSC::ctiPatchCallByReturnAddress): |
| - include new headers |
| - remove MacroAssembler:: specification from RepatchBuffer usage |
| |
| * jit/JITPropertyAccess.cpp: |
| * yarr/RegexJIT.cpp: |
| - include new headers |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46187. |
| |
| 2009-07-21 Robert Agoston <Agoston.Robert@stud.u-szeged.hu> |
| |
| Reviewed by David Levin. |
| |
| Fixed #undef typo. |
| https://bugs.webkit.org/show_bug.cgi?id=27506 |
| |
| * bytecode/Opcode.h: |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r46057. |
| |
| 2009-07-17 Gabor Loki <loki@inf.u-szeged.hu> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Extend AssemblerBuffer with constant pool handling mechanism. |
| https://bugs.webkit.org/show_bug.cgi?id=24986 |
| |
| Add a platform independed constant pool framework. |
| This pool can store 32 or 64 bits values which is enough to hold |
| any integer, pointer or double constant. |
| |
| * assembler/AssemblerBuffer.h: |
| (JSC::AssemblerBuffer::putIntUnchecked): |
| (JSC::AssemblerBuffer::putInt64Unchecked): |
| (JSC::AssemblerBuffer::append): |
| (JSC::AssemblerBuffer::grow): |
| * assembler/AssemblerBufferWithConstantPool.h: Added. |
| (JSC::): |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r45933. |
| |
| 2009-07-15 Darin Adler <darin@apple.com> |
| |
| Fix a build for a particular Apple configuration. |
| |
| * wtf/FastAllocBase.h: Change include to use "" style for |
| including another wtf header. This is the style we use for |
| including other public headers in the same directory. |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r45918. |
| |
| 2009-07-15 Yong Li <yong.li@torchmobile.com> |
| |
| Reviewed by George Staikos. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=27020 |
| msToGregorianDateTime should set utcOffset to 0 when outputIsUTC is false |
| |
| * wtf/DateMath.cpp: |
| (WTF::gregorianDateTimeToMS): |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r45904. |
| |
| 2009-07-15 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Simon Hausmann. |
| |
| REGRESSION: fast/js/postfix-syntax.html fails with interpreter |
| https://bugs.webkit.org/show_bug.cgi?id=27294 |
| |
| When postfix operators operating on locals assign to the same local |
| the order of operations has to be to store the incremented value, then |
| store the unmodified number. Rather than implementing this subtle |
| semantic in the interpreter I've just made the logic explicit in the |
| bytecode generator, so x=x++ effectively becomes x=ToNumber(x) (for a |
| local var x). |
| |
| * parser/Nodes.cpp: |
| (JSC::emitPostIncOrDec): |
| |
| 2009-10-08 Mark Rowe <mrowe@apple.com> |
| |
| Merge r45903. |
| |
| 2009-07-15 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Simon Hausmann. |
| |
| REGRESSION(43559): fast/js/kde/arguments-scope.html fails with interpreter |
| https://bugs.webkit.org/show_bug.cgi?id=27259 |
| |
| The interpreter was incorrectly basing its need to create the arguments object |
| based on the presence of the callframe's argument reference rather than the local |
| arguments reference. Based on this it then overrode the local variable reference. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::privateExecute): |
| |
| 2009-07-15 Steve Falkenburg <sfalken@apple.com> |
| |
| Merge r45949. |
| |
| 2009-07-15 Steve Falkenburg <sfalken@apple.com> |
| |
| Windows Build fix. |
| |
| Visual Studio reset our intermediate directory on us. |
| This sets it back. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.vcproj/testapi/testapi.vcproj: |
| |
| 2009-07-15 Steve Falkenburg <sfalken@apple.com> |
| |
| Merge r45892. |
| |
| 2009-07-14 Steve Falkenburg <sfalken@apple.com> |
| |
| Reorganize JavaScriptCore headers into: |
| API: include/JavaScriptCore/ |
| Private: include/private/JavaScriptCore/ |
| |
| Reviewed by Darin Adler. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: |
| * JavaScriptCore.vcproj/testapi/testapi.vcproj: |
| * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: |
| |
| 2009-07-12 Mark Rowe <mrowe@apple.com> |
| |
| Merge r45736. |
| |
| 2009-07-10 Mark Rowe <mrowe@apple.com> |
| |
| Second part of the "make Windows happier" dance. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: |
| |
| 2009-07-12 Mark Rowe <mrowe@apple.com> |
| |
| Merge r45735. |
| |
| 2009-07-10 Mark Rowe <mrowe@apple.com> |
| |
| Try and make the Windows build happy. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: |
| |
| 2009-07-12 Mark Rowe <mrowe@apple.com> |
| |
| Merge r45733. |
| |
| 2009-07-10 Kevin McCullough <kmccullough@apple.com> |
| |
| Reviewed by Geoffrey Garen. |
| |
| * debugger/Debugger.h: Made this function virtual for use in WebCore's |
| WebInspector. |
| |
| 2009-07-11 Mark Rowe <mrowe@apple.com> |
| |
| <rdar://problem/7047403> Disable channel messaging |
| |
| * Configurations/FeatureDefines.xcconfig: |
| |
| 2009-07-09 Maciej Stachowiak <mjs@apple.com> |
| |
| Not reviewed, build fix. |
| |
| Windows build fix for the last change. |
| |
| * wtf/dtoa.cpp: Forgot to include Vector.h |
| |
| 2009-07-09 Maciej Stachowiak <mjs@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| REGRESSION: crash in edge cases of floating point parsing. |
| https://bugs.webkit.org/show_bug.cgi?id=27110 |
| <rdar://problem/7044458> |
| |
| Tests: fast/css/number-parsing-crash.html |
| fast/css/number-parsing-crash.html |
| fast/js/number-parsing-crash.html |
| |
| * wtf/dtoa.cpp: |
| (WTF::BigInt::BigInt): Converted this to more a proper class, using a Vector |
| with inline capacity |
| |
| (WTF::lshift): Rearranged logic somewhat nontrivially to deal with the new way of sizing BigInts. |
| Added an assertion to verify that invariants are maintained. |
| |
| All other functions are adapted fairly mechanically to the above changes. |
| (WTF::BigInt::clear): |
| (WTF::BigInt::size): |
| (WTF::BigInt::resize): |
| (WTF::BigInt::words): |
| (WTF::BigInt::append): |
| (WTF::multadd): |
| (WTF::s2b): |
| (WTF::i2b): |
| (WTF::mult): |
| (WTF::cmp): |
| (WTF::diff): |
| (WTF::b2d): |
| (WTF::d2b): |
| (WTF::ratio): |
| (WTF::strtod): |
| (WTF::quorem): |
| (WTF::dtoa): |
| |
| 2009-07-09 Drew Wilson <atwilson@google.com> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| Turned on CHANNEL_MESSAGING by default because the MessageChannel API |
| can now be implemented for Web Workers and is reasonably stable. |
| |
| * Configurations/FeatureDefines.xcconfig: |
| |
| 2009-07-09 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by NOBODY (Build fix). |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::privateExecute): |
| |
| 2009-07-09 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| Bug 27016 - Interpreter crashes due to invalid array indexes |
| <https://bugs.webkit.org/show_bug.cgi?id=27016> |
| |
| Unsigned vs signed conversions results in incorrect behaviour in |
| 64bit interpreter builds. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::privateExecute): |
| |
| 2009-07-09 Dimitri Glazkov <dglazkov@chromium.org> |
| |
| Reviewed by Darin Fisher. |
| |
| [Chromium] Upstream JavaScriptCore.gypi, the project file for Chromium build. |
| https://bugs.webkit.org/show_bug.cgi?id=27135 |
| |
| * JavaScriptCore.gypi: Added. |
| |
| 2009-07-09 Joe Mason <joe.mason@torchmobile.com> |
| |
| Reviewed by George Staikos. |
| |
| Authors: Yong Li <yong.li@torchmobile.com>, Joe Mason <joe.mason@torchmobile.com> |
| |
| https://bugs.webkit.org/show_bug.cgi?id=27031 |
| Add an override for deleteOwnedPtr(HDC) on Windows |
| |
| * wtf/OwnPtrCommon.h: |
| * wtf/OwnPtrWin.cpp: |
| (WTF::deleteOwnedPtr): |
| |
| 2009-07-09 Laszlo Gombos <laszlo.1.gombos@nokia.com> |
| |
| Reviewed by Darin Adler. |
| |
| Guard singal.h dependency with HAVE(SIGNAL_H) to enable building jsc |
| on SYMBIAN. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=27026 |
| |
| Based on Norbert Leser's work. |
| |
| * jsc.cpp: |
| (printUsageStatement): |
| (parseArguments): |
| * wtf/Platform.h: |
| |
| 2009-07-07 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Stop loading constants into the register file. |
| |
| Instead, use high register values (highest bit bar the sign bit set) to indicate |
| constants in the instruction stream, and when we encounter such a value load it |
| directly from the CodeBlock. |
| |
| Since constants are no longer copied into the register file, this patch renders |
| the 'unexpected constant' mechanism redundant, and removes it. |
| |
| 2% improvement, thanks to Sam Weinig. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::dump): |
| (JSC::CodeBlock::CodeBlock): |
| (JSC::CodeBlock::mark): |
| (JSC::CodeBlock::shrinkToFit): |
| * bytecode/CodeBlock.h: |
| (JSC::CodeBlock::isTemporaryRegisterIndex): |
| (JSC::CodeBlock::constantRegister): |
| (JSC::CodeBlock::isConstantRegisterIndex): |
| (JSC::CodeBlock::getConstant): |
| (JSC::ExecState::r): |
| * bytecode/Opcode.h: |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::preserveLastVar): |
| (JSC::BytecodeGenerator::BytecodeGenerator): |
| (JSC::BytecodeGenerator::addConstantValue): |
| (JSC::BytecodeGenerator::emitEqualityOp): |
| (JSC::BytecodeGenerator::emitLoad): |
| (JSC::BytecodeGenerator::emitResolveBase): |
| (JSC::BytecodeGenerator::emitResolveWithBase): |
| (JSC::BytecodeGenerator::emitNewError): |
| * bytecompiler/BytecodeGenerator.h: |
| (JSC::BytecodeGenerator::emitNode): |
| * interpreter/CallFrame.h: |
| (JSC::ExecState::noCaller): |
| (JSC::ExecState::hasHostCallFrameFlag): |
| (JSC::ExecState::addHostCallFrameFlag): |
| (JSC::ExecState::removeHostCallFrameFlag): |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::resolve): |
| (JSC::Interpreter::resolveSkip): |
| (JSC::Interpreter::resolveGlobal): |
| (JSC::Interpreter::resolveBase): |
| (JSC::Interpreter::resolveBaseAndProperty): |
| (JSC::Interpreter::resolveBaseAndFunc): |
| (JSC::Interpreter::dumpRegisters): |
| (JSC::Interpreter::throwException): |
| (JSC::Interpreter::createExceptionScope): |
| (JSC::Interpreter::privateExecute): |
| (JSC::Interpreter::retrieveArguments): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitLoadDouble): |
| (JSC::JIT::emitLoadInt32ToDouble): |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_new_error): |
| (JSC::JIT::emit_op_enter): |
| (JSC::JIT::emit_op_enter_with_activation): |
| * parser/Nodes.cpp: |
| (JSC::DeleteResolveNode::emitBytecode): |
| (JSC::DeleteValueNode::emitBytecode): |
| (JSC::PrefixResolveNode::emitBytecode): |
| * runtime/JSActivation.cpp: |
| (JSC::JSActivation::JSActivation): |
| * wtf/Platform.h: |
| |
| 2009-07-07 Mark Rowe <mrowe@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| Fix <https://bugs.webkit.org/show_bug.cgi?id=27025> / <rdar://problem/7033448>. |
| Bug 27025: Crashes and regression test failures related to regexps in 64-bit |
| |
| For x86_64 RegexGenerator uses rbx, a callee-save register, as a scratch register but |
| neglects to save and restore it. The change in handling of the output vector in r45545 |
| altered code generation so that the RegExp::match was now storing important data in rbx, |
| which caused crashes and bogus results when it was clobbered. |
| |
| * yarr/RegexJIT.cpp: |
| (JSC::Yarr::RegexGenerator::generateEnter): Save rbx. |
| (JSC::Yarr::RegexGenerator::generateReturn): Restore rbx. |
| |
| 2009-07-06 Ada Chan <adachan@apple.com> |
| |
| Reviewed by Darin Adler and Mark Rowe. |
| |
| Decommitted spans are added to the list of normal spans rather than |
| the returned spans in TCMalloc_PageHeap::Delete(). |
| https://bugs.webkit.org/show_bug.cgi?id=26998 |
| |
| In TCMalloc_PageHeap::Delete(), the deleted span can be decommitted in |
| the process of merging with neighboring spans that are also decommitted. |
| The merged span needs to be placed in the list of returned spans (spans |
| whose memory has been returned to the system). Right now it's always added |
| to the list of the normal spans which can theoretically cause thrashing. |
| |
| * wtf/FastMalloc.cpp: |
| (WTF::TCMalloc_PageHeap::Delete): |
| |
| 2009-07-05 Lars Knoll <lars.knoll@nokia.com> |
| |
| Reviewed by Maciej Stachowiak. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=26843 |
| |
| Fix run-time crashes in JavaScriptCore with the Metrowerks compiler on Symbian. |
| |
| The Metrowerks compiler on the Symbian platform moves the globally |
| defined Hashtables into read-only memory, despite one of the members |
| being mutable. This causes crashes at run-time due to write access to |
| read-only memory. |
| |
| Avoid the use of const with this compiler by introducing the |
| JSC_CONST_HASHTABLE macro. |
| |
| Based on idea by Norbert Leser. |
| |
| * runtime/Lookup.h: Define JSC_CONST_HASHTABLE as const for !WINSCW. |
| * create_hash_table: Use JSC_CONST_HASHTABLE for hashtables. |
| * runtime/JSGlobalData.cpp: Import various global hashtables via the macro. |
| |
| 2009-07-04 Dan Bernstein <mitz@apple.com> |
| |
| - debug build fix |
| |
| * runtime/RegExpConstructor.cpp: |
| (JSC::RegExpConstructor::getLastParen): |
| |
| 2009-07-03 Yong Li <yong.li@torchmobile.com> |
| |
| Reviewed by Maciej Stachowiak (and revised slightly) |
| |
| RegExp::match to be optimized |
| https://bugs.webkit.org/show_bug.cgi?id=26957 |
| |
| Allow regexp matching to use Vectors with inline capacity instead of |
| allocating a new ovector buffer every time. |
| |
| ~5% speedup on SunSpider string-unpack-code test, 0.3% on SunSpider overall. |
| |
| * runtime/RegExp.cpp: |
| (JSC::RegExp::match): |
| * runtime/RegExp.h: |
| * runtime/RegExpConstructor.cpp: |
| (JSC::RegExpConstructorPrivate::RegExpConstructorPrivate): |
| (JSC::RegExpConstructorPrivate::lastOvector): |
| (JSC::RegExpConstructorPrivate::tempOvector): |
| (JSC::RegExpConstructorPrivate::changeLastOvector): |
| (JSC::RegExpConstructor::performMatch): |
| (JSC::RegExpMatchesArray::RegExpMatchesArray): |
| (JSC::RegExpMatchesArray::fillArrayInstance): |
| (JSC::RegExpConstructor::getBackref): |
| (JSC::RegExpConstructor::getLastParen): |
| (JSC::RegExpConstructor::getLeftContext): |
| (JSC::RegExpConstructor::getRightContext): |
| * runtime/StringPrototype.cpp: |
| (JSC::stringProtoFuncSplit): |
| |
| 2009-06-30 Kwang Yul Seo <skyul@company100.net> |
| |
| Reviewed by Eric Seidel. |
| |
| Override operator new/delete with const std::nothrow_t& as the second |
| argument. |
| https://bugs.webkit.org/show_bug.cgi?id=26792 |
| |
| On Windows CE, operator new/delete, new[]/delete[] with const |
| std::nothrow_t& must be overrided because some standard template |
| libraries use these operators. |
| |
| The problem occurs when memory allocated by new(size_t s, const |
| std::nothrow_t&) is freed by delete(void* p). This causes the umatched |
| malloc/free problem. |
| |
| The patch overrides all new, delete, new[] and delete[] to use |
| fastMaloc and fastFree consistently. |
| |
| * wtf/FastMalloc.h: |
| (throw): |
| |
| 2009-06-30 Gabor Loki <loki@inf.u-szeged.hu> |
| |
| Reviewed by Sam Weinig. |
| |
| <https://bugs.webkit.org/show_bug.cgi?id=24986> |
| |
| Remove unnecessary references to AssemblerBuffer. |
| |
| * interpreter/Interpreter.cpp: |
| * interpreter/Interpreter.h: |
| |
| 2009-06-29 David Levin <levin@chromium.org> |
| |
| Reviewed by Oliver Hunt. |
| |
| Still seeing occasional leaks from UString::sharedBuffer code |
| https://bugs.webkit.org/show_bug.cgi?id=26420 |
| |
| The problem is that the pointer to the memory allocation isn't visible |
| by "leaks" due to the lower bits being used as flags. The fix is to |
| make the pointer visible in memory (in debug only). The downside of |
| this fix that the memory allocated by sharedBuffer will still look like |
| a leak in non-debug builds when any flags are set. |
| |
| * wtf/PtrAndFlags.h: |
| (WTF::PtrAndFlags::set): |
| |
| 2009-06-29 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Mark Rowe. |
| |
| Remove more unused scons support. |
| |
| * SConstruct: Removed. |
| |
| 2009-06-29 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| <rdar://problem/7016214> JSON.parse fails to parse valid JSON with most Unicode characters |
| <https://bugs.webkit.org/show_bug.cgi?id=26802> |
| |
| In the original JSON.parse patch unicode was handled correctly, however in some last |
| minute "clean up" I oversimplified isSafeStringCharacter. This patch corrects this bug. |
| |
| * runtime/LiteralParser.cpp: |
| (JSC::isSafeStringCharacter): |
| (JSC::LiteralParser::Lexer::lexString): |
| |
| 2009-06-26 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Dan Bernstein. |
| |
| <rdar://problem/7009684> REGRESSION(r45039): Crashes inside JSEvent::put on PowerPC (26746) |
| <https://bugs.webkit.org/show_bug.cgi?id=26746> |
| |
| Fix for r45039 incorrectly uncached a get_by_id by converting it to put_by_id. Clearly this |
| is less than correct. This patch corrects that error. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::tryCacheGetByID): |
| |
| 2009-06-26 Eric Seidel <eric@webkit.org> |
| |
| No review, only rolling out r45259. |
| |
| Roll out r45259 after crash appeared on the bots: |
| plugins/undefined-property-crash.html |
| ASSERTION FAILED: s <= HeapConstants<heapType>::cellSize |
| (leopard-intel-debug-tests/build/JavaScriptCore/runtime/Collector.cpp:278 |
| void* JSC::Heap::heapAllocate(size_t) [with JSC::HeapType heapType = PrimaryHeap]) |
| |
| * runtime/DateInstance.cpp: |
| * runtime/Identifier.cpp: |
| * runtime/Lookup.h: |
| * runtime/RegExpConstructor.cpp: |
| * runtime/RegExpObject.h: |
| * runtime/ScopeChain.h: |
| * runtime/UString.h: |
| |
| 2009-06-26 Jedrzej Nowacki <jedrzej.nowacki@nokia.com> |
| |
| Reviewed by Simon Hausmann. |
| |
| Add support for QDataStream operators to Vector. |
| |
| * wtf/Vector.h: |
| (WTF::operator<<): |
| (WTF::operator>>): |
| |
| 2009-06-24 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Make the opcode sampler work once again. |
| |
| * jit/JIT.h: |
| (JSC::JIT::compileGetByIdProto): |
| (JSC::JIT::compileGetByIdSelfList): |
| (JSC::JIT::compileGetByIdProtoList): |
| (JSC::JIT::compileGetByIdChainList): |
| (JSC::JIT::compileGetByIdChain): |
| (JSC::JIT::compilePutByIdTransition): |
| (JSC::JIT::compileCTIMachineTrampolines): |
| (JSC::JIT::compilePatchGetArrayLength): |
| * jit/JITStubCall.h: |
| (JSC::JITStubCall::call): |
| |
| 2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu> |
| |
| Reviewed by Maciej Stachowiak. |
| |
| Extend FastAllocBase.h with 'using WTF::FastAllocBase' to avoid |
| unnecessary WTF:: usings. |
| Remove existing unnecessary WTF:: usings. |
| |
| * interpreter/Interpreter.h: |
| * profiler/CallIdentifier.h: |
| * runtime/ScopeChain.h: |
| * wtf/FastAllocBase.h: |
| |
| 2009-06-24 David Levin <levin@chromium.org> |
| |
| Fix all builds. |
| |
| * bytecode/CodeBlock.h: |
| * bytecompiler/BytecodeGenerator.h: |
| * interpreter/Register.h: |
| |
| 2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu> |
| |
| Reviewed by Maciej Stachowiak. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=26677 |
| |
| Inherits CodeBlock class from FastAllocBase because it |
| has been instantiated by 'new' in JavaScriptCore/bytecode/CodeBlock.h:217. |
| |
| * bytecode/CodeBlock.h: |
| |
| 2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu> |
| |
| Reviewed by Maciej Stachowiak. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=26676 |
| |
| Inherits BytecodeGenerator class from FastAllocBase because it has been |
| instantiated by 'new' in JavaScriptCore/parser/Nodes.cpp:1892. |
| |
| * bytecompiler/BytecodeGenerator.h: |
| |
| 2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu> |
| |
| Reviewed by Maciej Stachowiak. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=26675 |
| |
| Inherits Register class from FastAllocBase because it has been |
| instantiated by 'new' in JavaScriptCore/runtime/JSVariableObject.h:149. |
| |
| * interpreter/Register.h: |
| |
| 2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=26674 |
| |
| Inherits HashMap class from FastAllocBase because it has been |
| instantiated by 'new' in JavaScriptCore/runtime/Structure.cpp:458. |
| |
| * wtf/HashMap.h: |
| |
| 2009-06-24 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| <rdar://problem/6940519> REGRESSION (Safari 4 Public Beta - TOT): google.com/adplanner shows blank page instead of site details in "basic research' |
| |
| The problem was caused by the page returned with a function using a |
| var declaration list containing around ~3000 variables. The solution |
| to this is to flatten the comma expression representation and make |
| codegen comma expressions and initializer lists iterative rather than |
| recursive. |
| |
| * parser/Grammar.y: |
| * parser/NodeConstructors.h: |
| (JSC::CommaNode::CommaNode): |
| * parser/Nodes.cpp: |
| (JSC::CommaNode::emitBytecode): |
| * parser/Nodes.h: |
| (JSC::ExpressionNode::isCommaNode): |
| (JSC::CommaNode::isCommaNode): |
| (JSC::CommaNode::append): |
| |
| 2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu> |
| |
| Reviewed by Maciej Stachowiak. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=26645 |
| |
| Inherits ScopeChainNode class from FastAllocBase because it has been |
| instantiated by 'new' in JavaScriptCore/runtime/ScopeChain.h:95. |
| |
| * wtf/RefPtr.h: |
| |
| 2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=26648 |
| |
| Inherits Deque class from FastAllocBase because it has been |
| instantiated by 'new' with DEFINE_STATIC_LOCAL macro in |
| JavaScriptCore/wtf/MainThread.cpp:62. |
| |
| * wtf/Deque.h: |
| |
| 2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=26644 |
| |
| Inherits RefPtr class from FastAllocBase because it has been |
| instantiated by 'new' in JavaScriptCore/runtime/StructureChain.cpp:41. |
| |
| * wtf/RefPtr.h: |
| |
| 2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu> |
| |
| Reviewed by Darin Adler. |
| |
| Inherits HashSet class from FastAllocBase, because it has been |
| instantiated by 'new' in JavaScriptCore/runtime/Collector.h:116. |
| |
| * wtf/HashSet.h: |
| |
| 2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu> |
| |
| Reviewed by Darin Adler. |
| |
| Inherits Vector class from FastAllocBase because it has been |
| instantiated by 'new' in JavaScriptCore/runtime/Structure.cpp:633. |
| |
| * wtf/Vector.h: |
| |
| 2009-06-24 Norbert Leser <norbert.leser@nokia.com> |
| |
| Reviewed by Maciej Stachoviak. |
| |
| The BytecodeGenerator objects were instantiated on stack, which takes up ~38kB per instance |
| (each instance includes copy of JSC::CodeBlock with large SymbolTable, etc.). |
| Specifically, since there is nested invocation (e.g., GlobalCode --> FunctionCode), |
| the stack overflows immediately on Symbian hardware (max. 80 kB). |
| Proposed change allocates generator objects on heap. |
| Performance impact (if any) should be negligible and change is proposed as general fix, |
| rather than ifdef'd for SYMBIAN. |
| |
| * parser/Nodes.cpp: |
| (JSC::ProgramNode::generateBytecode): |
| (JSC::EvalNode::generateBytecode): |
| (JSC::EvalNode::bytecodeForExceptionInfoReparse): |
| (JSC::FunctionBodyNode::generateBytecode): |
| (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse): |
| |
| 2009-06-23 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| <rdar://problem/6992806> REGRESSION: Enumeration can skip new properties in cases of prototypes that have more than 64 (26593) |
| <https://bugs.webkit.org/show_bug.cgi?id=26593> |
| |
| Do not attempt to cache structure chains if they contain a dictionary at any level. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::tryCachePutByID): |
| (JSC::Interpreter::tryCacheGetByID): |
| * jit/JITStubs.cpp: |
| (JSC::JITThunks::tryCachePutByID): |
| * runtime/Structure.cpp: |
| (JSC::Structure::getEnumerablePropertyNames): |
| (JSC::Structure::addPropertyTransition): |
| * runtime/StructureChain.cpp: |
| (JSC::StructureChain::isCacheable): |
| * runtime/StructureChain.h: |
| |
| 2009-06-23 Yong Li <yong.li@torchmobile.com> |
| |
| Reviewed by George Staikos. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=26654 |
| Add the proper export define for the JavaScriptCore API when building for WINCE. |
| |
| * API/JSBase.h: |
| |
| 2009-06-23 Joe Mason <joe.mason@torchmobile.com> |
| |
| Reviewed by Adam Treat. |
| |
| Authors: Yong Li <yong.li@torchmobile.com>, Joe Mason <joe.mason@torchmobile.com> |
| |
| https://bugs.webkit.org/show_bug.cgi?id=26611 |
| Implement currentThreadStackBase on WINCE by adding a global, |
| g_stackBase, which must be set to the address of a local variable |
| by the caller before calling any WebKit function that invokes JSC. |
| |
| * runtime/Collector.cpp: |
| (JSC::isPageWritable): |
| (JSC::getStackBase): |
| Starts at the top of the stack and returns the entire range of |
| consecutive writable pages as an estimate of the actual stack. |
| This will be much bigger than the actual stack range, so some |
| dead objects can't be collected, but it guarantees live objects |
| aren't collected prematurely. |
| |
| (JSC::currentThreadStackBase): |
| On WinCE, returns g_stackBase if set or call getStackBase as a |
| fallback if not. |
| |
| 2009-06-23 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| Fix stupid performance problem in the LiteralParser |
| |
| The LiteralParser was making a new UString in order to use |
| toDouble, however UString's toDouble allows a much wider range |
| of numberic strings than the LiteralParser accepts, and requires |
| an additional heap allocation or two for the construciton of the |
| UString. To rectify this we just call WTF::dtoa directly using |
| a stack allocated buffer to hold the validated numeric literal. |
| |
| * runtime/LiteralParser.cpp: |
| (JSC::LiteralParser::Lexer::lexNumber): |
| (JSC::LiteralParser::parse): |
| * runtime/LiteralParser.h: |
| |
| 2009-06-22 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| Bug 26640: JSON.stringify needs to special case Boolean objects |
| <https://bugs.webkit.org/show_bug.cgi?id=26640> |
| |
| Add special case handling of the Boolean object so we match current |
| ES5 errata. |
| |
| * runtime/JSONObject.cpp: |
| (JSC::unwrapBoxedPrimitive): renamed from unwrapNumberOrString |
| (JSC::gap): |
| (JSC::Stringifier::appendStringifiedValue): |
| |
| 2009-06-22 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| Bug 26591: Support revivers in JSON.parse |
| <https://bugs.webkit.org/show_bug.cgi?id=26591> |
| |
| Add reviver support to JSON.parse. This completes the JSON object. |
| |
| * runtime/JSONObject.cpp: |
| (JSC::Walker::Walker): |
| (JSC::Walker::callReviver): |
| (JSC::Walker::walk): |
| (JSC::JSONProtoFuncParse): |
| |
| 2009-06-21 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| Bug 26592: Support standard toJSON functions |
| <https://bugs.webkit.org/show_bug.cgi?id=26592> |
| |
| Add support for the standard Date.toJSON function. |
| |
| * runtime/DatePrototype.cpp: |
| (JSC::dateProtoFuncToJSON): |
| |
| 2009-06-21 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Bug 26594: JSC needs to support Date.toISOString |
| <https://bugs.webkit.org/show_bug.cgi?id=26594> |
| |
| Add support for Date.toISOString. |
| |
| * runtime/DatePrototype.cpp: |
| (JSC::dateProtoFuncToISOString): |
| |
| 2009-06-21 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by NOBODY (Build fix). |
| |
| Remove dead code. |
| |
| * runtime/LiteralParser.cpp: |
| (JSC::LiteralParser::parse): |
| |
| 2009-06-21 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Darin Adler and Cameron Zwarich. |
| |
| Bug 26587: Support JSON.parse |
| <https://bugs.webkit.org/show_bug.cgi?id=26587> |
| |
| Extend the LiteralParser to support the full strict JSON |
| grammar, fix a few places where the grammar was incorrectly |
| lenient. Doesn't yet support the JSON.parse reviver function |
| but that does not block the JSON.parse functionality itself. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::callEval): |
| * runtime/JSGlobalObjectFunctions.cpp: |
| (JSC::globalFuncEval): |
| * runtime/JSONObject.cpp: |
| (JSC::JSONProtoFuncParse): |
| * runtime/LiteralParser.cpp: |
| (JSC::LiteralParser::Lexer::lex): |
| (JSC::isSafeStringCharacter): |
| (JSC::LiteralParser::Lexer::lexString): |
| (JSC::LiteralParser::parse): |
| * runtime/LiteralParser.h: |
| (JSC::LiteralParser::LiteralParser): |
| (JSC::LiteralParser::tryJSONParse): |
| (JSC::LiteralParser::): |
| (JSC::LiteralParser::Lexer::Lexer): |
| |
| 2009-06-21 David Levin <levin@chromium.org> |
| |
| Reviewed by NOBODY (speculative build fix for windows). |
| |
| Simply removed some whitespace form this file to make windows build wtf and |
| hopefully copy the new MessageQueque.h so that WebCore picks it up. |
| |
| * wtf/Assertions.cpp: |
| |
| 2009-06-21 Drew Wilson <atwilson@google.com> |
| |
| Reviewed by David Levin. |
| |
| <https://bugs.webkit.org/show_bug.cgi?id=25043> |
| Added support for multi-threaded MessagePorts. |
| |
| * wtf/MessageQueue.h: |
| (WTF::::appendAndCheckEmpty): |
| Added API to test whether the queue was empty before adding an element. |
| |
| 2009-06-20 David D. Kilzer <ddkilzer@webkit.org> |
| |
| Fix namespace comment in SegmentedVector.h |
| |
| * wtf/SegmentedVector.h: Updated namespace comment to reflect |
| new namespace after r44897. |
| |
| 2009-06-20 Zoltan Herczeg <zherczeg@inf.u-szeged.hu> |
| |
| Bug 24986: ARM JIT port |
| <https://bugs.webkit.org/show_bug.cgi?id=24986> |
| |
| Reviewed by Oliver Hunt. |
| |
| An Iterator added for SegmentedVector. Currently |
| only the pre ++ operator is supported. |
| |
| * wtf/SegmentedVector.h: |
| (WTF::SegmentedVectorIterator::~SegmentedVectorIterator): |
| (WTF::SegmentedVectorIterator::operator*): |
| (WTF::SegmentedVectorIterator::operator->): |
| (WTF::SegmentedVectorIterator::operator++): |
| (WTF::SegmentedVectorIterator::operator==): |
| (WTF::SegmentedVectorIterator::operator!=): |
| (WTF::SegmentedVectorIterator::operator=): |
| (WTF::SegmentedVectorIterator::SegmentedVectorIterator): |
| (WTF::SegmentedVector::alloc): |
| (WTF::SegmentedVector::begin): |
| (WTF::SegmentedVector::end): |
| |
| 2009-06-20 Zoltan Herczeg <zherczeg@inf.u-szeged.hu> |
| |
| Bug 24986: ARM JIT port |
| <https://bugs.webkit.org/show_bug.cgi?id=24986> |
| |
| Reviewed by Oliver Hunt. |
| |
| Move SegmentedVector to /wtf subdirectory |
| and change "namespace JSC" to "namespace WTF" |
| |
| Additional build file updates by David Kilzer. |
| |
| * GNUmakefile.am: Updated path to SegmentedVector.h. |
| * JavaScriptCore.order: Updated SegmentedVector namespace from |
| JSC to WTF in mangled C++ method name. |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| Removed reference to bytecompiler\SegmentedVector.h. |
| * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added reference to |
| wtf\SegmentedVector.h. |
| * JavaScriptCore.xcodeproj/project.pbxproj: Moved |
| SegmentedVector.h definition from bytecompiler subdirectory to |
| wtf subdirectory. |
| * bytecompiler/BytecodeGenerator.h: Updated #include path to |
| SegmentedVector.h and prepended WTF:: namespace to its use. |
| * parser/Lexer.h: Ditto. |
| * wtf/SegmentedVector.h: Renamed from JavaScriptCore/bytecompiler/SegmentedVector.h. |
| (WTF::SegmentedVector::SegmentedVector): |
| (WTF::SegmentedVector::~SegmentedVector): |
| (WTF::SegmentedVector::size): |
| (WTF::SegmentedVector::at): |
| (WTF::SegmentedVector::operator[]): |
| (WTF::SegmentedVector::last): |
| (WTF::SegmentedVector::append): |
| (WTF::SegmentedVector::removeLast): |
| (WTF::SegmentedVector::grow): |
| (WTF::SegmentedVector::clear): |
| (WTF::SegmentedVector::deleteAllSegments): |
| (WTF::SegmentedVector::segmentExistsFor): |
| (WTF::SegmentedVector::segmentFor): |
| (WTF::SegmentedVector::subscriptFor): |
| (WTF::SegmentedVector::ensureSegmentsFor): |
| (WTF::SegmentedVector::ensureSegment): |
| |
| 2009-06-19 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by NOBODY (build fix take 2 - rename FIELD_OFFSET to something that doesn't conflict with winnt.h). |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompile): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| (JSC::JIT::emitGetVariableObjectRegister): |
| (JSC::JIT::emitPutVariableObjectRegister): |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_rshift): |
| (JSC::JIT::emitSlow_op_jnless): |
| (JSC::JIT::emitSlow_op_jnlesseq): |
| (JSC::JIT::compileBinaryArithOp): |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCallInitializeCallFrame): |
| (JSC::JIT::compileOpCall): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::restoreArgumentReference): |
| (JSC::JIT::checkStructure): |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_instanceof): |
| (JSC::JIT::emit_op_get_scoped_var): |
| (JSC::JIT::emit_op_put_scoped_var): |
| (JSC::JIT::emit_op_construct_verify): |
| (JSC::JIT::emit_op_resolve_global): |
| (JSC::JIT::emit_op_jeq_null): |
| (JSC::JIT::emit_op_jneq_null): |
| (JSC::JIT::emit_op_to_jsnumber): |
| (JSC::JIT::emit_op_catch): |
| (JSC::JIT::emit_op_eq_null): |
| (JSC::JIT::emit_op_neq_null): |
| (JSC::JIT::emit_op_convert_this): |
| (JSC::JIT::emit_op_profile_will_call): |
| (JSC::JIT::emit_op_profile_did_call): |
| (JSC::JIT::emitSlow_op_get_by_val): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::emit_op_get_by_val): |
| (JSC::JIT::emit_op_put_by_val): |
| (JSC::JIT::emit_op_method_check): |
| (JSC::JIT::compileGetByIdHotPath): |
| (JSC::JIT::emit_op_put_by_id): |
| (JSC::JIT::compilePutDirectOffset): |
| (JSC::JIT::compileGetDirectOffset): |
| (JSC::JIT::privateCompilePutByIdTransition): |
| (JSC::JIT::privateCompilePatchGetArrayLength): |
| * jit/JITStubs.cpp: |
| (JSC::JITThunks::JITThunks): |
| |
| 2009-06-19 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by NOBODY (Windows build fix). |
| |
| * jit/JIT.h: |
| * jit/JITInlineMethods.h: |
| |
| 2009-06-19 Gabor Loki <loki@inf.u-szeged.hu> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Reorganize ARM architecture specific macros. |
| Use PLATFORM_ARM_ARCH(7) instead of PLATFORM(ARM_V7). |
| |
| Bug 24986: ARM JIT port |
| <https://bugs.webkit.org/show_bug.cgi?id=24986> |
| |
| * assembler/ARMv7Assembler.h: |
| * assembler/AbstractMacroAssembler.h: |
| (JSC::AbstractMacroAssembler::Imm32::Imm32): |
| * assembler/MacroAssembler.h: |
| * assembler/MacroAssemblerCodeRef.h: |
| (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr): |
| * jit/ExecutableAllocator.h: |
| (JSC::ExecutableAllocator::cacheFlush): |
| * jit/JIT.h: |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::restoreArgumentReferenceForTrampoline): |
| * jit/JITStubs.cpp: |
| * jit/JITStubs.h: |
| * wtf/Platform.h: |
| * yarr/RegexJIT.cpp: |
| (JSC::Yarr::RegexGenerator::generateEnter): |
| (JSC::Yarr::RegexGenerator::generateReturn): |
| |
| 2009-06-19 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Fix armv7 JIT build issues. |
| |
| Unfortunate the arm compiler does not like the use of offsetof on JITStackFrame (since it now contains non POD types), |
| and the FIELD_OFFSET macro does not appear constantish enough for it to be happy with its use in COMPILE_ASSERT macros. |
| |
| * Replace offsetofs with FIELD_OFFSETs (safe on C++ objects). |
| * Move COMPILE_ASSERTs defending layout of JITStackFrame structure on armv7 into JITThunks constructor. |
| |
| * jit/JIT.cpp: |
| * jit/JIT.h: |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::restoreArgumentReference): |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_catch): |
| * jit/JITStubs.cpp: |
| (JSC::JITThunks::JITThunks): |
| |
| 2009-06-19 Adam Treat <adam.treat@torchmobile.com> |
| |
| Blind attempt at build fix. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: |
| |
| 2009-06-19 Zoltan Horvath <hzoltan@inf.u-szeged.hu> |
| |
| Reviewed by Oliver Hunt. |
| |
| Inherits CallIdentifier struct from FastAllocBase because it has been |
| instantiated by 'new' in JavaScriptCore/profiler/CallIdentifier.h:86. |
| |
| * wtf/HashCountedSet.h: |
| |
| 2009-06-19 Adam Treat <adam.treat@torchmobile.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=26540 |
| Modify the test shell to add a new function 'checkSyntax' that will |
| only parse the source instead of executing it. In this way we can test |
| pure parsing performance against some of the larger scripts in the wild. |
| |
| * jsc.cpp: |
| (GlobalObject::GlobalObject): |
| (functionCheckSyntax): |
| |
| 2009-06-19 Zoltan Horvath <hzoltan@inf.u-szeged.hu> |
| |
| Reviewed by Darin Adler. |
| |
| Inherits HashCountedSet class from FastAllocBase because it has been |
| instantiated by 'new' in JavaScriptCore/runtime/Collector.cpp:1095. |
| |
| * wtf/HashCountedSet.h: |
| |
| 2009-06-19 Yong Li <yong.li@torchmobile.com> |
| |
| Reviewed by George Staikos. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=26558 |
| Declare these symbols extern for WINCE as they are provided by libce. |
| |
| * runtime/DateConstructor.cpp: |
| * runtime/DatePrototype.cpp: |
| (JSC::formatLocaleDate): |
| |
| 2009-06-19 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Maciej Stachowiak. |
| |
| <rdar://problem/6988973> ScopeChain leak in interpreter builds |
| |
| Move the Scopechain destruction code in JSFunction outside of the ENABLE(JIT) |
| path. |
| |
| * runtime/JSFunction.cpp: |
| (JSC::JSFunction::~JSFunction): |
| * wtf/Platform.h: |
| |
| 2009-06-19 Yong Li <yong.li@torchmobile.com> |
| |
| Reviewed by George Staikos. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=26543 |
| Windows CE uses 'GetLastError' instead of 'errno.' |
| |
| * interpreter/RegisterFile.h: |
| (JSC::RegisterFile::RegisterFile): |
| (JSC::RegisterFile::grow): |
| |
| 2009-06-19 David Levin <levin@chromium.org> |
| |
| Reviewed by NOBODY (Windows build fix). |
| |
| Add export for Windows corresponding to OSX export done in r44844. |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: |
| |
| 2009-06-18 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin "Viceroy of Venezuela" Barraclough. |
| |
| Bug 26532: Native functions do not correctly unlink from optimised callsites when they're collected |
| <https://bugs.webkit.org/show_bug.cgi?id=26532> <rdar://problem/6625385> |
| |
| We need to make sure that each native function instance correctly unlinks any references to it |
| when it is collected. Allowing this to happen required a few changes: |
| * Every native function needs a codeblock to track the link information |
| * To have this codeblock, every function now also needs its own functionbodynode |
| so we no longer get to have a single shared instance. |
| * Identifying a host function is now done by looking for CodeBlock::codeType() == NativeCode |
| |
| * JavaScriptCore.exp: |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::CodeBlock): |
| Constructor for NativeCode CodeBlock |
| (JSC::CodeBlock::derefStructures): |
| (JSC::CodeBlock::refStructures): |
| (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): |
| (JSC::CodeBlock::handlerForBytecodeOffset): |
| (JSC::CodeBlock::lineNumberForBytecodeOffset): |
| (JSC::CodeBlock::expressionRangeForBytecodeOffset): |
| (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): |
| (JSC::CodeBlock::functionRegisterForBytecodeOffset): |
| (JSC::CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset): |
| (JSC::CodeBlock::hasGlobalResolveInfoAtBytecodeOffset): |
| (JSC::CodeBlock::setJITCode): |
| Add assertions to ensure we don't try and use NativeCode CodeBlocks as |
| a normal codeblock. |
| |
| * bytecode/CodeBlock.h: |
| (JSC::): |
| (JSC::CodeBlock::source): |
| (JSC::CodeBlock::sourceOffset): |
| (JSC::CodeBlock::evalCodeCache): |
| (JSC::CodeBlock::createRareDataIfNecessary): |
| More assertions. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| (JSC::JIT::linkCall): |
| Update logic to allow native function caching |
| |
| * jit/JITStubs.cpp: |
| * parser/Nodes.cpp: |
| (JSC::FunctionBodyNode::createNativeThunk): |
| (JSC::FunctionBodyNode::isHostFunction): |
| * parser/Nodes.h: |
| * runtime/JSFunction.cpp: |
| (JSC::JSFunction::JSFunction): |
| (JSC::JSFunction::~JSFunction): |
| (JSC::JSFunction::mark): |
| * runtime/JSGlobalData.cpp: |
| (JSC::JSGlobalData::~JSGlobalData): |
| * runtime/JSGlobalData.h: |
| |
| 2009-06-18 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by NOBODY (Windows build fix). |
| |
| * wtf/DateMath.cpp: |
| (WTF::calculateUTCOffset): |
| |
| 2009-06-18 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Timezone calculation incorrect in Venezuela. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=26531 |
| <rdar://problem/6646169> Time is incorrectly reported to JavaScript in both Safari 3 and Firefox 3 |
| |
| The problem is that we're calculating the timezone relative to 01/01/2000, |
| but the VET timezone changed from -4 hours to -4:30 hours on 12/09/2007. |
| According to the spec, section 15.9.1.9 states "the time since the beginning |
| of the year", presumably meaning the *current* year. Change the calculation |
| to be based on whatever the current year is, rather than a canned date. |
| |
| No performance impact. |
| |
| * wtf/DateMath.cpp: |
| (WTF::calculateUTCOffset): |
| |
| 2009-06-18 Gavin Barraclough <barraclough@apple.com> |
| |
| Rubber Stamped by Mark Rowe (originally reviewed by Sam Weinig). |
| |
| (Reintroducing patch added in r44492, and reverted in r44796.) |
| |
| Change the implementation of op_throw so the stub function always modifies its |
| return address - if it doesn't find a 'catch' it will switch to a trampoline |
| to force a return from JIT execution. This saves memory, by avoiding the need |
| for a unique return for every op_throw. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_throw): |
| JITStubs::cti_op_throw now always changes its return address, |
| remove return code generated after the stub call (this is now |
| handled by ctiOpThrowNotCaught). |
| * jit/JITStubs.cpp: |
| (JSC::): |
| Add ctiOpThrowNotCaught definitions. |
| (JSC::JITStubs::DEFINE_STUB_FUNCTION): |
| Change cti_op_throw to always change its return address. |
| * jit/JITStubs.h: |
| Add ctiOpThrowNotCaught declaration. |
| |
| 2009-06-18 Kevin McCullough <kmccullough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| <rdar://problem/6940880> REGRESSION: Breakpoints don't break in 64-bit |
| |
| - Exposed functions now needed by WebCore. |
| |
| * JavaScriptCore.exp: |
| |
| 2009-06-17 Darin Adler <darin@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Bug 26429: Make JSON.stringify non-recursive so it can handle objects |
| of arbitrary complexity |
| https://bugs.webkit.org/show_bug.cgi?id=26429 |
| |
| For marking I decided not to use gcProtect, because this is inside the engine |
| so it's easy enough to just do marking. And that darned gcProtect does locking! |
| Oliver tried to convince me to used MarkedArgumentBuffer, but the constructor |
| for that class says "FIXME: Remove all clients of this API, then remove this API." |
| |
| * runtime/Collector.cpp: |
| (JSC::Heap::collect): Add a call to JSONObject::markStringifiers. |
| |
| * runtime/CommonIdentifiers.cpp: |
| (JSC::CommonIdentifiers::CommonIdentifiers): Added emptyIdentifier. |
| * runtime/CommonIdentifiers.h: Ditto. |
| |
| * runtime/JSGlobalData.cpp: |
| (JSC::JSGlobalData::JSGlobalData): Initialize firstStringifierToMark to 0. |
| * runtime/JSGlobalData.h: Added firstStringifierToMark. |
| |
| * runtime/JSONObject.cpp: Cut down the includes to the needed ones only. |
| (JSC::unwrapNumberOrString): Added. Helper for unwrapping number and string |
| objects to get their number and string values. |
| (JSC::ReplacerPropertyName::ReplacerPropertyName): Added. The class is used |
| to wrap an identifier or integer so we don't have to do any work unless we |
| actually call a replacer. |
| (JSC::ReplacerPropertyName::value): Added. |
| (JSC::gap): Added. Helper function for the Stringifier constructor. |
| (JSC::PropertyNameForFunctionCall::PropertyNameForFunctionCall): Added. |
| The class is used to wrap an identifier or integer so we don't have to |
| allocate a number or string until we actually call toJSON or a replacer. |
| (JSC::PropertyNameForFunctionCall::asJSValue): Added. |
| (JSC::Stringifier::Stringifier): Updated and moved out of the class |
| definition. Added code to hook this into a singly linked list for marking. |
| (JSC::Stringifier::~Stringifier): Remove from the singly linked list. |
| (JSC::Stringifier::mark): Mark all the objects in the holder stacks. |
| (JSC::Stringifier::stringify): Updated. |
| (JSC::Stringifier::appendQuotedString): Tweaked and streamlined a bit. |
| (JSC::Stringifier::toJSON): Renamed from toJSONValue. |
| (JSC::Stringifier::appendStringifiedValue): Renamed from stringify. |
| Added code to use the m_holderStack to do non-recursive stringify of |
| objects and arrays. This code also uses the timeout checker since in |
| pathological cases it could be slow even without calling into the |
| JavaScript virtual machine. |
| (JSC::Stringifier::willIndent): Added. |
| (JSC::Stringifier::indent): Added. |
| (JSC::Stringifier::unindent): Added. |
| (JSC::Stringifier::startNewLine): Added. |
| (JSC::Stringifier::Holder::Holder): Added. |
| (JSC::Stringifier::Holder::appendNextProperty): Added. This is the |
| function that handles the format of arrays and objects. |
| (JSC::JSONObject::getOwnPropertySlot): Moved this down to the bottom |
| of the file so the JSONObject class is not interleaved with the |
| Stringifier class. |
| (JSC::JSONObject::markStringifiers): Added. Calls mark. |
| (JSC::JSONProtoFuncStringify): Streamlined the code here. The code |
| to compute the gap string is now a separate function. |
| |
| * runtime/JSONObject.h: Made everything private. Added markStringifiers. |
| |
| 2009-06-17 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| <rdar://problem/6974140> REGRESSION(r43849): Crash in cti_op_call_NotJSFunction when getting directions on maps.google.com |
| |
| Roll out r43849 as it appears that we cannot rely on the address of |
| an objects property storage being constant even if the structure is |
| unchanged. |
| |
| * jit/JIT.h: |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::compileGetDirectOffset): |
| (JSC::JIT::privateCompileGetByIdProto): |
| (JSC::JIT::privateCompileGetByIdProtoList): |
| (JSC::JIT::privateCompileGetByIdChainList): |
| (JSC::JIT::privateCompileGetByIdChain): |
| |
| 2009-06-17 Gavin Barraclough <barraclough@apple.com> |
| |
| Rubber Stamped by Mark Rowe. |
| |
| Fully revert r44492 & r44748 while we fix a bug they cause on internal builds <rdar://problem/6955963>. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_throw): |
| * jit/JITStubs.cpp: |
| (JSC::): |
| (JSC::JITStubs::DEFINE_STUB_FUNCTION): |
| * jit/JITStubs.h: |
| |
| 2009-06-17 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Mark Rowe. |
| |
| <rdar://problem/6947426> sunspider math-cordic.js exhibits different intermediate results running 32-bit vs. 64-bit |
| |
| On 64-bit, NaN-encoded values must be detagged before they can be used in rshift. |
| |
| No performance impact. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::emit_op_rshift): |
| |
| 2009-06-17 Adam Treat <adam.treat@torchmobile.com> |
| |
| Reviewed by George Staikos. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23155 |
| Move WIN_CE -> WINCE as previously discussed with Qt WINCE folks. |
| |
| * jsc.cpp: |
| (main): |
| |
| 2009-06-17 George Staikos <george.staikos@torchmobile.com> |
| |
| Reviewed by Adam Treat. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23155 |
| Move WIN_CE -> WINCE as previously discussed with Qt WINCE folks. |
| |
| * config.h: |
| * jsc.cpp: |
| * wtf/Assertions.cpp: |
| * wtf/Assertions.h: |
| * wtf/CurrentTime.cpp: |
| (WTF::lowResUTCTime): |
| * wtf/DateMath.cpp: |
| (WTF::getLocalTime): |
| * wtf/MathExtras.h: |
| * wtf/Platform.h: |
| * wtf/StringExtras.h: |
| * wtf/Threading.h: |
| * wtf/win/MainThreadWin.cpp: |
| |
| 2009-06-17 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| <rdar://problem/6974175> ASSERT in JITStubs.cpp at appsaccess.apple.com |
| |
| Remove PropertySlot::putValue - PropertySlots should only be used for getting, |
| not putting. Rename JSGlobalObject::getOwnPropertySlot to hasOwnPropertyForWrite, |
| which is what it really was being used to ask, and remove some other getOwnPropertySlot |
| & getOwnPropertySlotForWrite methods, which were unused and likely to lead to confusion. |
| |
| * runtime/JSGlobalObject.h: |
| (JSC::JSGlobalObject::hasOwnPropertyForWrite): |
| * runtime/JSObject.h: |
| * runtime/JSStaticScopeObject.cpp: |
| * runtime/JSStaticScopeObject.h: |
| * runtime/PropertySlot.h: |
| |
| 2009-06-16 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver hunt. |
| |
| Temporarily partially disable r44492, since this is causing some problems on internal builds. |
| |
| * jit/JITOpcodes.cpp: |
| (JSC::JIT::emit_op_throw): |
| * jit/JITStubs.cpp: |
| (JSC::JITStubs::DEFINE_STUB_FUNCTION): |
| |
| 2009-06-16 Sam Weinig <sam@webkit.org> |
| |
| Fix windows build. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::JIT): |
| |
| 2009-06-16 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Oliver Hunt. |
| |
| Initialize m_bytecodeIndex to -1 in JIT, and correctly initialize |
| it for each type of stub using the return address to find the correct |
| offset. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::JIT): |
| * jit/JIT.h: |
| (JSC::JIT::compileGetByIdProto): |
| (JSC::JIT::compileGetByIdSelfList): |
| (JSC::JIT::compileGetByIdProtoList): |
| (JSC::JIT::compileGetByIdChainList): |
| (JSC::JIT::compileGetByIdChain): |
| (JSC::JIT::compilePutByIdTransition): |
| (JSC::JIT::compileCTIMachineTrampolines): |
| (JSC::JIT::compilePatchGetArrayLength): |
| * jit/JITStubCall.h: |
| (JSC::JITStubCall::call): |
| |
| == Rolled over to ChangeLog-2009-06-16 == |