kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Mohammed Gamal <m.gamal005@gmail.com>
To: mtosatti@redhat.com
Cc: avi@redhat.com, kvm@vger.kernel.org,
	Mohammed Gamal <m.gamal005@gmail.com>
Subject: [PATCH] Add pusha/popa instructions to the realmode test harness
Date: Wed,  2 Sep 2009 00:47:41 +0200	[thread overview]
Message-ID: <1251845261-12551-1-git-send-email-m.gamal005@gmail.com> (raw)

This adds tests for pusha/popa to the test harness. Added some new typedefs
as well.

Signed-off-by: Mohammed Gamal <m.gamal005@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


             reply	other threads:[~2009-09-01 22:47 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-09-01 22:47 Mohammed Gamal [this message]
2009-09-02 19:13 ` [PATCH] Add pusha/popa instructions to the realmode test harness Avi Kivity
  -- strict thread matches above, loose matches on Subject: below --
2009-08-29 13:30 Mohammed Gamal
2009-08-29 13:29 Mohammed Gamal
2009-08-29 13:29 Mohammed Gamal
2009-08-29 13:27 Mohammed Gamal

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1251845261-12551-1-git-send-email-m.gamal005@gmail.com \
    --to=m.gamal005@gmail.com \
    --cc=avi@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).