[macro-assembler] Remove RememberedSetFinalAction since kFallThroughAtEnd is unused

Bug: 
Change-Id: I8589ea37ab776d867794125d35e1e51b16d6e9a3
Reviewed-on: https://chromium-review.googlesource.com/707068
Commit-Queue: Toon Verwaest <verwaest@chromium.org>
Reviewed-by: Hannes Payer <hpayer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#48386}
This commit is contained in:
Toon Verwaest 2017-10-09 16:03:27 +02:00 committed by Commit Bot
parent 203776545a
commit 3baf964aeb
24 changed files with 79 additions and 247 deletions

View File

@ -962,8 +962,7 @@ void RecordWriteStub::Generate(MacroAssembler* masm) {
} }
if (remembered_set_action() == EMIT_REMEMBERED_SET) { if (remembered_set_action() == EMIT_REMEMBERED_SET) {
__ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
MacroAssembler::kReturnAtEnd);
} }
__ Ret(); __ Ret();
@ -1002,8 +1001,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode); masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode);
InformIncrementalMarker(masm); InformIncrementalMarker(masm);
regs_.Restore(masm); regs_.Restore(masm);
__ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
MacroAssembler::kReturnAtEnd);
__ bind(&dont_need_remembered_set); __ bind(&dont_need_remembered_set);
} }
@ -1054,8 +1052,7 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
regs_.Restore(masm); regs_.Restore(masm);
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) { if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
__ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
MacroAssembler::kReturnAtEnd);
} else { } else {
__ Ret(); __ Ret();
} }
@ -1096,8 +1093,7 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
regs_.Restore(masm); regs_.Restore(masm);
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) { if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
__ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
MacroAssembler::kReturnAtEnd);
} else { } else {
__ Ret(); __ Ret();
} }

View File

