| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 695 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 706 // Load both TrueValue and FalseValue roots. | 706 // Load both TrueValue and FalseValue roots. |
| 707 void LoadTrueFalseRoots(Register true_root, Register false_root); | 707 void LoadTrueFalseRoots(Register true_root, Register false_root); |
| 708 | 708 |
| 709 void LoadHeapObject(Register dst, Handle<HeapObject> object); | 709 void LoadHeapObject(Register dst, Handle<HeapObject> object); |
| 710 | 710 |
| 711 void LoadObject(Register result, Handle<Object> object) { | 711 void LoadObject(Register result, Handle<Object> object) { |
| 712 AllowDeferredHandleDereference heap_object_check; | 712 AllowDeferredHandleDereference heap_object_check; |
| 713 if (object->IsHeapObject()) { | 713 if (object->IsHeapObject()) { |
| 714 LoadHeapObject(result, Handle<HeapObject>::cast(object)); | 714 LoadHeapObject(result, Handle<HeapObject>::cast(object)); |
| 715 } else { | 715 } else { |
| 716 ASSERT(object->IsSmi()); |
| 716 Mov(result, Operand(object)); | 717 Mov(result, Operand(object)); |
| 717 } | 718 } |
| 718 } | 719 } |
| 719 | 720 |
| 720 static int SafepointRegisterStackIndex(int reg_code); | 721 static int SafepointRegisterStackIndex(int reg_code); |
| 721 | 722 |
| 722 // This is required for compatibility with architecture independant code. | 723 // This is required for compatibility with architecture independant code. |
| 723 // Remove if not needed. | 724 // Remove if not needed. |
| 724 inline void Move(Register dst, Register src) { Mov(dst, src); } | 725 inline void Move(Register dst, Register src) { Mov(dst, src); } |
| 725 | 726 |
| (...skipping 782 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1508 Register scratch3, | 1509 Register scratch3, |
| 1509 Label* call_runtime); | 1510 Label* call_runtime); |
| 1510 | 1511 |
| 1511 // AllocationMemento support. Arrays may have an associated | 1512 // AllocationMemento support. Arrays may have an associated |
| 1512 // AllocationMemento object that can be checked for in order to pretransition | 1513 // AllocationMemento object that can be checked for in order to pretransition |
| 1513 // to another type. | 1514 // to another type. |
| 1514 // On entry, receiver should point to the array object. | 1515 // On entry, receiver should point to the array object. |
| 1515 // If allocation info is present, the Z flag is set (so that the eq | 1516 // If allocation info is present, the Z flag is set (so that the eq |
| 1516 // condition will pass). | 1517 // condition will pass). |
| 1517 void TestJSArrayForAllocationMemento(Register receiver, | 1518 void TestJSArrayForAllocationMemento(Register receiver, |
| 1518 Register scratch1, | 1519 Register scratch1, |
| 1519 Register scratch2); | 1520 Register scratch2, |
| 1521 Label* no_memento_found); |
| 1522 |
| 1523 void JumpIfJSArrayHasAllocationMemento(Register receiver, |
| 1524 Register scratch1, |
| 1525 Register scratch2, |
| 1526 Label* memento_found) { |
| 1527 Label no_memento_found; |
| 1528 TestJSArrayForAllocationMemento(receiver, scratch1, scratch2, |
| 1529 &no_memento_found); |
| 1530 B(eq, memento_found); |
| 1531 Bind(&no_memento_found); |
| 1532 } |
| 1520 | 1533 |
| 1521 // The stack pointer has to switch between csp and jssp when setting up and | 1534 // The stack pointer has to switch between csp and jssp when setting up and |
| 1522 // destroying the exit frame. Hence preserving/restoring the registers is | 1535 // destroying the exit frame. Hence preserving/restoring the registers is |
| 1523 // slightly more complicated than simple push/pop operations. | 1536 // slightly more complicated than simple push/pop operations. |
| 1524 void ExitFramePreserveFPRegs(); | 1537 void ExitFramePreserveFPRegs(); |
| 1525 void ExitFrameRestoreFPRegs(); | 1538 void ExitFrameRestoreFPRegs(); |
| 1526 | 1539 |
| 1540 // Generates function and stub prologue code. |
| 1541 void Prologue(PrologueFrameMode frame_mode); |
| 1542 |
| 1527 // Enter exit frame. Exit frames are used when calling C code from generated | 1543 // Enter exit frame. Exit frames are used when calling C code from generated |
| 1528 // (JavaScript) code. | 1544 // (JavaScript) code. |
| 1529 // | 1545 // |
| 1530 // The stack pointer must be jssp on entry, and will be set to csp by this | 1546 // The stack pointer must be jssp on entry, and will be set to csp by this |
| 1531 // function. The frame pointer is also configured, but the only other | 1547 // function. The frame pointer is also configured, but the only other |
| 1532 // registers modified by this function are the provided scratch register, and | 1548 // registers modified by this function are the provided scratch register, and |
| 1533 // jssp. | 1549 // jssp. |
| 1534 // | 1550 // |
| 1535 // The 'extra_space' argument can be used to allocate some space in the exit | 1551 // The 'extra_space' argument can be used to allocate some space in the exit |
| 1536 // frame that will be ignored by the GC. This space will be reserved in the | 1552 // frame that will be ignored by the GC. This space will be reserved in the |
| (...skipping 621 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2158 #error "Unsupported option" | 2174 #error "Unsupported option" |
| 2159 #define CODE_COVERAGE_STRINGIFY(x) #x | 2175 #define CODE_COVERAGE_STRINGIFY(x) #x |
| 2160 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x) | 2176 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x) |
| 2161 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) | 2177 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) |
| 2162 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> | 2178 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> |
| 2163 #else | 2179 #else |
| 2164 #define ACCESS_MASM(masm) masm-> | 2180 #define ACCESS_MASM(masm) masm-> |
| 2165 #endif | 2181 #endif |
| 2166 | 2182 |
| 2167 #endif // V8_A64_MACRO_ASSEMBLER_A64_H_ | 2183 #endif // V8_A64_MACRO_ASSEMBLER_A64_H_ |
| OLD | NEW |