| Index: runtime/vm/assembler_mips.cc
|
| diff --git a/runtime/vm/assembler_mips.cc b/runtime/vm/assembler_mips.cc
|
| index 2c195334618d33e7b0ef3cf5de1fa9f1008258ca..b418fc80d782c34fccf176f348667985f5426608 100644
|
| --- a/runtime/vm/assembler_mips.cc
|
| +++ b/runtime/vm/assembler_mips.cc
|
| @@ -456,7 +456,9 @@ void Assembler::SubuDetectOverflow(Register rd, Register rs, Register rt,
|
| }
|
|
|
|
|
| -void Assembler::LoadObject(Register rd, const Object& object) {
|
| +void Assembler::LoadObjectHelper(Register rd,
|
| + const Object& object,
|
| + bool is_unique) {
|
| ASSERT(!in_delay_slot_);
|
| // Smis and VM heap objects are never relocated; do not use object pool.
|
| if (object.IsSmi()) {
|
| @@ -471,13 +473,24 @@ void Assembler::LoadObject(Register rd, const Object& object) {
|
| } else {
|
| // Make sure that class CallPattern is able to decode this load from the
|
| // object pool.
|
| - const int32_t offset =
|
| - ObjectPool::element_offset(object_pool_wrapper_.FindObject(object));
|
| + const int32_t offset = ObjectPool::element_offset(
|
| + is_unique ? object_pool_wrapper_.AddObject(object)
|
| + : object_pool_wrapper_.FindObject(object));
|
| LoadWordFromPoolOffset(rd, offset - kHeapObjectTag);
|
| }
|
| }
|
|
|
|
|
| +void Assembler::LoadObject(Register rd, const Object& object) {
|
| + LoadObjectHelper(rd, object, false);
|
| +}
|
| +
|
| +
|
| +void Assembler::LoadUniqueObject(Register rd, const Object& object) {
|
| + LoadObjectHelper(rd, object, true);
|
| +}
|
| +
|
| +
|
| void Assembler::LoadExternalLabel(Register rd,
|
| const ExternalLabel* label,
|
| Patchability patchable) {
|
|
|