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