Index: src/compiler/s390/instruction-selector-s390.cc |
diff --git a/src/compiler/s390/instruction-selector-s390.cc b/src/compiler/s390/instruction-selector-s390.cc |
index b50ef62f69732e60876c29a368cd9549fb04134c..25b214d09dcf45280442e31f52f138928e025774 100644 |
--- a/src/compiler/s390/instruction-selector-s390.cc |
+++ b/src/compiler/s390/instruction-selector-s390.cc |
@@ -31,7 +31,7 @@ enum class OperandMode : uint32_t { |
kAllowImmediate = kAllowRI | kAllowRRI, |
kAllowMemoryOperand = kAllowRM | kAllowRRM, |
kAllowDistinctOps = kAllowRRR | kAllowRRI | kAllowRRM, |
- kBitWiseCommonMode = kAllowRI | kUint32Imm, |
+ kBitWiseCommonMode = kAllowRI, |
kArithmeticCommonMode = kAllowRM | kAllowRI |
}; |
@@ -42,11 +42,21 @@ OperandModes immediateModeMask = |
OperandMode::kInt32Imm | OperandMode::kInt32Imm_Negate | |
OperandMode::kUint32Imm | OperandMode::kInt20Imm; |
-#define BitWiseOperandMode \ |
- ((OperandMode::kBitWiseCommonMode | \ |
- (CpuFeatures::IsSupported(DISTINCT_OPS) \ |
- ? OperandMode::kAllowRRR \ |
+#define AndOperandMode \ |
+ ((OperandMode::kBitWiseCommonMode | OperandMode::kUint32Imm | \ |
+ OperandMode::kAllowRM | (CpuFeatures::IsSupported(DISTINCT_OPS) \ |
+ ? OperandMode::kAllowRRR \ |
+ : OperandMode::kBitWiseCommonMode))) |
+ |
+#define OrOperandMode AndOperandMode |
+#define XorOperandMode AndOperandMode |
+ |
+#define ShiftOperandMode \ |
+ ((OperandMode::kBitWiseCommonMode | OperandMode::kShift64Imm | \ |
+ (CpuFeatures::IsSupported(DISTINCT_OPS) \ |
+ ? OperandMode::kAllowRRR \ |
: OperandMode::kBitWiseCommonMode))) |
+ |
#define AddOperandMode \ |
((OperandMode::kArithmeticCommonMode | OperandMode::kInt32Imm | \ |
(CpuFeatures::IsSupported(DISTINCT_OPS) \ |
@@ -829,8 +839,7 @@ static inline bool IsContiguousMask64(uint64_t value, int* mb, int* me) { |
#endif |
void InstructionSelector::VisitWord32And(Node* node) { |
- VisitBin32op(this, node, kS390_And32, |
- BitWiseOperandMode | OperandMode::kAllowRM); |
+ VisitBin32op(this, node, kS390_And32, AndOperandMode); |
} |
#if V8_TARGET_ARCH_S390X |
@@ -888,8 +897,7 @@ void InstructionSelector::VisitWord64And(Node* node) { |
#endif |
void InstructionSelector::VisitWord32Or(Node* node) { |
- VisitBin32op(this, node, kS390_Or32, |
- BitWiseOperandMode | OperandMode::kAllowRM); |
+ VisitBin32op(this, node, kS390_Or32, OrOperandMode); |
} |
#if V8_TARGET_ARCH_S390X |
@@ -901,8 +909,7 @@ void InstructionSelector::VisitWord64Or(Node* node) { |
#endif |
void InstructionSelector::VisitWord32Xor(Node* node) { |
- VisitBin32op(this, node, kS390_Xor32, |
- BitWiseOperandMode | OperandMode::kAllowRM); |
+ VisitBin32op(this, node, kS390_Xor32, XorOperandMode); |
} |
#if V8_TARGET_ARCH_S390X |
@@ -913,7 +920,7 @@ void InstructionSelector::VisitWord64Xor(Node* node) { |
#endif |
void InstructionSelector::VisitWord32Shl(Node* node) { |
- VisitBin32op(this, node, kS390_ShiftLeft32, BitWiseOperandMode); |
+ VisitBin32op(this, node, kS390_ShiftLeft32, ShiftOperandMode); |
} |
#if V8_TARGET_ARCH_S390X |
@@ -961,7 +968,7 @@ void InstructionSelector::VisitWord64Shl(Node* node) { |
#endif |
void InstructionSelector::VisitWord32Shr(Node* node) { |
- VisitBin32op(this, node, kS390_ShiftRight32, BitWiseOperandMode); |
+ VisitBin32op(this, node, kS390_ShiftRight32, ShiftOperandMode); |
} |
#if V8_TARGET_ARCH_S390X |
@@ -1024,7 +1031,7 @@ void InstructionSelector::VisitWord32Sar(Node* node) { |
return; |
} |
} |
- VisitBin32op(this, node, kS390_ShiftRightArith32, BitWiseOperandMode); |
+ VisitBin32op(this, node, kS390_ShiftRightArith32, ShiftOperandMode); |
} |
#if !V8_TARGET_ARCH_S390X |