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.