| Index: src/arm64/macro-assembler-arm64.cc
|
| diff --git a/src/arm64/macro-assembler-arm64.cc b/src/arm64/macro-assembler-arm64.cc
|
| index f3ab071af722f433a8f552e9fda3336b5c7d9869..ade500fc6725d05a5a7a03a644ea798de34547d3 100644
|
| --- a/src/arm64/macro-assembler-arm64.cc
|
| +++ b/src/arm64/macro-assembler-arm64.cc
|
| @@ -1574,10 +1574,9 @@ void MacroAssembler::InNewSpace(Register object,
|
| Label* branch) {
|
| DCHECK(cond == eq || cond == ne);
|
| UseScratchRegisterScope temps(this);
|
| - Register temp = temps.AcquireX();
|
| - And(temp, object, ExternalReference::new_space_mask(isolate()));
|
| - Cmp(temp, ExternalReference::new_space_start(isolate()));
|
| - B(cond, branch);
|
| + const int mask =
|
| + (1 << MemoryChunk::IN_FROM_SPACE) | (1 << MemoryChunk::IN_TO_SPACE);
|
| + CheckPageFlag(object, temps.AcquireSameSizeAs(object), mask, cond, branch);
|
| }
|
|
|
|
|
| @@ -3990,6 +3989,17 @@ int MacroAssembler::SafepointRegisterStackIndex(int reg_code) {
|
| }
|
| }
|
|
|
| +void MacroAssembler::CheckPageFlag(const Register& object,
|
| + const Register& scratch, int mask,
|
| + Condition cc, Label* condition_met) {
|
| + And(scratch, object, ~Page::kPageAlignmentMask);
|
| + Ldr(scratch, MemOperand(scratch, MemoryChunk::kFlagsOffset));
|
| + if (cc == eq) {
|
| + TestAndBranchIfAnySet(scratch, mask, condition_met);
|
| + } else {
|
| + TestAndBranchIfAllClear(scratch, mask, condition_met);
|
| + }
|
| +}
|
|
|
| void MacroAssembler::CheckPageFlagSet(const Register& object,
|
| const Register& scratch,
|
|
|