Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(141)

Unified Diff: src/crankshaft/s390/lithium-codegen-s390.cc

Issue 2761953002: s390: improve floating point and integer convertion (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/compiler/s390/instruction-selector-s390.cc ('k') | src/full-codegen/s390/full-codegen-s390.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/crankshaft/s390/lithium-codegen-s390.cc
diff --git a/src/crankshaft/s390/lithium-codegen-s390.cc b/src/crankshaft/s390/lithium-codegen-s390.cc
index 3bfa78462b8fd7c69d8414310c50118d357fb9d1..ff902cdc0f59b552105d8e9f7f62c3e9f4bc9d75 100644
--- a/src/crankshaft/s390/lithium-codegen-s390.cc
+++ b/src/crankshaft/s390/lithium-codegen-s390.cc
@@ -1360,7 +1360,7 @@ void LCodeGen::DoMulI(LMulI* instr) {
#if V8_TARGET_ARCH_S390X
} else {
__ LoadComplementRR(result, left);
- __ TestIfInt32(result, r0);
+ __ TestIfInt32(result);
DeoptimizeIf(ne, instr, DeoptimizeReason::kOverflow);
}
#endif
@@ -1445,7 +1445,7 @@ void LCodeGen::DoMulI(LMulI* instr) {
__ LoadRR(result, left);
__ msgr(result, right);
}
- __ TestIfInt32(result, r0);
+ __ TestIfInt32(result);
DeoptimizeIf(ne, instr, DeoptimizeReason::kOverflow);
if (instr->hydrogen()->representation().IsSmi()) {
__ SmiTag(result);
@@ -1453,16 +1453,15 @@ void LCodeGen::DoMulI(LMulI* instr) {
#else
// r0:scratch = scratch * right
if (instr->hydrogen()->representation().IsSmi()) {
- __ SmiUntag(scratch, left);
- __ mr_z(r0, right);
- __ LoadRR(result, scratch);
+ __ SmiUntag(result, left);
+ __ lgfr(result, result);
+ __ msgfr(result, right);
} else {
// r0:scratch = scratch * right
- __ LoadRR(scratch, left);
- __ mr_z(r0, right);
- __ LoadRR(result, scratch);
+ __ lgfr(result, left);
+ __ msgfr(result, right);
}
- __ TestIfInt32(r0, result, scratch);
+ __ TestIfInt32(result);
DeoptimizeIf(ne, instr, DeoptimizeReason::kOverflow);
#endif
}
@@ -4427,16 +4426,16 @@ void LCodeGen::DoInteger32ToDouble(LInteger32ToDouble* instr) {
if (input->IsStackSlot()) {
Register scratch = scratch0();
__ LoadP(scratch, ToMemOperand(input));
- __ ConvertIntToDouble(scratch, ToDoubleRegister(output));
+ __ ConvertIntToDouble(ToDoubleRegister(output), scratch);
} else {
- __ ConvertIntToDouble(ToRegister(input), ToDoubleRegister(output));
+ __ ConvertIntToDouble(ToDoubleRegister(output), ToRegister(input));
}
}
void LCodeGen::DoUint32ToDouble(LUint32ToDouble* instr) {
LOperand* input = instr->value();
LOperand* output = instr->result();
- __ ConvertUnsignedIntToDouble(ToRegister(input), ToDoubleRegister(output));
+ __ ConvertUnsignedIntToDouble(ToDoubleRegister(output), ToRegister(input));
}
void LCodeGen::DoNumberTagI(LNumberTagI* instr) {
@@ -4512,9 +4511,9 @@ void LCodeGen::DoDeferredNumberTagIU(LInstruction* instr, LOperand* value,
__ SmiUntag(src, dst);
__ xilf(src, Operand(HeapNumber::kSignMask));
}
- __ ConvertIntToDouble(src, dbl_scratch);
+ __ ConvertIntToDouble(dbl_scratch, src);
} else {
- __ ConvertUnsignedIntToDouble(src, dbl_scratch);
+ __ ConvertUnsignedIntToDouble(dbl_scratch, src);
}
if (FLAG_inline_new) {
@@ -4679,7 +4678,7 @@ void LCodeGen::EmitNumberUntagD(LNumberUntagD* instr, Register input_reg,
// Smi to double register conversion
__ bind(&load_smi);
// scratch: untagged value of input_reg
- __ ConvertIntToDouble(scratch, result_reg);
+ __ ConvertIntToDouble(result_reg, scratch);
__ bind(&done);
}
« no previous file with comments | « src/compiler/s390/instruction-selector-s390.cc ('k') | src/full-codegen/s390/full-codegen-s390.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698