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