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 1333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1344 __ vmov(double_result, 1.0, scratch); | 1344 __ vmov(double_result, 1.0, scratch); |
1345 __ vsqrt(double_scratch, double_scratch); | 1345 __ vsqrt(double_scratch, double_scratch); |
1346 __ vdiv(double_result, double_result, double_scratch); | 1346 __ vdiv(double_result, double_result, double_scratch); |
1347 __ jmp(&done); | 1347 __ jmp(&done); |
1348 } | 1348 } |
1349 | 1349 |
1350 __ push(lr); | 1350 __ push(lr); |
1351 { | 1351 { |
1352 AllowExternalCallThatCantCauseGC scope(masm); | 1352 AllowExternalCallThatCantCauseGC scope(masm); |
1353 __ PrepareCallCFunction(0, 2, scratch); | 1353 __ PrepareCallCFunction(0, 2, scratch); |
1354 __ SetCallCDoubleArguments(double_base, double_exponent); | 1354 __ MovToFloatParameters(double_base, double_exponent); |
1355 __ CallCFunction( | 1355 __ CallCFunction( |
1356 ExternalReference::power_double_double_function(masm->isolate()), | 1356 ExternalReference::power_double_double_function(masm->isolate()), |
1357 0, 2); | 1357 0, 2); |
1358 } | 1358 } |
1359 __ pop(lr); | 1359 __ pop(lr); |
1360 __ GetCFunctionDoubleResult(double_result); | 1360 __ MovFromFloatResult(double_result); |
1361 __ jmp(&done); | 1361 __ jmp(&done); |
1362 | 1362 |
1363 __ bind(&int_exponent_convert); | 1363 __ bind(&int_exponent_convert); |
1364 __ vcvt_u32_f64(single_scratch, double_exponent); | 1364 __ vcvt_u32_f64(single_scratch, double_exponent); |
1365 __ vmov(scratch, single_scratch); | 1365 __ vmov(scratch, single_scratch); |
1366 } | 1366 } |
1367 | 1367 |
1368 // Calculate power with integer exponent. | 1368 // Calculate power with integer exponent. |
1369 __ bind(&int_exponent); | 1369 __ bind(&int_exponent); |
1370 | 1370 |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1418 __ vstr(double_result, | 1418 __ vstr(double_result, |
1419 FieldMemOperand(heapnumber, HeapNumber::kValueOffset)); | 1419 FieldMemOperand(heapnumber, HeapNumber::kValueOffset)); |
1420 ASSERT(heapnumber.is(r0)); | 1420 ASSERT(heapnumber.is(r0)); |
1421 __ IncrementCounter(counters->math_pow(), 1, scratch, scratch2); | 1421 __ IncrementCounter(counters->math_pow(), 1, scratch, scratch2); |
1422 __ Ret(2); | 1422 __ Ret(2); |
1423 } else { | 1423 } else { |
1424 __ push(lr); | 1424 __ push(lr); |
1425 { | 1425 { |
1426 AllowExternalCallThatCantCauseGC scope(masm); | 1426 AllowExternalCallThatCantCauseGC scope(masm); |
1427 __ PrepareCallCFunction(0, 2, scratch); | 1427 __ PrepareCallCFunction(0, 2, scratch); |
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(lr); | 1433 __ pop(lr); |
1434 __ GetCFunctionDoubleResult(double_result); | 1434 __ MovFromFloatResult(double_result); |
1435 | 1435 |
1436 __ bind(&done); | 1436 __ bind(&done); |
1437 __ IncrementCounter(counters->math_pow(), 1, scratch, scratch2); | 1437 __ IncrementCounter(counters->math_pow(), 1, scratch, scratch2); |
1438 __ Ret(); | 1438 __ Ret(); |
1439 } | 1439 } |
1440 } | 1440 } |
1441 | 1441 |
1442 | 1442 |
1443 bool CEntryStub::NeedsImmovableCode() { | 1443 bool CEntryStub::NeedsImmovableCode() { |
1444 return true; | 1444 return true; |
(...skipping 4400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5845 __ bind(&fast_elements_case); | 5845 __ bind(&fast_elements_case); |
5846 GenerateCase(masm, FAST_ELEMENTS); | 5846 GenerateCase(masm, FAST_ELEMENTS); |
5847 } | 5847 } |
5848 | 5848 |
5849 | 5849 |
5850 #undef __ | 5850 #undef __ |
5851 | 5851 |
5852 } } // namespace v8::internal | 5852 } } // namespace v8::internal |
5853 | 5853 |
5854 #endif // V8_TARGET_ARCH_ARM | 5854 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |