Revision: 21505
Author:   [email protected]
Date:     Tue May 27 04:19:18 2014 UTC
Log:      Relax register constraints for LMathSqrt.

[email protected]

Review URL: https://codereview.chromium.org/299423005
http://code.google.com/p/v8/source/detail?r=21505

Modified:
 /branches/bleeding_edge/src/ia32/assembler-ia32.cc
 /branches/bleeding_edge/src/ia32/assembler-ia32.h
 /branches/bleeding_edge/src/ia32/lithium-codegen-ia32.cc
 /branches/bleeding_edge/src/ia32/lithium-ia32.cc
 /branches/bleeding_edge/src/x64/assembler-x64.cc
 /branches/bleeding_edge/src/x64/assembler-x64.h
 /branches/bleeding_edge/src/x64/lithium-codegen-x64.cc
 /branches/bleeding_edge/src/x64/lithium-x64.cc

=======================================
--- /branches/bleeding_edge/src/ia32/assembler-ia32.cc Mon May 26 19:56:27 2014 UTC +++ /branches/bleeding_edge/src/ia32/assembler-ia32.cc Tue May 27 04:19:18 2014 UTC
@@ -2061,6 +2061,15 @@
   EMIT(0x51);
   emit_sse_operand(dst, src);
 }
+
+
+void Assembler::sqrtsd(XMMRegister dst, const Operand& src) {
+  EnsureSpace ensure_space(this);
+  EMIT(0xF2);
+  EMIT(0x0F);
+  EMIT(0x51);
+  emit_sse_operand(dst, src);
+}


 void Assembler::andpd(XMMRegister dst, XMMRegister src) {
=======================================
--- /branches/bleeding_edge/src/ia32/assembler-ia32.h Tue May 20 09:21:45 2014 UTC +++ /branches/bleeding_edge/src/ia32/assembler-ia32.h Tue May 27 04:19:18 2014 UTC
@@ -936,6 +936,7 @@
   void divsd(XMMRegister dst, XMMRegister src);
   void xorpd(XMMRegister dst, XMMRegister src);
   void sqrtsd(XMMRegister dst, XMMRegister src);
+  void sqrtsd(XMMRegister dst, const Operand& src);

   void andpd(XMMRegister dst, XMMRegister src);
   void orpd(XMMRegister dst, XMMRegister src);
=======================================
--- /branches/bleeding_edge/src/ia32/lithium-codegen-ia32.cc Mon May 26 08:13:09 2014 UTC +++ /branches/bleeding_edge/src/ia32/lithium-codegen-ia32.cc Tue May 27 04:19:18 2014 UTC
@@ -3708,9 +3708,9 @@


 void LCodeGen::DoMathSqrt(LMathSqrt* instr) {
-  XMMRegister input_reg = ToDoubleRegister(instr->value());
-  ASSERT(ToDoubleRegister(instr->result()).is(input_reg));
-  __ sqrtsd(input_reg, input_reg);
+  Operand input = ToOperand(instr->value());
+  XMMRegister output = ToDoubleRegister(instr->result());
+  __ sqrtsd(output, input);
 }


=======================================
--- /branches/bleeding_edge/src/ia32/lithium-ia32.cc Mon May 26 06:41:21 2014 UTC +++ /branches/bleeding_edge/src/ia32/lithium-ia32.cc Tue May 27 04:19:18 2014 UTC
@@ -1219,9 +1219,8 @@


 LInstruction* LChunkBuilder::DoMathSqrt(HUnaryMathOperation* instr) {
-  LOperand* input = UseRegisterAtStart(instr->value());
-  LMathSqrt* result = new(zone()) LMathSqrt(input);
-  return DefineSameAsFirst(result);
+  LOperand* input = UseAtStart(instr->value());
+  return DefineAsRegister(new(zone()) LMathSqrt(input));
 }


=======================================
--- /branches/bleeding_edge/src/x64/assembler-x64.cc Mon May 26 19:56:27 2014 UTC +++ /branches/bleeding_edge/src/x64/assembler-x64.cc Tue May 27 04:19:18 2014 UTC
@@ -2792,6 +2792,16 @@
   emit(0x51);
   emit_sse_operand(dst, src);
 }
+
+
+void Assembler::sqrtsd(XMMRegister dst, const Operand& src) {
+  EnsureSpace ensure_space(this);
+  emit(0xF2);
+  emit_optional_rex_32(dst, src);
+  emit(0x0F);
+  emit(0x51);
+  emit_sse_operand(dst, src);
+}


 void Assembler::ucomisd(XMMRegister dst, XMMRegister src) {
=======================================
--- /branches/bleeding_edge/src/x64/assembler-x64.h Tue May 20 09:21:45 2014 UTC +++ /branches/bleeding_edge/src/x64/assembler-x64.h Tue May 27 04:19:18 2014 UTC
@@ -1069,6 +1069,7 @@
   void orpd(XMMRegister dst, XMMRegister src);
   void xorpd(XMMRegister dst, XMMRegister src);
   void sqrtsd(XMMRegister dst, XMMRegister src);
+  void sqrtsd(XMMRegister dst, const Operand& src);

   void ucomisd(XMMRegister dst, XMMRegister src);
   void ucomisd(XMMRegister dst, const Operand& src);
=======================================
--- /branches/bleeding_edge/src/x64/lithium-codegen-x64.cc Mon May 26 08:13:09 2014 UTC +++ /branches/bleeding_edge/src/x64/lithium-codegen-x64.cc Tue May 27 04:19:18 2014 UTC
@@ -3725,9 +3725,14 @@


 void LCodeGen::DoMathSqrt(LMathSqrt* instr) {
-  XMMRegister input_reg = ToDoubleRegister(instr->value());
-  ASSERT(ToDoubleRegister(instr->result()).is(input_reg));
-  __ sqrtsd(input_reg, input_reg);
+  XMMRegister output = ToDoubleRegister(instr->result());
+  if (instr->value()->IsDoubleRegister()) {
+    XMMRegister input = ToDoubleRegister(instr->value());
+    __ sqrtsd(output, input);
+  } else {
+    Operand input = ToOperand(instr->value());
+    __ sqrtsd(output, input);
+  }
 }


=======================================
--- /branches/bleeding_edge/src/x64/lithium-x64.cc Mon May 26 06:41:21 2014 UTC +++ /branches/bleeding_edge/src/x64/lithium-x64.cc Tue May 27 04:19:18 2014 UTC
@@ -1182,9 +1182,8 @@


 LInstruction* LChunkBuilder::DoMathSqrt(HUnaryMathOperation* instr) {
-  LOperand* input = UseRegisterAtStart(instr->value());
-  LMathSqrt* result = new(zone()) LMathSqrt(input);
-  return DefineSameAsFirst(result);
+  LOperand* input = UseAtStart(instr->value());
+  return DefineAsRegister(new(zone()) LMathSqrt(input));
 }


--
--
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