Index: runtime/vm/intrinsifier_arm.cc |
diff --git a/runtime/vm/intrinsifier_arm.cc b/runtime/vm/intrinsifier_arm.cc |
index 2bfb3318e3bc51bf7f5ac06e2c4effa7426ddae1..62e5e5d458b3fabf1f251aff78079b151fcd7411 100644 |
--- a/runtime/vm/intrinsifier_arm.cc |
+++ b/runtime/vm/intrinsifier_arm.cc |
@@ -71,6 +71,7 @@ void Intrinsifier::List_Allocate(Assembler* assembler) { |
// next object start and initialize the object. |
__ str(R1, Address(R6, 0)); |
__ add(R0, R0, ShifterOperand(kHeapObjectTag)); |
+ __ BumpAllocationCount(Heap::kNew, kArrayCid, R2, R4); |
// Initialize the tags. |
// R0: new object start as a tagged pointer. |
@@ -120,7 +121,6 @@ void Intrinsifier::List_Allocate(Assembler* assembler) { |
__ str(R3, Address(R2, 0), CC); |
__ AddImmediate(R2, kWordSize, CC); |
__ b(&init_loop, CC); |
- |
__ Ret(); // Returns the newly allocated object in R0. |
__ Bind(&fall_through); |
} |
@@ -306,6 +306,7 @@ void Intrinsifier::GrowableList_Allocate(Assembler* assembler) { |
// Set the length field in the growable array object to 0. |
__ LoadImmediate(R1, 0); |
__ str(R1, FieldAddress(R0, GrowableObjectArray::length_offset())); |
+ __ BumpAllocationCount(Heap::kNew, kGrowableObjectArrayCid, R1); |
__ Ret(); // Returns the newly allocated object in R0. |
__ Bind(&fall_through); |
@@ -491,7 +492,7 @@ void Intrinsifier::GrowableList_add(Assembler* assembler) { |
__ LoadImmediate(R3, heap->TopAddress()); \ |
__ str(R1, Address(R3, 0)); \ |
__ AddImmediate(R0, kHeapObjectTag); \ |
- \ |
+ __ BumpAllocationCount(Heap::kNew, cid, R2, R4); \ |
/* Initialize the tags. */ \ |
/* R0: new object start as a tagged pointer. */ \ |
/* R1: new object end address. */ \ |
@@ -528,7 +529,6 @@ void Intrinsifier::GrowableList_add(Assembler* assembler) { |
__ str(R3, Address(R2, 0), CC); \ |
__ add(R2, R2, ShifterOperand(kWordSize), CC); \ |
__ b(&init_loop, CC); \ |
- \ |
__ Ret(); \ |
__ Bind(&fall_through); \ |
@@ -846,7 +846,7 @@ void Intrinsifier::Integer_shl(Assembler* assembler) { |
const Class& mint_class = Class::Handle( |
Isolate::Current()->object_store()->mint_class()); |
- __ TryAllocate(mint_class, &fall_through, R0); |
+ __ TryAllocate(mint_class, &fall_through, R0, R2); |
__ str(R1, FieldAddress(R0, Mint::value_offset())); |
@@ -1148,7 +1148,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, R0); // Result register. |
+ __ TryAllocate(double_class, &fall_through, R0, R1); // Result register. |
__ StoreDToOffset(D0, R0, Double::value_offset() - kHeapObjectTag); |
__ Ret(); |
__ Bind(&fall_through); |
@@ -1191,7 +1191,7 @@ void Intrinsifier::Double_mulFromInteger(Assembler* assembler) { |
__ vmuld(D0, D0, D1); |
const Class& double_class = Class::Handle( |
Isolate::Current()->object_store()->double_class()); |
- __ TryAllocate(double_class, &fall_through, R0); // Result register. |
+ __ TryAllocate(double_class, &fall_through, R0, R1); // Result register. |
__ StoreDToOffset(D0, R0, Double::value_offset() - kHeapObjectTag); |
__ Ret(); |
__ Bind(&fall_through); |
@@ -1210,7 +1210,7 @@ void Intrinsifier::Double_fromInteger(Assembler* assembler) { |
__ vcvtdi(D0, S0); |
const Class& double_class = Class::Handle( |
Isolate::Current()->object_store()->double_class()); |
- __ TryAllocate(double_class, &fall_through, R0); // Result register. |
+ __ TryAllocate(double_class, &fall_through, R0, R1); // Result register. |
__ StoreDToOffset(D0, R0, Double::value_offset() - kHeapObjectTag); |
__ Ret(); |
__ Bind(&fall_through); |
@@ -1291,7 +1291,7 @@ void Intrinsifier::Math_sqrt(Assembler* assembler) { |
__ vsqrtd(D0, D1); |
const Class& double_class = Class::Handle( |
Isolate::Current()->object_store()->double_class()); |
- __ TryAllocate(double_class, &fall_through, R0); // Result register. |
+ __ TryAllocate(double_class, &fall_through, R0, R1); // Result register. |
__ StoreDToOffset(D0, R0, Double::value_offset() - kHeapObjectTag); |
__ Ret(); |
__ Bind(&is_smi); |
@@ -1522,6 +1522,7 @@ static void TryAllocateOnebyteString(Assembler* assembler, |
// next object start and initialize the object. |
__ str(R1, Address(R3, 0)); |
__ AddImmediate(R0, kHeapObjectTag); |
+ __ BumpAllocationCount(Heap::kNew, kOneByteStringCid, R2, R3); |
// Initialize the tags. |
// R0: new object start as a tagged pointer. |
@@ -1551,7 +1552,6 @@ static void TryAllocateOnebyteString(Assembler* assembler, |
__ LoadImmediate(TMP, 0); |
__ str(TMP, FieldAddress(R0, String::hash_offset())); |
__ b(ok); |
- |
__ Bind(&fail); |
__ b(failure); |
} |