blob: 02a8e9c03a4ba6da395b6a5d75b3bb58b8ed7b5b [file] [log] [blame]
Ben Murdochb8a8cc12014-11-26 15:28:44 +00001// 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
3// found in the LICENSE file.
Steve Blocka7e24c12009-10-30 11:49:00 +00004
5#ifndef V8_IA32_SIMULATOR_IA32_H_
6#define V8_IA32_SIMULATOR_IA32_H_
7
Ben Murdochb8a8cc12014-11-26 15:28:44 +00008#include "src/allocation.h"
Steve Blocka7e24c12009-10-30 11:49:00 +00009
John Reck59135872010-11-02 12:39:01 -070010namespace v8 {
11namespace internal {
12
Steve Blocka7e24c12009-10-30 11:49:00 +000013// Since there is no simulator for the ia32 architecture the only thing we can
14// do is to call the entry directly.
15#define CALL_GENERATED_CODE(entry, p0, p1, p2, p3, p4) \
John Reck59135872010-11-02 12:39:01 -070016 (entry(p0, p1, p2, p3, p4))
17
Ben Murdoche0cee9b2011-05-25 10:26:03 +010018
19typedef int (*regexp_matcher)(String*, int, const byte*,
Ben Murdochb8a8cc12014-11-26 15:28:44 +000020 const byte*, int*, int, Address, int, Isolate*);
Ben Murdoche0cee9b2011-05-25 10:26:03 +010021
22// Call the generated regexp code directly. The code at the entry address should
Steve Block44f0eee2011-05-26 01:26:41 +010023// expect eight int/pointer sized arguments and return an int.
Ben Murdochb8a8cc12014-11-26 15:28:44 +000024#define CALL_GENERATED_REGEXP_CODE(entry, p0, p1, p2, p3, p4, p5, p6, p7, p8) \
25 (FUNCTION_CAST<regexp_matcher>(entry)(p0, p1, p2, p3, p4, p5, p6, p7, p8))
Ben Murdoche0cee9b2011-05-25 10:26:03 +010026
John Reck59135872010-11-02 12:39:01 -070027
Steve Blocka7e24c12009-10-30 11:49:00 +000028// The stack limit beyond which we will throw stack overflow errors in
29// generated code. Because generated code on ia32 uses the C stack, we
30// just use the C stack limit.
31class SimulatorStack : public v8::internal::AllStatic {
32 public:
Ben Murdoch257744e2011-11-30 15:57:28 +000033 static inline uintptr_t JsLimitFromCLimit(Isolate* isolate,
34 uintptr_t c_limit) {
35 USE(isolate);
Steve Blocka7e24c12009-10-30 11:49:00 +000036 return c_limit;
37 }
Steve Blockd0582a62009-12-15 09:54:21 +000038
39 static inline uintptr_t RegisterCTryCatch(uintptr_t try_catch_address) {
40 return try_catch_address;
41 }
42
43 static inline void UnregisterCTryCatch() { }
Steve Blocka7e24c12009-10-30 11:49:00 +000044};
45
John Reck59135872010-11-02 12:39:01 -070046} } // namespace v8::internal
Steve Blockd0582a62009-12-15 09:54:21 +000047
Steve Blocka7e24c12009-10-30 11:49:00 +000048#endif // V8_IA32_SIMULATOR_IA32_H_