Chromium Code Reviews| Index: src/x64/full-codegen-x64.cc |
| =================================================================== |
| --- src/x64/full-codegen-x64.cc (revision 8221) |
| +++ src/x64/full-codegen-x64.cc (working copy) |
| @@ -3145,8 +3145,15 @@ |
| __ movq(Operand(index_2, 0), object); |
| __ movq(Operand(index_1, 0), temp); |
| - Label new_space; |
| - __ InNewSpace(elements, temp, equal, &new_space); |
| + Label no_remembered_set; |
| + __ CheckPageFlag(elements, |
| + temp, |
| + MemoryChunk::SCAN_ON_SCAVENGE, |
| + not_zero, |
| + &no_remembered_set, |
| + Label::kNear); |
| + // Possible optimization: do a check that both values are Smis |
| + // (or them and test against Smi mask.) |
|
Lasse Reichstein
2011/06/10 13:55:44
Use JumpIf[Not]BothSmi in X64.
Erik Corry
2011/06/10 21:57:29
JumpIfBothSmi doesn't exist. I'll do this if I se
|
| // Since we are swapping two objects, the incremental marker is not disturbed, |
| // so we don't call the stub that handles this. |
| @@ -3155,7 +3162,8 @@ |
| __ RememberedSetHelper( |
| index_2, temp, kDontSaveFPRegs, MacroAssembler::kFallThroughAtEnd); |
| - __ bind(&new_space); |
| + __ bind(&no_remembered_set); |
| + |
| // We are done. Drop elements from the stack, and return undefined. |
| __ addq(rsp, Immediate(3 * kPointerSize)); |
| __ LoadRoot(rax, Heap::kUndefinedValueRootIndex); |