Changeset 34265 in webkit for trunk/JavaScriptCore/VM/Machine.cpp


Ignore:
Timestamp:
May 30, 2008, 1:10:38 PM (17 years ago)
Author:
[email protected]
Message:

Reviewed by Darin.

https://bugs.webkit.org/show_bug.cgi?id=19180
speed up SunSpider by optimizing immediate number cases

Also fixed a JavaScriptCore regression seen on PowerPC - we didn't clip left shift
parameter to 0...31.

0.5% improvement on SunSpider overall, although a 8.5 regression on bitops-3bit-bits-in-byte.

  • VM/Machine.cpp: (KJS::Machine::privateExecute): Added fast paths for >>> and <<.
  • kjs/JSImmediate.h: (KJS::JSImmediate::toTruncatedUInt32): Added. Same as getTruncatedInt32, but casts the result to unsigned.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/VM/Machine.cpp

    r34258 r34265  
    13191319        JSValue* val = r[(++vPC)->u.operand].u.jsValue;
    13201320        JSValue* shift = r[(++vPC)->u.operand].u.jsValue;
    1321         JSValue* result = jsNumber((val->toInt32(exec)) << (shift->toUInt32(exec)));
    1322         VM_CHECK_EXCEPTION();
     1321        JSValue* result;
     1322        if (JSImmediate::areBothImmediateNumbers(val, shift))
     1323            result = jsNumber(JSImmediate::getTruncatedInt32(val) << (JSImmediate::toTruncatedUInt32(shift) & 0x1f));
     1324        else {
     1325            result = jsNumber((val->toInt32(exec)) << (shift->toUInt32(exec) & 0x1f));
     1326            VM_CHECK_EXCEPTION();
     1327        }
    13231328        dst = result;
    13241329       
     
    13591364        JSValue* shift = r[(++vPC)->u.operand].u.jsValue;
    13601365        JSValue* result;
    1361         result = jsNumber((val->toUInt32(exec)) >> (shift->toUInt32(exec) & 0x1f));
    1362         VM_CHECK_EXCEPTION();
     1366        if (JSImmediate::areBothImmediateNumbers(val, shift) && !JSImmediate::isNegative(val))
     1367            result = JSImmediate::rightShiftImmediateNumbers(val, shift);
     1368        else {
     1369            result = jsNumber((val->toUInt32(exec)) >> (shift->toUInt32(exec) & 0x1f));
     1370            VM_CHECK_EXCEPTION();
     1371        }
    13631372        dst = result;
    13641373       
Note: See TracChangeset for help on using the changeset viewer.