Index: src/compiler/s390/code-generator-s390.cc |
diff --git a/src/compiler/s390/code-generator-s390.cc b/src/compiler/s390/code-generator-s390.cc |
index 916323b22c74066b7445fc0beda43ec9de0f55a2..0b531aa036ae26564efda860c89c6e081d77ee1a 100644 |
--- a/src/compiler/s390/code-generator-s390.cc |
+++ b/src/compiler/s390/code-generator-s390.cc |
@@ -489,6 +489,10 @@ static inline int AssembleUnaryOp(Instruction* instr, _R _r, _M _m, _I _i) { |
return AssembleOp<1>(instr, _r, _m, _i); |
} |
+#define ASSEMBLE_BIN_OP(_rr, _rm, _ri) AssembleBinOp(instr, _rr, _rm, _ri) |
+#define ASSEMBLE_UNARY_OP(_r, _m, _i) AssembleUnaryOp(instr, _r, _m, _i) |
+ |
+#ifdef V8_TARGET_ARCH_S390X |
#define CHECK_AND_ZERO_EXT_OUTPUT(num) \ |
([&](int index) { \ |
DCHECK(HasImmediateInput(instr, (index))); \ |
@@ -496,11 +500,12 @@ static inline int AssembleUnaryOp(Instruction* instr, _R _r, _M _m, _I _i) { |
if (doZeroExt) __ LoadlW(i.OutputRegister(), i.OutputRegister()); \ |
})(num) |
-#define ASSEMBLE_BIN_OP(_rr, _rm, _ri) AssembleBinOp(instr, _rr, _rm, _ri) |
-#define ASSEMBLE_UNARY_OP(_r, _m, _i) AssembleUnaryOp(instr, _r, _m, _i) |
- |
#define ASSEMBLE_BIN32_OP(_rr, _rm, _ri) \ |
{ CHECK_AND_ZERO_EXT_OUTPUT(AssembleBinOp(instr, _rr, _rm, _ri)); } |
+#else |
+#define ASSEMBLE_BIN32_OP ASSEMBLE_BIN_OP |
+#define CHECK_AND_ZERO_EXT_OUTPUT(num) |
+#endif |
} // namespace |
@@ -1343,6 +1348,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
break; |
} |
case kS390_And32: |
+ // zero-ext |
if (CpuFeatures::IsSupported(DISTINCT_OPS)) { |
ASSEMBLE_BIN32_OP(RRRInstr(nrk), RM32Instr(And), RIInstr(nilf)); |
} else { |
@@ -1357,6 +1363,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
} |
break; |
case kS390_Or32: |
+ // zero-ext |
if (CpuFeatures::IsSupported(DISTINCT_OPS)) { |
ASSEMBLE_BIN32_OP(RRRInstr(ork), RM32Instr(Or), RIInstr(oilf)); |
} else { |
@@ -1371,6 +1378,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
} |
break; |
case kS390_Xor32: |
+ // zero-ext |
if (CpuFeatures::IsSupported(DISTINCT_OPS)) { |
ASSEMBLE_BIN32_OP(RRRInstr(xrk), RM32Instr(Xor), RIInstr(xilf)); |
} else { |
@@ -1385,6 +1393,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
} |
break; |
case kS390_ShiftLeft32: |
+ // zero-ext |
if (CpuFeatures::IsSupported(DISTINCT_OPS)) { |
ASSEMBLE_BIN32_OP(RRRInstr(ShiftLeft), nullInstr, RRIInstr(ShiftLeft)); |
} else { |
@@ -1395,6 +1404,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
ASSEMBLE_BIN_OP(RRRInstr(sllg), nullInstr, RRIInstr(sllg)); |
break; |
case kS390_ShiftRight32: |
+ // zero-ext |
if (CpuFeatures::IsSupported(DISTINCT_OPS)) { |
ASSEMBLE_BIN32_OP(RRRInstr(srlk), nullInstr, RRIInstr(srlk)); |
} else { |
@@ -1405,6 +1415,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
ASSEMBLE_BIN_OP(RRRInstr(srlg), nullInstr, RRIInstr(srlg)); |
break; |
case kS390_ShiftRightArith32: |
+ // zero-ext |
if (CpuFeatures::IsSupported(DISTINCT_OPS)) { |
ASSEMBLE_BIN32_OP(RRRInstr(srak), nullInstr, RRIInstr(srak)); |
} else { |
@@ -1490,6 +1501,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
} |
#endif |
case kS390_RotRight32: { |
+ // zero-ext |
if (HasRegisterInput(instr, 1)) { |
__ LoadComplementRR(kScratchReg, i.InputRegister(1)); |
__ rll(i.OutputRegister(), i.InputRegister(0), kScratchReg); |
@@ -1559,6 +1571,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
} |
break; |
case kS390_Add32: { |
+ // zero-ext |
if (CpuFeatures::IsSupported(DISTINCT_OPS)) { |
ASSEMBLE_BIN32_OP(RRRInstr(ark), RM32Instr(Add32), RRIInstr(Add32)); |
} else { |
@@ -1580,6 +1593,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
ASSEMBLE_BIN_OP(DDInstr(adbr), DMTInstr(AddFloat64), nullInstr); |
break; |
case kS390_Sub32: |
+ // zero-ext |
if (CpuFeatures::IsSupported(DISTINCT_OPS)) { |
ASSEMBLE_BIN32_OP(RRRInstr(srk), RM32Instr(Sub32), RRIInstr(Sub32)); |
} else { |
@@ -1600,9 +1614,11 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
ASSEMBLE_BIN_OP(DDInstr(sdbr), DMTInstr(SubFloat64), nullInstr); |
break; |
case kS390_Mul32: |
+ // zero-ext |
ASSEMBLE_BIN32_OP(RRInstr(Mul32), RM32Instr(Mul32), RIInstr(Mul32)); |
break; |
case kS390_Mul32WithOverflow: |
+ // zero-ext |
ASSEMBLE_BIN32_OP(RRRInstr(Mul32WithOverflowIfCCUnequal), |
RRM32Instr(Mul32WithOverflowIfCCUnequal), |
RRIInstr(Mul32WithOverflowIfCCUnequal)); |
@@ -1611,12 +1627,14 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
ASSEMBLE_BIN_OP(RRInstr(Mul64), RM64Instr(Mul64), RIInstr(Mul64)); |
break; |
case kS390_MulHigh32: |
- ASSEMBLE_BIN32_OP(RRRInstr(MulHigh32), RRM32Instr(MulHigh32), |
- RRIInstr(MulHigh32)); |
+ // zero-ext |
+ ASSEMBLE_BIN_OP(RRRInstr(MulHigh32), RRM32Instr(MulHigh32), |
+ RRIInstr(MulHigh32)); |
break; |
case kS390_MulHighU32: |
- ASSEMBLE_BIN32_OP(RRRInstr(MulHighU32), RRM32Instr(MulHighU32), |
- RRIInstr(MulHighU32)); |
+ // zero-ext |
+ ASSEMBLE_BIN_OP(RRRInstr(MulHighU32), RRM32Instr(MulHighU32), |
+ RRIInstr(MulHighU32)); |
break; |
case kS390_MulFloat: |
ASSEMBLE_BIN_OP(DDInstr(meebr), DMTInstr(MulFloat32), nullInstr); |
@@ -1628,14 +1646,16 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
ASSEMBLE_BIN_OP(RRRInstr(Div64), RRM64Instr(Div64), nullInstr); |
break; |
case kS390_Div32: { |
- ASSEMBLE_BIN32_OP(RRRInstr(Div32), RRM32Instr(Div32), nullInstr); |
+ // zero-ext |
+ ASSEMBLE_BIN_OP(RRRInstr(Div32), RRM32Instr(Div32), nullInstr); |
break; |
} |
case kS390_DivU64: |
ASSEMBLE_BIN_OP(RRRInstr(DivU64), RRM64Instr(DivU64), nullInstr); |
break; |
case kS390_DivU32: { |
- ASSEMBLE_BIN32_OP(RRRInstr(DivU32), RRM32Instr(DivU32), nullInstr); |
+ // zero-ext |
+ ASSEMBLE_BIN_OP(RRRInstr(DivU32), RRM32Instr(DivU32), nullInstr); |
break; |
} |
case kS390_DivFloat: |
@@ -1645,10 +1665,12 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
ASSEMBLE_BIN_OP(DDInstr(ddbr), DMTInstr(DivFloat64), nullInstr); |
break; |
case kS390_Mod32: |
- ASSEMBLE_BIN32_OP(RRRInstr(Mod32), RRM32Instr(Mod32), nullInstr); |
+ // zero-ext |
+ ASSEMBLE_BIN_OP(RRRInstr(Mod32), RRM32Instr(Mod32), nullInstr); |
break; |
case kS390_ModU32: |
- ASSEMBLE_BIN32_OP(RRRInstr(ModU32), RRM32Instr(ModU32), nullInstr); |
+ // zero-ext |
+ ASSEMBLE_BIN_OP(RRRInstr(ModU32), RRM32Instr(ModU32), nullInstr); |
break; |
case kS390_Mod64: |
ASSEMBLE_BIN_OP(RRRInstr(Mod64), RRM64Instr(Mod64), nullInstr); |