| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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_S390_MACRO_ASSEMBLER_S390_H_ | 5 #ifndef V8_S390_MACRO_ASSEMBLER_S390_H_ |
| 6 #define V8_S390_MACRO_ASSEMBLER_S390_H_ | 6 #define V8_S390_MACRO_ASSEMBLER_S390_H_ |
| 7 | 7 |
| 8 #include "src/assembler.h" | 8 #include "src/assembler.h" |
| 9 #include "src/bailout-reason.h" | 9 #include "src/bailout-reason.h" |
| 10 #include "src/frames.h" | 10 #include "src/frames.h" |
| (...skipping 943 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 954 const ParameterCount& actual, InvokeFlag flag, | 954 const ParameterCount& actual, InvokeFlag flag, |
| 955 const CallWrapper& call_wrapper); | 955 const CallWrapper& call_wrapper); |
| 956 | 956 |
| 957 void InvokeFunction(Handle<JSFunction> function, | 957 void InvokeFunction(Handle<JSFunction> function, |
| 958 const ParameterCount& expected, | 958 const ParameterCount& expected, |
| 959 const ParameterCount& actual, InvokeFlag flag, | 959 const ParameterCount& actual, InvokeFlag flag, |
| 960 const CallWrapper& call_wrapper); | 960 const CallWrapper& call_wrapper); |
| 961 | 961 |
| 962 void IsObjectJSStringType(Register object, Register scratch, Label* fail); | 962 void IsObjectJSStringType(Register object, Register scratch, Label* fail); |
| 963 | 963 |
| 964 void IsObjectNameType(Register object, Register scratch, Label* fail); | |
| 965 | |
| 966 // Frame restart support | 964 // Frame restart support |
| 967 void MaybeDropFrames(); | 965 void MaybeDropFrames(); |
| 968 | 966 |
| 969 // Exception handling | 967 // Exception handling |
| 970 | 968 |
| 971 // Push a new stack handler and link into stack handler chain. | 969 // Push a new stack handler and link into stack handler chain. |
| 972 void PushStackHandler(); | 970 void PushStackHandler(); |
| 973 | 971 |
| 974 // Unlink the stack handler on top of the stack from the stack handler chain. | 972 // Unlink the stack handler on top of the stack from the stack handler chain. |
| 975 // Must preserve the result register. | 973 // Must preserve the result register. |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1099 // Check if the map of an object is equal to a specified map and branch to | 1097 // Check if the map of an object is equal to a specified map and branch to |
| 1100 // label if not. Skip the smi check if not required (object is known to be a | 1098 // label if not. Skip the smi check if not required (object is known to be a |
| 1101 // heap object). If mode is ALLOW_ELEMENT_TRANSITION_MAPS, then also match | 1099 // heap object). If mode is ALLOW_ELEMENT_TRANSITION_MAPS, then also match |
| 1102 // against maps that are ElementsKind transition maps of the specified map. | 1100 // against maps that are ElementsKind transition maps of the specified map. |
| 1103 void CheckMap(Register obj, Register scratch, Handle<Map> map, Label* fail, | 1101 void CheckMap(Register obj, Register scratch, Handle<Map> map, Label* fail, |
| 1104 SmiCheckType smi_check_type); | 1102 SmiCheckType smi_check_type); |
| 1105 | 1103 |
| 1106 void CheckMap(Register obj, Register scratch, Heap::RootListIndex index, | 1104 void CheckMap(Register obj, Register scratch, Heap::RootListIndex index, |
| 1107 Label* fail, SmiCheckType smi_check_type); | 1105 Label* fail, SmiCheckType smi_check_type); |
| 1108 | 1106 |
| 1109 // Check if the map of an object is equal to a specified weak map and branch | |
| 1110 // to a specified target if equal. Skip the smi check if not required | |
| 1111 // (object is known to be a heap object) | |
| 1112 void DispatchWeakMap(Register obj, Register scratch1, Register scratch2, | |
| 1113 Handle<WeakCell> cell, Handle<Code> success, | |
| 1114 SmiCheckType smi_check_type); | |
| 1115 | |
| 1116 // Compare the given value and the value of weak cell. | |
| 1117 void CmpWeakValue(Register value, Handle<WeakCell> cell, Register scratch, | |
| 1118 CRegister cr = cr7); | |
| 1119 | |
| 1120 void GetWeakValue(Register value, Handle<WeakCell> cell); | 1107 void GetWeakValue(Register value, Handle<WeakCell> cell); |
| 1121 | 1108 |
| 1122 // Load the value of the weak cell in the value register. Branch to the given | 1109 // Load the value of the weak cell in the value register. Branch to the given |
| 1123 // miss label if the weak cell was cleared. | 1110 // miss label if the weak cell was cleared. |
| 1124 void LoadWeakValue(Register value, Handle<WeakCell> cell, Label* miss); | 1111 void LoadWeakValue(Register value, Handle<WeakCell> cell, Label* miss); |
| 1125 | 1112 |
| 1126 // Compare the object in a register to a value from the root list. | 1113 // Compare the object in a register to a value from the root list. |
| 1127 // Uses the ip register as scratch. | 1114 // Uses the ip register as scratch. |
| 1128 void CompareRoot(Register obj, Heap::RootListIndex index); | 1115 void CompareRoot(Register obj, Heap::RootListIndex index); |
| 1129 void PushRoot(Heap::RootListIndex index) { | 1116 void PushRoot(Heap::RootListIndex index) { |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1319 Register scratch2); | 1306 Register scratch2); |
| 1320 void DecrementCounter(StatsCounter* counter, int value, Register scratch1, | 1307 void DecrementCounter(StatsCounter* counter, int value, Register scratch1, |
| 1321 Register scratch2); | 1308 Register scratch2); |
| 1322 | 1309 |
| 1323 // --------------------------------------------------------------------------- | 1310 // --------------------------------------------------------------------------- |
| 1324 // Debugging | 1311 // Debugging |
| 1325 | 1312 |
| 1326 // Calls Abort(msg) if the condition cond is not satisfied. | 1313 // Calls Abort(msg) if the condition cond is not satisfied. |
| 1327 // Use --debug_code to enable. | 1314 // Use --debug_code to enable. |
| 1328 void Assert(Condition cond, BailoutReason reason, CRegister cr = cr7); | 1315 void Assert(Condition cond, BailoutReason reason, CRegister cr = cr7); |
| 1329 void AssertFastElements(Register elements); | |
| 1330 | 1316 |
| 1331 // Like Assert(), but always enabled. | 1317 // Like Assert(), but always enabled. |
| 1332 void Check(Condition cond, BailoutReason reason, CRegister cr = cr7); | 1318 void Check(Condition cond, BailoutReason reason, CRegister cr = cr7); |
| 1333 | 1319 |
| 1334 // Print a message to stdout and abort execution. | 1320 // Print a message to stdout and abort execution. |
| 1335 void Abort(BailoutReason reason); | 1321 void Abort(BailoutReason reason); |
| 1336 | 1322 |
| 1337 // Verify restrictions about code generated in stubs. | 1323 // Verify restrictions about code generated in stubs. |
| 1338 void set_generating_stub(bool value) { generating_stub_ = value; } | 1324 void set_generating_stub(bool value) { generating_stub_ = value; } |
| 1339 bool generating_stub() { return generating_stub_; } | 1325 bool generating_stub() { return generating_stub_; } |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1602 // Jump if either of the registers contain a non-smi. | 1588 // Jump if either of the registers contain a non-smi. |
| 1603 inline void JumpIfNotSmi(Register value, Label* not_smi_label) { | 1589 inline void JumpIfNotSmi(Register value, Label* not_smi_label) { |
| 1604 TestIfSmi(value); | 1590 TestIfSmi(value); |
| 1605 bne(not_smi_label /*, cr0*/); | 1591 bne(not_smi_label /*, cr0*/); |
| 1606 } | 1592 } |
| 1607 // Jump if either of the registers contain a non-smi. | 1593 // Jump if either of the registers contain a non-smi. |
| 1608 void JumpIfNotBothSmi(Register reg1, Register reg2, Label* on_not_both_smi); | 1594 void JumpIfNotBothSmi(Register reg1, Register reg2, Label* on_not_both_smi); |
| 1609 // Jump if either of the registers contain a smi. | 1595 // Jump if either of the registers contain a smi. |
| 1610 void JumpIfEitherSmi(Register reg1, Register reg2, Label* on_either_smi); | 1596 void JumpIfEitherSmi(Register reg1, Register reg2, Label* on_either_smi); |
| 1611 | 1597 |
| 1612 // Abort execution if argument is a number, enabled via --debug-code. | |
| 1613 void AssertNotNumber(Register object); | |
| 1614 | |
| 1615 // Abort execution if argument is a smi, enabled via --debug-code. | 1598 // Abort execution if argument is a smi, enabled via --debug-code. |
| 1616 void AssertNotSmi(Register object); | 1599 void AssertNotSmi(Register object); |
| 1617 void AssertSmi(Register object); | 1600 void AssertSmi(Register object); |
| 1618 | 1601 |
| 1619 inline void TestIfInt32(Register value) { | 1602 inline void TestIfInt32(Register value) { |
| 1620 // High bits must be identical to fit into an 32-bit integer | 1603 // High bits must be identical to fit into an 32-bit integer |
| 1621 cgfr(value, value); | 1604 cgfr(value, value); |
| 1622 } | 1605 } |
| 1623 | 1606 |
| 1624 #if V8_TARGET_ARCH_S390X | 1607 #if V8_TARGET_ARCH_S390X |
| 1625 // Ensure it is permissable to read/write int value directly from | 1608 // Ensure it is permissable to read/write int value directly from |
| 1626 // upper half of the smi. | 1609 // upper half of the smi. |
| 1627 STATIC_ASSERT(kSmiTag == 0); | 1610 STATIC_ASSERT(kSmiTag == 0); |
| 1628 STATIC_ASSERT(kSmiTagSize + kSmiShiftSize == 32); | 1611 STATIC_ASSERT(kSmiTagSize + kSmiShiftSize == 32); |
| 1629 #endif | 1612 #endif |
| 1630 #if V8_TARGET_LITTLE_ENDIAN | 1613 #if V8_TARGET_LITTLE_ENDIAN |
| 1631 #define SmiWordOffset(offset) (offset + kPointerSize / 2) | 1614 #define SmiWordOffset(offset) (offset + kPointerSize / 2) |
| 1632 #else | 1615 #else |
| 1633 #define SmiWordOffset(offset) offset | 1616 #define SmiWordOffset(offset) offset |
| 1634 #endif | 1617 #endif |
| 1635 | 1618 |
| 1636 // Abort execution if argument is not a string, enabled via --debug-code. | |
| 1637 void AssertString(Register object); | |
| 1638 | |
| 1639 // Abort execution if argument is not a name, enabled via --debug-code. | |
| 1640 void AssertName(Register object); | |
| 1641 | |
| 1642 void AssertFunction(Register object); | 1619 void AssertFunction(Register object); |
| 1643 | 1620 |
| 1644 // Abort execution if argument is not a JSBoundFunction, | 1621 // Abort execution if argument is not a JSBoundFunction, |
| 1645 // enabled via --debug-code. | 1622 // enabled via --debug-code. |
| 1646 void AssertBoundFunction(Register object); | 1623 void AssertBoundFunction(Register object); |
| 1647 | 1624 |
| 1648 // Abort execution if argument is not a JSGeneratorObject, | 1625 // Abort execution if argument is not a JSGeneratorObject, |
| 1649 // enabled via --debug-code. | 1626 // enabled via --debug-code. |
| 1650 void AssertGeneratorObject(Register object); | 1627 void AssertGeneratorObject(Register object); |
| 1651 | 1628 |
| 1652 // Abort execution if argument is not a JSReceiver, enabled via --debug-code. | |
| 1653 void AssertReceiver(Register object); | |
| 1654 | |
| 1655 // Abort execution if argument is not undefined or an AllocationSite, enabled | 1629 // Abort execution if argument is not undefined or an AllocationSite, enabled |
| 1656 // via --debug-code. | 1630 // via --debug-code. |
| 1657 void AssertUndefinedOrAllocationSite(Register object, Register scratch); | 1631 void AssertUndefinedOrAllocationSite(Register object, Register scratch); |
| 1658 | 1632 |
| 1659 // Abort execution if reg is not the root value with the given index, | 1633 // Abort execution if reg is not the root value with the given index, |
| 1660 // enabled via --debug-code. | 1634 // enabled via --debug-code. |
| 1661 void AssertIsRoot(Register reg, Heap::RootListIndex index); | 1635 void AssertIsRoot(Register reg, Heap::RootListIndex index); |
| 1662 | 1636 |
| 1663 // --------------------------------------------------------------------------- | 1637 // --------------------------------------------------------------------------- |
| 1664 // HeapNumber utilities | 1638 // HeapNumber utilities |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1840 inline MemOperand NativeContextMemOperand() { | 1814 inline MemOperand NativeContextMemOperand() { |
| 1841 return ContextMemOperand(cp, Context::NATIVE_CONTEXT_INDEX); | 1815 return ContextMemOperand(cp, Context::NATIVE_CONTEXT_INDEX); |
| 1842 } | 1816 } |
| 1843 | 1817 |
| 1844 #define ACCESS_MASM(masm) masm-> | 1818 #define ACCESS_MASM(masm) masm-> |
| 1845 | 1819 |
| 1846 } // namespace internal | 1820 } // namespace internal |
| 1847 } // namespace v8 | 1821 } // namespace v8 |
| 1848 | 1822 |
| 1849 #endif // V8_S390_MACRO_ASSEMBLER_S390_H_ | 1823 #endif // V8_S390_MACRO_ASSEMBLER_S390_H_ |
| OLD | NEW |