mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
x86emul: drop open-coding of REX.W prefixes
Along the lines of 0e36425147 ("x86: drop REX64_PREFIX"), move to well
formed FXSAVEQ / FXRSTORQ here as well.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
1 parent
8743258747
commit
5a33ea2800
1 file changed
+3
-20
@@ -259,16 +259,7 @@ int x86_emul_blk(
|
||||
if ( s->op_bytes < sizeof(*fxsr) )
|
||||
{
|
||||
if ( s->rex_prefix & REX_W )
|
||||
{
|
||||
/*
|
||||
* The only way to force fxsaveq on a wide range of gas
|
||||
* versions. On older versions the rex64 prefix works only if
|
||||
* we force an addressing mode that doesn't require extended
|
||||
* registers.
|
||||
*/
|
||||
asm volatile ( ".byte 0x48; fxsave (%1)"
|
||||
: "=m" (*fxsr) : "R" (fxsr) );
|
||||
}
|
||||
asm volatile ( "fxsaveq %0" : "=m" (*fxsr) );
|
||||
else
|
||||
asm volatile ( "fxsave %0" : "=m" (*fxsr) );
|
||||
}
|
||||
@@ -285,11 +276,7 @@ int x86_emul_blk(
|
||||
generate_exception_if(fxsr->mxcsr & ~mxcsr_mask, X86_EXC_GP, 0);
|
||||
|
||||
if ( s->rex_prefix & REX_W )
|
||||
{
|
||||
/* See above for why operand/constraints are this way. */
|
||||
asm volatile ( ".byte 0x48; fxrstor (%1)"
|
||||
:: "m" (*fxsr), "R" (fxsr) );
|
||||
}
|
||||
asm volatile ( "fxrstorq %0" :: "m" (*fxsr) );
|
||||
else
|
||||
asm volatile ( "fxrstor %0" :: "m" (*fxsr) );
|
||||
break;
|
||||
@@ -310,11 +297,7 @@ int x86_emul_blk(
|
||||
fxsr = ptr;
|
||||
|
||||
if ( s->rex_prefix & REX_W )
|
||||
{
|
||||
/* See above for why operand/constraints are this way. */
|
||||
asm volatile ( ".byte 0x48; fxsave (%1)"
|
||||
: "=m" (*fxsr) : "R" (fxsr) );
|
||||
}
|
||||
asm volatile ( "fxsaveq %0" : "=m" (*fxsr) );
|
||||
else
|
||||
asm volatile ( "fxsave %0" : "=m" (*fxsr) );
|
||||
|
||||
|
||||