1864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org// Copyright 2012 the V8 project authors. All rights reserved.
2864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be
3864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org// found in the LICENSE file.
4864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
5864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#ifndef V8_X87_SIMULATOR_X87_H_
6864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#define V8_X87_SIMULATOR_X87_H_
7864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
8196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/allocation.h"
9864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
10864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgnamespace v8 {
11864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgnamespace internal {
12864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
13864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org// Since there is no simulator for the ia32 architecture the only thing we can
14864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org// do is to call the entry directly.
15864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#define CALL_GENERATED_CODE(entry, p0, p1, p2, p3, p4) \
16864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org  (entry(p0, p1, p2, p3, p4))
17864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
18864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
19864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgtypedef int (*regexp_matcher)(String*, int, const byte*,
20864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org                              const byte*, int*, int, Address, int, Isolate*);
21864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
22864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org// Call the generated regexp code directly. The code at the entry address should
23864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org// expect eight int/pointer sized arguments and return an int.
24864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#define CALL_GENERATED_REGEXP_CODE(entry, p0, p1, p2, p3, p4, p5, p6, p7, p8) \
25864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org  (FUNCTION_CAST<regexp_matcher>(entry)(p0, p1, p2, p3, p4, p5, p6, p7, p8))
26864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
27864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
28864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org// The stack limit beyond which we will throw stack overflow errors in
29864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org// generated code. Because generated code on ia32 uses the C stack, we
30864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org// just use the C stack limit.
31864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass SimulatorStack : public v8::internal::AllStatic {
32864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public:
33864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org  static inline uintptr_t JsLimitFromCLimit(Isolate* isolate,
34864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org                                            uintptr_t c_limit) {
35864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org    USE(isolate);
36864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org    return c_limit;
37864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org  }
38864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
39864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org  static inline uintptr_t RegisterCTryCatch(uintptr_t try_catch_address) {
40864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org    return try_catch_address;
41864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org  }
42864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
43864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org  static inline void UnregisterCTryCatch() { }
44864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org};
45864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
46864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org} }  // namespace v8::internal
47864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
48864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#endif  // V8_X87_SIMULATOR_X87_H_
49