OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 3524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3535 __ mov(a0, s0); | 3535 __ mov(a0, s0); |
3536 __ mov(a1, s1); | 3536 __ mov(a1, s1); |
3537 | 3537 |
3538 // We are calling compiled C/C++ code. a0 and a1 hold our two arguments. We | 3538 // We are calling compiled C/C++ code. a0 and a1 hold our two arguments. We |
3539 // also need to reserve the 4 argument slots on the stack. | 3539 // also need to reserve the 4 argument slots on the stack. |
3540 | 3540 |
3541 __ AssertStackIsAligned(); | 3541 __ AssertStackIsAligned(); |
3542 | 3542 |
3543 __ li(a2, Operand(ExternalReference::isolate_address())); | 3543 __ li(a2, Operand(ExternalReference::isolate_address())); |
3544 | 3544 |
3545 // From arm version of this function: | 3545 // To let the GC traverse the return address of the exit frames, we need to |
3546 // TODO(1242173): To let the GC traverse the return address of the exit | 3546 // know where the return address is. The CEntryStub is unmovable, so |
3547 // frames, we need to know where the return address is. Right now, | 3547 // we can store the address on the stack to be able to find it again and |
3548 // we push it on the stack to be able to find it again, but we never | 3548 // we never have to restore it, because it will not change. |
3549 // restore from it in case of changes, which makes it impossible to | |
3550 // support moving the C entry code stub. This should be fixed, but currently | |
3551 // this is OK because the CEntryStub gets generated so early in the V8 boot | |
3552 // sequence that it is not moving ever. | |
3553 | |
3554 { Assembler::BlockTrampolinePoolScope block_trampoline_pool(masm); | 3549 { Assembler::BlockTrampolinePoolScope block_trampoline_pool(masm); |
3555 // This branch-and-link sequence is needed to find the current PC on mips, | 3550 // This branch-and-link sequence is needed to find the current PC on mips, |
3556 // saved to the ra register. | 3551 // saved to the ra register. |
3557 // Use masm-> here instead of the double-underscore macro since extra | 3552 // Use masm-> here instead of the double-underscore macro since extra |
3558 // coverage code can interfere with the proper calculation of ra. | 3553 // coverage code can interfere with the proper calculation of ra. |
3559 Label find_ra; | 3554 Label find_ra; |
3560 masm->bal(&find_ra); // bal exposes branch delay slot. | 3555 masm->bal(&find_ra); // bal exposes branch delay slot. |
3561 masm->nop(); // Branch delay slot nop. | 3556 masm->nop(); // Branch delay slot nop. |
3562 masm->bind(&find_ra); | 3557 masm->bind(&find_ra); |
3563 | 3558 |
(...skipping 3090 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6654 __ mov(result, zero_reg); | 6649 __ mov(result, zero_reg); |
6655 __ Ret(); | 6650 __ Ret(); |
6656 } | 6651 } |
6657 | 6652 |
6658 | 6653 |
6659 #undef __ | 6654 #undef __ |
6660 | 6655 |
6661 } } // namespace v8::internal | 6656 } } // namespace v8::internal |
6662 | 6657 |
6663 #endif // V8_TARGET_ARCH_MIPS | 6658 #endif // V8_TARGET_ARCH_MIPS |
OLD | NEW |