|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v10 7/9] x86emul: support FNSTENV and FNSAVE
On 25/05/2020 15:29, Jan Beulich wrote:
> To avoid introducing another boolean into emulator state, the
> rex_prefix field gets (ab)used to convey the real/VM86 vs protected mode
> info (affecting structure layout, albeit not size) to x86_emul_blk().
>
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, with one suggestion.
> --- a/xen/arch/x86/x86_emulate/x86_emulate.c
> +++ b/xen/arch/x86/x86_emulate/x86_emulate.c
> @@ -856,6 +856,9 @@ struct x86_emulate_state {
> enum {
> blk_NONE,
> blk_enqcmd,
> +#ifndef X86EMUL_NO_FPU
> + blk_fst, /* FNSTENV, FNSAVE */
> +#endif
> blk_movdir,
> } blk;
> uint8_t modrm, modrm_mod, modrm_reg, modrm_rm;
> @@ -897,6 +900,50 @@ struct x86_emulate_state {
> #define PTR_POISON NULL /* 32-bit builds are for user-space, so NULL is OK.
> */
> #endif
>
> +#ifndef X86EMUL_NO_FPU
> +struct x87_env16 {
> + uint16_t fcw;
> + uint16_t fsw;
> + uint16_t ftw;
> + union {
> + struct {
> + uint16_t fip_lo;
> + uint16_t fop:11, :1, fip_hi:4;
> + uint16_t fdp_lo;
> + uint16_t :12, fdp_hi:4;
> + } real;
> + struct {
> + uint16_t fip;
> + uint16_t fcs;
> + uint16_t fdp;
> + uint16_t fds;
> + } prot;
> + } mode;
> +};
> +
> +struct x87_env32 {
> + uint32_t fcw:16, :16;
> + uint32_t fsw:16, :16;
> + uint32_t ftw:16, :16;
uint16_t fcw, :16;
uint16_t fsw, :16;
uint16_t ftw, :16;
?
~Andrew
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |