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 #ifndef V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ | 5 #ifndef V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ |
6 #define V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ | 6 #define V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ |
7 | 7 |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "src/arm64/assembler-arm64.h" | 10 #include "src/arm64/assembler-arm64.h" |
(...skipping 1558 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1569 Label* fall_through); | 1569 Label* fall_through); |
1570 | 1570 |
1571 // Test the bits of register defined by bit_pattern, and branch to | 1571 // Test the bits of register defined by bit_pattern, and branch to |
1572 // if_any_set, if_all_clear or fall_through accordingly. | 1572 // if_any_set, if_all_clear or fall_through accordingly. |
1573 void TestAndSplit(const Register& reg, | 1573 void TestAndSplit(const Register& reg, |
1574 uint64_t bit_pattern, | 1574 uint64_t bit_pattern, |
1575 Label* if_all_clear, | 1575 Label* if_all_clear, |
1576 Label* if_any_set, | 1576 Label* if_any_set, |
1577 Label* fall_through); | 1577 Label* fall_through); |
1578 | 1578 |
1579 // Check if a map for a JSObject indicates that the object has fast elements. | |
1580 // Jump to the specified label if it does not. | |
1581 void CheckFastElements(Register map, Register scratch, Label* fail); | |
1582 | |
1583 // Check if a map for a JSObject indicates that the object can have both smi | 1579 // Check if a map for a JSObject indicates that the object can have both smi |
1584 // and HeapObject elements. Jump to the specified label if it does not. | 1580 // and HeapObject elements. Jump to the specified label if it does not. |
1585 void CheckFastObjectElements(Register map, Register scratch, Label* fail); | 1581 void CheckFastObjectElements(Register map, Register scratch, Label* fail); |
1586 | 1582 |
1587 // Check to see if number can be stored as a double in FastDoubleElements. | 1583 // Check to see if number can be stored as a double in FastDoubleElements. |
1588 // If it can, store it at the index specified by key_reg in the array, | 1584 // If it can, store it at the index specified by key_reg in the array, |
1589 // otherwise jump to fail. | 1585 // otherwise jump to fail. |
1590 void StoreNumberToDoubleElements(Register value_reg, | 1586 void StoreNumberToDoubleElements(Register value_reg, |
1591 Register key_reg, | 1587 Register key_reg, |
1592 Register elements_reg, | 1588 Register elements_reg, |
(...skipping 22 matching lines...) Expand all Loading... |
1615 // is left untouched, whereas both scratch registers are clobbered. | 1611 // is left untouched, whereas both scratch registers are clobbered. |
1616 void CheckAccessGlobalProxy(Register holder_reg, | 1612 void CheckAccessGlobalProxy(Register holder_reg, |
1617 Register scratch1, | 1613 Register scratch1, |
1618 Register scratch2, | 1614 Register scratch2, |
1619 Label* miss); | 1615 Label* miss); |
1620 | 1616 |
1621 // Hash the interger value in 'key' register. | 1617 // Hash the interger value in 'key' register. |
1622 // It uses the same algorithm as ComputeIntegerHash in utils.h. | 1618 // It uses the same algorithm as ComputeIntegerHash in utils.h. |
1623 void GetNumberHash(Register key, Register scratch); | 1619 void GetNumberHash(Register key, Register scratch); |
1624 | 1620 |
1625 // Load value from the dictionary. | |
1626 // | |
1627 // elements - holds the slow-case elements of the receiver on entry. | |
1628 // Unchanged unless 'result' is the same register. | |
1629 // | |
1630 // key - holds the smi key on entry. | |
1631 // Unchanged unless 'result' is the same register. | |
1632 // | |
1633 // result - holds the result on exit if the load succeeded. | |
1634 // Allowed to be the same as 'key' or 'result'. | |
1635 // Unchanged on bailout so 'key' or 'result' can be used | |
1636 // in further computation. | |
1637 void LoadFromNumberDictionary(Label* miss, | |
1638 Register elements, | |
1639 Register key, | |
1640 Register result, | |
1641 Register scratch0, | |
1642 Register scratch1, | |
1643 Register scratch2, | |
1644 Register scratch3); | |
1645 | |
1646 // --------------------------------------------------------------------------- | 1621 // --------------------------------------------------------------------------- |
1647 // Frames. | 1622 // Frames. |
1648 | 1623 |
1649 // Load the type feedback vector from a JavaScript frame. | 1624 // Load the type feedback vector from a JavaScript frame. |
1650 void EmitLoadTypeFeedbackVector(Register vector); | 1625 void EmitLoadTypeFeedbackVector(Register vector); |
1651 | 1626 |
1652 // Activation support. | 1627 // Activation support. |
1653 void EnterFrame(StackFrame::Type type); | 1628 void EnterFrame(StackFrame::Type type); |
1654 void EnterFrame(StackFrame::Type type, bool load_constant_pool_pointer_reg); | 1629 void EnterFrame(StackFrame::Type type, bool load_constant_pool_pointer_reg); |
1655 void LeaveFrame(StackFrame::Type type); | 1630 void LeaveFrame(StackFrame::Type type); |
(...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2320 class RegisterBits : public BitField<unsigned, 0, 5> {}; | 2295 class RegisterBits : public BitField<unsigned, 0, 5> {}; |
2321 class DeltaBits : public BitField<uint32_t, 5, 32-5> {}; | 2296 class DeltaBits : public BitField<uint32_t, 5, 32-5> {}; |
2322 }; | 2297 }; |
2323 | 2298 |
2324 } // namespace internal | 2299 } // namespace internal |
2325 } // namespace v8 | 2300 } // namespace v8 |
2326 | 2301 |
2327 #define ACCESS_MASM(masm) masm-> | 2302 #define ACCESS_MASM(masm) masm-> |
2328 | 2303 |
2329 #endif // V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ | 2304 #endif // V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ |
OLD | NEW |