| Index: src/x64/stub-cache-x64.cc
|
| ===================================================================
|
| --- src/x64/stub-cache-x64.cc (revision 7683)
|
| +++ src/x64/stub-cache-x64.cc (working copy)
|
| @@ -3214,6 +3214,9 @@
|
| case kExternalFloatArray:
|
| __ cvtss2sd(xmm0, Operand(rbx, rcx, times_4, 0));
|
| break;
|
| + case kExternalDoubleArray:
|
| + __ movsd(xmm0, Operand(rbx, rcx, times_8, 0));
|
| + break;
|
| default:
|
| UNREACHABLE();
|
| break;
|
| @@ -3251,7 +3254,8 @@
|
| __ movsd(FieldOperand(rcx, HeapNumber::kValueOffset), xmm0);
|
| __ movq(rax, rcx);
|
| __ 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(rcx, rbx, &slow);
|
| @@ -3361,6 +3365,11 @@
|
| __ cvtlsi2ss(xmm0, rdx);
|
| __ movss(Operand(rbx, rdi, times_4, 0), xmm0);
|
| break;
|
| + case kExternalDoubleArray:
|
| + // Need to perform int-to-float conversion.
|
| + __ cvtlsi2sd(xmm0, rdx);
|
| + __ movsd(Operand(rbx, rdi, times_8, 0), xmm0);
|
| + break;
|
| default:
|
| UNREACHABLE();
|
| break;
|
| @@ -3391,6 +3400,9 @@
|
| __ cvtsd2ss(xmm0, xmm0);
|
| __ movss(Operand(rbx, rdi, times_4, 0), xmm0);
|
| __ ret(0);
|
| + } else if (array_type == kExternalDoubleArray) {
|
| + __ movsd(Operand(rbx, rdi, times_8, 0), xmm0);
|
| + __ ret(0);
|
| } else {
|
| // Perform float-to-int conversion with truncation (round-to-zero)
|
| // behavior.
|
|
|