| OLD | NEW |
| 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" | 5 #include "vm/globals.h" |
| 6 #if defined(TARGET_ARCH_IA32) | 6 #if defined(TARGET_ARCH_IA32) |
| 7 | 7 |
| 8 #include "vm/assembler.h" | 8 #include "vm/assembler.h" |
| 9 #include "vm/compiler.h" | 9 #include "vm/compiler.h" |
| 10 #include "vm/dart_entry.h" | 10 #include "vm/dart_entry.h" |
| (...skipping 1003 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1014 // store buffer if the object is in the store buffer already. | 1014 // store buffer if the object is in the store buffer already. |
| 1015 // Spilled: EDX, ECX | 1015 // Spilled: EDX, ECX |
| 1016 // EAX: Address being stored | 1016 // EAX: Address being stored |
| 1017 __ movl(ECX, FieldAddress(EAX, Object::tags_offset())); | 1017 __ movl(ECX, FieldAddress(EAX, Object::tags_offset())); |
| 1018 __ testl(ECX, Immediate(1 << RawObject::kRememberedBit)); | 1018 __ testl(ECX, Immediate(1 << RawObject::kRememberedBit)); |
| 1019 __ j(EQUAL, &add_to_buffer, Assembler::kNearJump); | 1019 __ j(EQUAL, &add_to_buffer, Assembler::kNearJump); |
| 1020 __ popl(ECX); | 1020 __ popl(ECX); |
| 1021 __ popl(EDX); | 1021 __ popl(EDX); |
| 1022 __ ret(); | 1022 __ ret(); |
| 1023 | 1023 |
| 1024 // Update the tags that this object has been remembered. |
| 1025 // EAX: Address being stored |
| 1026 // ECX: Current tag value |
| 1024 __ Bind(&add_to_buffer); | 1027 __ Bind(&add_to_buffer); |
| 1025 __ orl(ECX, Immediate(1 << RawObject::kRememberedBit)); | 1028 __ orl(ECX, Immediate(1 << RawObject::kRememberedBit)); |
| 1026 __ movl(FieldAddress(EAX, Object::tags_offset()), ECX); | 1029 __ movl(FieldAddress(EAX, Object::tags_offset()), ECX); |
| 1027 | 1030 |
| 1028 // Load the isolate out of the context. | 1031 // Load the isolate out of the context. |
| 1029 // Spilled: EDX, ECX | 1032 // Spilled: EDX, ECX |
| 1030 // EAX: Address being stored | 1033 // EAX: Address being stored |
| 1031 __ movl(EDX, FieldAddress(CTX, Context::isolate_offset())); | 1034 __ movl(EDX, FieldAddress(CTX, Context::isolate_offset())); |
| 1032 | 1035 |
| 1033 // Load the StoreBuffer block out of the isolate. Then load top_ out of the | 1036 // Load the StoreBuffer block out of the isolate. Then load top_ out of the |
| (...skipping 1004 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2038 const Register temp = ECX; | 2041 const Register temp = ECX; |
| 2039 __ movl(left, Address(ESP, 2 * kWordSize)); | 2042 __ movl(left, Address(ESP, 2 * kWordSize)); |
| 2040 __ movl(right, Address(ESP, 1 * kWordSize)); | 2043 __ movl(right, Address(ESP, 1 * kWordSize)); |
| 2041 GenerateIdenticalWithNumberCheckStub(assembler, left, right, temp); | 2044 GenerateIdenticalWithNumberCheckStub(assembler, left, right, temp); |
| 2042 __ ret(); | 2045 __ ret(); |
| 2043 } | 2046 } |
| 2044 | 2047 |
| 2045 } // namespace dart | 2048 } // namespace dart |
| 2046 | 2049 |
| 2047 #endif // defined TARGET_ARCH_IA32 | 2050 #endif // defined TARGET_ARCH_IA32 |
| OLD | NEW |