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.