Chromium Code Reviews| Index: src/ia32/macro-assembler-ia32.cc |
| diff --git a/src/ia32/macro-assembler-ia32.cc b/src/ia32/macro-assembler-ia32.cc |
| index de0ef8ece9b27c84f0eab2b5d08fb80dbcde1ae1..246350b081a7b772244744c2436196975e82dae4 100644 |
| --- a/src/ia32/macro-assembler-ia32.cc |
| +++ b/src/ia32/macro-assembler-ia32.cc |
| @@ -70,25 +70,26 @@ static void RecordWriteHelper(MacroAssembler* masm, |
| // Adjust 'addr' to be relative to the start of the extra remembered set |
|
William Hesse
2009/08/05 10:17:50
This comment is no longer right. I would comment
Kevin Millikin (Chromium)
2009/08/05 10:26:15
I would ditch the whole comment and use symbolic a
|
| // and the page address in 'object' to be the address of the extra |
| // remembered set. |
| - masm->sub(Operand(addr), Immediate(Page::kPageSize / kPointerSize)); |
| - // Load the array length into 'scratch' and multiply by four to get the |
| - // size in bytes of the elements. |
| + |
| + // Find the length of the FixedArray. |
| masm->mov(scratch, Operand(object, Page::kObjectStartOffset |
| + FixedArray::kLengthOffset)); |
| - masm->shl(scratch, kObjectAlignmentBits); |
| - // Add the page header, array header, and array body size to the page |
| - // address. |
| - masm->add(Operand(object), Immediate(Page::kObjectStartOffset |
| - + FixedArray::kHeaderSize)); |
| - masm->add(object, Operand(scratch)); |
| - |
| + // The RSet extension area lies after the FixedArray, i.e., |
|
William Hesse
2009/08/05 10:17:50
how about "after the FixedArray, at"
|
| + // at |
| + // object + kObjectStartOffset + FixedArray::kHeaderSize + 8 * scratch |
|
Kevin Millikin (Chromium)
2009/08/05 10:26:15
Surely not 8?
|
| + // Make object point to (size of normal RSet) before that, so that we |
| + // can address the bit directly with addr. |
| + masm->lea(object, |
| + Operand(object, scratch, times_pointer_size, |
| + Page::kObjectStartOffset + FixedArray::kHeaderSize |
| + - Page::kRSetEndOffset)); |
| // NOTE: For now, we use the bit-test-and-set (bts) x86 instruction |
| // to limit code size. We should probably evaluate this decision by |
| // measuring the performance of an equivalent implementation using |
| // "simpler" instructions |
| masm->bind(&fast); |
| - masm->bts(Operand(object, 0), addr); |
| + masm->bts(Operand(object, Page::kRSetOffset), addr); |
| } |