Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(314)

Unified Diff: src/x64/code-stubs-x64.h

Issue 7104107: Incremental mode now works for x64. The only difference (Closed) Base URL: http://v8.googlecode.com/svn/branches/experimental/gc/
Patch Set: Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/x64/code-stubs-x64.h
===================================================================
--- src/x64/code-stubs-x64.h (revision 8221)
+++ src/x64/code-stubs-x64.h (working copy)
@@ -645,35 +645,16 @@
// If we have to call into C then we need to save and restore all caller-
// saved registers that were not already preserved.
- // The three scratch registers (incl. rcx)
- // will be restored by other means so we don't bother pushing them here.
+ // The three scratch registers (incl. rcx) will be restored by other means
+ // so we don't bother pushing them here. Rbx, rbp and r12-15 are callee
+ // save and don't need to be preserved.
void SaveCallerSaveRegisters(MacroAssembler* masm, SaveFPRegsMode mode) {
Lasse Reichstein 2011/06/10 13:55:44 Is this the C+-calling convention saved registers,
Erik Corry 2011/06/10 21:57:29 It's a conservative estimate of the intersection o
- masm->int3(); // TODO(gc): Save the caller save registers.
- if (mode == kSaveFPRegs) {
- CpuFeatures::Scope scope(SSE2);
- masm->subq(rsp,
- Immediate(kDoubleSize * (XMMRegister::kNumRegisters - 1)));
- // Save all XMM registers except XMM0.
- for (int i = XMMRegister::kNumRegisters - 1; i > 0; i--) {
- XMMRegister reg = XMMRegister::from_code(i);
- masm->movsd(Operand(rsp, (i - 1) * kDoubleSize), reg);
- }
- }
+ masm->PushCallerSaved(mode, scratch0_, scratch1_, rcx);
}
inline void RestoreCallerSaveRegisters(MacroAssembler*masm,
SaveFPRegsMode mode) {
- if (mode == kSaveFPRegs) {
- CpuFeatures::Scope scope(SSE2);
- // Restore all XMM registers except XMM0.
- for (int i = XMMRegister::kNumRegisters - 1; i > 0; i--) {
- XMMRegister reg = XMMRegister::from_code(i);
- masm->movsd(reg, Operand(rsp, (i - 1) * kDoubleSize));
- }
- masm->addq(rsp,
- Immediate(kDoubleSize * (XMMRegister::kNumRegisters - 1)));
- }
- masm->int3(); // TODO(gc): Restore the caller save registers.
+ masm->PopCallerSaved(mode, scratch0_, scratch1_, rcx);
}
inline Register object() { return object_; }
@@ -708,8 +689,17 @@
friend class RecordWriteStub;
};
+ enum OnNoNeedToInformIncrementalMarker {
+ kReturnOnNoNeedToInformIncrementalMarker,
+ kRememberedSetOnNoNeedToInformIncrementalMarker
Lasse Reichstein 2011/06/10 13:55:44 Do what to remembered set on no need to inform inc
Erik Corry 2011/06/10 21:57:29 Update.
+ };
+
void Generate(MacroAssembler* masm);
void GenerateIncremental(MacroAssembler* masm);
+ void CheckNeedsToInformIncrementalMarker(
+ MacroAssembler* masm,
+ OnNoNeedToInformIncrementalMarker on_no_need);
+ void InformIncrementalMarker(MacroAssembler* masm);
Major MajorKey() { return RecordWrite; }

Powered by Google App Engine
This is Rietveld 408576698