@ -694,10 +694,8 @@ void MacroAssembler::RecordWrite(
} }
void MacroAssembler::RememberedSetHelper(Register object, // For debug tests. void MacroAssembler::RememberedSetHelper(Register object, // For debug tests.
Register address, Register address, Register scratch,
Register scratch, SaveFPRegsMode fp_mode) {
SaveFPRegsMode fp_mode,
RememberedSetFinalAction and_then) {
Label done; Label done;
if (emit_debug_code()) { if (emit_debug_code()) {
Label ok; Label ok;
@ -719,20 +717,13 @@ void MacroAssembler::RememberedSetHelper(Register object, // For debug tests.
// Call stub on end of buffer. // Call stub on end of buffer.
// Check for end of buffer. // Check for end of buffer.
tst(scratch, Operand(StoreBuffer::kStoreBufferMask)); tst(scratch, Operand(StoreBuffer::kStoreBufferMask));
if (and_then == kFallThroughAtEnd) { Ret(ne);
b(ne, &done);
} else {
DCHECK(and_then == kReturnAtEnd);
Ret(ne);
}
push(lr); push(lr);
StoreBufferOverflowStub store_buffer_overflow(isolate(), fp_mode); StoreBufferOverflowStub store_buffer_overflow(isolate(), fp_mode);
CallStub(&store_buffer_overflow); CallStub(&store_buffer_overflow);
pop(lr); pop(lr);
bind(&done); bind(&done);
if (and_then == kReturnAtEnd) { Ret();
Ret();
}
} }
void TurboAssembler::PushCommonFrame(Register marker_reg) { void TurboAssembler::PushCommonFrame(Register marker_reg) {

View File

@ -619,15 +619,12 @@ class MacroAssembler : public TurboAssembler {
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// GC Support // GC Support
enum RememberedSetFinalAction { kReturnAtEnd, kFallThroughAtEnd };
// Record in the remembered set the fact that we have a pointer to new space // Record in the remembered set the fact that we have a pointer to new space
// at the address pointed to by the addr register. Only works if addr is not // at the address pointed to by the addr register. Only works if addr is not
// in new space. // in new space.
void RememberedSetHelper(Register object, // Used for debug code. void RememberedSetHelper(Register object, // Used for debug code.
Register addr, Register scratch, Register addr, Register scratch,
SaveFPRegsMode save_fp, SaveFPRegsMode save_fp);
RememberedSetFinalAction and_then);
// Check if object is in new space. Jumps if the object is not in new space. // Check if object is in new space. Jumps if the object is not in new space.
// The register scratch can be object itself, but scratch will be clobbered. // The register scratch can be object itself, but scratch will be clobbered.

View File

@ -965,7 +965,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
__ RememberedSetHelper(object(), address(), __ RememberedSetHelper(object(), address(),
value(), // scratch1 value(), // scratch1
save_fp_regs_mode(), MacroAssembler::kReturnAtEnd); save_fp_regs_mode());
__ Bind(&dont_need_remembered_set); __ Bind(&dont_need_remembered_set);
} }
@ -1018,7 +1018,7 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) { if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
__ RememberedSetHelper(object(), address(), __ RememberedSetHelper(object(), address(),
value(), // scratch1 value(), // scratch1
save_fp_regs_mode(), MacroAssembler::kReturnAtEnd); save_fp_regs_mode());
} else { } else {
__ Ret(); __ Ret();
} }
@ -1060,7 +1060,7 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) { if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
__ RememberedSetHelper(object(), address(), __ RememberedSetHelper(object(), address(),
value(), // scratch1 value(), // scratch1
save_fp_regs_mode(), MacroAssembler::kReturnAtEnd); save_fp_regs_mode());
} else { } else {
__ Ret(); __ Ret();
} }
@ -1091,7 +1091,7 @@ void RecordWriteStub::Generate(MacroAssembler* masm) {
if (remembered_set_action() == EMIT_REMEMBERED_SET) { if (remembered_set_action() == EMIT_REMEMBERED_SET) {
__ RememberedSetHelper(object(), address(), __ RememberedSetHelper(object(), address(),
value(), // scratch1 value(), // scratch1
save_fp_regs_mode(), MacroAssembler::kReturnAtEnd); save_fp_regs_mode());
} }
__ Ret(); __ Ret();

View File

@ -2822,10 +2822,8 @@ bool TurboAssembler::AllowThisStubCall(CodeStub* stub) {
} }
void MacroAssembler::RememberedSetHelper(Register object, // For debug tests. void MacroAssembler::RememberedSetHelper(Register object, // For debug tests.
Register address, Register address, Register scratch1,
Register scratch1, SaveFPRegsMode fp_mode) {
SaveFPRegsMode fp_mode,
RememberedSetFinalAction and_then) {
DCHECK(!AreAliased(object, address, scratch1)); DCHECK(!AreAliased(object, address, scratch1));
Label done, store_buffer_overflow; Label done, store_buffer_overflow;
if (emit_debug_code()) { if (emit_debug_code()) {
@ -2847,13 +2845,8 @@ void MacroAssembler::RememberedSetHelper(Register object, // For debug tests.
// Call stub on end of buffer. // Call stub on end of buffer.
// Check for end of buffer. // Check for end of buffer.
Tst(scratch1, StoreBuffer::kStoreBufferMask); Tst(scratch1, StoreBuffer::kStoreBufferMask);
if (and_then == kFallThroughAtEnd) { B(eq, &store_buffer_overflow);
B(ne, &done); Ret();
} else {
DCHECK(and_then == kReturnAtEnd);
B(eq, &store_buffer_overflow);
Ret();
}
Bind(&store_buffer_overflow); Bind(&store_buffer_overflow);
Push(lr); Push(lr);
@ -2862,9 +2855,7 @@ void MacroAssembler::RememberedSetHelper(Register object, // For debug tests.
Pop(lr); Pop(lr);
Bind(&done); Bind(&done);
if (and_then == kReturnAtEnd) { Ret();
Ret();
}
} }

View File

@ -2065,19 +2065,12 @@ class MacroAssembler : public TurboAssembler {
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Garbage collector support (GC). // Garbage collector support (GC).
enum RememberedSetFinalAction {
kReturnAtEnd,
kFallThroughAtEnd
};
// Record in the remembered set the fact that we have a pointer to new space // Record in the remembered set the fact that we have a pointer to new space
// at the address pointed to by the addr register. Only works if addr is not // at the address pointed to by the addr register. Only works if addr is not
// in new space. // in new space.
void RememberedSetHelper(Register object, // Used for debug code. void RememberedSetHelper(Register object, // Used for debug code.
Register addr, Register addr, Register scratch1,
Register scratch1, SaveFPRegsMode save_fp);
SaveFPRegsMode save_fp,
RememberedSetFinalAction and_then);
// Push and pop the registers that can hold pointers, as defined by the // Push and pop the registers that can hold pointers, as defined by the
// RegList constant kSafepointSavedRegisters. // RegList constant kSafepointSavedRegisters.

View File

@ -1031,8 +1031,7 @@ void RecordWriteStub::Generate(MacroAssembler* masm) {
__ jmp(&skip_to_incremental_compacting, Label::kFar); __ jmp(&skip_to_incremental_compacting, Label::kFar);
if (remembered_set_action() == EMIT_REMEMBERED_SET) { if (remembered_set_action() == EMIT_REMEMBERED_SET) {
__ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
MacroAssembler::kReturnAtEnd);
} else { } else {
__ ret(0); __ ret(0);
} }
@ -1072,8 +1071,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
mode); mode);
InformIncrementalMarker(masm); InformIncrementalMarker(masm);
regs_.Restore(masm); regs_.Restore(masm);
__ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
MacroAssembler::kReturnAtEnd);
__ bind(&dont_need_remembered_set); __ bind(&dont_need_remembered_set);
} }
@ -1127,8 +1125,7 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
regs_.Restore(masm); regs_.Restore(masm);
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) { if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
__ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
MacroAssembler::kReturnAtEnd);
} else { } else {
__ ret(0); __ ret(0);
} }
@ -1172,8 +1169,7 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
regs_.Restore(masm); regs_.Restore(masm);
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) { if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
__ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
MacroAssembler::kReturnAtEnd);
} else { } else {
__ ret(0); __ ret(0);
} }

