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

Unified Diff: runtime/vm/intrinsifier_ia32.cc

Issue 711833002: Support verified heap pointer writes on ia32. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: runtime/vm/intrinsifier_ia32.cc
===================================================================
--- runtime/vm/intrinsifier_ia32.cc (revision 41609)
+++ runtime/vm/intrinsifier_ia32.cc (working copy)
@@ -114,7 +114,10 @@
// Try allocating in new space.
const Class& cls = Class::Handle(
Isolate::Current()->object_store()->growable_object_array_class());
- __ TryAllocate(cls, &fall_through, Assembler::kNearJump, EAX, EBX);
+ const bool jump_length = VerifiedMemory::enabled() ?
+ Assembler::kFarJump :
+ Assembler::kNearJump;
+ __ TryAllocate(cls, &fall_through, jump_length, EAX, EBX);
// Store backing array object in growable array object.
__ movl(EBX, Address(ESP, kArrayOffset)); // data argument.
@@ -132,9 +135,7 @@
FieldAddress(EAX, GrowableObjectArray::type_arguments_offset()),
EBX);
- // Set the length field in the growable array object to 0.
- __ movl(FieldAddress(EAX, GrowableObjectArray::length_offset()),
- Immediate(0));
+ __ ZeroSmiField(FieldAddress(EAX, GrowableObjectArray::length_offset()));
__ ret(); // returns the newly allocated object in EAX.
__ Bind(&fall_through);
@@ -199,7 +200,8 @@
__ movl(EBX, Address(ESP, + 1 * kWordSize)); // Length value.
__ testl(EBX, Immediate(kSmiTagMask));
__ j(NOT_ZERO, &fall_through, Assembler::kNearJump); // Non-smi length.
- __ movl(FieldAddress(EAX, GrowableObjectArray::length_offset()), EBX);
+ FieldAddress length_field(EAX, GrowableObjectArray::length_offset());
+ __ StoreIntoSmiField(length_field, EBX);
__ ret();
__ Bind(&fall_through);
}
@@ -1828,7 +1830,7 @@
__ incl(EAX);
__ Bind(&set_hash_code);
__ SmiTag(EAX);
- __ movl(FieldAddress(EBX, String::hash_offset()), EAX);
+ __ StoreIntoSmiField(FieldAddress(EBX, String::hash_offset()), EAX);
__ ret();
}
@@ -1901,7 +1903,7 @@
FieldAddress(EAX, String::length_offset()),
EDI);
// Clear hash.
- __ movl(FieldAddress(EAX, String::hash_offset()), Immediate(0));
+ __ ZeroSmiField(FieldAddress(EAX, String::hash_offset()));
__ jmp(ok, Assembler::kNearJump);
__ Bind(&pop_and_fail);

Powered by Google App Engine
This is Rietveld 408576698