repository: /home/avi/kvm
branch: master
commit 1e79d4532af51300d253de1beb13c0f844915ff3
Author: Avi Kivity <[EMAIL PROTECTED]>
Date:   Mon Nov 26 17:06:19 2007 +0200

    kvm: testsuite: add cmps test
    
    Signed-off-by: Avi Kivity <[EMAIL PROTECTED]>

diff --git a/user/test/x86/emulator.c b/user/test/x86/emulator.c
index 61bccd7..830e7dc 100644
--- a/user/test/x86/emulator.c
+++ b/user/test/x86/emulator.c
@@ -15,6 +15,81 @@ void report(const char *name, int result)
        }
 }
 
+void test_cmps(void *mem)
+{
+       unsigned char *m1 = mem, *m2 = mem + 1024;
+       unsigned char m3[1024];
+       void *rsi, *rdi;
+       long rcx, tmp;
+       int i;
+
+       for (int i = 0; i < 100; ++i)
+               m1[i] = m2[i] = m3[i] = i;
+       for (int i = 100; i < 200; ++i)
+               m1[i] = (m3[i] = m2[i] = i) + 1;
+
+       rsi = m1; rdi = m3; rcx = 30;
+       asm volatile("xor %[tmp], %[tmp] \n\t"
+                    "repe/cmpsb"
+                    : "+S"(rsi), "+D"(rdi), "+c"(rcx), [tmp]"=&r"(tmp)
+                    : : "cc");
+       report("repe/cmpsb (1)", rcx == 0 && rsi == m1 + 30 && rdi == m3 + 30);
+
+       rsi = m1; rdi = m3; rcx = 15;
+       asm volatile("xor %[tmp], %[tmp] \n\t"
+                    "repe/cmpsw"
+                    : "+S"(rsi), "+D"(rdi), "+c"(rcx), [tmp]"=&r"(tmp)
+                    : : "cc");
+       report("repe/cmpsw (1)", rcx == 0 && rsi == m1 + 30 && rdi == m3 + 30);
+
+       rsi = m1; rdi = m3; rcx = 7;
+       asm volatile("xor %[tmp], %[tmp] \n\t"
+                    "repe/cmpsl"
+                    : "+S"(rsi), "+D"(rdi), "+c"(rcx), [tmp]"=&r"(tmp)
+                    : : "cc");
+       report("repe/cmpll (1)", rcx == 0 && rsi == m1 + 28 && rdi == m3 + 28);
+
+       rsi = m1; rdi = m3; rcx = 4;
+       asm volatile("xor %[tmp], %[tmp] \n\t"
+                    "repe/cmpsq"
+                    : "+S"(rsi), "+D"(rdi), "+c"(rcx), [tmp]"=&r"(tmp)
+                    : : "cc");
+       report("repe/cmpsq (1)", rcx == 0 && rsi == m1 + 32 && rdi == m3 + 32);
+
+       rsi = m1; rdi = m3; rcx = 130;
+       asm volatile("xor %[tmp], %[tmp] \n\t"
+                    "repe/cmpsb"
+                    : "+S"(rsi), "+D"(rdi), "+c"(rcx), [tmp]"=&r"(tmp)
+                    : : "cc");
+       report("repe/cmpsb (2)",
+              rcx == 29 && rsi == m1 + 101 && rdi == m3 + 101);
+
+       rsi = m1; rdi = m3; rcx = 65;
+       asm volatile("xor %[tmp], %[tmp] \n\t"
+                    "repe/cmpsw"
+                    : "+S"(rsi), "+D"(rdi), "+c"(rcx), [tmp]"=&r"(tmp)
+                    : : "cc");
+       report("repe/cmpsw (2)",
+              rcx == 14 && rsi == m1 + 102 && rdi == m3 + 102);
+
+       rsi = m1; rdi = m3; rcx = 32;
+       asm volatile("xor %[tmp], %[tmp] \n\t"
+                    "repe/cmpsl"
+                    : "+S"(rsi), "+D"(rdi), "+c"(rcx), [tmp]"=&r"(tmp)
+                    : : "cc");
+       report("repe/cmpll (2)",
+              rcx == 6 && rsi == m1 + 104 && rdi == m3 + 104);
+
+       rsi = m1; rdi = m3; rcx = 16;
+       asm volatile("xor %[tmp], %[tmp] \n\t"
+                    "repe/cmpsq"
+                    : "+S"(rsi), "+D"(rdi), "+c"(rcx), [tmp]"=&r"(tmp)
+                    : : "cc");
+       report("repe/cmpsq (2)",
+              rcx == 3 && rsi == m1 + 104 && rdi == m3 + 104);
+
+}
+
 int main()
 {
        void *mem;
@@ -32,6 +107,8 @@ int main()
                     : "memory");
        report("mov reg, r/m (1)", t2 == 0x123456789abcdef);
 
+       test_cmps(mem);
+
        printf("\nSUMMARY: %d tests, %d failures\n", tests, fails);
        return fails ? 1 : 0;
 }

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
kvm-commits mailing list
kvm-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-commits

Reply via email to