View File

@ -185,13 +185,9 @@ void MacroAssembler::InNewSpace(Register object, Register scratch, Condition cc,
condition_met, distance); condition_met, distance);
} }
void MacroAssembler::RememberedSetHelper( void MacroAssembler::RememberedSetHelper(
Register object, // Only used for debug checks. Register object, // Only used for debug checks.
Register addr, Register addr, Register scratch, SaveFPRegsMode save_fp) {
Register scratch,
SaveFPRegsMode save_fp,
MacroAssembler::RememberedSetFinalAction and_then) {
Label done; Label done;
if (emit_debug_code()) { if (emit_debug_code()) {
Label ok; Label ok;
@ -212,23 +208,13 @@ void MacroAssembler::RememberedSetHelper(
// Call stub on end of buffer. // Call stub on end of buffer.
// Check for end of buffer. // Check for end of buffer.
test(scratch, Immediate(StoreBuffer::kStoreBufferMask)); test(scratch, Immediate(StoreBuffer::kStoreBufferMask));
if (and_then == kReturnAtEnd) { Label buffer_overflowed;
Label buffer_overflowed; j(equal, &buffer_overflowed, Label::kNear);
j(equal, &buffer_overflowed, Label::kNear); ret(0);
ret(0); bind(&buffer_overflowed);
bind(&buffer_overflowed);
} else {
DCHECK(and_then == kFallThroughAtEnd);
j(not_equal, &done, Label::kNear);
}
StoreBufferOverflowStub store_buffer_overflow(isolate(), save_fp); StoreBufferOverflowStub store_buffer_overflow(isolate(), save_fp);
CallStub(&store_buffer_overflow); CallStub(&store_buffer_overflow);
if (and_then == kReturnAtEnd) { ret(0);
ret(0);
} else {
DCHECK(and_then == kFallThroughAtEnd);
bind(&done);
}
} }
void TurboAssembler::SlowTruncateToIDelayed(Zone* zone, Register result_reg, void TurboAssembler::SlowTruncateToIDelayed(Zone* zone, Register result_reg,

View File

@ -382,15 +382,12 @@ class MacroAssembler : public TurboAssembler {
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// GC Support // GC Support
enum RememberedSetFinalAction { kReturnAtEnd, kFallThroughAtEnd };
// Record in the remembered set the fact that we have a pointer to new space // Record in the remembered set the fact that we have a pointer to new space
// at the address pointed to by the addr register. Only works if addr is not // at the address pointed to by the addr register. Only works if addr is not
// in new space. // in new space.
void RememberedSetHelper(Register object, // Used for debug code. void RememberedSetHelper(Register object, // Used for debug code.
Register addr, Register scratch, Register addr, Register scratch,
SaveFPRegsMode save_fp, SaveFPRegsMode save_fp);
RememberedSetFinalAction and_then);
// Check if object is in new space. Jumps if the object is not in new space. // Check if object is in new space. Jumps if the object is not in new space.
// The register scratch can be object itself, but scratch will be clobbered. // The register scratch can be object itself, but scratch will be clobbered.

View File

@ -1085,11 +1085,7 @@ void RecordWriteStub::Generate(MacroAssembler* masm) {
__ nop(); __ nop();
if (remembered_set_action() == EMIT_REMEMBERED_SET) { if (remembered_set_action() == EMIT_REMEMBERED_SET) {
__ RememberedSetHelper(object(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
address(),
value(),
save_fp_regs_mode(),
MacroAssembler::kReturnAtEnd);
} }
__ Ret(); __ Ret();
@ -1127,11 +1123,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode); masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode);
InformIncrementalMarker(masm); InformIncrementalMarker(masm);
regs_.Restore(masm); regs_.Restore(masm);
__ RememberedSetHelper(object(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
address(),
value(),
save_fp_regs_mode(),
MacroAssembler::kReturnAtEnd);
__ bind(&dont_need_remembered_set); __ bind(&dont_need_remembered_set);
} }
@ -1182,11 +1174,7 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
regs_.Restore(masm); regs_.Restore(masm);
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) { if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
__ RememberedSetHelper(object(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
address(),
value(),
save_fp_regs_mode(),
MacroAssembler::kReturnAtEnd);
} else { } else {
__ Ret(); __ Ret();
} }
@ -1227,11 +1215,7 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
regs_.Restore(masm); regs_.Restore(masm);
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) { if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
__ RememberedSetHelper(object(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
address(),
value(),
save_fp_regs_mode(),
MacroAssembler::kReturnAtEnd);
} else { } else {
__ Ret(); __ Ret();
} }

View File

@ -385,10 +385,8 @@ void MacroAssembler::RecordWrite(
} }
void MacroAssembler::RememberedSetHelper(Register object, // For debug tests. void MacroAssembler::RememberedSetHelper(Register object, // For debug tests.
Register address, Register address, Register scratch,
Register scratch, SaveFPRegsMode fp_mode) {
SaveFPRegsMode fp_mode,
RememberedSetFinalAction and_then) {
Label done; Label done;
if (emit_debug_code()) { if (emit_debug_code()) {
Label ok; Label ok;
@ -409,20 +407,13 @@ void MacroAssembler::RememberedSetHelper(Register object, // For debug tests.
// Call stub on end of buffer. // Call stub on end of buffer.
// Check for end of buffer. // Check for end of buffer.
And(t8, scratch, Operand(StoreBuffer::kStoreBufferMask)); And(t8, scratch, Operand(StoreBuffer::kStoreBufferMask));
if (and_then == kFallThroughAtEnd) { Ret(ne, t8, Operand(zero_reg));
Branch(&done, ne, t8, Operand(zero_reg));
} else {
DCHECK(and_then == kReturnAtEnd);
Ret(ne, t8, Operand(zero_reg));
}
push(ra); push(ra);
StoreBufferOverflowStub store_buffer_overflow(isolate(), fp_mode); StoreBufferOverflowStub store_buffer_overflow(isolate(), fp_mode);
CallStub(&store_buffer_overflow); CallStub(&store_buffer_overflow);
pop(ra); pop(ra);
bind(&done); bind(&done);
if (and_then == kReturnAtEnd) { Ret();
Ret();
}
} }

View File

@ -961,15 +961,12 @@ class MacroAssembler : public TurboAssembler {
void IncrementalMarkingRecordWriteHelper(Register object, Register value, void IncrementalMarkingRecordWriteHelper(Register object, Register value,
Register address); Register address);
enum RememberedSetFinalAction { kReturnAtEnd, kFallThroughAtEnd };
// Record in the remembered set the fact that we have a pointer to new space // Record in the remembered set the fact that we have a pointer to new space
// at the address pointed to by the addr register. Only works if addr is not // at the address pointed to by the addr register. Only works if addr is not
// in new space. // in new space.
void RememberedSetHelper(Register object, // Used for debug code. void RememberedSetHelper(Register object, // Used for debug code.
Register addr, Register scratch, Register addr, Register scratch,
SaveFPRegsMode save_fp, SaveFPRegsMode save_fp);
RememberedSetFinalAction and_then);
// Check if object is in new space. Jumps if the object is not in new space. // Check if object is in new space. Jumps if the object is not in new space.
// The register scratch can be object itself, but it will be clobbered. // The register scratch can be object itself, but it will be clobbered.

View File

@ -1082,11 +1082,7 @@ void RecordWriteStub::Generate(MacroAssembler* masm) {
__ nop(); __ nop();
if (remembered_set_action() == EMIT_REMEMBERED_SET) { if (remembered_set_action() == EMIT_REMEMBERED_SET) {
__ RememberedSetHelper(object(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
address(),
value(),
save_fp_regs_mode(),
MacroAssembler::kReturnAtEnd);
} }
__ Ret(); __ Ret();
@ -1124,11 +1120,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode); masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode);
InformIncrementalMarker(masm); InformIncrementalMarker(masm);
regs_.Restore(masm); regs_.Restore(masm);
__ RememberedSetHelper(object(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
address(),
value(),
save_fp_regs_mode(),
MacroAssembler::kReturnAtEnd);
__ bind(&dont_need_remembered_set); __ bind(&dont_need_remembered_set);
} }
@ -1179,11 +1171,7 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
regs_.Restore(masm); regs_.Restore(masm);
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) { if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
__ RememberedSetHelper(object(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
address(),
value(),
save_fp_regs_mode(),
MacroAssembler::kReturnAtEnd);
} else { } else {
__ Ret(); __ Ret();
} }
@ -1224,11 +1212,7 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
regs_.Restore(masm); regs_.Restore(masm);
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) { if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
__ RememberedSetHelper(object(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
address(),
value(),
save_fp_regs_mode(),
MacroAssembler::kReturnAtEnd);
} else { } else {
__ Ret(); __ Ret();
} }

