]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add test cases for PCMPxSTRx case 0x38. See #273318.
authorJulian Seward <jseward@acm.org>
Wed, 19 Oct 2011 20:17:50 +0000 (20:17 +0000)
committerJulian Seward <jseward@acm.org>
Wed, 19 Oct 2011 20:17:50 +0000 (20:17 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12168

none/tests/amd64/pcmpstr64.c
none/tests/amd64/pcmpstr64.stdout.exp

index 71a344f97e9620b6db2e2ce072f3fddaf640a668..7d508f90f4da99317300f62c8c012cfc6388833f 100644 (file)
@@ -204,7 +204,7 @@ Bool pcmpXstrX_WRK ( /*OUT*/V128* resV,
    switch (imm8) {
       case 0x00:
       case 0x02: case 0x08: case 0x0C: case 0x12: case 0x1A:
-      case 0x3A: case 0x44: case 0x4A:
+      case 0x38: case 0x3A: case 0x44: case 0x4A:
          break;
       default:
          return False;
@@ -1155,6 +1155,98 @@ void istri_00 ( void )
 }
 
 
+//////////////////////////////////////////////////////////
+//                                                      //
+//                       ISTRI_38                       //
+//                                                      //
+//////////////////////////////////////////////////////////
+
+UInt h_pcmpistri_38 ( V128* argL, V128* argR )
+{
+   V128 block[2];
+   memcpy(&block[0], argL, sizeof(V128));
+   memcpy(&block[1], argR, sizeof(V128));
+   ULong res, flags;
+   __asm__ __volatile__(
+      "subq      $1024,  %%rsp"             "\n\t"
+      "movdqu    0(%2),  %%xmm2"            "\n\t"
+      "movdqu    16(%2), %%xmm11"           "\n\t"
+      "pcmpistri $0x38,  %%xmm2, %%xmm11"   "\n\t"
+      "pushfq"                              "\n\t"
+      "popq      %%rdx"                     "\n\t"
+      "movq      %%rcx,  %0"                "\n\t"
+      "movq      %%rdx,  %1"                "\n\t"
+      "addq      $1024,  %%rsp"             "\n\t"
+      : /*out*/ "=r"(res), "=r"(flags) : "r"/*in*/(&block[0])
+      : "rcx","rdx","xmm0","xmm2","xmm11","cc","memory"
+   );
+   return ((flags & 0x8D5) << 16) | (res & 0xFFFF);
+}
+
+UInt s_pcmpistri_38 ( V128* argLU, V128* argRU )
+{
+   V128 resV;
+   UInt resOSZACP, resECX;
+   Bool ok
+      = pcmpXstrX_WRK( &resV, &resOSZACP, argLU, argRU,
+                       zmask_from_V128(argLU),
+                       zmask_from_V128(argRU),
+                       0x38, False/*!isSTRM*/
+        );
+   assert(ok);
+   resECX = resV.uInt[0];
+   return (resOSZACP << 16) | resECX;
+}
+
+void istri_38 ( void )
+{
+   char* wot = "38";
+   UInt(*h)(V128*,V128*) = h_pcmpistri_38;
+   UInt(*s)(V128*,V128*) = s_pcmpistri_38;
+
+   try_istri(wot,h,s, "0000000000000000", "0000000000000000"); 
+
+   try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); 
+   try_istri(wot,h,s, "aaaa2aaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); 
+   try_istri(wot,h,s, "aaaaaaaaa2aaaaaa", "aaaaaaaaaaaaaaaa"); 
+   try_istri(wot,h,s, "aaaaaaaaaaaaa2aa", "aaaaaaaaaaaaaaaa"); 
+
+   try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaa2aaaaaaaaaaa"); 
+   try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaa2aaaaaa"); 
+   try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaa2a"); 
+
+   try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); 
+   try_istri(wot,h,s, "baaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); 
+   try_istri(wot,h,s, "b9aaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); 
+   try_istri(wot,h,s, "b9baaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); 
+
+   try_istri(wot,h,s, "b9baaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); 
+   try_istri(wot,h,s, "b9baaaaaaaaaaaaa", "aaaaaaaaaaaa7aaa"); 
+   try_istri(wot,h,s, "b9baaaaaaaaaaaaa", "aaaaaaaa2aaa4aaa"); 
+
+   try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); 
+
+   try_istri(wot,h,s, "aaaaaaaaaaaa0aaa", "aaaaaaaaaaaaaaaa"); 
+   try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaa0aaa"); 
+   try_istri(wot,h,s, "aaaaaaaaaaaa0aaa", "aaaaaaaaaaaa0aaa"); 
+
+   try_istri(wot,h,s, "aaaaaaaa0aaaaaaa", "aaaaaaaaaaaaaaaa"); 
+   try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaa0aaa"); 
+   try_istri(wot,h,s, "aaaaaaaa0aaaaaaa", "aaaaaaaaaaaa0aaa"); 
+
+   try_istri(wot,h,s, "aaaaaaaaaaaa0aaa", "aaaaaaaaaaaaaaaa"); 
+   try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaa0aaaaaaa"); 
+   try_istri(wot,h,s, "aaaaaaaaaaaa0aaa", "aaaaaaaa0aaaaaaa"); 
+
+   try_istri(wot,h,s, "0000000000000000", "aaaaaaaa0aaaaaaa"); 
+   try_istri(wot,h,s, "8000000000000000", "aaaaaaaa0aaaaaaa"); 
+   try_istri(wot,h,s, "0000000000000001", "aaaaaaaa0aaaaaaa"); 
+
+   try_istri(wot,h,s, "0000000000000000", "aaaaaaaaaaaaaaaa"); 
+   try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "0000000000000000"); 
+}
+
+
 
 //////////////////////////////////////////////////////////
 //                                                      //
@@ -1173,5 +1265,6 @@ int main ( void )
    istri_12();
    istri_44();
    istri_00();
+   istri_38();
    return 0;
 }
index a5596cd89475b8357b22b08c06ef94eea342be9f..eaf653172e04a38130fe6c7117a865dc48734342 100644 (file)
@@ -226,3 +226,33 @@ istri 00  0000abcdabcdabcd 000000000000baba -> 00c10002 00c10002
 istri 00  0000abcdabcdabcd 00000000000baba0 -> 00c00010 00c00010 
 istri 00  0ddc0ffeebadf00d 00000000cafebabe -> 00c00010 00c00010 
 istri 00  0ddc0ffeebadfeed 00000000cafebabe -> 00c10001 00c10001 
+istri 38  0000000000000000 0000000000000000 -> 08c10000 08c10000 
+istri 38  aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 00000010 00000010 
+istri 38  aaaa2aaaaaaaaaaa aaaaaaaaaaaaaaaa -> 0001000b 0001000b 
+istri 38  aaaaaaaaa2aaaaaa aaaaaaaaaaaaaaaa -> 00010006 00010006 
+istri 38  aaaaaaaaaaaaa2aa aaaaaaaaaaaaaaaa -> 00010002 00010002 
+istri 38  aaaaaaaaaaaaaaaa aaaa2aaaaaaaaaaa -> 0001000b 0001000b 
+istri 38  aaaaaaaaaaaaaaaa aaaaaaaaa2aaaaaa -> 00010006 00010006 
+istri 38  aaaaaaaaaaaaaaaa aaaaaaaaaaaaaa2a -> 00010001 00010001 
+istri 38  aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 00000010 00000010 
+istri 38  baaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 0001000f 0001000f 
+istri 38  b9aaaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 0001000e 0001000e 
+istri 38  b9baaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 0001000d 0001000d 
+istri 38  b9baaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 0001000d 0001000d 
+istri 38  b9baaaaaaaaaaaaa aaaaaaaaaaaa7aaa -> 00010003 00010003 
+istri 38  b9baaaaaaaaaaaaa aaaaaaaa2aaa4aaa -> 00010003 00010003 
+istri 38  aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 00000010 00000010 
+istri 38  aaaaaaaaaaaa0aaa aaaaaaaaaaaaaaaa -> 00400010 00400010 
+istri 38  aaaaaaaaaaaaaaaa aaaaaaaaaaaa0aaa -> 00810003 00810003 
+istri 38  aaaaaaaaaaaa0aaa aaaaaaaaaaaa0aaa -> 00c10003 00c10003 
+istri 38  aaaaaaaa0aaaaaaa aaaaaaaaaaaaaaaa -> 00400010 00400010 
+istri 38  aaaaaaaaaaaaaaaa aaaaaaaaaaaa0aaa -> 00810003 00810003 
+istri 38  aaaaaaaa0aaaaaaa aaaaaaaaaaaa0aaa -> 00c10003 00c10003 
+istri 38  aaaaaaaaaaaa0aaa aaaaaaaaaaaaaaaa -> 00400010 00400010 
+istri 38  aaaaaaaaaaaaaaaa aaaaaaaa0aaaaaaa -> 00810007 00810007 
+istri 38  aaaaaaaaaaaa0aaa aaaaaaaa0aaaaaaa -> 00c10007 00c10007 
+istri 38  0000000000000000 aaaaaaaa0aaaaaaa -> 00c10007 00c10007 
+istri 38  8000000000000000 aaaaaaaa0aaaaaaa -> 00c10007 00c10007 
+istri 38  0000000000000001 aaaaaaaa0aaaaaaa -> 08c10000 08c10000 
+istri 38  0000000000000000 aaaaaaaaaaaaaaaa -> 00400010 00400010 
+istri 38  aaaaaaaaaaaaaaaa 0000000000000000 -> 08810000 08810000