Commit 8069c8c4 authored by Ng Zhi An's avatar Ng Zhi An Committed by Commit Bot

[cleanup] Change scratch to temp simd register

This requires a change to instruction selector to UseUnique so that it
does not shadow the temporary register.

Bug: v8:9810
Change-Id: Iaceadbc39f0c51a92c2a73c4b1097d49a7397876
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1850614Reviewed-by: 's avatarDeepti Gandluri <gdeepti@chromium.org>
Commit-Queue: Zhi An Ng <zhin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#64259}
parent 8c7ae314
...@@ -1267,16 +1267,18 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( ...@@ -1267,16 +1267,18 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
break; break;
case kSSEFloat32Abs: { case kSSEFloat32Abs: {
// TODO(bmeurer): Use 128-bit constants. // TODO(bmeurer): Use 128-bit constants.
__ pcmpeqd(kScratchDoubleReg, kScratchDoubleReg); XMMRegister tmp = i.TempSimd128Register(0);
__ psrlq(kScratchDoubleReg, 33); __ pcmpeqd(tmp, tmp);
__ andps(i.OutputDoubleRegister(), kScratchDoubleReg); __ psrlq(tmp, 33);
__ andps(i.OutputDoubleRegister(), tmp);
break; break;
} }
case kSSEFloat32Neg: { case kSSEFloat32Neg: {
// TODO(bmeurer): Use 128-bit constants. // TODO(bmeurer): Use 128-bit constants.
__ pcmpeqd(kScratchDoubleReg, kScratchDoubleReg); XMMRegister tmp = i.TempSimd128Register(0);
__ psllq(kScratchDoubleReg, 31); __ pcmpeqd(tmp, tmp);
__ xorps(i.OutputDoubleRegister(), kScratchDoubleReg); __ psllq(tmp, 31);
__ xorps(i.OutputDoubleRegister(), tmp);
break; break;
} }
case kSSEFloat32Round: { case kSSEFloat32Round: {
...@@ -1445,16 +1447,18 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( ...@@ -1445,16 +1447,18 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
} }
case kSSEFloat64Abs: { case kSSEFloat64Abs: {
// TODO(bmeurer): Use 128-bit constants. // TODO(bmeurer): Use 128-bit constants.
__ pcmpeqd(kScratchDoubleReg, kScratchDoubleReg); XMMRegister tmp = i.TempSimd128Register(0);
__ psrlq(kScratchDoubleReg, 1); __ pcmpeqd(tmp, tmp);
__ andpd(i.OutputDoubleRegister(), kScratchDoubleReg); __ psrlq(tmp, 1);
__ andpd(i.OutputDoubleRegister(), tmp);
break; break;
} }
case kSSEFloat64Neg: { case kSSEFloat64Neg: {
// TODO(bmeurer): Use 128-bit constants. // TODO(bmeurer): Use 128-bit constants.
__ pcmpeqd(kScratchDoubleReg, kScratchDoubleReg); XMMRegister tmp = i.TempSimd128Register(0);
__ psllq(kScratchDoubleReg, 63); __ pcmpeqd(tmp, tmp);
__ xorpd(i.OutputDoubleRegister(), kScratchDoubleReg); __ psllq(tmp, 63);
__ xorpd(i.OutputDoubleRegister(), tmp);
break; break;
} }
case kSSEFloat64Sqrt: case kSSEFloat64Sqrt:
...@@ -1580,34 +1584,38 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( ...@@ -1580,34 +1584,38 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
} }
case kAVXFloat32Abs: { case kAVXFloat32Abs: {
// TODO(bmeurer): Use RIP relative 128-bit constants. // TODO(bmeurer): Use RIP relative 128-bit constants.
__ pcmpeqd(kScratchDoubleReg, kScratchDoubleReg); XMMRegister tmp = i.TempSimd128Register(0);
__ psrlq(kScratchDoubleReg, 33); __ pcmpeqd(tmp, tmp);
__ psrlq(tmp, 33);
CpuFeatureScope avx_scope(tasm(), AVX); CpuFeatureScope avx_scope(tasm(), AVX);
__ vandps(i.OutputDoubleRegister(), kScratchDoubleReg, i.InputOperand(0)); __ vandps(i.OutputDoubleRegister(), tmp, i.InputOperand(0));
break; break;
} }
case kAVXFloat32Neg: { case kAVXFloat32Neg: {
// TODO(bmeurer): Use RIP relative 128-bit constants. // TODO(bmeurer): Use RIP relative 128-bit constants.
__ pcmpeqd(kScratchDoubleReg, kScratchDoubleReg); XMMRegister tmp = i.TempSimd128Register(0);
__ psllq(kScratchDoubleReg, 31); __ pcmpeqd(tmp, tmp);
__ psllq(tmp, 31);
CpuFeatureScope avx_scope(tasm(), AVX); CpuFeatureScope avx_scope(tasm(), AVX);
__ vxorps(i.OutputDoubleRegister(), kScratchDoubleReg, i.InputOperand(0)); __ vxorps(i.OutputDoubleRegister(), tmp, i.InputOperand(0));
break; break;
} }
case kAVXFloat64Abs: { case kAVXFloat64Abs: {
// TODO(bmeurer): Use RIP relative 128-bit constants. // TODO(bmeurer): Use RIP relative 128-bit constants.
__ pcmpeqd(kScratchDoubleReg, kScratchDoubleReg); XMMRegister tmp = i.TempSimd128Register(0);
__ psrlq(kScratchDoubleReg, 1); __ pcmpeqd(tmp, tmp);
__ psrlq(tmp, 1);
CpuFeatureScope avx_scope(tasm(), AVX); CpuFeatureScope avx_scope(tasm(), AVX);
__ vandpd(i.OutputDoubleRegister(), kScratchDoubleReg, i.InputOperand(0)); __ vandpd(i.OutputDoubleRegister(), tmp, i.InputOperand(0));
break; break;
} }
case kAVXFloat64Neg: { case kAVXFloat64Neg: {
// TODO(bmeurer): Use RIP relative 128-bit constants. // TODO(bmeurer): Use RIP relative 128-bit constants.
__ pcmpeqd(kScratchDoubleReg, kScratchDoubleReg); XMMRegister tmp = i.TempSimd128Register(0);
__ psllq(kScratchDoubleReg, 63); __ pcmpeqd(tmp, tmp);
__ psllq(tmp, 63);
CpuFeatureScope avx_scope(tasm(), AVX); CpuFeatureScope avx_scope(tasm(), AVX);
__ vxorpd(i.OutputDoubleRegister(), kScratchDoubleReg, i.InputOperand(0)); __ vxorpd(i.OutputDoubleRegister(), tmp, i.InputOperand(0));
break; break;
} }
case kSSEFloat64SilenceNaN: case kSSEFloat64SilenceNaN:
......
...@@ -246,10 +246,13 @@ void VisitRROFloat(InstructionSelector* selector, Node* node, ...@@ -246,10 +246,13 @@ void VisitRROFloat(InstructionSelector* selector, Node* node,
void VisitFloatUnop(InstructionSelector* selector, Node* node, Node* input, void VisitFloatUnop(InstructionSelector* selector, Node* node, Node* input,
ArchOpcode avx_opcode, ArchOpcode sse_opcode) { ArchOpcode avx_opcode, ArchOpcode sse_opcode) {
IA32OperandGenerator g(selector); IA32OperandGenerator g(selector);
InstructionOperand temps[] = {g.TempSimd128Register()};
if (selector->IsSupported(AVX)) { if (selector->IsSupported(AVX)) {
selector->Emit(avx_opcode, g.DefineAsRegister(node), g.Use(input)); selector->Emit(avx_opcode, g.DefineAsRegister(node), g.UseUnique(input),
arraysize(temps), temps);
} else { } else {
selector->Emit(sse_opcode, g.DefineSameAsFirst(node), g.UseRegister(input)); selector->Emit(sse_opcode, g.DefineSameAsFirst(node),
g.UseUniqueRegister(input), arraysize(temps), temps);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment