The awesome LLInt interpreter layer in JSC uses SSE2 instructions that are not available in pre-Pentium 4. We need to continue supporting this old hardware as long as we are supporting Windows XP for WebKit. Consequently, we need to turn off LLInt on 32-bit Windows builds.
<rdar://problem/18375370>
Created attachment 239034 [details] Patch
Comment on attachment 239034 [details] Patch r=me
Committed r174162: <http://trac.webkit.org/changeset/174162>
Confirmed no regressions in JSC test runs with this change.
Do we know which SSE2 instructions are used? Maybe we could rewrite the usage of those?
(In reply to comment #6) > Do we know which SSE2 instructions are used? Maybe we could rewrite the usage of those? I believe the issue was the need to support IEEE floating point behavior. At one time, the Qt project had some code to use x86+math hacks to deliver similar support on non-SSE hardware, but that code probably got excised when they removed their port. Pragmatically, limiting JIT support to 64-bit is probably not the end of the world. Most people who care about performance are probably running 64-bit CPUs anyway. It would be great to re-enable the JIT for 32-bit in general, but people with specific performance needs can always build WebKit with the 32-bit JIT enabled for their own deployments.
(In reply to comment #7) > (In reply to comment #6) > > Do we know which SSE2 instructions are used? Maybe we could rewrite the usage of those? > > I believe the issue was the need to support IEEE floating point behavior. At one time, the Qt project had some code to use x86+math hacks to deliver similar support on non-SSE hardware, but that code probably got excised when they removed their port. > > Pragmatically, limiting JIT support to 64-bit is probably not the end of the world. Most people who care about performance are probably running 64-bit CPUs anyway. It would be great to re-enable the JIT for 32-bit in general, but people with specific performance needs can always build WebKit with the 32-bit JIT enabled for their own deployments. Ok :) I also see that there are a number of ASSERT(isSSE2Present()) statements in MacroAssemblerX86Common.h which indicates where SSE2 is required.