Reviewers: jochen, ulan,

Description:
A64: Fix Register and FPRegister copy constructors.

This issue was introduced in commit 4e27429b1bc295631842cce7e8f6c404f7f77c50.

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

SVN Base: git://github.com/v8/v8.git@master

Affected files (+21, -6 lines):
  M src/arm64/assembler-arm64.h
  M src/arm64/stub-cache-arm64.cc


Index: src/arm64/assembler-arm64.h
diff --git a/src/arm64/assembler-arm64.h b/src/arm64/assembler-arm64.h
index 79f957b91cb744f8ea4822f3cc87dd8d7086c66c..bc0c84181da2ec4ee6f15c0e34fc8a53211ba396 100644
--- a/src/arm64/assembler-arm64.h
+++ b/src/arm64/assembler-arm64.h
@@ -115,7 +115,7 @@ struct CPURegister {

 struct Register : public CPURegister {
   static Register Create(unsigned code, unsigned size) {
-    return CPURegister::Create(code, size, CPURegister::kRegister);
+ return Register(CPURegister::Create(code, size, CPURegister::kRegister));
   }

   Register() {
@@ -124,7 +124,14 @@ struct Register : public CPURegister {
     reg_type = CPURegister::kNoRegister;
   }

-  Register(const CPURegister& r) {  // NOLINT(runtime/explicit)
+  explicit Register(const CPURegister& r) {
+    reg_code = r.reg_code;
+    reg_size = r.reg_size;
+    reg_type = r.reg_type;
+    ASSERT(IsValidOrNone());
+  }
+
+  Register(const Register& r) {  // NOLINT(runtime/explicit)
     reg_code = r.reg_code;
     reg_size = r.reg_size;
     reg_type = r.reg_type;
@@ -236,7 +243,8 @@ struct Register : public CPURegister {

 struct FPRegister : public CPURegister {
   static FPRegister Create(unsigned code, unsigned size) {
-    return CPURegister::Create(code, size, CPURegister::kFPRegister);
+    return FPRegister(
+        CPURegister::Create(code, size, CPURegister::kFPRegister));
   }

   FPRegister() {
@@ -245,7 +253,14 @@ struct FPRegister : public CPURegister {
     reg_type = CPURegister::kNoRegister;
   }

-  FPRegister(const CPURegister& r) {  // NOLINT(runtime/explicit)
+  explicit FPRegister(const CPURegister& r) {
+    reg_code = r.reg_code;
+    reg_size = r.reg_size;
+    reg_type = r.reg_type;
+    ASSERT(IsValidOrNone());
+  }
+
+  FPRegister(const FPRegister& r) {  // NOLINT(runtime/explicit)
     reg_code = r.reg_code;
     reg_size = r.reg_size;
     reg_type = r.reg_type;
Index: src/arm64/stub-cache-arm64.cc
diff --git a/src/arm64/stub-cache-arm64.cc b/src/arm64/stub-cache-arm64.cc
index 0711acae0b9fd7668f182a2916bc94a72ca608e1..1b2e9599368877a666a93c0a7abacd934a22cc67 100644
--- a/src/arm64/stub-cache-arm64.cc
+++ b/src/arm64/stub-cache-arm64.cc
@@ -395,7 +395,7 @@ void StoreStubCompiler::GenerateStoreTransition(MacroAssembler* masm,
     __ JumpIfSmi(value_reg, miss_label);
   } else if (representation.IsDouble()) {
     UseScratchRegisterScope temps(masm);
-    Register temp_double = temps.AcquireD();
+    DoubleRegister temp_double = temps.AcquireD();
     __ SmiUntagToDouble(temp_double, value_reg, kSpeculativeUntag);

     Label do_store, heap_number;
@@ -546,7 +546,7 @@ void StoreStubCompiler::GenerateStoreField(MacroAssembler* masm,
     __ JumpIfSmi(value_reg, miss_label);
   } else if (representation.IsDouble()) {
     UseScratchRegisterScope temps(masm);
-    Register temp_double = temps.AcquireD();
+    DoubleRegister temp_double = temps.AcquireD();

     __ SmiUntagToDouble(temp_double, value_reg, kSpeculativeUntag);



--
--
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/d/optout.

Reply via email to