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;
}
+//////////////////////////////////////////////////////////
+// //
+// 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");
+}
+
+
//////////////////////////////////////////////////////////
// //
istri_12();
istri_44();
istri_00();
+ istri_38();
return 0;
}
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