Changeset 36317 in webkit for trunk/JavaScriptCore/kjs/nodes.cpp


Ignore:
Timestamp:
Sep 10, 2008, 2:23:35 AM (17 years ago)
Author:
[email protected]
Message:

Add optimised access to known properties on the global object.

Reviewed by Maciej Stachowiak

Improve cross scope access to the global object by emitting
code to access it directly rather than by walking the scope chain.

This is a 0.8% win in SunSpider and a 1.7% win in the v8 benchmarks.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/nodes.cpp

    r36270 r36317  
    433433    int index = 0;
    434434    size_t depth = 0;
    435     if (generator.findScopedProperty(m_ident, index, depth, false) && index != missingSymbolMarker()) {
    436         RegisterID* func = generator.emitGetScopedVar(generator.newTemporary(), depth, index);
     435    JSValue* globalObject = 0;
     436    if (generator.findScopedProperty(m_ident, index, depth, false, globalObject) && index != missingSymbolMarker()) {
     437        RegisterID* func = generator.emitGetScopedVar(generator.newTemporary(), depth, index, globalObject);
    437438        return generator.emitCall(generator.finalDestination(dst), func, 0, m_args.get(), m_divot, m_startOffset, m_endOffset);
    438439    }
     
    491492    int index = 0;
    492493    size_t depth = 0;
    493     if (generator.findScopedProperty(m_ident, index, depth, true) && index != missingSymbolMarker()) {
    494         RefPtr<RegisterID> value = generator.emitGetScopedVar(generator.newTemporary(), depth, index);
     494    JSValue* globalObject = 0;
     495    if (generator.findScopedProperty(m_ident, index, depth, true, globalObject) && index != missingSymbolMarker()) {
     496        RefPtr<RegisterID> value = generator.emitGetScopedVar(generator.newTemporary(), depth, index, globalObject);
    495497        RegisterID* oldValue;
    496498        if (dst == ignoredResult()) {
     
    500502            oldValue = emitPostIncOrDec(generator, generator.finalDestination(dst), value.get(), m_operator);
    501503        }
    502         generator.emitPutScopedVar(depth, index, value.get());
     504        generator.emitPutScopedVar(depth, index, value.get(), globalObject);
    503505        return oldValue;
    504506    }
     
    674676    int index = 0;
    675677    size_t depth = 0;
    676     if (generator.findScopedProperty(m_ident, index, depth, false) && index != missingSymbolMarker()) {
    677         RefPtr<RegisterID> propDst = generator.emitGetScopedVar(generator.tempDestination(dst), depth, index);
     678    JSValue* globalObject = 0;
     679    if (generator.findScopedProperty(m_ident, index, depth, false, globalObject) && index != missingSymbolMarker()) {
     680        RefPtr<RegisterID> propDst = generator.emitGetScopedVar(generator.tempDestination(dst), depth, index, globalObject);
    678681        emitPreIncOrDec(generator, propDst.get(), m_operator);
    679         generator.emitPutScopedVar(depth, index, propDst.get());
     682        generator.emitPutScopedVar(depth, index, propDst.get(), globalObject);
    680683        return generator.moveToDestinationIfNeeded(dst, propDst.get());;
    681684    }
     
    885888    int index = 0;
    886889    size_t depth = 0;
    887     if (generator.findScopedProperty(m_ident, index, depth, true) && index != missingSymbolMarker()) {
    888         RefPtr<RegisterID> src1 = generator.emitGetScopedVar(generator.tempDestination(dst), depth, index);
     890    JSValue* globalObject = 0;
     891    if (generator.findScopedProperty(m_ident, index, depth, true, globalObject) && index != missingSymbolMarker()) {
     892        RefPtr<RegisterID> src1 = generator.emitGetScopedVar(generator.tempDestination(dst), depth, index, globalObject);
    889893        RegisterID* src2 = generator.emitNode(m_right.get());
    890894        RegisterID* result = emitReadModifyAssignment(generator, generator.finalDestination(dst, src1.get()), src1.get(), src2, m_operator);
    891         generator.emitPutScopedVar(depth, index, result);
     895        generator.emitPutScopedVar(depth, index, result, globalObject);
    892896        return result;
    893897    }
     
    916920    int index = 0;
    917921    size_t depth = 0;
    918     if (generator.findScopedProperty(m_ident, index, depth, true) && index != missingSymbolMarker()) {
     922    JSValue* globalObject = 0;
     923    if (generator.findScopedProperty(m_ident, index, depth, true, globalObject) && index != missingSymbolMarker()) {
    919924        if (dst == ignoredResult())
    920925            dst = 0;
    921926        RegisterID* value = generator.emitNode(dst, m_right.get());
    922         generator.emitPutScopedVar(depth, index, value);
     927        generator.emitPutScopedVar(depth, index, value, globalObject);
    923928        return value;
    924929    }
Note: See TracChangeset for help on using the changeset viewer.