OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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_IA32_MACRO_ASSEMBLER_IA32_H_ | 5 #ifndef V8_IA32_MACRO_ASSEMBLER_IA32_H_ |
6 #define V8_IA32_MACRO_ASSEMBLER_IA32_H_ | 6 #define V8_IA32_MACRO_ASSEMBLER_IA32_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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 Register reg6 = no_reg, Register reg7 = no_reg, | 50 Register reg6 = no_reg, Register reg7 = no_reg, |
51 Register reg8 = no_reg); | 51 Register reg8 = no_reg); |
52 #endif | 52 #endif |
53 | 53 |
54 // MacroAssembler implements a collection of frequently used macros. | 54 // MacroAssembler implements a collection of frequently used macros. |
55 class MacroAssembler: public Assembler { | 55 class MacroAssembler: public Assembler { |
56 public: | 56 public: |
57 MacroAssembler(Isolate* isolate, void* buffer, int size, | 57 MacroAssembler(Isolate* isolate, void* buffer, int size, |
58 CodeObjectRequired create_code_object); | 58 CodeObjectRequired create_code_object); |
59 | 59 |
| 60 int jit_cookie() const { return jit_cookie_; } |
| 61 |
| 62 Isolate* isolate() const { return isolate_; } |
| 63 |
60 void Load(Register dst, const Operand& src, Representation r); | 64 void Load(Register dst, const Operand& src, Representation r); |
61 void Store(Register src, const Operand& dst, Representation r); | 65 void Store(Register src, const Operand& dst, Representation r); |
62 | 66 |
63 // Load a register with a long value as efficiently as possible. | 67 // Load a register with a long value as efficiently as possible. |
64 void Set(Register dst, int32_t x) { | 68 void Set(Register dst, int32_t x) { |
65 if (x == 0) { | 69 if (x == 0) { |
66 xor_(dst, dst); | 70 xor_(dst, dst); |
67 } else { | 71 } else { |
68 mov(dst, Immediate(x)); | 72 mov(dst, Immediate(x)); |
69 } | 73 } |
(...skipping 803 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
873 // On entry, receiver_reg should point to the array object. | 877 // On entry, receiver_reg should point to the array object. |
874 // scratch_reg gets clobbered. | 878 // scratch_reg gets clobbered. |
875 // If allocation info is present, conditional code is set to equal. | 879 // If allocation info is present, conditional code is set to equal. |
876 void TestJSArrayForAllocationMemento(Register receiver_reg, | 880 void TestJSArrayForAllocationMemento(Register receiver_reg, |
877 Register scratch_reg, | 881 Register scratch_reg, |
878 Label* no_memento_found); | 882 Label* no_memento_found); |
879 | 883 |
880 private: | 884 private: |
881 bool generating_stub_; | 885 bool generating_stub_; |
882 bool has_frame_; | 886 bool has_frame_; |
| 887 Isolate* isolate_; |
883 // This handle will be patched with the code object on installation. | 888 // This handle will be patched with the code object on installation. |
884 Handle<Object> code_object_; | 889 Handle<Object> code_object_; |
| 890 int jit_cookie_; |
885 | 891 |
886 // Helper functions for generating invokes. | 892 // Helper functions for generating invokes. |
887 void InvokePrologue(const ParameterCount& expected, | 893 void InvokePrologue(const ParameterCount& expected, |
888 const ParameterCount& actual, Label* done, | 894 const ParameterCount& actual, Label* done, |
889 bool* definitely_mismatches, InvokeFlag flag, | 895 bool* definitely_mismatches, InvokeFlag flag, |
890 Label::Distance done_distance, | 896 Label::Distance done_distance, |
891 const CallWrapper& call_wrapper); | 897 const CallWrapper& call_wrapper); |
892 | 898 |
893 void EnterExitFramePrologue(StackFrame::Type frame_type); | 899 void EnterExitFramePrologue(StackFrame::Type frame_type); |
894 void EnterExitFrameEpilogue(int argc, bool save_doubles); | 900 void EnterExitFrameEpilogue(int argc, bool save_doubles); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
973 inline Operand NativeContextOperand() { | 979 inline Operand NativeContextOperand() { |
974 return ContextOperand(esi, Context::NATIVE_CONTEXT_INDEX); | 980 return ContextOperand(esi, Context::NATIVE_CONTEXT_INDEX); |
975 } | 981 } |
976 | 982 |
977 #define ACCESS_MASM(masm) masm-> | 983 #define ACCESS_MASM(masm) masm-> |
978 | 984 |
979 } // namespace internal | 985 } // namespace internal |
980 } // namespace v8 | 986 } // namespace v8 |
981 | 987 |
982 #endif // V8_IA32_MACRO_ASSEMBLER_IA32_H_ | 988 #endif // V8_IA32_MACRO_ASSEMBLER_IA32_H_ |
OLD | NEW |