Commit 88f4ca2b authored by Lu Yahan's avatar Lu Yahan Committed by V8 LUCI CQ

[riscv64] Port [sparkplug][arm][arm64[ia32] Callee-saved registers for RecordWrite

- 2944844: [sparkplug][arm][arm64[ia32] Callee-saved registers for RecordWrite
- Delete kTestReg due to 2945538
- 2949104: [runtime] Rename Builtins::Name to Builtin

Change-Id: I33d12df7cbee6842a05c1dbe3e6158be1ff4cbc7
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2952865
Commit-Queue: Yahan Lu <yahan@iscas.ac.cn>
Reviewed-by: 's avatarBrice Dobry <brice.dobry@futurewei.com>
Reviewed-by: 's avatarJi Qiu <qiuji@iscas.ac.cn>
Cr-Commit-Position: refs/heads/master@{#75168}
parent 8796b0ea
...@@ -12,7 +12,6 @@ namespace v8 { ...@@ -12,7 +12,6 @@ namespace v8 {
namespace internal { namespace internal {
namespace baseline { namespace baseline {
constexpr Register kTestReg = t0;
class BaselineAssembler::ScratchRegisterScope { class BaselineAssembler::ScratchRegisterScope {
public: public:
explicit ScratchRegisterScope(BaselineAssembler* assembler) explicit ScratchRegisterScope(BaselineAssembler* assembler)
...@@ -481,9 +480,7 @@ void BaselineAssembler::StoreTaggedFieldWithWriteBarrier(Register target, ...@@ -481,9 +480,7 @@ void BaselineAssembler::StoreTaggedFieldWithWriteBarrier(Register target,
Register value) { Register value) {
// FIXME(riscv64): riscv64 don't implement pointer compressed // FIXME(riscv64): riscv64 don't implement pointer compressed
__ Sd(value, FieldMemOperand(target, offset)); __ Sd(value, FieldMemOperand(target, offset));
ScratchRegisterScope temps(this); __ RecordWriteField(target, offset, value, kRAHasNotBeenSaved,
Register tmp = temps.AcquireScratch();
__ RecordWriteField(target, offset, value, tmp, kRAHasNotBeenSaved,
SaveFPRegsMode::kIgnore); SaveFPRegsMode::kIgnore);
} }
void BaselineAssembler::StoreTaggedFieldNoWriteBarrier(Register target, void BaselineAssembler::StoreTaggedFieldNoWriteBarrier(Register target,
......
...@@ -344,13 +344,14 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) { ...@@ -344,13 +344,14 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
// -- a1 : the JSGeneratorObject to resume // -- a1 : the JSGeneratorObject to resume
// -- ra : return address // -- ra : return address
// ----------------------------------- // -----------------------------------
__ AssertGeneratorObject(a1);
// Store input value into generator object. // Store input value into generator object.
__ StoreTaggedField( __ StoreTaggedField(
a0, FieldMemOperand(a1, JSGeneratorObject::kInputOrDebugPosOffset)); a0, FieldMemOperand(a1, JSGeneratorObject::kInputOrDebugPosOffset));
__ RecordWriteField(a1, JSGeneratorObject::kInputOrDebugPosOffset, a0, a3, __ RecordWriteField(a1, JSGeneratorObject::kInputOrDebugPosOffset, a0,
kRAHasNotBeenSaved, SaveFPRegsMode::kIgnore); kRAHasNotBeenSaved, SaveFPRegsMode::kIgnore);
// Check that a1 is still valid, RecordWrite might have clobbered it.
__ AssertGeneratorObject(a1);
// Load suspended function and context. // Load suspended function and context.
__ LoadTaggedPointerField( __ LoadTaggedPointerField(
...@@ -807,11 +808,12 @@ static void ReplaceClosureCodeWithOptimizedCode(MacroAssembler* masm, ...@@ -807,11 +808,12 @@ static void ReplaceClosureCodeWithOptimizedCode(MacroAssembler* masm,
Register closure, Register closure,
Register scratch1, Register scratch1,
Register scratch2) { Register scratch2) {
DCHECK(!AreAliased(optimized_code, closure));
// Store code entry in the closure. // Store code entry in the closure.
__ StoreTaggedField(optimized_code, __ StoreTaggedField(optimized_code,
FieldMemOperand(closure, JSFunction::kCodeOffset)); FieldMemOperand(closure, JSFunction::kCodeOffset));
__ Move(scratch1, optimized_code); // Write barrier clobbers scratch1 below. __ Move(scratch1, optimized_code); // Write barrier clobbers scratch1 below.
__ RecordWriteField(closure, JSFunction::kCodeOffset, scratch1, scratch2, __ RecordWriteField(closure, JSFunction::kCodeOffset, scratch1,
kRAHasNotBeenSaved, SaveFPRegsMode::kIgnore, kRAHasNotBeenSaved, SaveFPRegsMode::kIgnore,
RememberedSetAction::kOmit, SmiCheck::kOmit); RememberedSetAction::kOmit, SmiCheck::kOmit);
} }
...@@ -1019,6 +1021,7 @@ static void AdvanceBytecodeOffsetOrReturn(MacroAssembler* masm, ...@@ -1019,6 +1021,7 @@ static void AdvanceBytecodeOffsetOrReturn(MacroAssembler* masm,
static void LoadOptimizationStateAndJumpIfNeedsProcessing( static void LoadOptimizationStateAndJumpIfNeedsProcessing(
MacroAssembler* masm, Register optimization_state, Register feedback_vector, MacroAssembler* masm, Register optimization_state, Register feedback_vector,
Label* has_optimized_code_or_marker) { Label* has_optimized_code_or_marker) {
DCHECK(!AreAliased(optimization_state, feedback_vector));
__ RecordComment("[ Check optimization state"); __ RecordComment("[ Check optimization state");
UseScratchRegisterScope temps(masm); UseScratchRegisterScope temps(masm);
Register scratch = temps.Acquire(); Register scratch = temps.Acquire();
...@@ -1034,6 +1037,7 @@ static void LoadOptimizationStateAndJumpIfNeedsProcessing( ...@@ -1034,6 +1037,7 @@ static void LoadOptimizationStateAndJumpIfNeedsProcessing(
static void MaybeOptimizeCodeOrTailCallOptimizedCodeSlot( static void MaybeOptimizeCodeOrTailCallOptimizedCodeSlot(
MacroAssembler* masm, Register optimization_state, MacroAssembler* masm, Register optimization_state,
Register feedback_vector) { Register feedback_vector) {
DCHECK(!AreAliased(optimization_state, feedback_vector));
UseScratchRegisterScope temps(masm); UseScratchRegisterScope temps(masm);
temps.Include(t0, t1); temps.Include(t0, t1);
Label maybe_has_optimized_code; Label maybe_has_optimized_code;
......
...@@ -39,7 +39,7 @@ void StaticCallInterfaceDescriptor<DerivedDescriptor>:: ...@@ -39,7 +39,7 @@ void StaticCallInterfaceDescriptor<DerivedDescriptor>::
// static // static
constexpr auto WriteBarrierDescriptor::registers() { constexpr auto WriteBarrierDescriptor::registers() {
return RegisterArray(a0, a1, a2, a3); return RegisterArray(a1, a5, a4, a2, a0, a3);
} }
// static // static
......
...@@ -229,22 +229,14 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase { ...@@ -229,22 +229,14 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase {
Register dst, Label* target, Register dst, Label* target,
RelocInfo::Mode rmode = RelocInfo::INTERNAL_REFERENCE_ENCODED); RelocInfo::Mode rmode = RelocInfo::INTERNAL_REFERENCE_ENCODED);
// Load the builtin given by the Smi in |builtin_index| into the same // Load the builtin given by the Smi in |builtin| into the same
// register. // register.
void LoadEntryFromBuiltinIndex(Register builtin_index); void LoadEntryFromBuiltinIndex(Register builtin);
void LoadEntryFromBuiltin(Builtin builtin_index, Register destination); void LoadEntryFromBuiltin(Builtin builtin, Register destination);
MemOperand EntryFromBuiltinAsOperand(Builtin builtin_index); MemOperand EntryFromBuiltinAsOperand(Builtin builtin);
void CallBuiltinByIndex(Register builtin_index); void CallBuiltinByIndex(Register builtin);
void CallBuiltin(Builtin builtin) { void CallBuiltin(Builtin builtin);
// TODO(11527): drop the int overload in favour of the Builtin one. void TailCallBuiltin(Builtin builtin);
return CallBuiltin(static_cast<int>(builtin));
}
void CallBuiltin(int builtin_index);
void TailCallBuiltin(Builtin builtin) {
// TODO(11527): drop the int overload in favour of the Builtin one.
return TailCallBuiltin(static_cast<int>(builtin));
}
void TailCallBuiltin(int builtin_index);
void LoadCodeObjectEntry(Register destination, Register code_object); void LoadCodeObjectEntry(Register destination, Register code_object);
void CallCodeObject(Register code_object); void CallCodeObject(Register code_object);
...@@ -1011,8 +1003,8 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { ...@@ -1011,8 +1003,8 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler {
// The offset is the offset from the start of the object, not the offset from // The offset is the offset from the start of the object, not the offset from
// the tagged HeapObject pointer. For use with FieldOperand(reg, off). // the tagged HeapObject pointer. For use with FieldOperand(reg, off).
void RecordWriteField( void RecordWriteField(
Register object, int offset, Register value, Register scratch, Register object, int offset, Register value, RAStatus ra_status,
RAStatus ra_status, SaveFPRegsMode save_fp, SaveFPRegsMode save_fp,
RememberedSetAction remembered_set_action = RememberedSetAction::kEmit, RememberedSetAction remembered_set_action = RememberedSetAction::kEmit,
SmiCheck smi_check = SmiCheck::kInline); SmiCheck smi_check = SmiCheck::kInline);
...@@ -1020,7 +1012,7 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { ...@@ -1020,7 +1012,7 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler {
// has been written. |value| is the object being stored. The value and // has been written. |value| is the object being stored. The value and
// address registers are clobbered by the operation. // address registers are clobbered by the operation.
void RecordWrite( void RecordWrite(
Register object, Register address, Register value, RAStatus ra_status, Register object, Operand offset, Register value, RAStatus ra_status,
SaveFPRegsMode save_fp, SaveFPRegsMode save_fp,
RememberedSetAction remembered_set_action = RememberedSetAction::kEmit, RememberedSetAction remembered_set_action = RememberedSetAction::kEmit,
SmiCheck smi_check = SmiCheck::kInline); SmiCheck smi_check = SmiCheck::kInline);
......
...@@ -2431,7 +2431,6 @@ void CodeGenerator::FinishFrame(Frame* frame) { ...@@ -2431,7 +2431,6 @@ void CodeGenerator::FinishFrame(Frame* frame) {
const RegList saves = call_descriptor->CalleeSavedRegisters(); const RegList saves = call_descriptor->CalleeSavedRegisters();
if (saves != 0) { if (saves != 0) {
int count = base::bits::CountPopulation(saves); int count = base::bits::CountPopulation(saves);
DCHECK_EQ(kNumCalleeSaved, count + 1);
frame->AllocateSavedCalleeRegisterSlots(count); frame->AllocateSavedCalleeRegisterSlots(count);
} }
} }
...@@ -2550,7 +2549,6 @@ void CodeGenerator::AssembleConstructFrame() { ...@@ -2550,7 +2549,6 @@ void CodeGenerator::AssembleConstructFrame() {
if (saves != 0) { if (saves != 0) {
// Save callee-saved registers. // Save callee-saved registers.
__ MultiPush(saves); __ MultiPush(saves);
DCHECK_EQ(kNumCalleeSaved, base::bits::CountPopulation(saves) + 1);
} }
if (returns != 0) { if (returns != 0) {
......
...@@ -3449,7 +3449,7 @@ void Simulator::InstructionDecode(Instruction* instr) { ...@@ -3449,7 +3449,7 @@ void Simulator::InstructionDecode(Instruction* instr) {
DecodeCSType(); DecodeCSType();
break; break;
default: default:
if (::v8::internal::FLAG_trace_sim) { if (1) {
std::cout << "Unrecognized instruction [@pc=0x" << std::hex std::cout << "Unrecognized instruction [@pc=0x" << std::hex
<< registers_[pc] << "]: 0x" << instr->InstructionBits() << registers_[pc] << "]: 0x" << instr->InstructionBits()
<< std::endl; << std::endl;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment