This adds tests for pusha/popa to the test harness. Added some new typedefs while as well.
Signed-off-by: Mohammed Gamal <m.gamal...@gmail.com> --- kvm/user/test/x86/realmode.c | 37 +++++++++++++++++++++++++++++++++++++ 1 files changed, 37 insertions(+), 0 deletions(-) diff --git a/kvm/user/test/x86/realmode.c b/kvm/user/test/x86/realmode.c index 0db09b8..20d038e 100644 --- a/kvm/user/test/x86/realmode.c +++ b/kvm/user/test/x86/realmode.c @@ -4,6 +4,10 @@ typedef unsigned char u8; typedef unsigned short u16; typedef unsigned u32; typedef unsigned long long u64; +typedef signed char s8; +typedef signed short s16; +typedef signed s32; +typedef signed long long s64; void test_function(void); @@ -470,6 +474,7 @@ void test_long_jmp() void test_push_pop() { struct regs inregs = { 0 }, outregs; + MK_INSN(push32, "mov $0x12345678, %eax\n\t" "push %eax\n\t" "pop %ebx\n\t"); @@ -499,6 +504,10 @@ void test_push_pop() "mov %fs, %ebx\n\t" "pop %fs\n\t" ); + MK_INSN(pusha, "pushaw\n\t"); + MK_INSN(pushad, "pushal\n\t"); + MK_INSN(popa, "popaw\n\t"); + MK_INSN(popad, "popal\n\t"); exec_in_big_real_mode(&inregs, &outregs, insn_push32, @@ -539,6 +548,34 @@ void test_push_pop() if (!regs_equal(&inregs, &outregs, R_AX|R_BX) || outregs.ebx != outregs.eax) print_serial("Push/Pop Test 6: FAIL\n"); + + exec_in_big_real_mode(&inregs, &outregs, + insn_pusha, + insn_pusha_end - insn_pusha); + if (!regs_equal(&inregs, &outregs, R_SP) + || (s16)outregs.esp != (s16)(inregs.esp - 16)) + print_serial("Push/Pop Test 7: FAIL\n"); + + exec_in_big_real_mode(&inregs, &outregs, + insn_popa, + insn_popa_end - insn_popa); + if (outregs.esp != (inregs.esp + 16)) + print_serial("Push/Pop Test 8: FAIL\n"); + + exec_in_big_real_mode(&inregs, &outregs, + insn_pushad, + insn_pushad_end - insn_pushad); + + if (!regs_equal(&inregs, &outregs, R_SP) + || (s16)outregs.esp != (s16)(inregs.esp - 32)) + print_serial("Push/Pop Test 9: FAIL\n"); + + exec_in_big_real_mode(&inregs, &outregs, + insn_popad, + insn_popad_end - insn_popad); + + if (outregs.esp != (inregs.esp + 32)) + print_serial("Push/Pop Test 10: FAIL\n"); } void test_null(void) -- 1.6.0.4 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html