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


Ignore:
Timestamp:
May 27, 2008, 7:43:36 AM (17 years ago)
Author:
Darin Adler
Message:

2008-05-27 Darin Adler <Darin Adler>

Reviewed by Tim Hatcher.

Add immediate number cases for the &, |, and operators.
Makes standalone SunSpider 1.010x faster.

  • VM/Machine.cpp: (KJS::Machine::privateExecute): Add areBothImmediateNumbers special cases for the &, |, and operators.
  • kjs/JSImmediate.h: (KJS::JSImmediate::xorImmediateNumbers): Added. (KJS::JSImmediate::orImmediateNumbers): Added.
File:
1 edited

Legend:

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

    r34135 r34149  
    13091309        int src1 = (++vPC)->u.operand;
    13101310        int src2 = (++vPC)->u.operand;
    1311         JSValue* result = jsNumber((r[src1].u.jsValue->toInt32(exec)) & (r[src2].u.jsValue->toInt32(exec)));
    1312         VM_CHECK_EXCEPTION();
     1311        JSValue* v1 = r[src1].u.jsValue;
     1312        JSValue* v2 = r[src2].u.jsValue;
     1313        JSValue* result;
     1314        if (JSImmediate::areBothImmediateNumbers(v1, v2))
     1315            result = JSImmediate::andImmediateNumbers(v1, v2);
     1316        else {
     1317            result = jsNumber(v1->toInt32(exec) & v2->toInt32(exec));
     1318            VM_CHECK_EXCEPTION();
     1319        }
    13131320        r[dst].u.jsValue = result;
    13141321       
     
    13261333        int src1 = (++vPC)->u.operand;
    13271334        int src2 = (++vPC)->u.operand;
    1328         JSValue* result = jsNumber((r[src1].u.jsValue->toInt32(exec)) ^ (r[src2].u.jsValue->toInt32(exec)));
    1329         VM_CHECK_EXCEPTION();
     1335        JSValue* v1 = r[src1].u.jsValue;
     1336        JSValue* v2 = r[src2].u.jsValue;
     1337        JSValue* result;
     1338        if (JSImmediate::areBothImmediateNumbers(v1, v2))
     1339            result = JSImmediate::xorImmediateNumbers(v1, v2);
     1340        else {
     1341            result = jsNumber(v1->toInt32(exec) ^ v2->toInt32(exec));
     1342            VM_CHECK_EXCEPTION();
     1343        }
    13301344        r[dst].u.jsValue = result;
    13311345       
     
    13431357        int src1 = (++vPC)->u.operand;
    13441358        int src2 = (++vPC)->u.operand;
    1345         JSValue* result = jsNumber((r[src1].u.jsValue->toInt32(exec)) | (r[src2].u.jsValue->toInt32(exec)));
    1346         VM_CHECK_EXCEPTION();
     1359        JSValue* v1 = r[src1].u.jsValue;
     1360        JSValue* v2 = r[src2].u.jsValue;
     1361        JSValue* result;
     1362        if (JSImmediate::areBothImmediateNumbers(v1, v2))
     1363            result = JSImmediate::orImmediateNumbers(v1, v2);
     1364        else {
     1365            result = jsNumber(v1->toInt32(exec) | v2->toInt32(exec));
     1366            VM_CHECK_EXCEPTION();
     1367        }
    13471368        r[dst].u.jsValue = result;
    13481369       
Note: See TracChangeset for help on using the changeset viewer.