View File

@ -385,10 +385,8 @@ void MacroAssembler::RecordWrite(
} }
void MacroAssembler::RememberedSetHelper(Register object, // For debug tests. void MacroAssembler::RememberedSetHelper(Register object, // For debug tests.
Register address, Register address, Register scratch,
Register scratch, SaveFPRegsMode fp_mode) {
SaveFPRegsMode fp_mode,
RememberedSetFinalAction and_then) {
Label done; Label done;
if (emit_debug_code()) { if (emit_debug_code()) {
Label ok; Label ok;
@ -410,20 +408,13 @@ void MacroAssembler::RememberedSetHelper(Register object, // For debug tests.
// Check for end of buffer. // Check for end of buffer.
And(t8, scratch, Operand(StoreBuffer::kStoreBufferMask)); And(t8, scratch, Operand(StoreBuffer::kStoreBufferMask));
DCHECK(scratch != t8); DCHECK(scratch != t8);
if (and_then == kFallThroughAtEnd) { Ret(ne, t8, Operand(zero_reg));
Branch(&done, ne, t8, Operand(zero_reg));
} else {
DCHECK(and_then == kReturnAtEnd);
Ret(ne, t8, Operand(zero_reg));
}
push(ra); push(ra);
StoreBufferOverflowStub store_buffer_overflow(isolate(), fp_mode); StoreBufferOverflowStub store_buffer_overflow(isolate(), fp_mode);
CallStub(&store_buffer_overflow); CallStub(&store_buffer_overflow);
pop(ra); pop(ra);
bind(&done); bind(&done);
if (and_then == kReturnAtEnd) { Ret();
Ret();
}
} }

View File

@ -993,20 +993,12 @@ class MacroAssembler : public TurboAssembler {
Register value, Register value,
Register address); Register address);
enum RememberedSetFinalAction {
kReturnAtEnd,
kFallThroughAtEnd
};
// Record in the remembered set the fact that we have a pointer to new space // Record in the remembered set the fact that we have a pointer to new space
// at the address pointed to by the addr register. Only works if addr is not // at the address pointed to by the addr register. Only works if addr is not
// in new space. // in new space.
void RememberedSetHelper(Register object, // Used for debug code. void RememberedSetHelper(Register object, // Used for debug code.
Register addr, Register addr, Register scratch,
Register scratch, SaveFPRegsMode save_fp);
SaveFPRegsMode save_fp,
RememberedSetFinalAction and_then);
// Check if object is in new space. Jumps if the object is not in new space. // Check if object is in new space. Jumps if the object is not in new space.
// The register scratch can be object itself, but it will be clobbered. // The register scratch can be object itself, but it will be clobbered.

