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

Side by Side Diff: src/mips/lithium-codegen-mips.cc

Issue 203443009: MIPS: Tweaked FlooringDiv back to TruncatingDiv again. (Closed) Base URL: https://github.com/v8/v8.git@gbl
Patch Set: Created 6 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 unified diff | Download patch
« no previous file with comments | « no previous file | src/mips/macro-assembler-mips.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved.7 1 // Copyright 2012 the V8 project authors. All rights reserved.7
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1093 matching lines...) Expand 10 before | Expand all | Expand 10 after
1104 Register dividend = ToRegister(instr->dividend()); 1104 Register dividend = ToRegister(instr->dividend());
1105 int32_t divisor = instr->divisor(); 1105 int32_t divisor = instr->divisor();
1106 Register result = ToRegister(instr->result()); 1106 Register result = ToRegister(instr->result());
1107 ASSERT(!dividend.is(result)); 1107 ASSERT(!dividend.is(result));
1108 1108
1109 if (divisor == 0) { 1109 if (divisor == 0) {
1110 DeoptimizeIf(al, instr->environment()); 1110 DeoptimizeIf(al, instr->environment());
1111 return; 1111 return;
1112 } 1112 }
1113 1113
1114 __ FlooringDiv(result, dividend, Abs(divisor)); 1114 __ TruncatingDiv(result, dividend, Abs(divisor));
1115 __ srl(at, dividend, 31);
1116 __ Addu(result, result, at);
1117 __ Mul(result, result, Operand(Abs(divisor))); 1115 __ Mul(result, result, Operand(Abs(divisor)));
1118 __ Subu(result, dividend, Operand(result)); 1116 __ Subu(result, dividend, Operand(result));
1119 1117
1120 // Check for negative zero. 1118 // Check for negative zero.
1121 HMod* hmod = instr->hydrogen(); 1119 HMod* hmod = instr->hydrogen();
1122 if (hmod->CheckFlag(HValue::kBailoutOnMinusZero)) { 1120 if (hmod->CheckFlag(HValue::kBailoutOnMinusZero)) {
1123 Label remainder_not_zero; 1121 Label remainder_not_zero;
1124 __ Branch(&remainder_not_zero, ne, result, Operand(zero_reg)); 1122 __ Branch(&remainder_not_zero, ne, result, Operand(zero_reg));
1125 DeoptimizeIf(lt, instr->environment(), dividend, Operand(zero_reg)); 1123 DeoptimizeIf(lt, instr->environment(), dividend, Operand(zero_reg));
1126 __ bind(&remainder_not_zero); 1124 __ bind(&remainder_not_zero);
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
1223 DeoptimizeIf(al, instr->environment()); 1221 DeoptimizeIf(al, instr->environment());
1224 return; 1222 return;
1225 } 1223 }
1226 1224
1227 // Check for (0 / -x) that will produce negative zero. 1225 // Check for (0 / -x) that will produce negative zero.
1228 HDiv* hdiv = instr->hydrogen(); 1226 HDiv* hdiv = instr->hydrogen();
1229 if (hdiv->CheckFlag(HValue::kBailoutOnMinusZero) && divisor < 0) { 1227 if (hdiv->CheckFlag(HValue::kBailoutOnMinusZero) && divisor < 0) {
1230 DeoptimizeIf(eq, instr->environment(), dividend, Operand(zero_reg)); 1228 DeoptimizeIf(eq, instr->environment(), dividend, Operand(zero_reg));
1231 } 1229 }
1232 1230
1233 __ FlooringDiv(result, dividend, Abs(divisor)); 1231 __ TruncatingDiv(result, dividend, Abs(divisor));
1234 __ srl(at, dividend, 31);
1235 __ Addu(result, result, Operand(at));
1236 if (divisor < 0) __ Subu(result, zero_reg, result); 1232 if (divisor < 0) __ Subu(result, zero_reg, result);
1237 1233
1238 if (!hdiv->CheckFlag(HInstruction::kAllUsesTruncatingToInt32)) { 1234 if (!hdiv->CheckFlag(HInstruction::kAllUsesTruncatingToInt32)) {
1239 __ Mul(scratch0(), result, Operand(divisor)); 1235 __ Mul(scratch0(), result, Operand(divisor));
1240 __ Subu(scratch0(), scratch0(), dividend); 1236 __ Subu(scratch0(), scratch0(), dividend);
1241 DeoptimizeIf(ne, instr->environment(), scratch0(), Operand(zero_reg)); 1237 DeoptimizeIf(ne, instr->environment(), scratch0(), Operand(zero_reg));
1242 } 1238 }
1243 } 1239 }
1244 1240
1245 1241
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1364 DeoptimizeIf(al, instr->environment()); 1360 DeoptimizeIf(al, instr->environment());
1365 return; 1361 return;
1366 } 1362 }
1367 1363
1368 // Check for (0 / -x) that will produce negative zero. 1364 // Check for (0 / -x) that will produce negative zero.
1369 HMathFloorOfDiv* hdiv = instr->hydrogen(); 1365 HMathFloorOfDiv* hdiv = instr->hydrogen();
1370 if (hdiv->CheckFlag(HValue::kBailoutOnMinusZero) && divisor < 0) { 1366 if (hdiv->CheckFlag(HValue::kBailoutOnMinusZero) && divisor < 0) {
1371 DeoptimizeIf(eq, instr->environment(), dividend, Operand(zero_reg)); 1367 DeoptimizeIf(eq, instr->environment(), dividend, Operand(zero_reg));
1372 } 1368 }
1373 1369
1374 __ FlooringDiv(result, dividend, divisor); 1370 // TODO(svenpanne) Add correction terms.
1371 __ TruncatingDiv(result, dividend, divisor);
1375 } 1372 }
1376 1373
1377 1374
1378 void LCodeGen::DoMulI(LMulI* instr) { 1375 void LCodeGen::DoMulI(LMulI* instr) {
1379 Register scratch = scratch0(); 1376 Register scratch = scratch0();
1380 Register result = ToRegister(instr->result()); 1377 Register result = ToRegister(instr->result());
1381 // Note that result may alias left. 1378 // Note that result may alias left.
1382 Register left = ToRegister(instr->left()); 1379 Register left = ToRegister(instr->left());
1383 LOperand* right_op = instr->right(); 1380 LOperand* right_op = instr->right();
1384 1381
(...skipping 4408 matching lines...) Expand 10 before | Expand all | Expand 10 after
5793 __ Subu(scratch, result, scratch); 5790 __ Subu(scratch, result, scratch);
5794 __ lw(result, FieldMemOperand(scratch, 5791 __ lw(result, FieldMemOperand(scratch,
5795 FixedArray::kHeaderSize - kPointerSize)); 5792 FixedArray::kHeaderSize - kPointerSize));
5796 __ bind(&done); 5793 __ bind(&done);
5797 } 5794 }
5798 5795
5799 5796
5800 #undef __ 5797 #undef __
5801 5798
5802 } } // namespace v8::internal 5799 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | src/mips/macro-assembler-mips.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698