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

Unified Diff: src/s390/macro-assembler-s390.cc

Issue 1853973002: S390: Use FIEBRA/FIDBRA for FP Floor/Ceil (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 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/s390/macro-assembler-s390.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/s390/macro-assembler-s390.cc
diff --git a/src/s390/macro-assembler-s390.cc b/src/s390/macro-assembler-s390.cc
index 559f7d030a75f74448fbb05ffd32d86f8f16983f..c0f234d3ef28e99dc6ffd8dc72bb32b12846c782 100644
--- a/src/s390/macro-assembler-s390.cc
+++ b/src/s390/macro-assembler-s390.cc
@@ -2407,160 +2407,6 @@ void MacroAssembler::TryInt32Floor(Register result, DoubleRegister double_input,
bind(&exception);
}
-void MacroAssembler::FloatCeiling32(DoubleRegister double_output,
- DoubleRegister double_input,
- Register scratch,
- DoubleRegister double_scratch) {
- Label not_zero, no_nan_inf, done, do_ceil;
- Register scratch2 = r0;
-
- // Move high word into scratch
- MovFloatToInt(scratch, double_input);
-
- // Test for NaN/Inf which results in NaN/Inf respectively
- static const uint32_t float32ExponentMask = 0x7f800000u;
- ExtractBitMask(scratch2, scratch, float32ExponentMask);
- CmpLogical32(scratch2, Operand(0xff));
- bne(&no_nan_inf, Label::kNear);
- Move(double_output, double_input);
- b(&done);
- bind(&no_nan_inf);
-
- // Test for double_input in (-1, -0) which results in -0
- LoadFloat32Literal(double_scratch, -1.0, scratch2);
- cebr(double_input, double_scratch);
- ble(&do_ceil, Label::kNear);
- Cmp32(scratch, Operand::Zero());
- bgt(&do_ceil, Label::kNear);
- bne(&not_zero, Label::kNear);
-
- // double_input = +/- 0 which results in +/- 0 respectively
- Move(double_output, double_input);
- b(&done);
- bind(&not_zero);
-
- // double_output = -0
- llihf(scratch2, Operand(0x80000000));
- ldgr(double_output, scratch2);
- b(&done);
- bind(&do_ceil);
-
- // Regular case
- // cgdbr(Condition(6), scratch, double_input);
- // cdfbr(double_output, scratch);
- fiebra(double_output, double_input, FIDBRA_ROUND_TOWARD_POS_INF);
- bind(&done);
-}
-
-void MacroAssembler::FloatFloor32(DoubleRegister double_output,
- DoubleRegister double_input,
- Register scratch) {
- Label not_zero, no_nan_inf, done, do_floor;
- Register scratch2 = r0;
-
- // Move high word into scratch
- MovFloatToInt(scratch, double_input);
-
- // Test for NaN/Inf which results in NaN/Inf respectively
- static const uint32_t float32ExponentMask = 0x7f800000u;
- ExtractBitMask(scratch2, scratch, float32ExponentMask);
- CmpLogical32(scratch2, Operand(0xff));
- bne(&no_nan_inf, Label::kNear);
- Move(double_output, double_input);
- b(&done);
- bind(&no_nan_inf);
-
- // Test for double_input=+/- 0 which results in +/- 0 respectively
- ltebr(double_input, double_input);
- bne(&do_floor, Label::kNear);
- Move(double_output, double_input);
- b(&done);
- bind(&do_floor);
-
- // Regular case
- // cgdbr(Condition(7), scratch, double_input);
- // cdfbr(double_output, scratch);
- fiebra(double_output, double_input, FIDBRA_ROUND_TOWARD_NEG_INF);
- bind(&done);
-}
-
-void MacroAssembler::FloatCeiling64(DoubleRegister double_output,
- DoubleRegister double_input,
- Register scratch,
- DoubleRegister double_scratch) {
- Label not_zero, no_nan_inf, done, do_ceil;
- Register scratch2 = r0;
-
- // Move high word into scratch
- StoreDouble(double_input, MemOperand(sp, -kDoubleSize));
- LoadlW(scratch, MemOperand(sp, -kDoubleSize + Register::kExponentOffset));
-
- // Test for NaN/Inf which results in NaN/Inf respectively
- ExtractBitMask(scratch2, scratch, HeapNumber::kExponentMask);
- CmpLogicalP(scratch2, Operand(0x7ff));
- bne(&no_nan_inf, Label::kNear);
- Move(double_output, double_input);
- b(&done);
- bind(&no_nan_inf);
-
- // Test for double_input in (-1, -0) which results in -0
- LoadDoubleLiteral(double_scratch, -1.0, scratch2);
- cdbr(double_input, double_scratch);
- ble(&do_ceil, Label::kNear);
- Cmp32(scratch, Operand::Zero());
- bgt(&do_ceil, Label::kNear);
- bne(&not_zero, Label::kNear);
-
- // double_input = +/- 0 which results in +/- 0 respectively
- Move(double_output, double_input);
- b(&done);
- bind(&not_zero);
-
- // double_output = -0
- llihf(scratch2, Operand(0x80000000));
- ldgr(double_output, scratch2);
- b(&done);
- bind(&do_ceil);
-
- // Regular case
- // cgdbr(Condition(6), scratch, double_input);
- // cdfbr(double_output, scratch);
- fidbra(double_output, double_input, FIDBRA_ROUND_TOWARD_POS_INF);
- bind(&done);
-}
-
-void MacroAssembler::FloatFloor64(DoubleRegister double_output,
- DoubleRegister double_input,
- Register scratch) {
- Label not_zero, no_nan_inf, done, do_floor;
- Register scratch2 = r0;
-
- // Move high word into scratch
- StoreDouble(double_input, MemOperand(sp, -kDoubleSize));
- LoadlW(scratch, MemOperand(sp, -kDoubleSize + Register::kExponentOffset));
-
- // Test for NaN/Inf which results in NaN/Inf respectively
- ExtractBitMask(scratch2, scratch, HeapNumber::kExponentMask);
- CmpLogicalP(scratch2, Operand(0x7ff));
- bne(&no_nan_inf, Label::kNear);
- Move(double_output, double_input);
- b(&done);
- bind(&no_nan_inf);
-
- // Test for double_input=+/- 0 which results in +/- 0 respectively
- ltdbr(double_input, double_input);
- bne(&do_floor, Label::kNear);
- Move(double_output, double_input);
- b(&done);
- bind(&do_floor);
-
- // Regular case
- // cgdbr(Condition(7), scratch, double_input);
- // cdfbr(double_output, scratch);
- fidbra(double_output, double_input, FIDBRA_ROUND_TOWARD_NEG_INF);
- bind(&done);
-}
-
void MacroAssembler::TryInlineTruncateDoubleToI(Register result,
DoubleRegister double_input,
Label* done) {
« no previous file with comments | « src/s390/macro-assembler-s390.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698