View File

@ -1070,8 +1070,7 @@ void RecordWriteStub::Generate(MacroAssembler* masm) {
__ blt(&skip_to_incremental_compacting, cr2); __ blt(&skip_to_incremental_compacting, cr2);
if (remembered_set_action() == EMIT_REMEMBERED_SET) { if (remembered_set_action() == EMIT_REMEMBERED_SET) {
__ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
MacroAssembler::kReturnAtEnd);
} }
__ Ret(); __ Ret();
@ -1106,8 +1105,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode); masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode);
InformIncrementalMarker(masm); InformIncrementalMarker(masm);
regs_.Restore(masm); regs_.Restore(masm);
__ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
MacroAssembler::kReturnAtEnd);
__ bind(&dont_need_remembered_set); __ bind(&dont_need_remembered_set);
} }
@ -1157,8 +1155,7 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
regs_.Restore(masm); regs_.Restore(masm);
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) { if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
__ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
MacroAssembler::kReturnAtEnd);
} else { } else {
__ Ret(); __ Ret();
} }
@ -1197,8 +1194,7 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
regs_.Restore(masm); regs_.Restore(masm);
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) { if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
__ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
MacroAssembler::kReturnAtEnd);
} else { } else {
__ Ret(); __ Ret();
} }

View File

@ -510,8 +510,7 @@ void MacroAssembler::RecordWrite(
void MacroAssembler::RememberedSetHelper(Register object, // For debug tests. void MacroAssembler::RememberedSetHelper(Register object, // For debug tests.
Register address, Register scratch, Register address, Register scratch,
SaveFPRegsMode fp_mode, SaveFPRegsMode fp_mode) {
RememberedSetFinalAction and_then) {
Label done; Label done;
if (emit_debug_code()) { if (emit_debug_code()) {
Label ok; Label ok;
@ -533,12 +532,7 @@ void MacroAssembler::RememberedSetHelper(Register object, // For debug tests.
// Check for end of buffer. // Check for end of buffer.
TestBitMask(scratch, StoreBuffer::kStoreBufferMask, r0); TestBitMask(scratch, StoreBuffer::kStoreBufferMask, r0);
if (and_then == kFallThroughAtEnd) { Ret(ne, cr0);
bne(&done, cr0);
} else {
DCHECK(and_then == kReturnAtEnd);
Ret(ne, cr0);
}
mflr(r0); mflr(r0);
push(r0); push(r0);
StoreBufferOverflowStub store_buffer_overflow(isolate(), fp_mode); StoreBufferOverflowStub store_buffer_overflow(isolate(), fp_mode);
@ -546,9 +540,7 @@ void MacroAssembler::RememberedSetHelper(Register object, // For debug tests.
pop(r0); pop(r0);
mtlr(r0); mtlr(r0);
bind(&done); bind(&done);
if (and_then == kReturnAtEnd) { Ret();
Ret();
}
} }
void TurboAssembler::PushCommonFrame(Register marker_reg) { void TurboAssembler::PushCommonFrame(Register marker_reg) {

View File

@ -671,15 +671,12 @@ class MacroAssembler : public TurboAssembler {
void IncrementalMarkingRecordWriteHelper(Register object, Register value, void IncrementalMarkingRecordWriteHelper(Register object, Register value,
Register address); Register address);
enum RememberedSetFinalAction { kReturnAtEnd, kFallThroughAtEnd };
// Record in the remembered set the fact that we have a pointer to new space // Record in the remembered set the fact that we have a pointer to new space
// at the address pointed to by the addr register. Only works if addr is not // at the address pointed to by the addr register. Only works if addr is not
// in new space. // in new space.
void RememberedSetHelper(Register object, // Used for debug code. void RememberedSetHelper(Register object, // Used for debug code.
Register addr, Register scratch, Register addr, Register scratch,
SaveFPRegsMode save_fp, SaveFPRegsMode save_fp);
RememberedSetFinalAction and_then);
void JumpToJSEntry(Register target); void JumpToJSEntry(Register target);
// Check if object is in new space. Jumps if the object is not in new space. // Check if object is in new space. Jumps if the object is not in new space.

View File

@ -1063,8 +1063,7 @@ void RecordWriteStub::Generate(MacroAssembler* masm) {
__ b(CC_NOP, &skip_to_incremental_compacting); __ b(CC_NOP, &skip_to_incremental_compacting);
if (remembered_set_action() == EMIT_REMEMBERED_SET) { if (remembered_set_action() == EMIT_REMEMBERED_SET) {
__ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
MacroAssembler::kReturnAtEnd);
} }
__ Ret(); __ Ret();
@ -1098,8 +1097,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode); masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode);
InformIncrementalMarker(masm); InformIncrementalMarker(masm);
regs_.Restore(masm); regs_.Restore(masm);
__ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
MacroAssembler::kReturnAtEnd);
__ bind(&dont_need_remembered_set); __ bind(&dont_need_remembered_set);
} }
@ -1148,8 +1146,7 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
regs_.Restore(masm); regs_.Restore(masm);
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) { if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
__ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
MacroAssembler::kReturnAtEnd);
} else { } else {
__ Ret(); __ Ret();
} }
@ -1188,8 +1185,7 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
regs_.Restore(masm); regs_.Restore(masm);
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) { if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
__ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
MacroAssembler::kReturnAtEnd);
} else { } else {
__ Ret(); __ Ret();
} }

