[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH 1/3] tests/x86emul: Helpers to save and restore FPU state



>>> On 09.03.18 at 13:37, <JBeulich@xxxxxxxx> wrote:
>>>> On 06.03.18 at 21:24, <andrew.cooper3@xxxxxxxxxx> wrote:
>> +void emul_save_fpu_state(void)
>> +{
>> +    if ( use_xsave )
>> +        asm volatile ( "xsave" __OS " %[ptr]"
>> +                       : [ptr] "=m" (fpu_save_area)
>> +                       : "a" (~0ull), "d" (~0ull) );
> 
> Wait, this doesn't build as 32-bit binary. Needs to be ~0ul, and
> __OS also can't be used here.
> 
>> +    else
>> +        asm volatile ( "fxsave %0" : "=m" (fpu_save_area) );
> 
> Whereas if you want something like __OS above, you'd want the
> same here.

Here's the full incremental diff I've used for now, so that things
would build everywhere I've tried:

--- unstable.orig/tools/tests/x86_emulator/x86-emulate.c
+++ unstable/tools/tests/x86_emulator/x86-emulate.c
@@ -32,20 +32,22 @@ static bool use_xsave;
 void emul_save_fpu_state(void)
 {
     if ( use_xsave )
-        asm volatile ( "xsave" __OS " %[ptr]"
+        asm volatile ( "xsave %[ptr]"
                        : [ptr] "=m" (fpu_save_area)
-                       : "a" (~0ull), "d" (~0ull) );
+                       : "a" (~0ul), "d" (~0ul) );
     else
         asm volatile ( "fxsave %0" : "=m" (fpu_save_area) );
 }
 
 void emul_restore_fpu_state(void)
 {
+    /* Older gcc can't deal with "m" array inputs; make them outputs instead. 
*/
     if ( use_xsave )
-        asm volatile ( "xrstor" __OS " %[ptr]"
-                       :: [ptr] "m" (fpu_save_area), "a" (~0ull), "d" (~0ull) 
);
+        asm volatile ( "xrstor %[ptr]"
+                       : [ptr] "+m" (fpu_save_area)
+                       : "a" (~0ul), "d" (~0ul) );
     else
-        asm volatile ( "fxrstor %0" :: "m" (fpu_save_area) );
+        asm volatile ( "fxrstor %0" : "+m" (fpu_save_area) );
 }
 
 bool emul_test_init(void)

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.