| Index: src/arm/lithium-codegen-arm.cc
|
| ===================================================================
|
| --- src/arm/lithium-codegen-arm.cc (revision 7683)
|
| +++ src/arm/lithium-codegen-arm.cc (working copy)
|
| @@ -2479,6 +2479,11 @@
|
| __ 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 @@
|
| DeoptimizeIf(cs, instr->environment());
|
| break;
|
| case kExternalFloatArray:
|
| + case kExternalDoubleArray:
|
| UNREACHABLE();
|
| break;
|
| }
|
| @@ -3232,12 +3238,18 @@
|
| 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 @@
|
| __ str(value, MemOperand(external_pointer, key, LSL, 2));
|
| break;
|
| case kExternalFloatArray:
|
| + case kExternalDoubleArray:
|
| UNREACHABLE();
|
| break;
|
| }
|
| @@ -4244,6 +4257,22 @@
|
| }
|
|
|
|
|
| +void LCodeGen::DoIn(LIn* instr) {
|
| + Register obj = ToRegister(instr->object());
|
| + Register key = ToRegister(instr->key());
|
| + __ Push(key, obj);
|
| + ASSERT(instr->HasPointerMap() && instr->HasDeoptimizationEnvironment());
|
| + LPointerMap* pointers = instr->pointer_map();
|
| + LEnvironment* env = instr->deoptimization_environment();
|
| + RecordPosition(pointers->position());
|
| + RegisterEnvironmentForDeoptimization(env);
|
| + SafepointGenerator safepoint_generator(this,
|
| + pointers,
|
| + env->deoptimization_index());
|
| + __ InvokeBuiltin(Builtins::IN, CALL_JS, &safepoint_generator);
|
| +}
|
| +
|
| +
|
| void LCodeGen::DoStackCheck(LStackCheck* instr) {
|
| // Perform stack overflow check.
|
| Label ok;
|
| @@ -4273,6 +4302,8 @@
|
| }
|
|
|
|
|
| +
|
| +
|
| #undef __
|
|
|
| } } // namespace v8::internal
|
|
|