| Index: src/arm/lithium-codegen-arm.cc
|
| diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc
|
| index 852ed1ca942f84693f7834fb89d9fe1db61979c4..cac836081826a51bb286f5a73a1874594f3d254e 100644
|
| --- a/src/arm/lithium-codegen-arm.cc
|
| +++ b/src/arm/lithium-codegen-arm.cc
|
| @@ -3021,91 +3021,6 @@ void LCodeGen::DoLoadNamedField(LLoadNamedField* instr) {
|
| }
|
|
|
|
|
| -void LCodeGen::EmitLoadFieldOrConstantFunction(Register result,
|
| - Register object,
|
| - Handle<Map> type,
|
| - Handle<String> name,
|
| - LEnvironment* env) {
|
| - LookupResult lookup(isolate());
|
| - type->LookupDescriptor(NULL, *name, &lookup);
|
| - ASSERT(lookup.IsFound() || lookup.IsCacheable());
|
| - if (lookup.IsField()) {
|
| - int index = lookup.GetLocalFieldIndexFromMap(*type);
|
| - int offset = index * kPointerSize;
|
| - if (index < 0) {
|
| - // Negative property indices are in-object properties, indexed
|
| - // from the end of the fixed part of the object.
|
| - __ ldr(result, FieldMemOperand(object, offset + type->instance_size()));
|
| - } else {
|
| - // Non-negative property indices are in the properties array.
|
| - __ ldr(result, FieldMemOperand(object, JSObject::kPropertiesOffset));
|
| - __ ldr(result, FieldMemOperand(result, offset + FixedArray::kHeaderSize));
|
| - }
|
| - } else if (lookup.IsConstant()) {
|
| - Handle<Object> constant(lookup.GetConstantFromMap(*type), isolate());
|
| - __ LoadObject(result, constant);
|
| - } else {
|
| - // Negative lookup.
|
| - // Check prototypes.
|
| - Handle<HeapObject> current(HeapObject::cast((*type)->prototype()));
|
| - Heap* heap = type->GetHeap();
|
| - while (*current != heap->null_value()) {
|
| - __ LoadHeapObject(result, current);
|
| - __ ldr(result, FieldMemOperand(result, HeapObject::kMapOffset));
|
| - __ cmp(result, Operand(Handle<Map>(current->map())));
|
| - DeoptimizeIf(ne, env);
|
| - current =
|
| - Handle<HeapObject>(HeapObject::cast(current->map()->prototype()));
|
| - }
|
| - __ LoadRoot(result, Heap::kUndefinedValueRootIndex);
|
| - }
|
| -}
|
| -
|
| -
|
| -void LCodeGen::DoLoadNamedFieldPolymorphic(LLoadNamedFieldPolymorphic* instr) {
|
| - Register object = ToRegister(instr->object());
|
| - Register result = ToRegister(instr->result());
|
| - Register object_map = scratch0();
|
| -
|
| - int map_count = instr->hydrogen()->types()->length();
|
| - bool need_generic = instr->hydrogen()->need_generic();
|
| -
|
| - if (map_count == 0 && !need_generic) {
|
| - DeoptimizeIf(al, instr->environment());
|
| - return;
|
| - }
|
| - Handle<String> name = instr->hydrogen()->name();
|
| - Label done;
|
| - __ ldr(object_map, FieldMemOperand(object, HeapObject::kMapOffset));
|
| - for (int i = 0; i < map_count; ++i) {
|
| - bool last = (i == map_count - 1);
|
| - Handle<Map> map = instr->hydrogen()->types()->at(i);
|
| - Label check_passed;
|
| - __ CompareMap(object_map, map, &check_passed);
|
| - if (last && !need_generic) {
|
| - DeoptimizeIf(ne, instr->environment());
|
| - __ bind(&check_passed);
|
| - EmitLoadFieldOrConstantFunction(
|
| - result, object, map, name, instr->environment());
|
| - } else {
|
| - Label next;
|
| - __ b(ne, &next);
|
| - __ bind(&check_passed);
|
| - EmitLoadFieldOrConstantFunction(
|
| - result, object, map, name, instr->environment());
|
| - __ b(&done);
|
| - __ bind(&next);
|
| - }
|
| - }
|
| - if (need_generic) {
|
| - __ mov(r2, Operand(name));
|
| - Handle<Code> ic = isolate()->builtins()->LoadIC_Initialize();
|
| - CallCode(ic, RelocInfo::CODE_TARGET, instr, NEVER_INLINE_TARGET_ADDRESS);
|
| - }
|
| - __ bind(&done);
|
| -}
|
| -
|
| -
|
| void LCodeGen::DoLoadNamedGeneric(LLoadNamedGeneric* instr) {
|
| ASSERT(ToRegister(instr->object()).is(r0));
|
| ASSERT(ToRegister(instr->result()).is(r0));
|
|
|