Reviewers: m.m.capewell,

Description:
A64: Add support for floating-point registers in PushSafepointRegistersScope.

Please review this at https://codereview.chromium.org/130843008/

SVN Base: https://v8.googlecode.com/svn/branches/experimental/a64

Affected files (+21, -2 lines):
  M src/a64/assembler-a64.h
  M src/a64/lithium-codegen-a64.h
  M src/a64/macro-assembler-a64.h
  M src/a64/macro-assembler-a64.cc


Index: src/a64/assembler-a64.h
diff --git a/src/a64/assembler-a64.h b/src/a64/assembler-a64.h
index e67a75f32680797daff3cd024618b423b1d86d87..7c2bfb859424fbeeaa1a39de8b177c77f4bb554f 100644
--- a/src/a64/assembler-a64.h
+++ b/src/a64/assembler-a64.h
@@ -256,6 +256,8 @@ class FPRegister : public CPURegister {
   static const int kMaxNumAllocatableRegisters =
       kNumberOfFPRegisters - kNumReservedRegisters;
static int NumAllocatableRegisters() { return kMaxNumAllocatableRegisters; }
+  static const RegList kAllocatableFPRegisters =
+      (1 << kMaxNumAllocatableRegisters) - 1;

   static FPRegister FromAllocationIndex(int index) {
     ASSERT((index >= 0) && (index < NumAllocatableRegisters()));
Index: src/a64/lithium-codegen-a64.h
diff --git a/src/a64/lithium-codegen-a64.h b/src/a64/lithium-codegen-a64.h
index 9ecb7f9880388e708fcd19a5adb0509a6b6e65c7..421a8336d7aecdf948c9654d2fece51f72a521dc 100644
--- a/src/a64/lithium-codegen-a64.h
+++ b/src/a64/lithium-codegen-a64.h
@@ -411,7 +411,8 @@ class LCodeGen BASE_EMBEDDED {
           codegen_->masm_->PushSafepointRegisters();
           break;
         case Safepoint::kWithRegistersAndDoubles:
-          UNIMPLEMENTED();
+          codegen_->masm_->PushSafepointFPRegisters();
+          codegen_->masm_->PushSafepointRegisters();
           break;
         default:
           UNREACHABLE();
@@ -426,7 +427,8 @@ class LCodeGen BASE_EMBEDDED {
           codegen_->masm_->PopSafepointRegisters();
           break;
         case Safepoint::kWithRegistersAndDoubles:
-          UNIMPLEMENTED();
+          codegen_->masm_->PopSafepointRegisters();
+          codegen_->masm_->PopSafepointFPRegisters();
           break;
         default:
           UNREACHABLE();
Index: src/a64/macro-assembler-a64.cc
diff --git a/src/a64/macro-assembler-a64.cc b/src/a64/macro-assembler-a64.cc
index 7d14b249008639a711221cd8289a6688e16a2f07..c6823bd674c4935fd5c662eeb1a970fdd2fdbad4 100644
--- a/src/a64/macro-assembler-a64.cc
+++ b/src/a64/macro-assembler-a64.cc
@@ -3695,6 +3695,18 @@ void MacroAssembler::PushSafepointRegisters() {
 }


+void MacroAssembler::PushSafepointFPRegisters() {
+  PushCPURegList(CPURegList(CPURegister::kFPRegister, kDRegSize,
+                            FPRegister::kAllocatableFPRegisters));
+}
+
+
+void MacroAssembler::PopSafepointFPRegisters() {
+  PopCPURegList(CPURegList(CPURegister::kFPRegister, kDRegSize,
+                           FPRegister::kAllocatableFPRegisters));
+}
+
+
 int MacroAssembler::SafepointRegisterStackIndex(int reg_code) {
   // Make sure the safepoint registers list is what we expect.
   ASSERT(CPURegList::GetSafepointSavedRegisters().list() == 0x6ffcffff);
Index: src/a64/macro-assembler-a64.h
diff --git a/src/a64/macro-assembler-a64.h b/src/a64/macro-assembler-a64.h
index e09f4375d5d4ae5e73da23a551fdb6794a2b84af..3635c831ff4874c220bcae0fd341795225fe06b4 100644
--- a/src/a64/macro-assembler-a64.h
+++ b/src/a64/macro-assembler-a64.h
@@ -1574,6 +1574,9 @@ class MacroAssembler : public Assembler {
   void PushSafepointRegisters();
   void PopSafepointRegisters();

+  void PushSafepointFPRegisters();
+  void PopSafepointFPRegisters();
+
// Store value in register src in the safepoint stack slot for register dst.
   void StoreToSafepointRegisterSlot(Register src, Register dst) {
     Poke(src, SafepointRegisterStackIndex(dst.code()) * kPointerSize);


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to