Compile Qt5.x + webkit without mmx support
-
Hi,
In previous version of qt (4.x), one can configure qt with option -no-mmx. In newer versions, that option is no longer applicable. I have been mucking around the source code and couldn't find a way to disable MMX support. Please let me know if there is a way to disable multi-media instructions (MMX) in qt5 and also webkit. Thank you.
toan
-
I think MMX can no longer get disabled.
Considering that WebKit requires SSE2, I do not think you can disable that (or MMX) in qt webkit.
There is currently a discussion of requiring SSE2 for the rest of Qt ongoing in the development mailing list.
-
"Considering that WebKit requires SSE2, I do not think you can disable that (or MMX) in qt webkit."
I was building QT-5.0.2, and the config package accepted the options:
-no-sse2 -no-sse3 no-sse4.2 etc....
I used to build firefox 2.0 to firefox 9.0 and mmx was always a configurable option to disable. The code to run mmx instructions is usually in this form:
#ifdef MMX
/* Run mmx code /
#else
/ Run platform independent code */
#endifMMX is an architecture dependent code; and it theory it should be configurable. If MMX is an absolute requirement, I dont see how webkit is cross-platform, ie to ARM. There must be a way.
My webkit browser is currently crashing when the javascript engine was trying to run mmx code, on non-mmx CPU. Please help.
Thanks
-
http://www.macieira.org/blog/2012/06/avx-optimised-raster-painting-for-windows-too/ is about Thiago's efforts to removing MMX code from Qt 5 and introducing SSE2/AVX code instead. So from what I understand there is no more MMX code in Qt... but SSE2 code instead (which is a enhancement of MMX).
It can be configurable, yes. But developers can also decide that all the CPUs they care about have that feature anyway and then no longer bother to do that, removing the fallback code. That makes maintenance much simpler (no more code that is not build most of the time!). The discussion to do just that for SSE2 is here: http://lists.qt-project.org/pipermail/development/2013-November/014085.html
One of the arguments in favor of requiring SSE2 for all of Qt in the hallway meeting mentioned in the mail was that Qt WebKit requires SSE2 already. I never checked that myself though. So I am pretty sure SSE2 is a requirement for Qt 5 on intel/AMD chips nowadays. But feel free to ask on the mailing list... they will know better than me! I tend to not care too much about older hardware:)
-
Tobias,
I just read the email chain by "Thiago Macieira" on qt5 sse2 support. The email notified developers that SSE2 is enabled by default from version >=5.3.0.
I read further on the impact that will bring to developers like myself and I was sadden to hear:
"We honestly do not expect anyone who's actually building Qt 5 from sources to be targetting a CPU made prior to 2004 (with the exception of the 2013 Intel Quark). There may be a few people who download from sources and try to run on CPUs older than Intel Pentium-M, Intel Pentium 4, AMD Opteron and Athlon 64. Those people will be forced to switch to a source build instead."
-
Tobias,
I found out that the root cause of the crash is indeed, JavascriptCore engine w as executing mmx instruction. I looked through qt source and found that one can use JavascriptCore engine or V8 (another javascript engine from google). However, I was not able to find any reference to build V8 javascript engine, instead of JavascriptCore. Please let me know if you or anyone knows how to do it.
thanks