Commit 8e4fbb05 authored by zhengxing.li's avatar zhengxing.li Committed by Commit bot

X87: [wasm] Refactoring pair-shift code in the instruction selector of arm and ia32.

  port f954934d (r35140)

  original commit message:

BUG=

Review URL: https://codereview.chromium.org/1886243002

Cr-Commit-Position: refs/heads/master@{#35476}
parent 7effb4f7
......@@ -599,8 +599,9 @@ void InstructionSelector::VisitInt32PairMul(Node* node) {
Emit(kX87MulPair, 2, outputs, 4, inputs, 1, temps);
}
void InstructionSelector::VisitWord32PairShl(Node* node) {
X87OperandGenerator g(this);
void VisitWord32PairShift(InstructionSelector* selector, InstructionCode opcode,
Node* node) {
X87OperandGenerator g(selector);
Node* shift = node->InputAt(2);
InstructionOperand shift_operand;
......@@ -617,49 +618,19 @@ void InstructionSelector::VisitWord32PairShl(Node* node) {
g.DefineAsFixed(node, eax),
g.DefineAsFixed(NodeProperties::FindProjection(node, 1), edx)};
Emit(kX87ShlPair, 2, outputs, 3, inputs);
selector->Emit(opcode, 2, outputs, 3, inputs);
}
void InstructionSelector::VisitWord32PairShr(Node* node) {
X87OperandGenerator g(this);
Node* shift = node->InputAt(2);
InstructionOperand shift_operand;
if (g.CanBeImmediate(shift)) {
shift_operand = g.UseImmediate(shift);
} else {
shift_operand = g.UseFixed(shift, ecx);
}
InstructionOperand inputs[] = {g.UseFixed(node->InputAt(0), eax),
g.UseFixed(node->InputAt(1), edx),
shift_operand};
InstructionOperand outputs[] = {
g.DefineAsFixed(node, eax),
g.DefineAsFixed(NodeProperties::FindProjection(node, 1), edx)};
void InstructionSelector::VisitWord32PairShl(Node* node) {
VisitWord32PairShift(this, kX87ShlPair, node);
}
Emit(kX87ShrPair, 2, outputs, 3, inputs);
void InstructionSelector::VisitWord32PairShr(Node* node) {
VisitWord32PairShift(this, kX87ShrPair, node);
}
void InstructionSelector::VisitWord32PairSar(Node* node) {
X87OperandGenerator g(this);
Node* shift = node->InputAt(2);
InstructionOperand shift_operand;
if (g.CanBeImmediate(shift)) {
shift_operand = g.UseImmediate(shift);
} else {
shift_operand = g.UseFixed(shift, ecx);
}
InstructionOperand inputs[] = {g.UseFixed(node->InputAt(0), eax),
g.UseFixed(node->InputAt(1), edx),
shift_operand};
InstructionOperand outputs[] = {
g.DefineAsFixed(node, eax),
g.DefineAsFixed(NodeProperties::FindProjection(node, 1), edx)};
Emit(kX87SarPair, 2, outputs, 3, inputs);
VisitWord32PairShift(this, kX87SarPair, node);
}
void InstructionSelector::VisitWord32Ror(Node* node) {
......
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