Thank you, MichaelPetch, that's incredibly helpful and very much appreciated. It's amazing seeing what you've done step by step.
For a moment there, I thought the solution would be trivial.
Code:
ilc --help
indicates a number of instruction sets can be used:
Code:
x86: base, sse, sse2, sse3, ssse3, sse4.1, sse4.2, avx, avx2, aes, etc
and
Code:
qemu-system-i386 -cpu help | more
indicates the actual CPU can be specified:
Code:
Available CPUs:
x86 486 (alias configured by machine type)
x86 486-v1
x86 Broadwell (alias configured by machine type)
x86 Broadwell-IBRS (alias of Broadwell-v3)
x86 Broadwell-noTSX (alias of Broadwell-v2)
etc
So... I explicitly enabled sse in the compilation, and also set the CPU to pentium3 (which has sse support)
Code:
ilc --targetos windows --targetarch x86 --instruction-set base,sse --verbose kernel.ilexe -g -o kernel.obj --systemmodule kernel --map kernel.map -O
...
qemu-system-i386 -cpu pentium3 -kernel kernel.elf
But alas, the issue still remains.
I'll need to look into this further. I suspect it's either the .Net AOT compiler, ilc, not respecting the command line switch, or my native Windows install of QEMU (which they mark as 'experimental').
Massive progress though, and thanks once again.