Changeset 37253 in webkit for trunk/JavaScriptCore/kjs


Ignore:
Timestamp:
Oct 3, 2008, 1:56:50 PM (17 years ago)
Author:
[email protected]
Message:

2008-10-03 Cameron Zwarich <[email protected]>

Reviewed by Geoff Garen.

Bug 21343: REGRESSSION (r37160): ecma_3/ExecutionContexts/10.1.3-1.js and js1_4/Functions/function-001.js fail on 64-bit
<https://bugs.webkit.org/show_bug.cgi?id=21343>

Add a workaround for a bug in GCC, which affects GCC 4.0, GCC 4.2, and
llvm-gcc 4.2. I put it in an #ifdef because it was a slight regression
on SunSpider in 32-bit, although that might be entirely random.

  • kjs/Arguments.cpp: (JSC::Arguments::getOwnPropertySlot):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/Arguments.cpp

    r37182 r37253  
    111111{
    112112    if (i < d->numArguments && (!d->deletedArguments || !d->deletedArguments[i])) {
    113         if (i < d->numParameters)
     113        if (i < d->numParameters) {
     114#if COMPILER(GCC) && PLATFORM(X86_64)
     115            // The subscript variable is a workaround for a 64-bit code
     116            // generation bug in GCC.
     117            int subscript = d->firstParameterIndex + i;
     118            slot.setRegisterSlot(&d->registers[subscript]);
     119#else
    114120            slot.setRegisterSlot(&d->registers[d->firstParameterIndex + i]);
    115         else
     121#endif
     122        } else
    116123            slot.setValue(d->extraArguments[i - d->numParameters].jsValue(exec));
    117124        return true;
     
    126133    unsigned i = propertyName.toArrayIndex(&isArrayIndex);
    127134    if (isArrayIndex && i < d->numArguments && (!d->deletedArguments || !d->deletedArguments[i])) {
    128         if (i < d->numParameters)
     135        if (i < d->numParameters) {
     136#if COMPILER(GCC) && PLATFORM(X86_64)
     137            // The subscript variable is a workaround for a 64-bit code
     138            // generation bug in GCC.
     139            int subscript = d->firstParameterIndex + i;
     140            slot.setRegisterSlot(&d->registers[subscript]);
     141#else
    129142            slot.setRegisterSlot(&d->registers[d->firstParameterIndex + i]);
    130         else
     143#endif
     144        } else
    131145            slot.setValue(d->extraArguments[i - d->numParameters].jsValue(exec));
    132146        return true;
Note: See TracChangeset for help on using the changeset viewer.