1864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org// Copyright 2011 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// CPU specific code for ia32 independent of OS goes here.
6864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
7864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#ifdef __GNUC__
8196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/third_party/valgrind/valgrind.h"
9864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#endif
10864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
11196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/v8.h"
12864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
13864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#if V8_TARGET_ARCH_X87
14864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
155de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org#include "src/assembler.h"
16196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/macro-assembler.h"
17864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
18864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgnamespace v8 {
19864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgnamespace internal {
20864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
215de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.orgvoid CpuFeatures::FlushICache(void* start, size_t size) {
22864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org  // No need to flush the instruction cache on Intel. On Intel instruction
23864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org  // cache flushing is only necessary when multiple cores running the same
24864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org  // code simultaneously. V8 (and JavaScript) is single threaded and when code
25864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org  // is patched on an intel CPU the core performing the patching will have its
26864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org  // own instruction cache updated automatically.
27864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
28864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org  // If flushing of the instruction cache becomes necessary Windows has the
29864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org  // API function FlushInstructionCache.
30864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
31864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org  // By default, valgrind only checks the stack for writes that might need to
32864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org  // invalidate already cached translated code.  This leads to random
33864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org  // instability when code patches or moves are sometimes unnoticed.  One
34864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org  // solution is to run valgrind with --smc-check=all, but this comes at a big
35864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org  // performance cost.  We can notify valgrind to invalidate its cache.
36864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#ifdef VALGRIND_DISCARD_TRANSLATIONS
37864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org  unsigned res = VALGRIND_DISCARD_TRANSLATIONS(start, size);
38864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org  USE(res);
39864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#endif
40864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}
41864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
42864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org} }  // namespace v8::internal
43864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org
44864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#endif  // V8_TARGET_ARCH_X87
45