1be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org// Copyright 2012 the V8 project authors. All rights reserved. 23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// Use of this source code is governed by a BSD-style license that can be 33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// found in the LICENSE file. 45ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org 5b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org// CPU specific code for x64 independent of OS goes here. 6b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 7be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org#if defined(__GNUC__) && !defined(__MINGW64__) 8196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/third_party/valgrind/valgrind.h" 93811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org#endif 103811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 11196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/v8.h" 12b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 1393a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org#if V8_TARGET_ARCH_X64 149dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 155de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org#include "src/assembler.h" 16196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/macro-assembler.h" 17b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 1871affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace v8 { 1971affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace internal { 20b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 215de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.orgvoid CpuFeatures::FlushICache(void* start, size_t size) { 22b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org // No need to flush the instruction cache on Intel. On Intel instruction 23b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org // cache flushing is only necessary when multiple cores running the same 24b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org // code simultaneously. V8 (and JavaScript) is single threaded and when code 25b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org // is patched on an intel CPU the core performing the patching will have its 26b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org // own instruction cache updated automatically. 27b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 28b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org // If flushing of the instruction cache becomes necessary Windows has the 29b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org // API function FlushInstructionCache. 303811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 313811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org // By default, valgrind only checks the stack for writes that might need to 323811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org // invalidate already cached translated code. This leads to random 333811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org // instability when code patches or moves are sometimes unnoticed. One 343811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org // solution is to run valgrind with --smc-check=all, but this comes at a big 353811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org // performance cost. We can notify valgrind to invalidate its cache. 363811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org#ifdef VALGRIND_DISCARD_TRANSLATIONS 379fa09679c31dd1fc79a07ed24431b6951227240aricow@chromium.org unsigned res = VALGRIND_DISCARD_TRANSLATIONS(start, size); 389fa09679c31dd1fc79a07ed24431b6951227240aricow@chromium.org USE(res); 393811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org#endif 40b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org} 41b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 42b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org} } // namespace v8::internal 439dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 449dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com#endif // V8_TARGET_ARCH_X64 45