Ignore:
Timestamp:
May 18, 2009, 10:39:07 PM (16 years ago)
Author:
[email protected]
Message:

2009-05-18 Maciej Stachowiak <[email protected]>

Reviewed by Oliver Hunt.


  • tighten up the code for the load_varargs stub


~1-2% on v8-raytrace


  • jit/JITStubs.cpp: (JSC::JITStubs::cti_op_load_varargs): Hoist some loop invariants that the compiler didn't feel like hoisting for us. Remove unneeded exception check.
File:
1 edited

Legend:

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

    r43839 r43854  
    15961596        int32_t expectedParams = asFunction(callFrame[RegisterFile::Callee].jsValue())->body()->parameterCount();
    15971597        int32_t inplaceArgs = min(providedParams, expectedParams);
    1598         int32_t i = 0;
    1599         Register* argStore = callFrame->registers() + argsOffset;
    16001598       
     1599        Register* inplaceArgsDst = callFrame->registers() + argsOffset;
     1600
     1601        Register* inplaceArgsEnd = inplaceArgsDst + inplaceArgs;
     1602        Register* inplaceArgsEnd2 = inplaceArgsDst + providedParams;
     1603
     1604        Register* inplaceArgsSrc = callFrame->registers() - RegisterFile::CallFrameHeaderSize - expectedParams;
     1605        Register* inplaceArgsSrc2 = inplaceArgsSrc - providedParams - 1 + inplaceArgs;
     1606 
    16011607        // First step is to copy the "expected" parameters from their normal location relative to the callframe
    1602         for (; i < inplaceArgs; i++)
    1603             argStore[i] = callFrame->registers()[i - RegisterFile::CallFrameHeaderSize - expectedParams];
     1608        while (inplaceArgsDst < inplaceArgsEnd)
     1609            *inplaceArgsDst++ = *inplaceArgsSrc++;
     1610
    16041611        // Then we copy any additional arguments that may be further up the stack ('-1' to account for 'this')
    1605         for (; i < providedParams; i++)
    1606             argStore[i] = callFrame->registers()[i - RegisterFile::CallFrameHeaderSize - expectedParams - providedParams - 1];
     1612        while (inplaceArgsDst < inplaceArgsEnd2)
     1613            *inplaceArgsDst++ = *inplaceArgsSrc2++;
     1614
    16071615    } else if (!arguments.isUndefinedOrNull()) {
    16081616        if (!arguments.isObject()) {
     
    16531661        }
    16541662    }
    1655     CHECK_FOR_EXCEPTION_AT_END();
     1663
    16561664    return argCount + 1;
    16571665}
Note: See TracChangeset for help on using the changeset viewer.