@@ -2213,42 +2213,37 @@ void do_test(uint8_t *instr, unsigned in
unsigned int bytes,
struct x86_emulate_ctxt *ctxt))
{
- struct x86_emulate_state *s;
+ struct x86_emulate_state *s = x86_decode_insn(ctxt, fetch);
- if ( !modrm || mem != mem_none )
+ if ( !s )
{
- s = x86_decode_insn(ctxt, fetch);
+ print_insn(instr, len);
+ printf(" failed to decode\n");
+ return;
+ }
+
+ if ( x86_insn_length(s, ctxt) != len )
+ {
+ print_insn(instr, len);
+ printf(" length %u (expected %u)\n", x86_insn_length(s, ctxt), len);
+ }
- if ( !s )
- {
- print_insn(instr, len);
- printf(" failed to decode\n");
- return;
- }
-
- if ( x86_insn_length(s, ctxt) != len )
- {
- print_insn(instr, len);
- printf(" length %u (expected %u)\n", x86_insn_length(s, ctxt), len);
- }
-
- if ( x86_insn_is_mem_access(s, ctxt) != (mem != mem_none) )
- {
- print_insn(instr, len);
- printf(" mem access %d (expected %d)\n",
- x86_insn_is_mem_access(s, ctxt), mem != mem_none);
- }
-
- if ( x86_insn_is_mem_write(s, ctxt) != (mem == mem_write) )
- {
- print_insn(instr, len);
- printf(" mem write %d (expected %d)\n",
- x86_insn_is_mem_write(s, ctxt), mem == mem_write);
- }
+ if ( x86_insn_is_mem_access(s, ctxt) != (mem != mem_none) )
+ {
+ print_insn(instr, len);
+ printf(" mem access %d (expected %d)\n",
+ x86_insn_is_mem_access(s, ctxt), mem != mem_none);
+ }
- x86_emulate_free_state(s);
+ if ( x86_insn_is_mem_write(s, ctxt) != (mem == mem_write) )
+ {
+ print_insn(instr, len);
+ printf(" mem write %d (expected %d)\n",
+ x86_insn_is_mem_write(s, ctxt), mem == mem_write);
}
+ x86_emulate_free_state(s);
+
if ( modrm )
{
instr[modrm] |= 0xc0;
Gating the main part of what do_test() does is wrong: As it stands, the "memory" forms of BNDC{L,N,U} weren't tested because of this mistake. Signed-off-by: Jan Beulich <jbeulich@suse.com>