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 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 void Drop(int count); | 201 void Drop(int count); |
202 void Drop(Register count, Register scratch = r0); | 202 void Drop(Register count, Register scratch = r0); |
203 | 203 |
204 void Ret(int drop) { | 204 void Ret(int drop) { |
205 Drop(drop); | 205 Drop(drop); |
206 Ret(); | 206 Ret(); |
207 } | 207 } |
208 | 208 |
209 void Call(Label* target); | 209 void Call(Label* target); |
210 | 210 |
211 // Emit call to the code we are currently generating. | |
212 void CallSelf() { | |
213 Handle<Code> self(reinterpret_cast<Code**>(CodeObject().location())); | |
214 Call(self, RelocInfo::CODE_TARGET); | |
215 } | |
216 | |
217 // Register move. May do nothing if the registers are identical. | 211 // Register move. May do nothing if the registers are identical. |
218 void Move(Register dst, Smi* smi) { LoadSmiLiteral(dst, smi); } | 212 void Move(Register dst, Smi* smi) { LoadSmiLiteral(dst, smi); } |
219 void Move(Register dst, Handle<Object> value); | 213 void Move(Register dst, Handle<Object> value); |
220 void Move(Register dst, Register src, Condition cond = al); | 214 void Move(Register dst, Register src, Condition cond = al); |
221 void Move(DoubleRegister dst, DoubleRegister src); | 215 void Move(DoubleRegister dst, DoubleRegister src); |
222 | 216 |
223 void InsertDoubleLow(DoubleRegister dst, Register src); | 217 void InsertDoubleLow(DoubleRegister dst, Register src); |
224 void InsertDoubleHigh(DoubleRegister dst, Register src); | 218 void InsertDoubleHigh(DoubleRegister dst, Register src); |
225 | 219 |
226 void MultiPush(RegList regs, Register location = sp); | 220 void MultiPush(RegList regs, Register location = sp); |
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
591 void Pop(Register src1, Register src2, Register src3, Register src4, | 585 void Pop(Register src1, Register src2, Register src3, Register src4, |
592 Register src5) { | 586 Register src5) { |
593 LoadP(src5, MemOperand(sp, 0)); | 587 LoadP(src5, MemOperand(sp, 0)); |
594 LoadP(src4, MemOperand(sp, kPointerSize)); | 588 LoadP(src4, MemOperand(sp, kPointerSize)); |
595 LoadP(src3, MemOperand(sp, 2 * kPointerSize)); | 589 LoadP(src3, MemOperand(sp, 2 * kPointerSize)); |
596 LoadP(src2, MemOperand(sp, 3 * kPointerSize)); | 590 LoadP(src2, MemOperand(sp, 3 * kPointerSize)); |
597 LoadP(src1, MemOperand(sp, 4 * kPointerSize)); | 591 LoadP(src1, MemOperand(sp, 4 * kPointerSize)); |
598 la(sp, MemOperand(sp, 5 * kPointerSize)); | 592 la(sp, MemOperand(sp, 5 * kPointerSize)); |
599 } | 593 } |
600 | 594 |
601 // Push a fixed frame, consisting of lr, fp, context and | 595 // Push a fixed frame, consisting of lr, fp, constant pool. |
602 // JS function / marker id if marker_reg is a valid register. | 596 void PushCommonFrame(Register marker_reg = no_reg); |
603 void PushFixedFrame(Register marker_reg = no_reg); | 597 |
604 void PopFixedFrame(Register marker_reg = no_reg); | 598 // Push a standard frame, consisting of lr, fp, constant pool, |
| 599 // context and JS function |
| 600 void PushStandardFrame(Register function_reg); |
| 601 |
| 602 void PopCommonFrame(Register marker_reg = no_reg); |
605 | 603 |
606 // Restore caller's frame pointer and return address prior to being | 604 // Restore caller's frame pointer and return address prior to being |
607 // overwritten by tail call stack preparation. | 605 // overwritten by tail call stack preparation. |
608 void RestoreFrameStateForTailCall(); | 606 void RestoreFrameStateForTailCall(); |
609 | 607 |
610 // Push and pop the registers that can hold pointers, as defined by the | 608 // Push and pop the registers that can hold pointers, as defined by the |
611 // RegList constant kSafepointSavedRegisters. | 609 // RegList constant kSafepointSavedRegisters. |
612 void PushSafepointRegisters(); | 610 void PushSafepointRegisters(); |
613 void PopSafepointRegisters(); | 611 void PopSafepointRegisters(); |
614 // Store value in register src in the safepoint stack slot for | 612 // Store value in register src in the safepoint stack slot for |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
689 void ConvertDoubleToUnsignedInt64( | 687 void ConvertDoubleToUnsignedInt64( |
690 const DoubleRegister double_input, const Register dst, | 688 const DoubleRegister double_input, const Register dst, |
691 const DoubleRegister double_dst, | 689 const DoubleRegister double_dst, |
692 FPRoundingMode rounding_mode = kRoundToZero); | 690 FPRoundingMode rounding_mode = kRoundToZero); |
693 void ConvertFloat32ToUnsignedInt64( | 691 void ConvertFloat32ToUnsignedInt64( |
694 const DoubleRegister double_input, const Register dst, | 692 const DoubleRegister double_input, const Register dst, |
695 const DoubleRegister double_dst, | 693 const DoubleRegister double_dst, |
696 FPRoundingMode rounding_mode = kRoundToZero); | 694 FPRoundingMode rounding_mode = kRoundToZero); |
697 #endif | 695 #endif |
698 | 696 |
| 697 #if !V8_TARGET_ARCH_S390X |
| 698 void ShiftLeftPair(Register dst_low, Register dst_high, Register src_low, |
| 699 Register src_high, Register scratch, Register shift); |
| 700 void ShiftLeftPair(Register dst_low, Register dst_high, Register src_low, |
| 701 Register src_high, uint32_t shift); |
| 702 void ShiftRightPair(Register dst_low, Register dst_high, Register src_low, |
| 703 Register src_high, Register scratch, Register shift); |
| 704 void ShiftRightPair(Register dst_low, Register dst_high, Register src_low, |
| 705 Register src_high, uint32_t shift); |
| 706 void ShiftRightArithPair(Register dst_low, Register dst_high, |
| 707 Register src_low, Register src_high, |
| 708 Register scratch, Register shift); |
| 709 void ShiftRightArithPair(Register dst_low, Register dst_high, |
| 710 Register src_low, Register src_high, uint32_t shift); |
| 711 #endif |
| 712 |
699 // Generates function and stub prologue code. | 713 // Generates function and stub prologue code. |
700 void StubPrologue(Register base = no_reg, int prologue_offset = 0); | 714 void StubPrologue(StackFrame::Type type, Register base = no_reg, |
| 715 int prologue_offset = 0); |
701 void Prologue(bool code_pre_aging, Register base, int prologue_offset = 0); | 716 void Prologue(bool code_pre_aging, Register base, int prologue_offset = 0); |
702 | 717 |
703 // Enter exit frame. | 718 // Enter exit frame. |
704 // stack_space - extra stack space, used for parameters before call to C. | 719 // stack_space - extra stack space, used for parameters before call to C. |
705 // At least one slot (for the return address) should be provided. | 720 // At least one slot (for the return address) should be provided. |
706 void EnterExitFrame(bool save_doubles, int stack_space = 1); | 721 void EnterExitFrame(bool save_doubles, int stack_space = 1); |
707 | 722 |
708 // Leave the current exit frame. Expects the return value in r0. | 723 // Leave the current exit frame. Expects the return value in r0. |
709 // Expect the number of values, pushed prior to the exit frame, to | 724 // Expect the number of values, pushed prior to the exit frame, to |
710 // remove in a register (or no_reg, if there is nothing to remove). | 725 // remove in a register (or no_reg, if there is nothing to remove). |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
812 } | 827 } |
813 | 828 |
814 // --------------------------------------------------------------------------- | 829 // --------------------------------------------------------------------------- |
815 // JavaScript invokes | 830 // JavaScript invokes |
816 | 831 |
817 // Set up call kind marking in ecx. The method takes ecx as an | 832 // Set up call kind marking in ecx. The method takes ecx as an |
818 // explicit first parameter to make the code more readable at the | 833 // explicit first parameter to make the code more readable at the |
819 // call sites. | 834 // call sites. |
820 // void SetCallKind(Register dst, CallKind kind); | 835 // void SetCallKind(Register dst, CallKind kind); |
821 | 836 |
| 837 // Removes current frame and its arguments from the stack preserving |
| 838 // the arguments and a return address pushed to the stack for the next call. |
| 839 // Both |callee_args_count| and |caller_args_count_reg| do not include |
| 840 // receiver. |callee_args_count| is not modified, |caller_args_count_reg| |
| 841 // is trashed. |
| 842 void PrepareForTailCall(const ParameterCount& callee_args_count, |
| 843 Register caller_args_count_reg, Register scratch0, |
| 844 Register scratch1); |
| 845 |
822 // Invoke the JavaScript function code by either calling or jumping. | 846 // Invoke the JavaScript function code by either calling or jumping. |
823 void InvokeFunctionCode(Register function, Register new_target, | 847 void InvokeFunctionCode(Register function, Register new_target, |
824 const ParameterCount& expected, | 848 const ParameterCount& expected, |
825 const ParameterCount& actual, InvokeFlag flag, | 849 const ParameterCount& actual, InvokeFlag flag, |
826 const CallWrapper& call_wrapper); | 850 const CallWrapper& call_wrapper); |
827 | 851 |
828 void FloodFunctionIfStepping(Register fun, Register new_target, | 852 void FloodFunctionIfStepping(Register fun, Register new_target, |
829 const ParameterCount& expected, | 853 const ParameterCount& expected, |
830 const ParameterCount& actual); | 854 const ParameterCount& actual); |
831 | 855 |
(...skipping 1018 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1850 #define ACCESS_MASM(masm) \ | 1874 #define ACCESS_MASM(masm) \ |
1851 masm->stop(__FILE_LINE__); \ | 1875 masm->stop(__FILE_LINE__); \ |
1852 masm-> | 1876 masm-> |
1853 #else | 1877 #else |
1854 #define ACCESS_MASM(masm) masm-> | 1878 #define ACCESS_MASM(masm) masm-> |
1855 #endif | 1879 #endif |
1856 } // namespace internal | 1880 } // namespace internal |
1857 } // namespace v8 | 1881 } // namespace v8 |
1858 | 1882 |
1859 #endif // V8_S390_MACRO_ASSEMBLER_S390_H_ | 1883 #endif // V8_S390_MACRO_ASSEMBLER_S390_H_ |
OLD | NEW |