OLD | NEW |
1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 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 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 // All registers are clobbered by the operation. | 125 // All registers are clobbered by the operation. |
126 void RecordWriteNonSmi(Register object, | 126 void RecordWriteNonSmi(Register object, |
127 int offset, | 127 int offset, |
128 Register value, | 128 Register value, |
129 Register scratch); | 129 Register scratch); |
130 | 130 |
131 #ifdef ENABLE_DEBUGGER_SUPPORT | 131 #ifdef ENABLE_DEBUGGER_SUPPORT |
132 // --------------------------------------------------------------------------- | 132 // --------------------------------------------------------------------------- |
133 // Debugger Support | 133 // Debugger Support |
134 | 134 |
135 void SaveRegistersToMemory(RegList regs); | |
136 void RestoreRegistersFromMemory(RegList regs); | |
137 void PushRegistersFromMemory(RegList regs); | |
138 void PopRegistersToMemory(RegList regs); | |
139 void CopyRegistersFromStackToMemory(Register base, | |
140 Register scratch, | |
141 RegList regs); | |
142 void DebugBreak(); | 135 void DebugBreak(); |
143 #endif | 136 #endif |
144 | 137 |
145 // --------------------------------------------------------------------------- | 138 // --------------------------------------------------------------------------- |
146 // Stack limit support | 139 // Stack limit support |
147 | 140 |
148 // Do simple test for stack overflow. This doesn't handle an overflow. | 141 // Do simple test for stack overflow. This doesn't handle an overflow. |
149 void StackLimitCheck(Label* on_stack_limit_hit); | 142 void StackLimitCheck(Label* on_stack_limit_hit); |
150 | 143 |
151 // --------------------------------------------------------------------------- | 144 // --------------------------------------------------------------------------- |
152 // Activation frames | 145 // Activation frames |
153 | 146 |
154 void EnterInternalFrame() { EnterFrame(StackFrame::INTERNAL); } | 147 void EnterInternalFrame() { EnterFrame(StackFrame::INTERNAL); } |
155 void LeaveInternalFrame() { LeaveFrame(StackFrame::INTERNAL); } | 148 void LeaveInternalFrame() { LeaveFrame(StackFrame::INTERNAL); } |
156 | 149 |
157 void EnterConstructFrame() { EnterFrame(StackFrame::CONSTRUCT); } | 150 void EnterConstructFrame() { EnterFrame(StackFrame::CONSTRUCT); } |
158 void LeaveConstructFrame() { LeaveFrame(StackFrame::CONSTRUCT); } | 151 void LeaveConstructFrame() { LeaveFrame(StackFrame::CONSTRUCT); } |
159 | 152 |
160 // Enter specific kind of exit frame; either in normal or | 153 // Enter specific kind of exit frame; either in normal or |
161 // debug mode. Expects the number of arguments in register rax and | 154 // debug mode. Expects the number of arguments in register rax and |
162 // sets up the number of arguments in register rdi and the pointer | 155 // sets up the number of arguments in register rdi and the pointer |
163 // to the first argument in register rsi. | 156 // to the first argument in register rsi. |
164 void EnterExitFrame(ExitFrame::Mode mode, int result_size = 1); | 157 void EnterExitFrame(int result_size = 1); |
165 | 158 |
166 void EnterApiExitFrame(ExitFrame::Mode mode, | 159 void EnterApiExitFrame(int stack_space, |
167 int stack_space, | |
168 int argc, | 160 int argc, |
169 int result_size = 1); | 161 int result_size = 1); |
170 | 162 |
171 // Leave the current exit frame. Expects/provides the return value in | 163 // Leave the current exit frame. Expects/provides the return value in |
172 // register rax:rdx (untouched) and the pointer to the first | 164 // register rax:rdx (untouched) and the pointer to the first |
173 // argument in register rsi. | 165 // argument in register rsi. |
174 void LeaveExitFrame(ExitFrame::Mode mode, int result_size = 1); | 166 void LeaveExitFrame(int result_size = 1); |
175 | 167 |
176 | 168 |
177 // --------------------------------------------------------------------------- | 169 // --------------------------------------------------------------------------- |
178 // JavaScript invokes | 170 // JavaScript invokes |
179 | 171 |
180 // Invoke the JavaScript function code by either calling or jumping. | 172 // Invoke the JavaScript function code by either calling or jumping. |
181 void InvokeCode(Register code, | 173 void InvokeCode(Register code, |
182 const ParameterCount& expected, | 174 const ParameterCount& expected, |
183 const ParameterCount& actual, | 175 const ParameterCount& actual, |
184 InvokeFlag flag); | 176 InvokeFlag flag); |
(...skipping 686 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
871 const ParameterCount& actual, | 863 const ParameterCount& actual, |
872 Handle<Code> code_constant, | 864 Handle<Code> code_constant, |
873 Register code_register, | 865 Register code_register, |
874 Label* done, | 866 Label* done, |
875 InvokeFlag flag); | 867 InvokeFlag flag); |
876 | 868 |
877 // Activation support. | 869 // Activation support. |
878 void EnterFrame(StackFrame::Type type); | 870 void EnterFrame(StackFrame::Type type); |
879 void LeaveFrame(StackFrame::Type type); | 871 void LeaveFrame(StackFrame::Type type); |
880 | 872 |
881 void EnterExitFramePrologue(ExitFrame::Mode mode, bool save_rax); | 873 void EnterExitFramePrologue(bool save_rax); |
882 void EnterExitFrameEpilogue(ExitFrame::Mode mode, int result_size, int argc); | 874 void EnterExitFrameEpilogue(int result_size, int argc); |
883 | 875 |
884 // Allocation support helpers. | 876 // Allocation support helpers. |
885 // Loads the top of new-space into the result register. | 877 // Loads the top of new-space into the result register. |
886 // If flags contains RESULT_CONTAINS_TOP then result_end is valid and | 878 // If flags contains RESULT_CONTAINS_TOP then result_end is valid and |
887 // already contains the top of new-space, and scratch is invalid. | 879 // already contains the top of new-space, and scratch is invalid. |
888 // Otherwise the address of the new-space top is loaded into scratch (if | 880 // Otherwise the address of the new-space top is loaded into scratch (if |
889 // scratch is valid), and the new-space top is loaded into result. | 881 // scratch is valid), and the new-space top is loaded into result. |
890 void LoadAllocationTopHelper(Register result, | 882 void LoadAllocationTopHelper(Register result, |
891 Register result_end, | 883 Register result_end, |
892 Register scratch, | 884 Register scratch, |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
960 } \ | 952 } \ |
961 masm-> | 953 masm-> |
962 #else | 954 #else |
963 #define ACCESS_MASM(masm) masm-> | 955 #define ACCESS_MASM(masm) masm-> |
964 #endif | 956 #endif |
965 | 957 |
966 | 958 |
967 } } // namespace v8::internal | 959 } } // namespace v8::internal |
968 | 960 |
969 #endif // V8_X64_MACRO_ASSEMBLER_X64_H_ | 961 #endif // V8_X64_MACRO_ASSEMBLER_X64_H_ |
OLD | NEW |