Chromium Code Reviews| Index: runtime/vm/intrinsifier_ia32.cc |
| diff --git a/runtime/vm/intrinsifier_ia32.cc b/runtime/vm/intrinsifier_ia32.cc |
| index 75054ce3ddb5fba3f3328c8eb6601b62a4731c5f..60a3b5dd484a55a0e5d53e3a9df9ac98b792b13d 100644 |
| --- a/runtime/vm/intrinsifier_ia32.cc |
| +++ b/runtime/vm/intrinsifier_ia32.cc |
| @@ -76,6 +76,7 @@ void Intrinsifier::List_Allocate(Assembler* assembler) { |
| // next object start and initialize the object. |
| __ movl(Address::Absolute(heap->TopAddress()), EBX); |
| __ addl(EAX, Immediate(kHeapObjectTag)); |
| + __ BumpAllocationCount(Heap::kNew, kArrayCid, EDI, kNoRegister); |
| // Initialize the tags. |
| // EAX: new object start as a tagged pointer. |
| @@ -303,6 +304,7 @@ void Intrinsifier::GrowableList_Allocate(Assembler* assembler) { |
| // Set the length field in the growable array object to 0. |
| __ movl(FieldAddress(EAX, GrowableObjectArray::length_offset()), |
| Immediate(0)); |
| + __ BumpAllocationCount(Heap::kNew, kGrowableObjectArrayCid, EBX); |
| __ ret(); // returns the newly allocated object in EAX. |
| __ Bind(&fall_through); |
| @@ -492,6 +494,7 @@ void Intrinsifier::GrowableList_add(Assembler* assembler) { |
| /* next object start and initialize the object. */ \ |
| __ movl(Address::Absolute(heap->TopAddress()), EBX); \ |
| __ addl(EAX, Immediate(kHeapObjectTag)); \ |
| + __ BumpAllocationCount(Heap::kNew, cid, EDI, kNoRegister); \ |
| \ |
| /* Initialize the tags. */ \ |
| /* EAX: new object start as a tagged pointer. */ \ |
| @@ -856,7 +859,8 @@ void Intrinsifier::Integer_shl(Assembler* assembler) { |
| __ TryAllocate(mint_class, |
| &fall_through, |
| Assembler::kNearJump, |
| - EAX); // Result register. |
| + EAX, // Result register. |
| + kNoRegister); |
| // EBX and EDI are not objects but integer values. |
| __ movl(FieldAddress(EAX, Mint::value_offset()), EBX); |
| __ movl(FieldAddress(EAX, Mint::value_offset() + kWordSize), EDI); |
| @@ -1177,7 +1181,8 @@ static void DoubleArithmeticOperations(Assembler* assembler, Token::Kind kind) { |
| __ TryAllocate(double_class, |
| &fall_through, |
| Assembler::kNearJump, |
| - EAX); // Result register. |
| + EAX, // Result register. |
| + EBX); |
|
Ivan Posva
2013/12/12 13:53:24
When do you need to pass a temp register on ia32?
|
| __ movsd(FieldAddress(EAX, Double::value_offset()), XMM0); |
| __ ret(); |
| __ Bind(&fall_through); |
| @@ -1222,7 +1227,8 @@ void Intrinsifier::Double_mulFromInteger(Assembler* assembler) { |
| __ TryAllocate(double_class, |
| &fall_through, |
| Assembler::kNearJump, |
| - EAX); // Result register. |
| + EAX, // Result register. |
| + EBX); |
| __ movsd(FieldAddress(EAX, Double::value_offset()), XMM0); |
| __ ret(); |
| __ Bind(&fall_through); |
| @@ -1242,7 +1248,8 @@ void Intrinsifier::Double_fromInteger(Assembler* assembler) { |
| __ TryAllocate(double_class, |
| &fall_through, |
| Assembler::kNearJump, |
| - EAX); // Result register. |
| + EAX, // Result register. |
| + EBX); |
| __ movsd(FieldAddress(EAX, Double::value_offset()), XMM0); |
| __ ret(); |
| __ Bind(&fall_through); |
| @@ -1315,7 +1322,8 @@ void Intrinsifier::Math_sqrt(Assembler* assembler) { |
| __ TryAllocate(double_class, |
| &fall_through, |
| Assembler::kNearJump, |
| - EAX); // Result register. |
| + EAX, // Result register. |
| + EBX); |
| __ movsd(FieldAddress(EAX, Double::value_offset()), XMM0); |
| __ ret(); |
| __ Bind(&is_smi); |
| @@ -1351,7 +1359,8 @@ static void EmitTrigonometric(Assembler* assembler, |
| __ TryAllocate(double_class, |
| &alloc_failed, |
| Assembler::kNearJump, |
| - EAX); // Result register. |
| + EAX, // Result register. |
| + EBX); |
| __ fstpl(FieldAddress(EAX, Double::value_offset())); |
| __ ret(); |
| @@ -1610,6 +1619,8 @@ static void TryAllocateOnebyteString(Assembler* assembler, |
| __ movl(Address::Absolute(heap->TopAddress()), EBX); |
| __ addl(EAX, Immediate(kHeapObjectTag)); |
| + __ BumpAllocationCount(Heap::kNew, kOneByteStringCid, EDI, kNoRegister); |
| + |
| // Initialize the tags. |
| // EAX: new object start as a tagged pointer. |
| // EBX: new object end address. |