| Index: runtime/vm/assembler_mips.cc
|
| diff --git a/runtime/vm/assembler_mips.cc b/runtime/vm/assembler_mips.cc
|
| index cb65f3536f2e672ce0871fa7169cba8608f89445..bb0792ed1b96259d54b7ed3b9424cbed3ef29ea1 100644
|
| --- a/runtime/vm/assembler_mips.cc
|
| +++ b/runtime/vm/assembler_mips.cc
|
| @@ -885,20 +885,29 @@ void Assembler::UpdateAllocationStatsWithSize(intptr_t cid,
|
|
|
| void Assembler::MaybeTraceAllocation(intptr_t cid,
|
| Register temp_reg,
|
| - Label* trace) {
|
| + Label* trace,
|
| + bool inline_isolate) {
|
| ASSERT(cid > 0);
|
| ASSERT(!in_delay_slot_);
|
| ASSERT(temp_reg != kNoRegister);
|
| ASSERT(temp_reg != TMP);
|
| - intptr_t state_offset;
|
| - ClassTable* class_table = Isolate::Current()->class_table();
|
| - ClassHeapStats** table_ptr =
|
| - class_table->StateAddressFor(cid, &state_offset);
|
| - if (cid < kNumPredefinedCids) {
|
| - LoadImmediate(temp_reg, reinterpret_cast<uword>(*table_ptr) + state_offset);
|
| + intptr_t state_offset = ClassTable::StateOffsetFor(cid);
|
| + if (inline_isolate) {
|
| + ClassTable* class_table = Isolate::Current()->class_table();
|
| + ClassHeapStats** table_ptr = class_table->TableAddressFor(cid);
|
| + if (cid < kNumPredefinedCids) {
|
| + LoadImmediate(temp_reg,
|
| + reinterpret_cast<uword>(*table_ptr) + state_offset);
|
| + } else {
|
| + LoadImmediate(temp_reg, reinterpret_cast<uword>(table_ptr));
|
| + lw(temp_reg, Address(temp_reg, 0));
|
| + AddImmediate(temp_reg, state_offset);
|
| + }
|
| } else {
|
| - LoadImmediate(temp_reg, reinterpret_cast<uword>(table_ptr));
|
| - lw(temp_reg, Address(temp_reg, 0));
|
| + LoadIsolate(temp_reg);
|
| + intptr_t table_offset =
|
| + Isolate::class_table_offset() + ClassTable::TableOffsetFor(cid);
|
| + lw(temp_reg, Address(temp_reg, table_offset));
|
| AddImmediate(temp_reg, state_offset);
|
| }
|
| lw(temp_reg, Address(temp_reg, 0));
|
|
|