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 942042456a728931b2830f63bf33340e1d9ad0fd..06a4d0488770b2d56ffa42c692ba53fb4b2eb800 100644 |
--- a/src/compiler/s390/code-generator-s390.cc |
+++ b/src/compiler/s390/code-generator-s390.cc |
@@ -1531,22 +1531,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
case kS390_MulHigh32: |
ASSEMBLE_BIN_OP(MulHigh32, MulHigh32, MulHigh32); |
break; |
- case kS390_Mul32WithHigh32: |
- __ LoadRR(r1, i.InputRegister(0)); |
- __ mr_z(r0, i.InputRegister(1)); |
- __ LoadW(i.OutputRegister(0), r1); // low |
- __ LoadW(i.OutputRegister(1), r0); // high |
- break; |
case kS390_MulHighU32: |
- __ LoadRR(r1, i.InputRegister(0)); |
- if (HasRegisterInput(instr, 1)) { |
- __ mlr(r0, i.InputRegister(1)); |
- } else if (HasStackSlotInput(instr, 1)) { |
- __ ml(r0, i.InputStackSlot32(1)); |
- } else { |
- UNIMPLEMENTED(); |
- } |
- __ LoadlW(i.OutputRegister(), r0); |
+ ASSEMBLE_BIN_OP(MulHighU32, MulHighU32, MulHighU32); |
break; |
case kS390_MulFloat: |
// Ensure we don't clobber right |
@@ -1576,20 +1562,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
break; |
#endif |
case kS390_Div32: { |
- AddressingMode mode = AddressingModeField::decode(instr->opcode()); |
- __ lgfr(r1, i.InputRegister(0)); |
- if (mode != kMode_None) { |
- size_t first_index = 1; |
- MemOperand operand = i.MemoryOperand(&mode, &first_index); |
- __ dsgf(r0, operand); |
- } else if (HasRegisterInput(instr, 1)) { |
- __ dsgfr(r0, i.InputRegister(1)); |
- } else if (HasStackSlotInput(instr, 1)) { |
- __ dsgf(r0, i.InputStackSlot32(1)); |
- } else { |
- UNREACHABLE(); |
- } |
- __ LoadlW(i.OutputRegister(), r1); |
+ ASSEMBLE_BIN_OP(Div32, Div32, Div32); |
break; |
} |
#if V8_TARGET_ARCH_S390X |
@@ -1601,21 +1574,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
break; |
#endif |
case kS390_DivU32: { |
- __ lr(r0, i.InputRegister(0)); |
- __ srdl(r0, Operand(32)); |
- AddressingMode mode = AddressingModeField::decode(instr->opcode()); |
- if (mode != kMode_None) { |
- size_t first_index = 1; |
- MemOperand operand = i.MemoryOperand(&mode, &first_index); |
- __ dl(r0, operand); |
- } else if (HasRegisterInput(instr, 1)) { |
- __ dlr(r0, i.InputRegister(1)); |
- } else if (HasStackSlotInput(instr, 1)) { |
- __ dl(r0, i.InputStackSlot32(1)); |
- } else { |
- UNREACHABLE(); |
- } |
- __ LoadlW(i.OutputRegister(), r1); |
+ ASSEMBLE_BIN_OP(DivU32, DivU32, DivU32); |
break; |
} |
case kS390_DivFloat: |
@@ -1643,10 +1602,10 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
} |
break; |
case kS390_Mod32: |
- ASSEMBLE_MODULO(dr, srda); |
+ ASSEMBLE_BIN_OP(Mod32, Mod32, Mod32); |
break; |
case kS390_ModU32: |
- ASSEMBLE_MODULO(dlr, srdl); |
+ ASSEMBLE_BIN_OP(ModU32, ModU32, ModU32); |
break; |
#if V8_TARGET_ARCH_S390X |
case kS390_Mod64: |
@@ -1799,14 +1758,16 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
case kS390_Cntlz32: { |
__ llgfr(i.OutputRegister(), i.InputRegister(0)); |
__ flogr(r0, i.OutputRegister()); |
- __ LoadRR(i.OutputRegister(), r0); |
- __ SubP(i.OutputRegister(), Operand(32)); |
- } break; |
+ __ Add32(i.OutputRegister(), r0, Operand(-32)); |
+ // No need to zero-ext b/c llgfr is done already |
+ break; |
+ } |
#if V8_TARGET_ARCH_S390X |
case kS390_Cntlz64: { |
__ flogr(r0, i.InputRegister(0)); |
__ LoadRR(i.OutputRegister(), r0); |
- } break; |
+ break; |
+ } |
#endif |
case kS390_Popcnt32: |
__ Popcnt32(i.OutputRegister(), i.InputRegister(0)); |