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

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

Issue 2112043002: Land Ivan's change of 'Remove support for verified memory handling' (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Address code review comments. Created 4 years, 5 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
« no previous file with comments | « runtime/vm/intermediate_language_x64.cc ('k') | runtime/vm/intrinsifier_ia32.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/intrinsifier.h" 8 #include "vm/intrinsifier.h"
9 9
10 #include "vm/assembler.h" 10 #include "vm/assembler.h"
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 Label fall_through; 96 Label fall_through;
97 97
98 // Try allocating in new space. 98 // Try allocating in new space.
99 const Class& cls = Class::Handle( 99 const Class& cls = Class::Handle(
100 Isolate::Current()->object_store()->growable_object_array_class()); 100 Isolate::Current()->object_store()->growable_object_array_class());
101 __ TryAllocate(cls, &fall_through, R0, R1); 101 __ TryAllocate(cls, &fall_through, R0, R1);
102 102
103 // Store backing array object in growable array object. 103 // Store backing array object in growable array object.
104 __ ldr(R1, Address(SP, kArrayOffset)); // Data argument. 104 __ ldr(R1, Address(SP, kArrayOffset)); // Data argument.
105 // R0 is new, no barrier needed. 105 // R0 is new, no barrier needed.
106 __ InitializeFieldNoBarrier( 106 __ StoreIntoObjectNoBarrier(
107 R0, 107 R0,
108 FieldAddress(R0, GrowableObjectArray::data_offset()), 108 FieldAddress(R0, GrowableObjectArray::data_offset()),
109 R1); 109 R1);
110 110
111 // R0: new growable array object start as a tagged pointer. 111 // R0: new growable array object start as a tagged pointer.
112 // Store the type argument field in the growable array object. 112 // Store the type argument field in the growable array object.
113 __ ldr(R1, Address(SP, kTypeArgumentsOffset)); // Type argument. 113 __ ldr(R1, Address(SP, kTypeArgumentsOffset)); // Type argument.
114 __ InitializeFieldNoBarrier( 114 __ StoreIntoObjectNoBarrier(
115 R0, 115 R0,
116 FieldAddress(R0, GrowableObjectArray::type_arguments_offset()), 116 FieldAddress(R0, GrowableObjectArray::type_arguments_offset()),
117 R1); 117 R1);
118 118
119 // Set the length field in the growable array object to 0. 119 // Set the length field in the growable array object to 0.
120 __ LoadImmediate(R1, 0); 120 __ LoadImmediate(R1, 0);
121 __ InitializeFieldNoBarrier( 121 __ StoreIntoObjectNoBarrier(
122 R0, 122 R0,
123 FieldAddress(R0, GrowableObjectArray::length_offset()), 123 FieldAddress(R0, GrowableObjectArray::length_offset()),
124 R1); 124 R1);
125 __ Ret(); // Returns the newly allocated object in R0. 125 __ Ret(); // Returns the newly allocated object in R0.
126 126
127 __ Bind(&fall_through); 127 __ Bind(&fall_through);
128 } 128 }
129 129
130 130
131 // Add an element to growable array if it doesn't need to grow, otherwise 131 // Add an element to growable array if it doesn't need to grow, otherwise
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid)); \ 220 __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid)); \
221 __ orr(R3, R3, Operand(TMP)); \ 221 __ orr(R3, R3, Operand(TMP)); \
222 __ str(R3, FieldAddress(R0, type_name::tags_offset())); /* Tags. */ \ 222 __ str(R3, FieldAddress(R0, type_name::tags_offset())); /* Tags. */ \
223 } \ 223 } \
224 /* Set the length field. */ \ 224 /* Set the length field. */ \
225 /* R0: new object start as a tagged pointer. */ \ 225 /* R0: new object start as a tagged pointer. */ \
226 /* R1: new object end address. */ \ 226 /* R1: new object end address. */ \
227 /* R2: allocation size. */ \ 227 /* R2: allocation size. */ \
228 /* R4: allocation stats address. */ \ 228 /* R4: allocation stats address. */ \
229 __ ldr(R3, Address(SP, kArrayLengthStackOffset)); /* Array length. */ \ 229 __ ldr(R3, Address(SP, kArrayLengthStackOffset)); /* Array length. */ \
230 __ InitializeFieldNoBarrier(R0, \ 230 __ StoreIntoObjectNoBarrier(R0, \
231 FieldAddress(R0, type_name::length_offset()), \ 231 FieldAddress(R0, type_name::length_offset()), \
232 R3); \ 232 R3); \
233 /* Initialize all array elements to 0. */ \ 233 /* Initialize all array elements to 0. */ \
234 /* R0: new object start as a tagged pointer. */ \ 234 /* R0: new object start as a tagged pointer. */ \
235 /* R1: new object end address. */ \ 235 /* R1: new object end address. */ \
236 /* R2: allocation size. */ \ 236 /* R2: allocation size. */ \
237 /* R3: iterator which initially points to the start of the variable */ \ 237 /* R3: iterator which initially points to the start of the variable */ \
238 /* R4: allocation stats address */ \ 238 /* R4: allocation stats address */ \
239 /* R8, R9: zero. */ \ 239 /* R8, R9: zero. */ \
240 /* data area to be initialized. */ \ 240 /* data area to be initialized. */ \
(...skipping 1628 matching lines...) Expand 10 before | Expand all | Expand 10 after
1869 __ mov(R3, Operand(0), HI); 1869 __ mov(R3, Operand(0), HI);
1870 1870
1871 // Get the class index and insert it into the tags. 1871 // Get the class index and insert it into the tags.
1872 // R3: size and bit tags. 1872 // R3: size and bit tags.
1873 __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid)); 1873 __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid));
1874 __ orr(R3, R3, Operand(TMP)); 1874 __ orr(R3, R3, Operand(TMP));
1875 __ str(R3, FieldAddress(R0, String::tags_offset())); // Store tags. 1875 __ str(R3, FieldAddress(R0, String::tags_offset())); // Store tags.
1876 } 1876 }
1877 1877
1878 // Set the length field using the saved length (R8). 1878 // Set the length field using the saved length (R8).
1879 __ InitializeFieldNoBarrier(R0, 1879 __ StoreIntoObjectNoBarrier(R0,
1880 FieldAddress(R0, String::length_offset()), 1880 FieldAddress(R0, String::length_offset()),
1881 R8); 1881 R8);
1882 // Clear hash. 1882 // Clear hash.
1883 __ LoadImmediate(TMP, 0); 1883 __ LoadImmediate(TMP, 0);
1884 __ InitializeFieldNoBarrier(R0, 1884 __ StoreIntoObjectNoBarrier(R0,
1885 FieldAddress(R0, String::hash_offset()), 1885 FieldAddress(R0, String::hash_offset()),
1886 TMP); 1886 TMP);
1887 1887
1888 NOT_IN_PRODUCT(__ IncrementAllocationStatsWithSize(R4, R2, space)); 1888 NOT_IN_PRODUCT(__ IncrementAllocationStatsWithSize(R4, R2, space));
1889 __ b(ok); 1889 __ b(ok);
1890 1890
1891 __ Bind(&fail); 1891 __ Bind(&fail);
1892 __ b(failure); 1892 __ b(failure);
1893 } 1893 }
1894 1894
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
2127 __ ldr(R0, Address(R0, TimelineStream::enabled_offset())); 2127 __ ldr(R0, Address(R0, TimelineStream::enabled_offset()));
2128 __ cmp(R0, Operand(0)); 2128 __ cmp(R0, Operand(0));
2129 __ LoadObject(R0, Bool::True(), NE); 2129 __ LoadObject(R0, Bool::True(), NE);
2130 __ LoadObject(R0, Bool::False(), EQ); 2130 __ LoadObject(R0, Bool::False(), EQ);
2131 __ Ret(); 2131 __ Ret();
2132 } 2132 }
2133 2133
2134 } // namespace dart 2134 } // namespace dart
2135 2135
2136 #endif // defined TARGET_ARCH_ARM 2136 #endif // defined TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « runtime/vm/intermediate_language_x64.cc ('k') | runtime/vm/intrinsifier_ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698