author | David Major <dmajor@mozilla.com> |
Mon, 11 May 2015 16:12:45 -0400 | |
changeset 243387 | 730d9ce9776b6936f90d295ca2e2ff65d903885d |
parent 243386 | 940bf097d9cfdeca79c621666579f12845d77d7e |
child 243388 | 8bcd2e511413b074af96c3a1727d35d384e8f804 |
push id | 28738 |
push user | cbook@mozilla.com |
push date | Tue, 12 May 2015 14:11:31 +0000 |
treeherder | mozilla-central@bedce1b405a3 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | froydnj |
bugs | 1160148 |
milestone | 40.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/mozglue/build/WindowsDllBlocklist.cpp +++ b/mozglue/build/WindowsDllBlocklist.cpp @@ -697,16 +697,31 @@ continue_loading: WindowsDllInterceptor NtDllIntercept; } // anonymous namespace NS_EXPORT void DllBlocklist_Initialize() { +#if defined(_MSC_VER) && _MSC_VER < 1900 && defined(_M_X64) + // The code below is not blocklist-related, but is the best place for it. + // This is the earliest place where msvcr120.dll is loaded, and this + // codepath is used by both firefox.exe and plugin-container.exe processes. + + // Disable CRT use of FMA3 on non-AVX2 CPUs and on Win7RTM due to bug 1160148 + int cpuid0[4] = {0}; + int cpuid7[4] = {0}; + __cpuid(cpuid0, 0); // Get the maximum supported CPUID function + __cpuid(cpuid7, 7); // AVX2 is function 7, subfunction 0, EBX, bit 5 + if (cpuid0[0] < 7 || !(cpuid7[1] & 0x20) || !IsWin7SP1OrLater()) { + _set_FMA3_enable(0); + } +#endif + if (GetModuleHandleA("user32.dll")) { sUser32BeforeBlocklist = true; } NtDllIntercept.Init("ntdll.dll"); ReentrancySentinel::InitializeStatics();
--- a/toolkit/xre/nsAppRunner.cpp +++ b/toolkit/xre/nsAppRunner.cpp @@ -4102,27 +4102,16 @@ XREMain::XRE_main(int argc, char* argv[] nsresult rv = NS_OK; gArgc = argc; gArgv = argv; NS_ENSURE_TRUE(aAppData, 2); -#if defined(_MSC_VER) && _MSC_VER < 1900 && defined(_M_X64) - // Disable CRT use of FMA3 on non-AVX2 processors because of bug 1160148 - int cpuid0[4] = {0}; - int cpuid7[4] = {0}; - __cpuid(cpuid0, 0); // Get the maximum supported CPUID function - __cpuid(cpuid7, 7); // AVX2 is function 7, subfunction 0, EBX, bit 5 - if (cpuid0[0] < 7 || !(cpuid7[1] & 0x20)) { - _set_FMA3_enable(0); - } -#endif - // A initializer to initialize histogram collection, a chromium // thing used by Telemetry. mStatisticsRecorder = MakeUnique<base::StatisticsRecorder>(); mAppData = new ScopedAppData(aAppData); if (!mAppData) return 1; if (!mAppData->remotingName) {
--- a/toolkit/xre/nsWindowsWMain.cpp +++ b/toolkit/xre/nsWindowsWMain.cpp @@ -8,16 +8,17 @@ #ifndef XP_WIN #error This file only makes sense on Windows. #endif #include "nsUTF8Utils.h" #include <intrin.h> #include <math.h> +#include "mozilla/WindowsVersion.h" #ifndef XRE_DONT_PROTECT_DLL_LOAD #include "nsSetDllDirectory.h" #endif #if defined(__GNUC__) #define XRE_DONT_SUPPORT_XPSP2 #endif @@ -86,22 +87,22 @@ FreeAllocStrings(int argc, char **argv) int wmain(int argc, WCHAR **argv) { #if !defined(XRE_DONT_SUPPORT_XPSP2) WindowsCrtPatch::Init(); #endif #if defined(_MSC_VER) && _MSC_VER < 1900 && defined(_M_X64) - // Disable CRT use of FMA3 on non-AVX2 processors because of bug 1160148 + // Disable CRT use of FMA3 on non-AVX2 CPUs and on Win7RTM due to bug 1160148 int cpuid0[4] = {0}; int cpuid7[4] = {0}; __cpuid(cpuid0, 0); // Get the maximum supported CPUID function __cpuid(cpuid7, 7); // AVX2 is function 7, subfunction 0, EBX, bit 5 - if (cpuid0[0] < 7 || !(cpuid7[1] & 0x20)) { + if (cpuid0[0] < 7 || !(cpuid7[1] & 0x20) || !mozilla::IsWin7SP1OrLater()) { _set_FMA3_enable(0); } #endif #ifndef XRE_DONT_PROTECT_DLL_LOAD mozilla::SanitizeEnvironmentVariables(); SetDllDirectoryW(L""); #endif