On Thursday 23 July 2015 11:01:58 René J.V. Bertin wrote: > Thiago Macieira wrote: > > That's qhash.cpp (the only place where we use _mm_crc32_xxx()). > > > > This sounds like qhash.cpp was compiled with -march=native but *linked* > > without. Can you confirm that you see the compiler options passed on the > > linker command-line (-O2 -march=native, etc.)? > > Well, even if you were right, something else appears to be going on. > Wouldn't it be simply the same issue that makes it impossible to build > QtScript and QtWebkit with LTO, the use of inline assembly?
No, because that's a different solution. There's no inline assembly in qhash.cpp, only a call to the _mm_crc32_xxx intrinsics. And even if there were assembly, it would differ in nature to what ctiVMTrampoline does. > That's very likely what the _mm_ intrinsics macros contain. a) they're not macros, they're functions b) they're intrinsics, not assembly. GCC's: extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__)) _mm_crc32_u32 (unsigned int __C, unsigned int __V) { return __builtin_ia32_crc32si (__C, __V); } The function __builtin_ia32_crc32si is not defined anywhere. The compiler interprets it and replaces it with the proper assembly. > OTOH, if you use them for > SSE <4 too that cannot be the whole explanation. The use is runtime-checked: if (hasFastCrc32()) return crc32(p, size_t(len), h); Note that runtime detection is only supported with MSVC, ICC and GCC 4.9. Older versions of GCC or other compilers will make a decision at compile time: always use CRC32 or never use CRC32. I have a patch to enable the runtime detection for Clang 3.7, but I haven't done enough testing yet. > /usr/bin/clang++ -c -O3 -march=native -g -ffunction-sections > :-fPIC -isysroot > :/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Devel > :oper/SDKs/MacOSX10.10.sdk -std=c++11 -stdlib=libc++ > :-mmacosx-version-min=10.7 -fno-exceptions -Wall -W -DQT_NO_MTDEV This is Clang, so the decision is compile-time. That -march=native tells Clang to enable it if your computer supports it. Assuming you have a non-ancient Mac, it should get enabled. > :/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolc > :hain/usr/bin/ar cq libQt5Bootstrap.a .obj/qstring_mac.o Creation of a static library. That means the binary linking against this library needs to get the -march=native option from above. > :/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolc > :hain/usr/bin/clang++ -L/opt/local/lib -Wl,-headerpad_max_install_names -O3 > :-march=native -g > :-Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOS > :X.platform/Developer/SDKs/MacOSX10.9.sdk -stdlib=libc++ > :-mmacosx-version-min=10.7 -D_REENTRANT -I/opt/local/include/glib-2.0 > :-I/opt/local/lib/glib-2.0/include -I/opt/local/include -isysroot > :/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Devel > :oper/SDKs/MacOSX10.9.sdk -std=c++11 -fvisibility=hidden > :-fvisibility-inlines-hidden -flto -single_module -dynamiclib -fPIC > :-compatibility_version 5.4 -current_version 5.4.2 > :-install_name > /opt/local/libexec/qt5/Library/Frameworks/QtCore.framework/V > :ersions/5/QtCore -o QtCore .obj/qlocale_mac.o .obj/qtimezoneprivate_mac.o This is the linking of QtCore, not of moc or rcc. But either way, note how - march=native is present here. So this is a compiler bug. Sorry, please try GCC. -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel Open Source Technology Center _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest