| Index: src/compiler/x64/instruction-selector-x64.cc
|
| diff --git a/src/compiler/x64/instruction-selector-x64.cc b/src/compiler/x64/instruction-selector-x64.cc
|
| index fe668587099e1394f6cb8d99a2d4ebcf7400d9b5..d89daf25306a89882a8c1c8a961f7509ceea3b10 100644
|
| --- a/src/compiler/x64/instruction-selector-x64.cc
|
| +++ b/src/compiler/x64/instruction-selector-x64.cc
|
| @@ -346,6 +346,15 @@ void InstructionSelector::VisitWord64Shr(Node* node) {
|
|
|
|
|
| void InstructionSelector::VisitWord32Sar(Node* node) {
|
| + X64OperandGenerator g(this);
|
| + Int32BinopMatcher m(node);
|
| + if (CanCover(m.node(), m.left().node()) && m.left().IsWord32Shl()) {
|
| + Int32BinopMatcher mleft(m.left().node());
|
| + if (mleft.right().Is(16) && m.right().Is(16)) {
|
| + Emit(kX64Movsxwl, g.DefineAsRegister(node), g.Use(mleft.left().node()));
|
| + return;
|
| + }
|
| + }
|
| VisitWord32Shift(this, node, kX64Sar32);
|
| }
|
|
|
| @@ -364,6 +373,7 @@ void InstructionSelector::VisitWord64Ror(Node* node) {
|
| VisitWord64Shift(this, node, kX64Ror);
|
| }
|
|
|
| +
|
| namespace {
|
|
|
| AddressingMode GenerateMemoryOperandInputs(X64OperandGenerator* g, Node* scaled,
|
| @@ -1161,6 +1171,7 @@ InstructionSelector::SupportedMachineOperatorFlags() {
|
| }
|
| return MachineOperatorBuilder::kNoFlags;
|
| }
|
| +
|
| } // namespace compiler
|
| } // namespace internal
|
| } // namespace v8
|
|
|