OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
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 1407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1418 __ Move(double_result, 1); | 1418 __ Move(double_result, 1); |
1419 __ sqrt_d(double_scratch, double_scratch); | 1419 __ sqrt_d(double_scratch, double_scratch); |
1420 __ div_d(double_result, double_result, double_scratch); | 1420 __ div_d(double_result, double_result, double_scratch); |
1421 __ jmp(&done); | 1421 __ jmp(&done); |
1422 } | 1422 } |
1423 | 1423 |
1424 __ push(ra); | 1424 __ push(ra); |
1425 { | 1425 { |
1426 AllowExternalCallThatCantCauseGC scope(masm); | 1426 AllowExternalCallThatCantCauseGC scope(masm); |
1427 __ PrepareCallCFunction(0, 2, scratch2); | 1427 __ PrepareCallCFunction(0, 2, scratch2); |
1428 __ SetCallCDoubleArguments(double_base, double_exponent); | 1428 __ MovToFloatParameters(double_base, double_exponent); |
1429 __ CallCFunction( | 1429 __ CallCFunction( |
1430 ExternalReference::power_double_double_function(masm->isolate()), | 1430 ExternalReference::power_double_double_function(masm->isolate()), |
1431 0, 2); | 1431 0, 2); |
1432 } | 1432 } |
1433 __ pop(ra); | 1433 __ pop(ra); |
1434 __ GetCFunctionDoubleResult(double_result); | 1434 __ MovFromFloatResult(double_result); |
1435 __ jmp(&done); | 1435 __ jmp(&done); |
1436 | 1436 |
1437 __ bind(&int_exponent_convert); | 1437 __ bind(&int_exponent_convert); |
1438 } | 1438 } |
1439 | 1439 |
1440 // Calculate power with integer exponent. | 1440 // Calculate power with integer exponent. |
1441 __ bind(&int_exponent); | 1441 __ bind(&int_exponent); |
1442 | 1442 |
1443 // Get two copies of exponent in the registers scratch and exponent. | 1443 // Get two copies of exponent in the registers scratch and exponent. |
1444 if (exponent_type_ == INTEGER) { | 1444 if (exponent_type_ == INTEGER) { |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1502 __ sdc1(double_result, | 1502 __ sdc1(double_result, |
1503 FieldMemOperand(heapnumber, HeapNumber::kValueOffset)); | 1503 FieldMemOperand(heapnumber, HeapNumber::kValueOffset)); |
1504 ASSERT(heapnumber.is(v0)); | 1504 ASSERT(heapnumber.is(v0)); |
1505 __ IncrementCounter(counters->math_pow(), 1, scratch, scratch2); | 1505 __ IncrementCounter(counters->math_pow(), 1, scratch, scratch2); |
1506 __ DropAndRet(2); | 1506 __ DropAndRet(2); |
1507 } else { | 1507 } else { |
1508 __ push(ra); | 1508 __ push(ra); |
1509 { | 1509 { |
1510 AllowExternalCallThatCantCauseGC scope(masm); | 1510 AllowExternalCallThatCantCauseGC scope(masm); |
1511 __ PrepareCallCFunction(0, 2, scratch); | 1511 __ PrepareCallCFunction(0, 2, scratch); |
1512 __ SetCallCDoubleArguments(double_base, double_exponent); | 1512 __ MovToFloatParameters(double_base, double_exponent); |
1513 __ CallCFunction( | 1513 __ CallCFunction( |
1514 ExternalReference::power_double_double_function(masm->isolate()), | 1514 ExternalReference::power_double_double_function(masm->isolate()), |
1515 0, 2); | 1515 0, 2); |
1516 } | 1516 } |
1517 __ pop(ra); | 1517 __ pop(ra); |
1518 __ GetCFunctionDoubleResult(double_result); | 1518 __ MovFromFloatResult(double_result); |
1519 | 1519 |
1520 __ bind(&done); | 1520 __ bind(&done); |
1521 __ IncrementCounter(counters->math_pow(), 1, scratch, scratch2); | 1521 __ IncrementCounter(counters->math_pow(), 1, scratch, scratch2); |
1522 __ Ret(); | 1522 __ Ret(); |
1523 } | 1523 } |
1524 } | 1524 } |
1525 | 1525 |
1526 | 1526 |
1527 bool CEntryStub::NeedsImmovableCode() { | 1527 bool CEntryStub::NeedsImmovableCode() { |
1528 return true; | 1528 return true; |
(...skipping 4494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6023 __ bind(&fast_elements_case); | 6023 __ bind(&fast_elements_case); |
6024 GenerateCase(masm, FAST_ELEMENTS); | 6024 GenerateCase(masm, FAST_ELEMENTS); |
6025 } | 6025 } |
6026 | 6026 |
6027 | 6027 |
6028 #undef __ | 6028 #undef __ |
6029 | 6029 |
6030 } } // namespace v8::internal | 6030 } } // namespace v8::internal |
6031 | 6031 |
6032 #endif // V8_TARGET_ARCH_MIPS | 6032 #endif // V8_TARGET_ARCH_MIPS |
OLD | NEW |