| Index: src/arm/lithium-codegen-arm.cc
|
| diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc
|
| index c820e2e31ba1fba25d3b2a9f60cc12fb2f8c9ec1..74fecc29df17614a9f6b1378ff980b2ca5059146 100644
|
| --- a/src/arm/lithium-codegen-arm.cc
|
| +++ b/src/arm/lithium-codegen-arm.cc
|
| @@ -2479,6 +2479,11 @@ void LCodeGen::DoLoadKeyedSpecializedArrayElement(
|
| __ add(scratch0(), external_pointer, Operand(key, LSL, 2));
|
| __ vldr(result.low(), scratch0(), 0);
|
| __ vcvt_f64_f32(result, result.low());
|
| + } else if (array_type == kExternalDoubleArray) {
|
| + CpuFeatures::Scope scope(VFP3);
|
| + DwVfpRegister result(ToDoubleRegister(instr->result()));
|
| + __ add(scratch0(), external_pointer, Operand(key, LSL, 3));
|
| + __ vldr(result, scratch0(), 0);
|
| } else {
|
| Register result(ToRegister(instr->result()));
|
| switch (array_type) {
|
| @@ -2507,6 +2512,7 @@ void LCodeGen::DoLoadKeyedSpecializedArrayElement(
|
| DeoptimizeIf(cs, instr->environment());
|
| break;
|
| case kExternalFloatArray:
|
| + case kExternalDoubleArray:
|
| UNREACHABLE();
|
| break;
|
| }
|
| @@ -3232,12 +3238,18 @@ void LCodeGen::DoStoreKeyedSpecializedArrayElement(
|
| Register external_pointer = ToRegister(instr->external_pointer());
|
| Register key = ToRegister(instr->key());
|
| ExternalArrayType array_type = instr->array_type();
|
| +
|
| if (array_type == kExternalFloatArray) {
|
| CpuFeatures::Scope scope(VFP3);
|
| DwVfpRegister value(ToDoubleRegister(instr->value()));
|
| __ add(scratch0(), external_pointer, Operand(key, LSL, 2));
|
| __ vcvt_f32_f64(double_scratch0().low(), value);
|
| __ vstr(double_scratch0().low(), scratch0(), 0);
|
| + } else if (array_type == kExternalDoubleArray) {
|
| + CpuFeatures::Scope scope(VFP3);
|
| + DwVfpRegister value(ToDoubleRegister(instr->value()));
|
| + __ add(scratch0(), external_pointer, Operand(key, LSL, 3));
|
| + __ vstr(value, scratch0(), 0);
|
| } else {
|
| Register value(ToRegister(instr->value()));
|
| switch (array_type) {
|
| @@ -3259,6 +3271,7 @@ void LCodeGen::DoStoreKeyedSpecializedArrayElement(
|
| __ str(value, MemOperand(external_pointer, key, LSL, 2));
|
| break;
|
| case kExternalFloatArray:
|
| + case kExternalDoubleArray:
|
| UNREACHABLE();
|
| break;
|
| }
|
|
|