[PATCH] Test non-repeated scas

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

 



Signed-off-by: Avi Kivity <avi@xxxxxxxxxx>
---
 x86/emulator.c |   41 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 41 insertions(+), 0 deletions(-)

diff --git a/x86/emulator.c b/x86/emulator.c
index a302ffd..04adce7 100644
--- a/x86/emulator.c
+++ b/x86/emulator.c
@@ -121,6 +121,46 @@ void test_cmps(void *mem)
 	test_cmps_one(m1, m2);
 }
 
+void test_scas(void *mem)
+{
+    bool z;
+    void *di;
+
+    *(ulong *)mem = 0x77665544332211;
+
+    di = mem;
+    asm ("scasb; setz %0" : "=rm"(z), "+D"(di) : "a"(0xff11));
+    report("scasb match", di == mem + 1 && z);
+
+    di = mem;
+    asm ("scasb; setz %0" : "=rm"(z), "+D"(di) : "a"(0xff54));
+    report("scasb mismatch", di == mem + 1 && !z);
+
+    di = mem;
+    asm ("scasw; setz %0" : "=rm"(z), "+D"(di) : "a"(0xff2211));
+    report("scasw match", di == mem + 2 && z);
+
+    di = mem;
+    asm ("scasw; setz %0" : "=rm"(z), "+D"(di) : "a"(0xffdd11));
+    report("scasw mismatch", di == mem + 2 && !z);
+
+    di = mem;
+    asm ("scasl; setz %0" : "=rm"(z), "+D"(di) : "a"(0xff44332211ul));
+    report("scasd match", di == mem + 4 && z);
+
+    di = mem;
+    asm ("scasl; setz %0" : "=rm"(z), "+D"(di) : "a"(0x45332211));
+    report("scasd mismatch", di == mem + 4 && !z);
+
+    di = mem;
+    asm ("scasq; setz %0" : "=rm"(z), "+D"(di) : "a"(0x77665544332211ul));
+    report("scasq match", di == mem + 8 && z);
+
+    di = mem;
+    asm ("scasq; setz %0" : "=rm"(z), "+D"(di) : "a"(3));
+    report("scasq mismatch", di == mem + 8 && !z);
+}
+
 void test_cr8(void)
 {
 	unsigned long src, dst;
@@ -506,6 +546,7 @@ int main()
 	report("mov reg, r/m (1)", t2 == 0x123456789abcdef);
 
 	test_cmps(mem);
+	test_scas(mem);
 
 	test_push(mem);
 	test_pop(mem);
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux