Changeset 34030 in webkit for trunk/JavaScriptCore
- Timestamp:
- May 22, 2008, 12:36:52 PM (17 years ago)
- Location:
- trunk/JavaScriptCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/ChangeLog
r34028 r34030 1 2008-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 1 19 2008-05-22 David Kilzer <[email protected]> 2 20 -
trunk/JavaScriptCore/kjs/nodes.cpp
r34022 r34030 1743 1743 } 1744 1744 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 1745 1754 RefPtr<RegisterID> value = generator.newTemporary(); 1746 1755 RefPtr<RegisterID> base = generator.emitResolveWithBase(generator.newTemporary(), value.get(), m_ident); … … 1825 1834 1826 1835 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; 1827 1845 } 1828 1846 … … 2350 2368 return generator.moveToDestinationIfNeeded(dst, local); 2351 2369 } 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 2353 2380 RefPtr<RegisterID> propDst = generator.tempDestination(dst); 2354 2381 RefPtr<RegisterID> base = generator.emitResolveWithBase(generator.newTemporary(), propDst.get(), m_ident); … … 2420 2447 generator.emitPreDec(local); 2421 2448 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());; 2422 2458 } 2423 2459 … … 4184 4220 } 4185 4221 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 4186 4232 RefPtr<RegisterID> src1 = generator.tempDestination(dst); 4187 4233 RefPtr<RegisterID> base = generator.emitResolveWithBase(generator.newTemporary(), src1.get(), m_ident);
Note:
See TracChangeset
for help on using the changeset viewer.