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

Side by Side Diff: runtime/vm/intermediate_language_arm.cc

Issue 841343002: ARM port of r42723. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 5 years, 11 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 (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM. 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM.
6 #if defined(TARGET_ARCH_ARM) 6 #if defined(TARGET_ARCH_ARM)
7 7
8 #include "vm/intermediate_language.h" 8 #include "vm/intermediate_language.h"
9 9
10 #include "vm/cpu.h" 10 #include "vm/cpu.h"
(...skipping 2180 matching lines...) Expand 10 before | Expand all | Expand 10 after
2191 const Register value_reg = locs()->in(1).reg(); 2191 const Register value_reg = locs()->in(1).reg();
2192 __ StoreIntoObjectOffset(instance_reg, 2192 __ StoreIntoObjectOffset(instance_reg,
2193 offset_in_bytes_, 2193 offset_in_bytes_,
2194 value_reg, 2194 value_reg,
2195 CanValueBeSmi()); 2195 CanValueBeSmi());
2196 } else { 2196 } else {
2197 if (locs()->in(1).IsConstant()) { 2197 if (locs()->in(1).IsConstant()) {
2198 __ StoreIntoObjectNoBarrierOffset( 2198 __ StoreIntoObjectNoBarrierOffset(
2199 instance_reg, 2199 instance_reg,
2200 offset_in_bytes_, 2200 offset_in_bytes_,
2201 locs()->in(1).constant()); 2201 locs()->in(1).constant(),
2202 is_object_reference_initialization_ ?
2203 Assembler::kEmptyOrSmiOrNull :
2204 Assembler::kHeapObjectOrSmi);
2202 } else { 2205 } else {
2203 const Register value_reg = locs()->in(1).reg(); 2206 const Register value_reg = locs()->in(1).reg();
2204 __ StoreIntoObjectNoBarrierOffset(instance_reg, 2207 __ StoreIntoObjectNoBarrierOffset(instance_reg,
2205 offset_in_bytes_, 2208 offset_in_bytes_,
2206 value_reg); 2209 value_reg,
2210 is_object_reference_initialization_ ?
2211 Assembler::kEmptyOrSmiOrNull :
2212 Assembler::kHeapObjectOrSmi);
2207 } 2213 }
2208 } 2214 }
2209 __ Bind(&skip_store); 2215 __ Bind(&skip_store);
2210 } 2216 }
2211 2217
2212 2218
2213 LocationSummary* LoadStaticFieldInstr::MakeLocationSummary(Isolate* isolate, 2219 LocationSummary* LoadStaticFieldInstr::MakeLocationSummary(Isolate* isolate,
2214 bool opt) const { 2220 bool opt) const {
2215 const intptr_t kNumInputs = 1; 2221 const intptr_t kNumInputs = 1;
2216 const intptr_t kNumTemps = 0; 2222 const intptr_t kNumTemps = 0;
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
2313 2319
2314 __ TryAllocateArray(kArrayCid, instance_size, slow_path, 2320 __ TryAllocateArray(kArrayCid, instance_size, slow_path,
2315 R0, // instance 2321 R0, // instance
2316 R3, // end address 2322 R3, // end address
2317 R6, 2323 R6,
2318 R8); 2324 R8);
2319 // R0: new object start as a tagged pointer. 2325 // R0: new object start as a tagged pointer.
2320 // R3: new object end address. 2326 // R3: new object end address.
2321 2327
2322 // Store the type argument field. 2328 // Store the type argument field.
2323 __ StoreIntoObjectNoBarrier(R0, 2329 __ InitializeFieldNoBarrier(R0,
2324 FieldAddress(R0, Array::type_arguments_offset()), 2330 FieldAddress(R0, Array::type_arguments_offset()),
2325 kElemTypeReg); 2331 kElemTypeReg);
2326 2332
2327 // Set the length field. 2333 // Set the length field.
2328 __ StoreIntoObjectNoBarrier(R0, 2334 __ InitializeFieldNoBarrier(R0,
2329 FieldAddress(R0, Array::length_offset()), 2335 FieldAddress(R0, Array::length_offset()),
2330 kLengthReg); 2336 kLengthReg);
2331 2337
2332 // Initialize all array elements to raw_null. 2338 // Initialize all array elements to raw_null.
2333 // R0: new object start as a tagged pointer. 2339 // R0: new object start as a tagged pointer.
2334 // R3: new object end address. 2340 // R3: new object end address.
2335 // R8: iterator which initially points to the start of the variable 2341 // R8: iterator which initially points to the start of the variable
2336 // data area to be initialized. 2342 // data area to be initialized.
2337 // R6: null 2343 // R6: null
2338 if (num_elements > 0) { 2344 if (num_elements > 0) {
(...skipping 4587 matching lines...) Expand 10 before | Expand all | Expand 10 after
6926 compiler->GenerateCall(token_pos(), &label, stub_kind_, locs()); 6932 compiler->GenerateCall(token_pos(), &label, stub_kind_, locs());
6927 #if defined(DEBUG) 6933 #if defined(DEBUG)
6928 __ LoadImmediate(R4, kInvalidObjectPointer); 6934 __ LoadImmediate(R4, kInvalidObjectPointer);
6929 __ LoadImmediate(R5, kInvalidObjectPointer); 6935 __ LoadImmediate(R5, kInvalidObjectPointer);
6930 #endif 6936 #endif
6931 } 6937 }
6932 6938
6933 } // namespace dart 6939 } // namespace dart
6934 6940
6935 #endif // defined TARGET_ARCH_ARM 6941 #endif // defined TARGET_ARCH_ARM
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698