| Index: src/ia32/stub-cache-ia32.cc
 | 
| ===================================================================
 | 
| --- src/ia32/stub-cache-ia32.cc	(revision 7683)
 | 
| +++ src/ia32/stub-cache-ia32.cc	(working copy)
 | 
| @@ -3397,6 +3397,9 @@
 | 
|      case kExternalFloatArray:
 | 
|        __ fld_s(Operand(ebx, ecx, times_4, 0));
 | 
|        break;
 | 
| +    case kExternalDoubleArray:
 | 
| +      __ fld_d(Operand(ebx, ecx, times_8, 0));
 | 
| +      break;
 | 
|      default:
 | 
|        UNREACHABLE();
 | 
|        break;
 | 
| @@ -3454,7 +3457,8 @@
 | 
|      __ mov(eax, ecx);
 | 
|      __ fstp_d(FieldOperand(eax, HeapNumber::kValueOffset));
 | 
|      __ ret(0);
 | 
| -  } else if (array_type == kExternalFloatArray) {
 | 
| +  } else if (array_type == kExternalFloatArray ||
 | 
| +             array_type == kExternalDoubleArray) {
 | 
|      // For the floating-point array type, we need to always allocate a
 | 
|      // HeapNumber.
 | 
|      __ AllocateHeapNumber(ecx, ebx, edi, &failed_allocation);
 | 
| @@ -3569,11 +3573,16 @@
 | 
|        __ mov(Operand(edi, ebx, times_4, 0), ecx);
 | 
|        break;
 | 
|      case kExternalFloatArray:
 | 
| +    case kExternalDoubleArray:
 | 
|        // Need to perform int-to-float conversion.
 | 
|        __ push(ecx);
 | 
|        __ fild_s(Operand(esp, 0));
 | 
|        __ pop(ecx);
 | 
| -      __ fstp_s(Operand(edi, ebx, times_4, 0));
 | 
| +      if (array_type == kExternalFloatArray) {
 | 
| +        __ fstp_s(Operand(edi, ebx, times_4, 0));
 | 
| +      } else {  // array_type == kExternalDoubleArray.
 | 
| +        __ fstp_d(Operand(edi, ebx, times_8, 0));
 | 
| +      }
 | 
|        break;
 | 
|      default:
 | 
|        UNREACHABLE();
 | 
| @@ -3603,6 +3612,10 @@
 | 
|        __ fld_d(FieldOperand(eax, HeapNumber::kValueOffset));
 | 
|        __ fstp_s(Operand(edi, ebx, times_4, 0));
 | 
|        __ ret(0);
 | 
| +    } else if (array_type == kExternalDoubleArray) {
 | 
| +      __ fld_d(FieldOperand(eax, HeapNumber::kValueOffset));
 | 
| +      __ fstp_d(Operand(edi, ebx, times_8, 0));
 | 
| +      __ ret(0);
 | 
|      } else {
 | 
|        // Perform float-to-int conversion with truncation (round-to-zero)
 | 
|        // behavior.
 | 
| 
 |