Qemu is absolutely horrid at modeling corner cases. Rob Landley <r...@landley.net> wrote:
>On 03/28/2013 03:12:11 PM, H. Peter Anvin wrote: >> On 03/28/2013 12:15 PM, Aurelien Jarno wrote: >> > >> > This really looks like Linux kernel specific. I haven't been able >to >> > test on a real machine, but the documentation I have found suggest > >> that >> > without and x87 FPU, the FPU instructions are simply ignored. The >> common >> > way to detect an FPU is therefore to initialize registers to a >given >> > value, run fnstsw and fnstcw instructions with the register in >> arguments >> > and see if they have been modified. >> > >> > The Linux kernel indeed set the initial value of these registers to >> > 0xffff, but I am not sure all codes are doing the same. >> > >> > For me it looks like better to skip such instructions directly in >> > translate.c. As a bonus it seems easy to do that for all FPU >> > instructions. >> > >> >> It might have been (and this is from memory, so don't take it for >> anything) that the register form receives 0xffff, but the memory form > >> is >> ignored. > >Speaking of which, Solar Designer recently found a bug where pentium 3 > >silently ignores the 66 prefix that later became SSE2, and thus the >code ran but produced the wrong result: > >https://twitter.com/solardiz/status/316204216962142209 >https://twitter.com/solardiz/status/316207184134410240 > >But this isn't what QEMU does: > >https://twitter.com/solardiz/status/316944417871245313 > >Rob -- Sent from my mobile phone. Please excuse brevity and lack of formatting.