| 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 634a3e1e2ee7ae3ceac912b0ce92fa3d03cb2411..e9cba90ded0d0919d79d584aa770bb95c5803926 100644
|
| --- a/src/ia32/macro-assembler-ia32-inl.h
|
| +++ b/src/ia32/macro-assembler-ia32-inl.h
|
| @@ -33,7 +33,6 @@
|
| namespace v8 {
|
| namespace internal {
|
|
|
| -
|
| template<typename LabelType>
|
| void MacroAssembler::CheckPageFlag(
|
| Register object,
|
| @@ -41,9 +40,19 @@ void MacroAssembler::CheckPageFlag(
|
| MemoryChunk::MemoryChunkFlags flag,
|
| Condition cc,
|
| LabelType* condition_met) {
|
| - Move(scratch, object);
|
| - and_(scratch, ~Page::kPageAlignmentMask);
|
| - test(Operand(scratch, MemoryChunk::kFlagsOffset), Immediate(1 << flag));
|
| + ASSERT(cc == zero || cc == not_zero);
|
| + if (scratch.is(object)) {
|
| + and_(scratch, Immediate(~Page::kPageAlignmentMask));
|
| + } else {
|
| + mov(scratch, Immediate(~Page::kPageAlignmentMask));
|
| + and_(scratch, Operand(object));
|
| + }
|
| + if (flag < kBitsPerByte) {
|
| + test_b(Operand(scratch, MemoryChunk::kFlagsOffset),
|
| + static_cast<uint8_t>(1u << flag));
|
| + } else {
|
| + test(Operand(scratch, MemoryChunk::kFlagsOffset), Immediate(1 << flag));
|
| + }
|
| j(cc, condition_met);
|
| }
|
|
|
|
|