Changeset 34030 in webkit for trunk/JavaScriptCore


Ignore:
Timestamp:
May 22, 2008, 12:36:52 PM (17 years ago)
Author:
[email protected]
Message:

Bug 19116: SquirrelFish shouldn't regress on variable lookups
<https://bugs.webkit.org/show_bug.cgi?id=19116>

Reviewed by Darin.

Last of the multiscope look up optimisations. This is a wash overall on SunSpider
but is a factor of 5-10 improvement in multiscope read/write/modify (eg. ++, --, +=,
... applied to any non-local var).

Location:
trunk/JavaScriptCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r34028 r34030  
     12008-05-22  Oliver Hunt  <[email protected]>
     2
     3        Reviewed by Darin.
     4
     5        Bug 19116: SquirrelFish shouldn't regress on variable lookups
     6        <https://bugs.webkit.org/show_bug.cgi?id=19116>
     7
     8        Last of the multiscope look up optimisations.  This is a wash overall on SunSpider
     9        but is a factor of 5-10 improvement in multiscope read/write/modify (eg. ++, --, +=,
     10        ... applied to any non-local var).
     11
     12        * kjs/nodes.cpp:
     13        (KJS::PostIncResolveNode::emitCode):
     14        (KJS::PostDecResolveNode::emitCode):
     15        (KJS::PreIncResolveNode::emitCode):
     16        (KJS::PreDecResolveNode::emitCode):
     17        (KJS::ReadModifyResolveNode::emitCode):
     18
    1192008-05-22  David Kilzer  <[email protected]>
    220
  • trunk/JavaScriptCore/kjs/nodes.cpp

    r34022 r34030  
    17431743    }
    17441744
     1745    int index = 0;
     1746    size_t depth = 0;
     1747    if (generator.findScopedProperty(m_ident, index, depth) && index != missingSymbolMarker()) {
     1748        RefPtr<RegisterID> value = generator.emitGetScopedVar(generator.newTemporary(), depth, index);
     1749        RegisterID* oldValue = generator.emitPostInc(generator.finalDestination(dst), value.get());
     1750        generator.emitPutScopedVar(depth, index, value.get());
     1751        return oldValue;
     1752    }
     1753
    17451754    RefPtr<RegisterID> value = generator.newTemporary();
    17461755    RefPtr<RegisterID> base = generator.emitResolveWithBase(generator.newTemporary(), value.get(), m_ident);
     
    18251834       
    18261835        return generator.emitPostDec(generator.finalDestination(dst), local);
     1836    }
     1837
     1838    int index = 0;
     1839    size_t depth = 0;
     1840    if (generator.findScopedProperty(m_ident, index, depth) && index != missingSymbolMarker()) {
     1841        RefPtr<RegisterID> value = generator.emitGetScopedVar(generator.newTemporary(), depth, index);
     1842        RegisterID* oldValue = generator.emitPostDec(generator.finalDestination(dst), value.get());
     1843        generator.emitPutScopedVar(depth, index, value.get());
     1844        return oldValue;
    18271845    }
    18281846
     
    23502368        return generator.moveToDestinationIfNeeded(dst, local);
    23512369    }
    2352    
     2370
     2371    int index = 0;
     2372    size_t depth = 0;
     2373    if (generator.findScopedProperty(m_ident, index, depth) && index != missingSymbolMarker()) {
     2374        RefPtr<RegisterID> propDst = generator.emitGetScopedVar(generator.tempDestination(dst), depth, index);
     2375        generator.emitPreInc(propDst.get());
     2376        generator.emitPutScopedVar(depth, index, propDst.get());
     2377        return generator.moveToDestinationIfNeeded(dst, propDst.get());;
     2378    }
     2379
    23532380    RefPtr<RegisterID> propDst = generator.tempDestination(dst);
    23542381    RefPtr<RegisterID> base = generator.emitResolveWithBase(generator.newTemporary(), propDst.get(), m_ident);
     
    24202447        generator.emitPreDec(local);
    24212448        return generator.moveToDestinationIfNeeded(dst, local);
     2449    }
     2450
     2451    int index = 0;
     2452    size_t depth = 0;
     2453    if (generator.findScopedProperty(m_ident, index, depth) && index != missingSymbolMarker()) {
     2454        RefPtr<RegisterID> propDst = generator.emitGetScopedVar(generator.tempDestination(dst), depth, index);
     2455        generator.emitPreDec(propDst.get());
     2456        generator.emitPutScopedVar(depth, index, propDst.get());
     2457        return generator.moveToDestinationIfNeeded(dst, propDst.get());;
    24222458    }
    24232459
     
    41844220    }
    41854221
     4222    int index = 0;
     4223    size_t depth = 0;
     4224    if (generator.findScopedProperty(m_ident, index, depth) && index != missingSymbolMarker()) {
     4225        RefPtr<RegisterID> src1 = generator.emitGetScopedVar(generator.tempDestination(dst), depth, index);
     4226        RegisterID* src2 = generator.emitNode(m_right.get());
     4227        RegisterID* result = emitReadModifyAssignment(generator, generator.finalDestination(dst, src1.get()), src1.get(), src2, m_operator);
     4228        generator.emitPutScopedVar(depth, index, result);
     4229        return result;
     4230    }
     4231
    41864232    RefPtr<RegisterID> src1 = generator.tempDestination(dst);
    41874233    RefPtr<RegisterID> base = generator.emitResolveWithBase(generator.newTemporary(), src1.get(), m_ident);
Note: See TracChangeset for help on using the changeset viewer.