Index: runtime/vm/intrinsifier_mips.cc |
diff --git a/runtime/vm/intrinsifier_mips.cc b/runtime/vm/intrinsifier_mips.cc |
index a899a6d5d5090efcf897bf57d490b32ffc515dd6..9e2b6681b380a5d7ed55a62e0b85cb5895c37851 100644 |
--- a/runtime/vm/intrinsifier_mips.cc |
+++ b/runtime/vm/intrinsifier_mips.cc |
@@ -71,6 +71,7 @@ void Intrinsifier::List_Allocate(Assembler* assembler) { |
// next object start and initialize the object. |
__ sw(T1, Address(T3, 0)); |
__ addiu(T0, T0, Immediate(kHeapObjectTag)); |
+ __ UpdateAllocationStatsWithSize(kArrayCid, T2, T4); |
// Initialize the tags. |
// T0: new object start as a tagged pointer. |
@@ -306,7 +307,7 @@ void Intrinsifier::GrowableList_Allocate(Assembler* assembler) { |
V0, |
FieldAddress(V0, GrowableObjectArray::type_arguments_offset()), |
T1); |
- |
+ __ UpdateAllocationStats(kGrowableObjectArrayCid, T1); |
// Set the length field in the growable array object to 0. |
__ Ret(); // Returns the newly allocated object in V0. |
__ delay_slot()->sw(ZR, |
@@ -498,7 +499,7 @@ void Intrinsifier::GrowableList_add(Assembler* assembler) { |
__ LoadImmediate(T3, heap->TopAddress()); \ |
__ sw(T1, Address(T3, 0)); \ |
__ AddImmediate(V0, kHeapObjectTag); \ |
- \ |
+ __ UpdateAllocationStatsWithSize(cid, T2, T4); \ |
/* Initialize the tags. */ \ |
/* V0: new object start as a tagged pointer. */ \ |
/* T1: new object end address. */ \ |
@@ -854,7 +855,7 @@ void Intrinsifier::Integer_shl(Assembler* assembler) { |
const Class& mint_class = Class::Handle( |
Isolate::Current()->object_store()->mint_class()); |
- __ TryAllocate(mint_class, &fall_through, V0); |
+ __ TryAllocate(mint_class, &fall_through, V0, T1); |
__ sw(T0, FieldAddress(V0, Mint::value_offset())); |
__ Ret(); |
@@ -1194,7 +1195,7 @@ static void DoubleArithmeticOperations(Assembler* assembler, Token::Kind kind) { |
} |
const Class& double_class = Class::Handle( |
Isolate::Current()->object_store()->double_class()); |
- __ TryAllocate(double_class, &fall_through, V0); // Result register. |
+ __ TryAllocate(double_class, &fall_through, V0, T1); // Result register. |
__ swc1(F0, FieldAddress(V0, Double::value_offset())); |
__ Ret(); |
__ delay_slot()->swc1(F1, |
@@ -1242,7 +1243,7 @@ void Intrinsifier::Double_mulFromInteger(Assembler* assembler) { |
__ muld(D0, D0, D1); |
const Class& double_class = Class::Handle( |
Isolate::Current()->object_store()->double_class()); |
- __ TryAllocate(double_class, &fall_through, V0); // Result register. |
+ __ TryAllocate(double_class, &fall_through, V0, T1); // Result register. |
__ swc1(F0, FieldAddress(V0, Double::value_offset())); |
__ Ret(); |
__ delay_slot()->swc1(F1, |
@@ -1264,7 +1265,7 @@ void Intrinsifier::Double_fromInteger(Assembler* assembler) { |
__ cvtdw(D0, F4); |
const Class& double_class = Class::Handle( |
Isolate::Current()->object_store()->double_class()); |
- __ TryAllocate(double_class, &fall_through, V0); // Result register. |
+ __ TryAllocate(double_class, &fall_through, V0, T1); // Result register. |
__ swc1(F0, FieldAddress(V0, Double::value_offset())); |
__ Ret(); |
__ delay_slot()->swc1(F1, |
@@ -1350,7 +1351,7 @@ void Intrinsifier::Math_sqrt(Assembler* assembler) { |
__ sqrtd(D0, D1); |
const Class& double_class = Class::Handle( |
Isolate::Current()->object_store()->double_class()); |
- __ TryAllocate(double_class, &fall_through, V0); // Result register. |
+ __ TryAllocate(double_class, &fall_through, V0, T1); // Result register. |
__ swc1(F0, FieldAddress(V0, Double::value_offset())); |
__ Ret(); |
__ delay_slot()->swc1(F1, |
@@ -1599,6 +1600,8 @@ static void TryAllocateOnebyteString(Assembler* assembler, |
__ sw(T1, Address(T3, 0)); |
__ AddImmediate(V0, kHeapObjectTag); |
+ __ UpdateAllocationStatsWithSize(kOneByteStringCid, T2, T3); |
+ |
// Initialize the tags. |
// V0: new object start as a tagged pointer. |
// T1: new object end address. |