OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #if V8_TARGET_ARCH_ARM64 | 7 #if V8_TARGET_ARCH_ARM64 |
8 | 8 |
9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
(...skipping 1359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1370 // (arg[argc-2]), or just below the receiver in case there are no arguments. | 1370 // (arg[argc-2]), or just below the receiver in case there are no arguments. |
1371 // - Adjust for the arg[] array. | 1371 // - Adjust for the arg[] array. |
1372 Register temp_argv = x11; | 1372 Register temp_argv = x11; |
1373 __ Add(temp_argv, jssp, Operand(x0, LSL, kPointerSizeLog2)); | 1373 __ Add(temp_argv, jssp, Operand(x0, LSL, kPointerSizeLog2)); |
1374 // - Adjust for the receiver. | 1374 // - Adjust for the receiver. |
1375 __ Sub(temp_argv, temp_argv, 1 * kPointerSize); | 1375 __ Sub(temp_argv, temp_argv, 1 * kPointerSize); |
1376 | 1376 |
1377 // Enter the exit frame. Reserve three slots to preserve x21-x23 callee-saved | 1377 // Enter the exit frame. Reserve three slots to preserve x21-x23 callee-saved |
1378 // registers. | 1378 // registers. |
1379 FrameScope scope(masm, StackFrame::MANUAL); | 1379 FrameScope scope(masm, StackFrame::MANUAL); |
1380 __ EnterExitFrame(save_doubles_, x10, 3); | 1380 __ EnterExitFrame(save_doubles(), x10, 3); |
1381 DCHECK(csp.Is(__ StackPointer())); | 1381 DCHECK(csp.Is(__ StackPointer())); |
1382 | 1382 |
1383 // Poke callee-saved registers into reserved space. | 1383 // Poke callee-saved registers into reserved space. |
1384 __ Poke(argv, 1 * kPointerSize); | 1384 __ Poke(argv, 1 * kPointerSize); |
1385 __ Poke(argc, 2 * kPointerSize); | 1385 __ Poke(argc, 2 * kPointerSize); |
1386 __ Poke(target, 3 * kPointerSize); | 1386 __ Poke(target, 3 * kPointerSize); |
1387 | 1387 |
1388 // We normally only keep tagged values in callee-saved registers, as they | 1388 // We normally only keep tagged values in callee-saved registers, as they |
1389 // could be pushed onto the stack by called stubs and functions, and on the | 1389 // could be pushed onto the stack by called stubs and functions, and on the |
1390 // stack they can confuse the GC. However, we're only calling C functions | 1390 // stack they can confuse the GC. However, we're only calling C functions |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1467 | 1467 |
1468 // The call succeeded, so unwind the stack and return. | 1468 // The call succeeded, so unwind the stack and return. |
1469 | 1469 |
1470 // Restore callee-saved registers x21-x23. | 1470 // Restore callee-saved registers x21-x23. |
1471 __ Mov(x11, argc); | 1471 __ Mov(x11, argc); |
1472 | 1472 |
1473 __ Peek(argv, 1 * kPointerSize); | 1473 __ Peek(argv, 1 * kPointerSize); |
1474 __ Peek(argc, 2 * kPointerSize); | 1474 __ Peek(argc, 2 * kPointerSize); |
1475 __ Peek(target, 3 * kPointerSize); | 1475 __ Peek(target, 3 * kPointerSize); |
1476 | 1476 |
1477 __ LeaveExitFrame(save_doubles_, x10, true); | 1477 __ LeaveExitFrame(save_doubles(), x10, true); |
1478 DCHECK(jssp.Is(__ StackPointer())); | 1478 DCHECK(jssp.Is(__ StackPointer())); |
1479 // Pop or drop the remaining stack slots and return from the stub. | 1479 // Pop or drop the remaining stack slots and return from the stub. |
1480 // jssp[24]: Arguments array (of size argc), including receiver. | 1480 // jssp[24]: Arguments array (of size argc), including receiver. |
1481 // jssp[16]: Preserved x23 (used for target). | 1481 // jssp[16]: Preserved x23 (used for target). |
1482 // jssp[8]: Preserved x22 (used for argc). | 1482 // jssp[8]: Preserved x22 (used for argc). |
1483 // jssp[0]: Preserved x21 (used for argv). | 1483 // jssp[0]: Preserved x21 (used for argv). |
1484 __ Drop(x11); | 1484 __ Drop(x11); |
1485 __ AssertFPCRState(); | 1485 __ AssertFPCRState(); |
1486 __ Ret(); | 1486 __ Ret(); |
1487 | 1487 |
(...skipping 3935 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5423 MemOperand(fp, 6 * kPointerSize), | 5423 MemOperand(fp, 6 * kPointerSize), |
5424 NULL); | 5424 NULL); |
5425 } | 5425 } |
5426 | 5426 |
5427 | 5427 |
5428 #undef __ | 5428 #undef __ |
5429 | 5429 |
5430 } } // namespace v8::internal | 5430 } } // namespace v8::internal |
5431 | 5431 |
5432 #endif // V8_TARGET_ARCH_ARM64 | 5432 #endif // V8_TARGET_ARCH_ARM64 |
OLD | NEW |