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

Side by Side Diff: src/crankshaft/mips64/lithium-codegen-mips64.cc

Issue 1695283002: [crankshaft][arm][mips] Fix Math.min(0, 0) (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: mips64 too Created 4 years, 10 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 | « src/crankshaft/mips/lithium-codegen-mips.cc ('k') | test/mjsunit/regress/math-min.js » ('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. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/crankshaft/mips64/lithium-codegen-mips64.h" 5 #include "src/crankshaft/mips64/lithium-codegen-mips64.h"
6 6
7 #include "src/code-factory.h" 7 #include "src/code-factory.h"
8 #include "src/code-stubs.h" 8 #include "src/code-stubs.h"
9 #include "src/crankshaft/hydrogen-osr.h" 9 #include "src/crankshaft/hydrogen-osr.h"
10 #include "src/crankshaft/mips64/lithium-gap-resolver-mips64.h" 10 #include "src/crankshaft/mips64/lithium-gap-resolver-mips64.h"
(...skipping 1888 matching lines...) Expand 10 before | Expand all | Expand 10 after
1899 Label check_nan_left, check_zero, return_left, return_right, done; 1899 Label check_nan_left, check_zero, return_left, return_right, done;
1900 __ BranchF(&check_zero, &check_nan_left, eq, left_reg, right_reg); 1900 __ BranchF(&check_zero, &check_nan_left, eq, left_reg, right_reg);
1901 __ BranchF(&return_left, NULL, condition, left_reg, right_reg); 1901 __ BranchF(&return_left, NULL, condition, left_reg, right_reg);
1902 __ Branch(&return_right); 1902 __ Branch(&return_right);
1903 1903
1904 __ bind(&check_zero); 1904 __ bind(&check_zero);
1905 // left == right != 0. 1905 // left == right != 0.
1906 __ BranchF(&return_left, NULL, ne, left_reg, kDoubleRegZero); 1906 __ BranchF(&return_left, NULL, ne, left_reg, kDoubleRegZero);
1907 // At this point, both left and right are either 0 or -0. 1907 // At this point, both left and right are either 0 or -0.
1908 if (operation == HMathMinMax::kMathMin) { 1908 if (operation == HMathMinMax::kMathMin) {
1909 // The algorithm is: -((-L) + (-R)), which in case of L and R being
1910 // different registers is most efficiently expressed as -((-L) - R).
1909 __ neg_d(left_reg, left_reg); 1911 __ neg_d(left_reg, left_reg);
1910 __ sub_d(result_reg, left_reg, right_reg); 1912 if (left_reg.is(right_reg)) {
1913 __ add_d(result_reg, left_reg, right_reg);
1914 } else {
1915 __ sub_d(result_reg, left_reg, right_reg);
1916 }
1911 __ neg_d(result_reg, result_reg); 1917 __ neg_d(result_reg, result_reg);
1912 } else { 1918 } else {
1913 __ add_d(result_reg, left_reg, right_reg); 1919 __ add_d(result_reg, left_reg, right_reg);
1914 } 1920 }
1915 __ Branch(&done); 1921 __ Branch(&done);
1916 1922
1917 __ bind(&check_nan_left); 1923 __ bind(&check_nan_left);
1918 // left == NaN. 1924 // left == NaN.
1919 __ BranchF(NULL, &return_left, eq, left_reg, left_reg); 1925 __ BranchF(NULL, &return_left, eq, left_reg, left_reg);
1920 __ bind(&return_right); 1926 __ bind(&return_right);
(...skipping 3852 matching lines...) Expand 10 before | Expand all | Expand 10 after
5773 __ Push(at, ToRegister(instr->function())); 5779 __ Push(at, ToRegister(instr->function()));
5774 CallRuntime(Runtime::kPushBlockContext, instr); 5780 CallRuntime(Runtime::kPushBlockContext, instr);
5775 RecordSafepoint(Safepoint::kNoLazyDeopt); 5781 RecordSafepoint(Safepoint::kNoLazyDeopt);
5776 } 5782 }
5777 5783
5778 5784
5779 #undef __ 5785 #undef __
5780 5786
5781 } // namespace internal 5787 } // namespace internal
5782 } // namespace v8 5788 } // namespace v8
OLDNEW
« no previous file with comments | « src/crankshaft/mips/lithium-codegen-mips.cc ('k') | test/mjsunit/regress/math-min.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698