Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(156)

Side by Side Diff: src/x64/regexp-macro-assembler-x64.h

Issue 173567: ARM native regexps. (Closed)
Patch Set: Created 11 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 13 matching lines...) Expand all
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 27
28 #ifndef V8_X64_REGEXP_MACRO_ASSEMBLER_X64_H_ 28 #ifndef V8_X64_REGEXP_MACRO_ASSEMBLER_X64_H_
29 #define V8_X64_REGEXP_MACRO_ASSEMBLER_X64_H_ 29 #define V8_X64_REGEXP_MACRO_ASSEMBLER_X64_H_
30 30
31 namespace v8 { 31 namespace v8 {
32 namespace internal { 32 namespace internal {
33 33
34 #ifdef V8_NATIVE_REGEXP
35
34 class RegExpMacroAssemblerX64: public NativeRegExpMacroAssembler { 36 class RegExpMacroAssemblerX64: public NativeRegExpMacroAssembler {
35 public: 37 public:
36 RegExpMacroAssemblerX64(Mode mode, int registers_to_save); 38 RegExpMacroAssemblerX64(Mode mode, int registers_to_save);
37 virtual ~RegExpMacroAssemblerX64(); 39 virtual ~RegExpMacroAssemblerX64();
38 virtual int stack_limit_slack(); 40 virtual int stack_limit_slack();
39 virtual void AdvanceCurrentPosition(int by); 41 virtual void AdvanceCurrentPosition(int by);
40 virtual void AdvanceRegister(int reg, int by); 42 virtual void AdvanceRegister(int reg, int by);
41 virtual void Backtrack(); 43 virtual void Backtrack();
42 virtual void Bind(Label* label); 44 virtual void Bind(Label* label);
43 virtual void CheckAtStart(Label* on_at_start); 45 virtual void CheckAtStart(Label* on_at_start);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 int previous_index); 108 int previous_index);
107 109
108 static Result Execute(Code* code, 110 static Result Execute(Code* code,
109 String* input, 111 String* input,
110 int start_offset, 112 int start_offset,
111 const byte* input_start, 113 const byte* input_start,
112 const byte* input_end, 114 const byte* input_end,
113 int* output, 115 int* output,
114 bool at_start); 116 bool at_start);
115 117
118 // Called from RegExp if the stack-guard is triggered.
119 // If the code object is relocated, the return address is fixed before
120 // returning.
121 static int CheckStackGuardState(Address* return_address,
122 Code* re_code,
123 Address re_frame);
124
116 private: 125 private:
117 // Offsets from rbp of function parameters and stored registers. 126 // Offsets from rbp of function parameters and stored registers.
118 static const int kFramePointer = 0; 127 static const int kFramePointer = 0;
119 // Above the frame pointer - function parameters and return address. 128 // Above the frame pointer - function parameters and return address.
120 static const int kReturn_eip = kFramePointer + kPointerSize; 129 static const int kReturn_eip = kFramePointer + kPointerSize;
121 static const int kFrameAlign = kReturn_eip + kPointerSize; 130 static const int kFrameAlign = kReturn_eip + kPointerSize;
122 131
123 #ifdef __MSVC__ 132 #ifdef __MSVC__
124 // Parameters (first four passed as registers, but with room on stack). 133 // Parameters (first four passed as registers, but with room on stack).
125 // In Microsoft 64-bit Calling Convention, there is room on the callers 134 // In Microsoft 64-bit Calling Convention, there is room on the callers
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 // Load a number of characters at the given offset from the 183 // Load a number of characters at the given offset from the
175 // current position, into the current-character register. 184 // current position, into the current-character register.
176 void LoadCurrentCharacterUnchecked(int cp_offset, int character_count); 185 void LoadCurrentCharacterUnchecked(int cp_offset, int character_count);
177 186
178 // Check whether preemption has been requested. 187 // Check whether preemption has been requested.
179 void CheckPreemption(); 188 void CheckPreemption();
180 189
181 // Check whether we are exceeding the stack limit on the backtrack stack. 190 // Check whether we are exceeding the stack limit on the backtrack stack.
182 void CheckStackLimit(); 191 void CheckStackLimit();
183 192
184 // Called from RegExp if the stack-guard is triggered.
185 // If the code object is relocated, the return address is fixed before
186 // returning.
187 static int CheckStackGuardState(Address* return_address,
188 Code* re_code,
189 Address re_frame);
190
191 // Generate a call to CheckStackGuardState. 193 // Generate a call to CheckStackGuardState.
192 void CallCheckStackGuardState(); 194 void CallCheckStackGuardState();
193 195
194 // Called from RegExp if the backtrack stack limit is hit.
195 // Tries to expand the stack. Returns the new stack-pointer if
196 // successful, and updates the stack_top address, or returns 0 if unable
197 // to grow the stack.
198 // This function must not trigger a garbage collection.
199 static Address GrowStack(Address stack_pointer, Address* stack_top);
200
201 // The rbp-relative location of a regexp register. 196 // The rbp-relative location of a regexp register.
202 Operand register_location(int register_index); 197 Operand register_location(int register_index);
203 198
204 // The register containing the current character after LoadCurrentCharacter. 199 // The register containing the current character after LoadCurrentCharacter.
205 inline Register current_character() { return rdx; } 200 inline Register current_character() { return rdx; }
206 201
207 // The register containing the backtrack stack top. Provides a meaningful 202 // The register containing the backtrack stack top. Provides a meaningful
208 // name to the register. 203 // name to the register.
209 inline Register backtrack_stackpointer() { return rcx; } 204 inline Register backtrack_stackpointer() { return rcx; }
210 205
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 // Some compilers/platforms require the stack to be aligned when calling 252 // Some compilers/platforms require the stack to be aligned when calling
258 // C++ code. 253 // C++ code.
259 // Needs a scratch register to do some arithmetic. This register will be 254 // Needs a scratch register to do some arithmetic. This register will be
260 // trashed. 255 // trashed.
261 inline void FrameAlign(int num_arguments); 256 inline void FrameAlign(int num_arguments);
262 257
263 // Calls a C function and cleans up the space for arguments allocated 258 // Calls a C function and cleans up the space for arguments allocated
264 // by FrameAlign. The called function is not allowed to trigger a garbage 259 // by FrameAlign. The called function is not allowed to trigger a garbage
265 // collection, since that might move the code and invalidate the return 260 // collection, since that might move the code and invalidate the return
266 // address (unless this is somehow accounted for by the called function). 261 // address (unless this is somehow accounted for by the called function).
267 inline void CallCFunction(Address function_address, int num_arguments); 262 inline void CallCFunction(ExternalReference function, int num_arguments);
268 263
269 MacroAssembler* masm_; 264 MacroAssembler* masm_;
270 265
271 ZoneList<int> code_relative_fixup_positions_; 266 ZoneList<int> code_relative_fixup_positions_;
272 267
273 // Which mode to generate code for (ASCII or UC16). 268 // Which mode to generate code for (ASCII or UC16).
274 Mode mode_; 269 Mode mode_;
275 270
276 // One greater than maximal register index actually used. 271 // One greater than maximal register index actually used.
277 int num_registers_; 272 int num_registers_;
278 273
279 // Number of registers to output at the end (the saved registers 274 // Number of registers to output at the end (the saved registers
280 // are always 0..num_saved_registers_-1) 275 // are always 0..num_saved_registers_-1)
281 int num_saved_registers_; 276 int num_saved_registers_;
282 277
283 // Labels used internally. 278 // Labels used internally.
284 Label entry_label_; 279 Label entry_label_;
285 Label start_label_; 280 Label start_label_;
286 Label success_label_; 281 Label success_label_;
287 Label backtrack_label_; 282 Label backtrack_label_;
288 Label exit_label_; 283 Label exit_label_;
289 Label check_preempt_label_; 284 Label check_preempt_label_;
290 Label stack_overflow_label_; 285 Label stack_overflow_label_;
291 }; 286 };
292 287
288 #endif // V8_NATIVE_REGEXP
289
293 }} // namespace v8::internal 290 }} // namespace v8::internal
294 291
295 #endif // V8_X64_REGEXP_MACRO_ASSEMBLER_X64_H_ 292 #endif // V8_X64_REGEXP_MACRO_ASSEMBLER_X64_H_
OLDNEW
« src/serialize.cc ('K') | « src/serialize.cc ('k') | src/x64/regexp-macro-assembler-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698