Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Side by Side Diff: src/arm/lithium-codegen-arm.cc

Issue 324093002: ARM/ARM64: Optimise HLoadNamedField and HStoreNamedField. Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Upload the correct patch (minor diff in hydrogen.h) Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/arm/lithium-codegen-arm.h" 7 #include "src/arm/lithium-codegen-arm.h"
8 #include "src/arm/lithium-gap-resolver-arm.h" 8 #include "src/arm/lithium-gap-resolver-arm.h"
9 #include "src/code-stubs.h" 9 #include "src/code-stubs.h"
10 #include "src/stub-cache.h" 10 #include "src/stub-cache.h"
(...skipping 3036 matching lines...) Expand 10 before | Expand all | Expand 10 after
3047 return; 3047 return;
3048 } 3048 }
3049 3049
3050 if (instr->hydrogen()->representation().IsDouble()) { 3050 if (instr->hydrogen()->representation().IsDouble()) {
3051 DwVfpRegister result = ToDoubleRegister(instr->result()); 3051 DwVfpRegister result = ToDoubleRegister(instr->result());
3052 __ vldr(result, FieldMemOperand(object, offset)); 3052 __ vldr(result, FieldMemOperand(object, offset));
3053 return; 3053 return;
3054 } 3054 }
3055 3055
3056 Register result = ToRegister(instr->result()); 3056 Register result = ToRegister(instr->result());
3057 Register source = object;
3057 if (!access.IsInobject()) { 3058 if (!access.IsInobject()) {
3058 __ ldr(result, FieldMemOperand(object, JSObject::kPropertiesOffset)); 3059 if (instr->object_properties()) {
3059 object = result; 3060 source = ToRegister(instr->object_properties());
3061 } else {
3062 __ ldr(result, FieldMemOperand(object, JSObject::kPropertiesOffset));
3063 source = result;
3064 }
3060 } 3065 }
3061 MemOperand operand = FieldMemOperand(object, offset); 3066 MemOperand operand = FieldMemOperand(source, offset);
3062 __ Load(result, operand, access.representation()); 3067 __ Load(result, operand, access.representation());
3063 } 3068 }
3064 3069
3065 3070
3066 void LCodeGen::DoLoadNamedGeneric(LLoadNamedGeneric* instr) { 3071 void LCodeGen::DoLoadNamedGeneric(LLoadNamedGeneric* instr) {
3067 ASSERT(ToRegister(instr->context()).is(cp)); 3072 ASSERT(ToRegister(instr->context()).is(cp));
3068 ASSERT(ToRegister(instr->object()).is(r0)); 3073 ASSERT(ToRegister(instr->object()).is(r0));
3069 ASSERT(ToRegister(instr->result()).is(r0)); 3074 ASSERT(ToRegister(instr->result()).is(r0));
3070 3075
3071 // Name is always in r2. 3076 // Name is always in r2.
(...skipping 1031 matching lines...) Expand 10 before | Expand all | Expand 10 after
4103 offset, 4108 offset,
4104 value, 4109 value,
4105 scratch, 4110 scratch,
4106 GetLinkRegisterState(), 4111 GetLinkRegisterState(),
4107 kSaveFPRegs, 4112 kSaveFPRegs,
4108 EMIT_REMEMBERED_SET, 4113 EMIT_REMEMBERED_SET,
4109 instr->hydrogen()->SmiCheckForWriteBarrier(), 4114 instr->hydrogen()->SmiCheckForWriteBarrier(),
4110 instr->hydrogen()->PointersToHereCheckForValue()); 4115 instr->hydrogen()->PointersToHereCheckForValue());
4111 } 4116 }
4112 } else { 4117 } else {
4113 __ ldr(scratch, FieldMemOperand(object, JSObject::kPropertiesOffset)); 4118 Register destination;
4119 if (instr->object_properties()) {
4120 destination = ToRegister(instr->object_properties());
4121 } else {
4122 __ ldr(scratch, FieldMemOperand(object, JSObject::kPropertiesOffset));
4123 destination = scratch;
4124 }
4114 MemOperand operand = FieldMemOperand(scratch, offset); 4125 MemOperand operand = FieldMemOperand(scratch, offset);
4115 __ Store(value, operand, representation); 4126 __ Store(value, operand, representation);
4116 if (instr->hydrogen()->NeedsWriteBarrier()) { 4127 if (instr->hydrogen()->NeedsWriteBarrier()) {
4117 // Update the write barrier for the properties array. 4128 // Update the write barrier for the properties array.
4118 // object is used as a scratch register. 4129 // object is used as a scratch register.
4119 __ RecordWriteField(scratch, 4130 __ RecordWriteField(scratch,
4120 offset, 4131 offset,
4121 value, 4132 value,
4122 object, 4133 object,
4123 GetLinkRegisterState(), 4134 GetLinkRegisterState(),
(...skipping 1705 matching lines...) Expand 10 before | Expand all | Expand 10 after
5829 __ Push(scope_info); 5840 __ Push(scope_info);
5830 __ push(ToRegister(instr->function())); 5841 __ push(ToRegister(instr->function()));
5831 CallRuntime(Runtime::kHiddenPushBlockContext, 2, instr); 5842 CallRuntime(Runtime::kHiddenPushBlockContext, 2, instr);
5832 RecordSafepoint(Safepoint::kNoLazyDeopt); 5843 RecordSafepoint(Safepoint::kNoLazyDeopt);
5833 } 5844 }
5834 5845
5835 5846
5836 #undef __ 5847 #undef __
5837 5848
5838 } } // namespace v8::internal 5849 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/arm/lithium-arm.cc ('k') | src/arm64/lithium-arm64.h » ('j') | src/hydrogen-instructions.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698