Commit c6312774 authored by zhengxing.li's avatar zhengxing.li Committed by Commit bot

X87: [turbofan] Introduce TruncateTaggedToWord32 simplified operator.

  port 0231a7ef (r35743)

  original commit message:
  This allows us to get rid of the "push TruncateFloat64ToInt32 into Phi"
  trick that was used in the MachineOperatorReducer to combine the
  ChangeTaggedToFloat64 and TruncateFloat64ToInt32 operations. Instead of
  doing that later, we can just introduce the proper operator during the
  representation selection directly.

  Also separate the TruncateFloat64ToInt32 machine operator, which had two
  different meanings depending on a flag (either JavaScript truncation or
  C++ style round to zero). Now there's a TruncateFloat64ToWord32 which
  represents the JavaScript truncation (implemented via TruncateDoubleToI
  macro + code stub) and the RoundFloat64ToInt32, which implements the C++
  round towards zero operation (in the same style as the other WebAssembly
  driven Round* machine operators).

BUG=

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

Cr-Commit-Position: refs/heads/master@{#35745}
parent eb921c8a
...@@ -846,18 +846,13 @@ void InstructionSelector::VisitTruncateFloat64ToFloat32(Node* node) { ...@@ -846,18 +846,13 @@ void InstructionSelector::VisitTruncateFloat64ToFloat32(Node* node) {
void InstructionSelector::VisitTruncateFloat64ToWord32(Node* node) { void InstructionSelector::VisitTruncateFloat64ToWord32(Node* node) {
X87OperandGenerator g(this); X87OperandGenerator g(this);
Emit(kArchTruncateDoubleToI, g.DefineAsRegister(node),
g.Use(node->InputAt(0)));
}
switch (TruncationModeOf(node->op())) { void InstructionSelector::VisitRoundFloat64ToInt32(Node* node) {
case TruncationMode::kJavaScript: X87OperandGenerator g(this);
Emit(kArchTruncateDoubleToI, g.DefineAsRegister(node), Emit(kX87Float64ToInt32, g.DefineAsRegister(node), g.Use(node->InputAt(0)));
g.Use(node->InputAt(0)));
return;
case TruncationMode::kRoundToZero:
Emit(kX87Float64ToInt32, g.DefineAsRegister(node),
g.Use(node->InputAt(0)));
return;
}
UNREACHABLE();
} }
......
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