View File

@ -504,8 +504,7 @@ void MacroAssembler::RecordWrite(
void MacroAssembler::RememberedSetHelper(Register object, // For debug tests. void MacroAssembler::RememberedSetHelper(Register object, // For debug tests.
Register address, Register scratch, Register address, Register scratch,
SaveFPRegsMode fp_mode, SaveFPRegsMode fp_mode) {
RememberedSetFinalAction and_then) {
Label done; Label done;
if (emit_debug_code()) { if (emit_debug_code()) {
Label ok; Label ok;
@ -527,20 +526,13 @@ void MacroAssembler::RememberedSetHelper(Register object, // For debug tests.
// Check for end of buffer. // Check for end of buffer.
AndP(scratch, Operand(StoreBuffer::kStoreBufferMask)); AndP(scratch, Operand(StoreBuffer::kStoreBufferMask));
if (and_then == kFallThroughAtEnd) { bne(&done, Label::kNear);
bne(&done, Label::kNear);
} else {
DCHECK(and_then == kReturnAtEnd);
bne(&done, Label::kNear);
}
push(r14); push(r14);
StoreBufferOverflowStub store_buffer_overflow(isolate(), fp_mode); StoreBufferOverflowStub store_buffer_overflow(isolate(), fp_mode);
CallStub(&store_buffer_overflow); CallStub(&store_buffer_overflow);
pop(r14); pop(r14);
bind(&done); bind(&done);
if (and_then == kReturnAtEnd) { Ret();
Ret();
}
} }
void TurboAssembler::PushCommonFrame(Register marker_reg) { void TurboAssembler::PushCommonFrame(Register marker_reg) {

View File

@ -1306,15 +1306,12 @@ class MacroAssembler : public TurboAssembler {
void IncrementalMarkingRecordWriteHelper(Register object, Register value, void IncrementalMarkingRecordWriteHelper(Register object, Register value,
Register address); Register address);
enum RememberedSetFinalAction { kReturnAtEnd, kFallThroughAtEnd };
// Record in the remembered set the fact that we have a pointer to new space // Record in the remembered set the fact that we have a pointer to new space
// at the address pointed to by the addr register. Only works if addr is not // at the address pointed to by the addr register. Only works if addr is not
// in new space. // in new space.
void RememberedSetHelper(Register object, // Used for debug code. void RememberedSetHelper(Register object, // Used for debug code.
Register addr, Register scratch, Register addr, Register scratch,
SaveFPRegsMode save_fp, SaveFPRegsMode save_fp);
RememberedSetFinalAction and_then);
void CallJSEntry(Register target); void CallJSEntry(Register target);
static int CallSizeNotPredictableCodeSize(Address target, static int CallSizeNotPredictableCodeSize(Address target,

View File

@ -1022,8 +1022,7 @@ void RecordWriteStub::Generate(MacroAssembler* masm) {
__ jmp(&skip_to_incremental, Label::kNear); __ jmp(&skip_to_incremental, Label::kNear);
if (remembered_set_action() == EMIT_REMEMBERED_SET) { if (remembered_set_action() == EMIT_REMEMBERED_SET) {
__ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
MacroAssembler::kReturnAtEnd);
} else { } else {
__ ret(0); __ ret(0);
} }
@ -1060,8 +1059,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm,
second_instr); second_instr);
InformIncrementalMarker(masm); InformIncrementalMarker(masm);
regs_.Restore(masm); regs_.Restore(masm);
__ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
MacroAssembler::kReturnAtEnd);
__ bind(&dont_need_remembered_set); __ bind(&dont_need_remembered_set);
} }
@ -1118,8 +1116,7 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
regs_.Restore(masm); regs_.Restore(masm);
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) { if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
__ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
MacroAssembler::kReturnAtEnd);
} else { } else {
__ ret(0); __ ret(0);
} }
@ -1158,8 +1155,7 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
regs_.Restore(masm); regs_.Restore(masm);
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) { if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
__ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode(), __ RememberedSetHelper(object(), address(), value(), save_fp_regs_mode());
MacroAssembler::kReturnAtEnd);
} else { } else {
__ ret(0); __ ret(0);
} }

