| Index: runtime/vm/assembler_arm.cc
|
| ===================================================================
|
| --- runtime/vm/assembler_arm.cc (revision 20390)
|
| +++ runtime/vm/assembler_arm.cc (working copy)
|
| @@ -1262,6 +1262,9 @@
|
|
|
|
|
| void Assembler::LoadObject(Register rd, const Object& object) {
|
| + // Since objects in the VM heap are never relocated, test instead
|
| + // if (object.IsSmi() || object.InVMHeap()) {
|
| + // and modify the decoding code in CallPattern to understand movt, movw.
|
| if (object.IsNull() ||
|
| object.IsSmi() ||
|
| (object.raw() == Bool::True().raw()) ||
|
| @@ -1282,6 +1285,13 @@
|
| }
|
|
|
|
|
| +void Assembler::CompareObject(Register rn, const Object& object) {
|
| + ASSERT(rn != IP);
|
| + LoadObject(IP, object);
|
| + cmp(rn, ShifterOperand(IP));
|
| +}
|
| +
|
| +
|
| void Assembler::Bind(Label* label) {
|
| ASSERT(!label->IsBound());
|
| int bound_pc = buffer_.Size();
|
| @@ -1919,6 +1929,8 @@
|
|
|
|
|
| int32_t Assembler::AddObject(const Object& obj) {
|
| + ASSERT(obj.IsNotTemporaryScopedHandle());
|
| + ASSERT(obj.IsOld());
|
| if (object_pool_.IsNull()) {
|
| // The object pool cannot be used in the vm isolate.
|
| ASSERT(Isolate::Current() != Dart::vm_isolate());
|
|
|