Ignore:
Timestamp:
Jun 2, 2009, 2:34:28 AM (16 years ago)
Author:
[email protected]
Message:

2009-06-02 Gavin Barraclough <[email protected]>

Reviewed by Oliver ">>" Hunt.

emitSlow_op_rshift is linking the wrong number of slow cases, if !supportsFloatingPoint().
Fixerate, and refactor/comment the code a little to make it clearer what is going on.

  • jit/JITArithmetic.cpp: (JSC::JIT::emit_op_rshift): (JSC::JIT::emitSlow_op_rshift):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/jit/JITArithmetic.cpp

    r43781 r44356  
    106106
    107107    if (isOperandConstantImmediateInt(op2)) {
     108        // isOperandConstantImmediateInt(op2) => 1 SlowCase
    108109        emitGetVirtualRegister(op1, regT0);
    109110        emitJumpSlowCaseIfNotImmediateInteger(regT0);
     
    119120            Jump lhsIsInt = emitJumpIfImmediateInteger(regT0);
    120121#if USE(ALTERNATE_JSIMMEDIATE)
     122            // supportsFloatingPoint() && USE(ALTERNATE_JSIMMEDIATE) => 3 SlowCases
    121123            addSlowCase(emitJumpIfNotImmediateNumber(regT0));
    122124            movePtrToDouble(regT0, fpRegT0);
    123 #else
     125            addSlowCase(branchTruncateDoubleToInt32(fpRegT0, regT0));
     126#else
     127            // supportsFloatingPoint() && !USE(ALTERNATE_JSIMMEDIATE) => 5 SlowCases (of which 1 IfNotJSCell)
    124128            emitJumpSlowCaseIfNotJSCell(regT0, op1);
    125129            addSlowCase(checkStructure(regT0, m_globalData->numberStructure.get()));
    126130            loadDouble(Address(regT0, FIELD_OFFSET(JSNumberCell, m_value)), fpRegT0);
    127 #endif
    128131            addSlowCase(branchTruncateDoubleToInt32(fpRegT0, regT0));
    129 #if !USE(ALTERNATE_JSIMMEDIATE)
    130132            addSlowCase(branchAdd32(Overflow, regT0, regT0));
    131133#endif
    132134            lhsIsInt.link(this);
    133         } else
     135            emitJumpSlowCaseIfNotImmediateInteger(regT2);
     136        } else {
     137            // !supportsFloatingPoint() => 2 SlowCases
    134138            emitJumpSlowCaseIfNotImmediateInteger(regT0);
    135         emitJumpSlowCaseIfNotImmediateInteger(regT2);
     139            emitJumpSlowCaseIfNotImmediateInteger(regT2);
     140        }
    136141        emitFastArithImmToInt(regT2);
    137142#if !PLATFORM(X86)
     
    160165    unsigned op2 = currentInstruction[3].u.operand;
    161166
    162     linkSlowCase(iter);
    163167    JITStubCall stubCall(this, JITStubs::cti_op_rshift);
    164168
    165169    if (isOperandConstantImmediateInt(op2)) {
     170        linkSlowCase(iter);
    166171        stubCall.addArgument(regT0);
    167172        stubCall.addArgument(op2, regT2);
     
    170175#if USE(ALTERNATE_JSIMMEDIATE)
    171176            linkSlowCase(iter);
     177            linkSlowCase(iter);
     178            linkSlowCase(iter);
    172179#else
    173180            linkSlowCaseIfNotJSCell(iter, op1);
    174181            linkSlowCase(iter);
    175182            linkSlowCase(iter);
    176 #endif
    177183            linkSlowCase(iter);
     184            linkSlowCase(iter);
     185#endif
    178186            // We're reloading op1 to regT0 as we can no longer guarantee that
    179187            // we have not munged the operand.  It may have already been shifted
Note: See TracChangeset for help on using the changeset viewer.