| Index: src/ia32/macro-assembler-ia32.cc
|
| diff --git a/src/ia32/macro-assembler-ia32.cc b/src/ia32/macro-assembler-ia32.cc
|
| index 2d4f4cdb2f551966f55b646299f27c3c014400c9..95a35965a11751938c3daa6652d7733667d2bace 100644
|
| --- a/src/ia32/macro-assembler-ia32.cc
|
| +++ b/src/ia32/macro-assembler-ia32.cc
|
| @@ -2578,9 +2578,9 @@ 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, MemoryChunk::kHeaderSize));
|
| - j(not_zero, &done, Label::kNear);
|
|
|
| if (FLAG_debug_code) {
|
| + j(not_zero, &done);
|
| // Check for impossible bit pattern.
|
| Label ok;
|
| push(mask_scratch);
|
| @@ -2591,6 +2591,8 @@ void MacroAssembler::EnsureNotWhite(
|
| int3();
|
| bind(&ok);
|
| pop(mask_scratch);
|
| + } else {
|
| + j(not_zero, &done, Label::kNear);
|
| }
|
|
|
| // Value is white. We check whether it is data that doesn't need scanning.
|
| @@ -2621,13 +2623,15 @@ void MacroAssembler::EnsureNotWhite(
|
| // If it's external, the length is just ExternalString::kSize.
|
| // Otherwise it's String::kHeaderSize + string->length() * (1 or 2).
|
| Label not_external;
|
| - // External strings are the only ones with the kExternalStringTag bit
|
| - // set.
|
| + // External strings are the only ones with the kExternalStringTag bit set.
|
| ASSERT_EQ(0, kSeqStringTag & kExternalStringTag);
|
| ASSERT_EQ(0, kConsStringTag & kExternalStringTag);
|
| test_b(instance_type, kExternalStringTag);
|
| j(zero, ¬_external, Label::kNear);
|
| mov(length, Immediate(ExternalString::kSize));
|
| + test_b(instance_type, kBufferedStringTag);
|
| + j(zero, &is_data_object, Label::kNear);
|
| + mov(length, Immediate(ExternalString::kExtendedSize));
|
| jmp(&is_data_object, Label::kNear);
|
|
|
| bind(¬_external);
|
|
|