| Index: src/ia32/macro-assembler-ia32-inl.h
|
| diff --git a/src/ia32/macro-assembler-ia32-inl.h b/src/ia32/macro-assembler-ia32-inl.h
|
| index 748fea5e275b07bc53454a6620c434bd31c57453..634a3e1e2ee7ae3ceac912b0ce92fa3d03cb2411 100644
|
| --- a/src/ia32/macro-assembler-ia32-inl.h
|
| +++ b/src/ia32/macro-assembler-ia32-inl.h
|
| @@ -55,10 +55,7 @@ void MacroAssembler::InOldSpaceIsBlack(Register object,
|
| LabelType* is_black) {
|
| HasColour(object, scratch0, scratch1,
|
| is_black,
|
| - Page::kPageAlignmentMask,
|
| - MemoryChunk::kHeaderSize,
|
| - 1, 0, // kBlackBitPattern.
|
| - false); // In old space.
|
| + 1, 0); // kBlackBitPattern.
|
| ASSERT(strcmp(IncrementalMarking::kBlackBitPattern, "10") == 0);
|
| }
|
|
|
| @@ -70,10 +67,7 @@ void MacroAssembler::InNewSpaceIsBlack(Register object,
|
| LabelType* is_black) {
|
| HasColour(object, scratch0, scratch1,
|
| is_black,
|
| - ~HEAP->new_space()->mask(),
|
| - 0,
|
| - 1, 0, // kBlackBitPattern.
|
| - true); // In new space.
|
| + 1, 0); // kBlackBitPattern.
|
| ASSERT(strcmp(IncrementalMarking::kBlackBitPattern, "10") == 0);
|
| }
|
|
|
| @@ -83,27 +77,23 @@ void MacroAssembler::HasColour(Register object,
|
| Register bitmap_scratch,
|
| Register mask_scratch,
|
| LabelType* has_colour,
|
| - uint32_t mask,
|
| - int header_size,
|
| int first_bit,
|
| - int second_bit,
|
| - bool in_new_space) {
|
| + int second_bit) {
|
| ASSERT(!Aliasing(object, bitmap_scratch, mask_scratch, ecx));
|
| - int32_t high_mask = ~mask;
|
|
|
| - MarkBits(object, bitmap_scratch, mask_scratch, high_mask, in_new_space);
|
| + MarkBits(object, bitmap_scratch, mask_scratch);
|
|
|
| NearLabel other_colour, word_boundary;
|
| - test(mask_scratch, Operand(bitmap_scratch, header_size));
|
| + test(mask_scratch, Operand(bitmap_scratch, MemoryChunk::kHeaderSize));
|
| j(first_bit == 1 ? zero : not_zero, &other_colour);
|
| add(mask_scratch, Operand(mask_scratch)); // Shift left 1 by adding.
|
| j(zero, &word_boundary);
|
| - test(mask_scratch, Operand(bitmap_scratch, header_size));
|
| + test(mask_scratch, Operand(bitmap_scratch, MemoryChunk::kHeaderSize));
|
| j(second_bit == 1 ? not_zero : zero, has_colour);
|
| jmp(&other_colour);
|
|
|
| bind(&word_boundary);
|
| - test_b(Operand(bitmap_scratch, header_size + kPointerSize), 1);
|
| + test_b(Operand(bitmap_scratch, MemoryChunk::kHeaderSize + kPointerSize), 1);
|
|
|
| j(second_bit == 1 ? not_zero : zero, has_colour);
|
| bind(&other_colour);
|
| @@ -142,27 +132,20 @@ void MacroAssembler::IsDataObject(Register value,
|
|
|
| void MacroAssembler::MarkBits(Register addr_reg,
|
| Register bitmap_reg,
|
| - Register mask_reg,
|
| - int32_t high_mask,
|
| - bool in_new_space) {
|
| + Register mask_reg) {
|
| ASSERT(!Aliasing(addr_reg, bitmap_reg, mask_reg, ecx));
|
| - if (in_new_space) {
|
| - mov(bitmap_reg,
|
| - Immediate(ExternalReference::new_space_mark_bits(isolate())));
|
| - } else {
|
| - mov(bitmap_reg, Operand(addr_reg));
|
| - and_(bitmap_reg, high_mask);
|
| - }
|
| + mov(bitmap_reg, Operand(addr_reg));
|
| + and_(bitmap_reg, ~Page::kPageAlignmentMask);
|
| mov(ecx, Operand(addr_reg));
|
| - static const int kBitsPerCellLog2 =
|
| - Bitmap<MemoryChunk::BitmapStorageDescriptor>::kBitsPerCellLog2;
|
| - shr(ecx, kBitsPerCellLog2);
|
| - and_(ecx, ~((high_mask >> kBitsPerCellLog2) | (kPointerSize - 1)));
|
| + shr(ecx, Bitmap::kBitsPerCellLog2);
|
| + and_(ecx,
|
| + (Page::kPageAlignmentMask >> Bitmap::kBitsPerCellLog2) &
|
| + ~(kPointerSize - 1));
|
|
|
| add(bitmap_reg, Operand(ecx));
|
| mov(ecx, Operand(addr_reg));
|
| shr(ecx, kPointerSizeLog2);
|
| - and_(ecx, (1 << kBitsPerCellLog2) - 1);
|
| + and_(ecx, (1 << Bitmap::kBitsPerCellLog2) - 1);
|
| mov(mask_reg, Immediate(1));
|
| shl_cl(mask_reg);
|
| }
|
| @@ -176,11 +159,7 @@ void MacroAssembler::EnsureNotWhite(
|
| LabelType* value_is_white_and_not_data,
|
| bool in_new_space) {
|
| ASSERT(!Aliasing(value, bitmap_scratch, mask_scratch, ecx));
|
| - int32_t high_mask = in_new_space ?
|
| - HEAP->new_space()->mask() :
|
| - ~Page::kPageAlignmentMask;
|
| - int header_size = in_new_space ? 0 : MemoryChunk::kHeaderSize;
|
| - MarkBits(value, bitmap_scratch, mask_scratch, high_mask, in_new_space);
|
| + MarkBits(value, bitmap_scratch, mask_scratch);
|
|
|
| // If the value is black or grey we don't need to do anything.
|
| ASSERT(strcmp(IncrementalMarking::kWhiteBitPattern, "00") == 0);
|
| @@ -192,7 +171,7 @@ void MacroAssembler::EnsureNotWhite(
|
|
|
| // Since both black and grey have a 1 in the first position and white does
|
| // not have a 1 there we only need to check one bit.
|
| - test(mask_scratch, Operand(bitmap_scratch, header_size));
|
| + test(mask_scratch, Operand(bitmap_scratch, MemoryChunk::kHeaderSize));
|
| j(not_zero, &done);
|
|
|
| if (FLAG_debug_code) {
|
| @@ -201,7 +180,7 @@ void MacroAssembler::EnsureNotWhite(
|
| push(mask_scratch);
|
| // shl. May overflow making the check conservative.
|
| add(mask_scratch, Operand(mask_scratch));
|
| - test(mask_scratch, Operand(bitmap_scratch, header_size));
|
| + test(mask_scratch, Operand(bitmap_scratch, MemoryChunk::kHeaderSize));
|
| j(zero, &ok);
|
| int3();
|
| bind(&ok);
|
| @@ -213,7 +192,7 @@ void MacroAssembler::EnsureNotWhite(
|
|
|
| // Value is a data object, and it is white. Mark it black. Since we know
|
| // that the object is white we can make it black by flipping one bit.
|
| - or_(Operand(bitmap_scratch, header_size), mask_scratch);
|
| + or_(Operand(bitmap_scratch, MemoryChunk::kHeaderSize), mask_scratch);
|
| bind(&done);
|
| }
|
|
|
|
|