MIPS: Fix kraken 1.1 benchmark failure.
This makes sure that the DoubleToIStub::Generate method does not overwrite the value of the f12 register. TEST=bencnhmarks/kraken/stanford-crypto-pbkdf2 BUG= R=plind44@gmail.com Review URL: https://codereview.chromium.org/33463002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17306 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
26e02eea57
commit
f687039bd8
@ -547,23 +547,27 @@ void DoubleToIStub::Generate(MacroAssembler* masm) {
|
|||||||
GetRegisterThatIsNotOneOf(input_reg, result_reg, scratch);
|
GetRegisterThatIsNotOneOf(input_reg, result_reg, scratch);
|
||||||
Register scratch3 =
|
Register scratch3 =
|
||||||
GetRegisterThatIsNotOneOf(input_reg, result_reg, scratch, scratch2);
|
GetRegisterThatIsNotOneOf(input_reg, result_reg, scratch, scratch2);
|
||||||
DoubleRegister double_scratch = kLithiumScratchDouble.low();
|
DoubleRegister double_scratch = kLithiumScratchDouble;
|
||||||
DoubleRegister double_input = f12;
|
|
||||||
|
|
||||||
__ Push(scratch, scratch2, scratch3);
|
__ Push(scratch, scratch2, scratch3);
|
||||||
|
|
||||||
__ ldc1(double_input, MemOperand(input_reg, double_offset));
|
|
||||||
|
|
||||||
if (!skip_fastpath()) {
|
if (!skip_fastpath()) {
|
||||||
|
// Load double input.
|
||||||
|
__ ldc1(double_scratch, MemOperand(input_reg, double_offset));
|
||||||
|
|
||||||
// Clear cumulative exception flags and save the FCSR.
|
// Clear cumulative exception flags and save the FCSR.
|
||||||
__ cfc1(scratch2, FCSR);
|
__ cfc1(scratch2, FCSR);
|
||||||
__ ctc1(zero_reg, FCSR);
|
__ ctc1(zero_reg, FCSR);
|
||||||
|
|
||||||
// Try a conversion to a signed integer.
|
// Try a conversion to a signed integer.
|
||||||
__ trunc_w_d(double_scratch, double_input);
|
__ Trunc_w_d(double_scratch, double_scratch);
|
||||||
|
// Move the converted value into the result register.
|
||||||
__ mfc1(result_reg, double_scratch);
|
__ mfc1(result_reg, double_scratch);
|
||||||
|
|
||||||
// Retrieve and restore the FCSR.
|
// Retrieve and restore the FCSR.
|
||||||
__ cfc1(scratch, FCSR);
|
__ cfc1(scratch, FCSR);
|
||||||
__ ctc1(scratch2, FCSR);
|
__ ctc1(scratch2, FCSR);
|
||||||
|
|
||||||
// Check for overflow and NaNs.
|
// Check for overflow and NaNs.
|
||||||
__ And(
|
__ And(
|
||||||
scratch, scratch,
|
scratch, scratch,
|
||||||
@ -576,7 +580,9 @@ void DoubleToIStub::Generate(MacroAssembler* masm) {
|
|||||||
// Load the double value and perform a manual truncation.
|
// Load the double value and perform a manual truncation.
|
||||||
Register input_high = scratch2;
|
Register input_high = scratch2;
|
||||||
Register input_low = scratch3;
|
Register input_low = scratch3;
|
||||||
__ Move(input_low, input_high, double_input);
|
|
||||||
|
__ lw(input_low, MemOperand(input_reg, double_offset));
|
||||||
|
__ lw(input_high, MemOperand(input_reg, double_offset + kIntSize));
|
||||||
|
|
||||||
Label normal_exponent, restore_sign;
|
Label normal_exponent, restore_sign;
|
||||||
// Extract the biased exponent in result.
|
// Extract the biased exponent in result.
|
||||||
|
Loading…
Reference in New Issue
Block a user