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

[Xen-devel] test_x86_emulator (was Re: [PATCH optional v2 01/10] hvm/hpet: Add manual unit test code.)



On 04/14/14 03:40, Jan Beulich wrote:
On 11.04.14 at 19:40, <dslutz@xxxxxxxxxxx> wrote:
Testing movdqu %xmm2,(%ecx)...          okay
Testing movdqu (%edx),%xmm4...          okay

Breakpoint 3, main (argc=<optimized out>, argv=<optimized out>) at
test_x86_emulator.c:661
661             if ( (rc != X86EMUL_OKAY) || memcmp(res, res + 16, 64) )
(gdb) p rc
$4 = 7
(gdb) q
I don't see how a return code of 7 could ever be observed here. But
It's then apparently not the suspected XMM register clobbering.

On ac0f56a + All these patches (which should not effect this)

It is more complex then it appears at 1st look.

-O1:
...
Testing movdqu (%edx),%xmm4...          okay
Testing vmovdqu %ymm2,(%ecx)...         skipped
Testing vmovdqu (%edx),%ymm4...         skipped
Testing movsd %xmm5,(%ecx)...           okay
Testing movaps (%edx),%xmm7...          okay
...


-O2:
...
Testing movdqu (%edx),%xmm4...          okay
Testing vmovdqu %ymm2,(%ecx)...         failed!
make: *** [run] Error 1


How I got here:

...
Testing movq (%edx),%mm5...             okay
Testing movdqu %xmm2,(%ecx)...          okay
Testing movdqu (%edx),%xmm4...          okay

Breakpoint 1, main (argc=<optimized out>, argv=<optimized out>) at 
test_x86_emulator.c:702
702         printf("%-40s", "Testing vmovdqu %ymm2,(%ecx)...");
(gdb) c
Continuing.

Breakpoint 3, x86_emulate (ctxt=ctxt@entry=0x7fffffffdb80, ops=ops@entry=0x6152a0 
<emulops>)
    at x86_emulate/x86_emulate.c:4164
4164                get_fpu(X86EMUL_FPU_ymm, &fic);
(gdb) p rc
$2 = 0
(gdb) s
get_fpu (exception_callback=0x402a60 <fpu_handle_exception>, 
exception_callback_arg=0x7fffffffd7d0,
    type=X86EMUL_FPU_ymm, ctxt=0x7fffffffdb80) at test_x86_emulator.c:138
138         switch ( type )
(gdb) n
137     {
(gdb)
138         switch ( type )
(gdb)
154         return X86EMUL_OKAY;
(gdb)
138         switch ( type )
(gdb)
152             return X86EMUL_UNHANDLEABLE;
(gdb)
138         switch ( type )
(gdb)
132     int get_fpu(
(gdb)
155     }
(gdb)
x86_emulate (ctxt=ctxt@entry=0x7fffffffdb80, ops=ops@entry=0x6152a0 <emulops>) 
at x86_emulate/x86_emulate.c:4525
4525    }
(gdb)
main (argc=<optimized out>, argv=<optimized out>) at test_x86_emulator.c:719
719             if ( (rc != X86EMUL_OKAY) || memcmp(res, res + 16, 64) )
(gdb)
934         printf("failed!\n");


And so I tried at the lower -O1, and "it works".




This is from 4.3.1...
I.e. not really meaningful if not proven to behave the same on
-unstable. And anyway, if you're not up to debugging this, I don't
think there's much we can do.

Since I know almost nothing about both AVX instructions and x86_emulate, it is
hard for me to quickly help.

   -Don Slutz

Jan



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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