Index: src/mips64/code-stubs-mips64.cc |
diff --git a/src/mips64/code-stubs-mips64.cc b/src/mips64/code-stubs-mips64.cc |
index 1d836ffa29077303a5dfb1ba244dc37d51f48fe2..9271ef98402e56b83530638664674c76e63c73a4 100644 |
--- a/src/mips64/code-stubs-mips64.cc |
+++ b/src/mips64/code-stubs-mips64.cc |
@@ -820,10 +820,14 @@ void MathPowStub::Generate(MacroAssembler* masm) { |
__ Move(double_result, 1.0); |
// Get absolute value of exponent. |
- Label positive_exponent; |
+ Label positive_exponent, bail_out; |
__ Branch(&positive_exponent, ge, scratch, Operand(zero_reg)); |
__ Dsubu(scratch, zero_reg, scratch); |
+ // Check when Subu overflows and we get negative result |
akos.palfi.imgtec
2016/07/21 11:23:27
Nit: s/Subu/Dsubu
ivica.bogosavljevic
2016/07/22 14:45:07
Acknowledged.
|
+ // (happens only when input is MIN_INT) |
akos.palfi.imgtec
2016/07/21 11:23:27
Nit: please put period at the end of the sentence.
ivica.bogosavljevic
2016/07/22 14:45:07
Acknowledged.
|
+ __ BranchShort(&bail_out, gt, zero_reg, Operand(scratch)); |
akos.palfi.imgtec
2016/07/21 11:23:27
You should use Branch() instead of BranchShort().
ivica.bogosavljevic
2016/07/22 14:45:07
Acknowledged.
|
__ bind(&positive_exponent); |
+ __ Assert(ge, kUnexpectedNegativeValue, scratch, Operand(zero_reg)); |
Label while_true, no_carry, loop_end; |
__ bind(&while_true); |
@@ -856,6 +860,7 @@ void MathPowStub::Generate(MacroAssembler* masm) { |
__ cvt_d_w(double_exponent, single_scratch); |
// Returning or bailing out. |
+ __ bind(&bail_out); |
__ push(ra); |
{ |
AllowExternalCallThatCantCauseGC scope(masm); |