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 |