View File

@ -184,12 +184,9 @@ void TurboAssembler::CompareRoot(const Operand& with,
cmpp(with, kScratchRegister); cmpp(with, kScratchRegister);
} }
void MacroAssembler::RememberedSetHelper(Register object, // For debug tests. void MacroAssembler::RememberedSetHelper(Register object, // For debug tests.
Register addr, Register addr, Register scratch,
Register scratch, SaveFPRegsMode save_fp) {
SaveFPRegsMode save_fp,
RememberedSetFinalAction and_then) {
if (emit_debug_code()) { if (emit_debug_code()) {
Label ok; Label ok;
JumpIfNotInNewSpace(object, scratch, &ok, Label::kNear); JumpIfNotInNewSpace(object, scratch, &ok, Label::kNear);
@ -212,23 +209,13 @@ void MacroAssembler::RememberedSetHelper(Register object, // For debug tests.
Label done; Label done;
// Check for end of buffer. // Check for end of buffer.
testp(scratch, Immediate(StoreBuffer::kStoreBufferMask)); testp(scratch, Immediate(StoreBuffer::kStoreBufferMask));
if (and_then == kReturnAtEnd) { Label buffer_overflowed;
Label buffer_overflowed; j(equal, &buffer_overflowed, Label::kNear);
j(equal, &buffer_overflowed, Label::kNear); ret(0);
ret(0); bind(&buffer_overflowed);
bind(&buffer_overflowed);
} else {
DCHECK(and_then == kFallThroughAtEnd);
j(not_equal, &done, Label::kNear);
}
StoreBufferOverflowStub store_buffer_overflow(isolate(), save_fp); StoreBufferOverflowStub store_buffer_overflow(isolate(), save_fp);
CallStub(&store_buffer_overflow); CallStub(&store_buffer_overflow);
if (and_then == kReturnAtEnd) { ret(0);
ret(0);
} else {
DCHECK(and_then == kFallThroughAtEnd);
bind(&done);
}
} }

View File

@ -542,19 +542,12 @@ class MacroAssembler : public TurboAssembler {
// GC Support // GC Support
enum RememberedSetFinalAction {
kReturnAtEnd,
kFallThroughAtEnd
};
// Record in the remembered set the fact that we have a pointer to new space // Record in the remembered set the fact that we have a pointer to new space
// at the address pointed to by the addr register. Only works if addr is not // at the address pointed to by the addr register. Only works if addr is not
// in new space. // in new space.
void RememberedSetHelper(Register object, // Used for debug code. void RememberedSetHelper(Register object, // Used for debug code.
Register addr, Register addr, Register scratch,
Register scratch, SaveFPRegsMode save_fp);
SaveFPRegsMode save_fp,
RememberedSetFinalAction and_then);
// Check if object is in new space. Jumps if the object is not in new space. // Check if object is in new space. Jumps if the object is not in new space.
// The register scratch can be object itself, but scratch will be clobbered. // The register scratch can be object itself, but scratch will be clobbered.