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