mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-04 02:18:37 +00:00
Add test cases for PCMPxSTRx $0x00.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11503
This commit is contained in:
parent
166dd7ea1c
commit
896e0e1b48
@ -202,6 +202,7 @@ Bool pcmpXstrX_WRK ( /*OUT*/V128* resV,
|
||||
even if they would probably work. Life is too short to have
|
||||
unvalidated cases in the code base. */
|
||||
switch (imm8) {
|
||||
case 0x00:
|
||||
case 0x02: case 0x08: case 0x0C: case 0x12: case 0x1A:
|
||||
case 0x3A: case 0x44: case 0x4A:
|
||||
break;
|
||||
@ -1072,6 +1073,86 @@ void istri_44 ( void )
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////
|
||||
// //
|
||||
// ISTRI_00 //
|
||||
// //
|
||||
//////////////////////////////////////////////////////////
|
||||
|
||||
UInt h_pcmpistri_00 ( 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 $0x00, %%xmm2, %%xmm11" "\n\t"
|
||||
//"pcmpistrm $0x00, %%xmm2, %%xmm11" "\n\t"
|
||||
//"movd %%xmm0, %%ecx" "\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_00 ( 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),
|
||||
0x00, False/*!isSTRM*/
|
||||
);
|
||||
assert(ok);
|
||||
resECX = resV.uInt[0];
|
||||
return (resOSZACP << 16) | resECX;
|
||||
}
|
||||
|
||||
void istri_00 ( void )
|
||||
{
|
||||
char* wot = "00";
|
||||
UInt(*h)(V128*,V128*) = h_pcmpistri_00;
|
||||
UInt(*s)(V128*,V128*) = s_pcmpistri_00;
|
||||
|
||||
try_istri(wot,h,s, "abcdacbdabcdabcd", "000000000000000a");
|
||||
try_istri(wot,h,s, "abcdabcdabcdabcd", "000000000000000b");
|
||||
try_istri(wot,h,s, "abcdabcdabcdabcd", "00000000000000ab");
|
||||
try_istri(wot,h,s, "abcdabc0abcdabcd", "000000000000abcd");
|
||||
|
||||
try_istri(wot,h,s, "abcdabcdabcdabcd", "000000000000abcd");
|
||||
try_istri(wot,h,s, "0bcdabcdabcdabcd", "000000000000abcd");
|
||||
try_istri(wot,h,s, "abcdabcdabcda0cd", "000000000000abcd");
|
||||
try_istri(wot,h,s, "abcdabcdabcdab0d", "000000000000abcd");
|
||||
try_istri(wot,h,s, "abcdabcdabcdabc0", "000000000000abcd");
|
||||
|
||||
try_istri(wot,h,s, "abcdabcdabcdabcd", "000000000000abcd");
|
||||
try_istri(wot,h,s, "abcdabcdabcdabcd", "000000000000a0cd");
|
||||
try_istri(wot,h,s, "abcdabcdabcdabcd", "000000000000ab0d");
|
||||
try_istri(wot,h,s, "abcdabcdabcdabcd", "000000000000abc0");
|
||||
|
||||
try_istri(wot,h,s, "0000000000000000", "0000000000000000");
|
||||
try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa");
|
||||
|
||||
try_istri(wot,h,s, "0000abcdabcdabcd", "000000000000abcd");
|
||||
try_istri(wot,h,s, "0000abcdabcdabcd", "000000000000dcba");
|
||||
try_istri(wot,h,s, "0000abcdabcdabcd", "000000000000bbbb");
|
||||
try_istri(wot,h,s, "0000abcdabcdabcd", "000000000000baba");
|
||||
|
||||
try_istri(wot,h,s, "0000abcdabcdabcd", "00000000000baba0");
|
||||
|
||||
try_istri(wot,h,s, "0ddc0ffeebadf00d", "00000000cafebabe");
|
||||
try_istri(wot,h,s, "0ddc0ffeebadfeed", "00000000cafebabe");
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -1091,5 +1172,6 @@ int main ( void )
|
||||
istri_0C();
|
||||
istri_12();
|
||||
istri_44();
|
||||
istri_00();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -204,3 +204,25 @@ istri 44 0123456789abcdef 000000fecb975421 -> 08c1000e 08c1000e
|
||||
istri 44 123456789abcdef1 000000fecb975421 -> 0881000f 0881000f
|
||||
istri 44 0123456789abcdef 00000000dca86532 -> 00c1000d 00c1000d
|
||||
istri 44 123456789abcdef1 00000000dca86532 -> 0081000e 0081000e
|
||||
istri 00 abcdacbdabcdabcd 000000000000000a -> 00810003 00810003
|
||||
istri 00 abcdabcdabcdabcd 000000000000000b -> 00810002 00810002
|
||||
istri 00 abcdabcdabcdabcd 00000000000000ab -> 00810002 00810002
|
||||
istri 00 abcdabc0abcdabcd 000000000000abcd -> 08c10000 08c10000
|
||||
istri 00 abcdabcdabcdabcd 000000000000abcd -> 08810000 08810000
|
||||
istri 00 0bcdabcdabcdabcd 000000000000abcd -> 08c10000 08c10000
|
||||
istri 00 abcdabcdabcda0cd 000000000000abcd -> 08c10000 08c10000
|
||||
istri 00 abcdabcdabcdab0d 000000000000abcd -> 08c10000 08c10000
|
||||
istri 00 abcdabcdabcdabc0 000000000000abcd -> 00c00010 00c00010
|
||||
istri 00 abcdabcdabcdabcd 000000000000abcd -> 08810000 08810000
|
||||
istri 00 abcdabcdabcdabcd 000000000000a0cd -> 08810000 08810000
|
||||
istri 00 abcdabcdabcdabcd 000000000000ab0d -> 08810000 08810000
|
||||
istri 00 abcdabcdabcdabcd 000000000000abc0 -> 00800010 00800010
|
||||
istri 00 0000000000000000 0000000000000000 -> 00c00010 00c00010
|
||||
istri 00 aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 08010000 08010000
|
||||
istri 00 0000abcdabcdabcd 000000000000abcd -> 08c10000 08c10000
|
||||
istri 00 0000abcdabcdabcd 000000000000dcba -> 08c10000 08c10000
|
||||
istri 00 0000abcdabcdabcd 000000000000bbbb -> 00c10002 00c10002
|
||||
istri 00 0000abcdabcdabcd 000000000000baba -> 00c10002 00c10002
|
||||
istri 00 0000abcdabcdabcd 00000000000baba0 -> 00c00010 00c00010
|
||||
istri 00 0ddc0ffeebadf00d 00000000cafebabe -> 00c00010 00c00010
|
||||
istri 00 0ddc0ffeebadfeed 00000000cafebabe -> 00c10001 00c10001
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user