| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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 // The intrinsic code below is executed before a method has built its frame. | 5 // The intrinsic code below is executed before a method has built its frame. |
| 6 // The return address is on the stack and the arguments below it. | 6 // The return address is on the stack and the arguments below it. |
| 7 // Registers EDX (arguments descriptor) and ECX (function) must be preserved. | 7 // Registers EDX (arguments descriptor) and ECX (function) must be preserved. |
| 8 // Each intrinsification method returns true if the corresponding | 8 // Each intrinsification method returns true if the corresponding |
| 9 // Dart method was intrinsified. | 9 // Dart method was intrinsified. |
| 10 | 10 |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 // next object start and initialize the object. | 120 // next object start and initialize the object. |
| 121 __ movl(Address::Absolute(heap->TopAddress()), EBX); | 121 __ movl(Address::Absolute(heap->TopAddress()), EBX); |
| 122 __ addl(EAX, Immediate(kHeapObjectTag)); | 122 __ addl(EAX, Immediate(kHeapObjectTag)); |
| 123 | 123 |
| 124 // EAX: new object start as a tagged pointer. | 124 // EAX: new object start as a tagged pointer. |
| 125 // EBX: new object end address. | 125 // EBX: new object end address. |
| 126 // Store class value for array. | 126 // Store class value for array. |
| 127 __ movl(EDI, FieldAddress(CTX, Context::isolate_offset())); | 127 __ movl(EDI, FieldAddress(CTX, Context::isolate_offset())); |
| 128 __ movl(EDI, Address(EDI, Isolate::object_store_offset())); | 128 __ movl(EDI, Address(EDI, Isolate::object_store_offset())); |
| 129 __ movl(EDI, Address(EDI, ObjectStore::array_class_offset())); | 129 __ movl(EDI, Address(EDI, ObjectStore::array_class_offset())); |
| 130 __ StoreIntoObject(EAX, FieldAddress(EAX, Instance::class_offset()), EDI); | 130 __ StoreIntoObject(EAX, FieldAddress(EAX, Array::class_offset()), EDI); |
| 131 |
| 132 // Initialize the tags. |
| 133 __ movl(FieldAddress(EAX, Array::tags_offset()), Immediate(0)); |
| 131 | 134 |
| 132 // Store the type argument field. | 135 // Store the type argument field. |
| 133 __ movl(EDI, Address(ESP, kTypeArgumentsOffset)); // type argument. | 136 __ movl(EDI, Address(ESP, kTypeArgumentsOffset)); // type argument. |
| 134 __ StoreIntoObject(EAX, | 137 __ StoreIntoObject(EAX, |
| 135 FieldAddress(EAX, Array::type_arguments_offset()), | 138 FieldAddress(EAX, Array::type_arguments_offset()), |
| 136 EDI); | 139 EDI); |
| 137 | 140 |
| 138 // Set the length field. | 141 // Set the length field. |
| 139 __ movl(EDI, Address(ESP, kArrayLengthOffset)); // Array Length. | 142 __ movl(EDI, Address(ESP, kArrayLengthOffset)); // Array Length. |
| 140 __ StoreIntoObject(EAX, FieldAddress(EAX, Array::length_offset()), EDI); | 143 __ StoreIntoObject(EAX, FieldAddress(EAX, Array::length_offset()), EDI); |
| (...skipping 901 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1042 } \ | 1045 } \ |
| 1043 | 1046 |
| 1044 INTRINSIC_LIST(FIND_INTRINSICS); | 1047 INTRINSIC_LIST(FIND_INTRINSICS); |
| 1045 #undef FIND_INTRINSICS | 1048 #undef FIND_INTRINSICS |
| 1046 return false; | 1049 return false; |
| 1047 } | 1050 } |
| 1048 | 1051 |
| 1049 } // namespace dart | 1052 } // namespace dart |
| 1050 | 1053 |
| 1051 #endif // defined TARGET_ARCH_IA32 | 1054 #endif // defined TARGET_ARCH_IA32 |
| OLD | NEW |