mirror of
https://github.com/ptitSeb/box64.git
synced 2025-02-21 06:50:40 +00:00
More coverage for test17, and added NaN handling to 66 0F 7C opcode
This commit is contained in:
parent
ea0ee7c7aa
commit
5cd8176478
@ -1244,11 +1244,25 @@ int Run660F(x64emu_t *emu, rex_t rex)
|
||||
nextop = F8;
|
||||
GETEX(0);
|
||||
GETGX;
|
||||
#ifndef NOALIGN
|
||||
is_nan = isnan(GX->d[0]) || isnan(GX->d[1]);
|
||||
#endif
|
||||
GX->d[0] += GX->d[1];
|
||||
#ifndef NOALIGN
|
||||
if(!is_nan && isnan(GX->d[0]))
|
||||
GX->d[0] = -NAN;
|
||||
#endif
|
||||
if(EX==GX) {
|
||||
GX->d[1] = GX->d[0];
|
||||
} else {
|
||||
#ifndef NOALIGN
|
||||
is_nan = isnan(EX->d[0]) || isnan(EX->d[1]);
|
||||
#endif
|
||||
GX->d[1] = EX->d[0] + EX->d[1];
|
||||
#ifndef NOALIGN
|
||||
if(!is_nan && isnan(GX->d[1]))
|
||||
GX->d[1] = -NAN;
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -262,4 +262,58 @@ punpcklbw(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0
|
||||
punpcklwd(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xffff 0x8000 0x8000 0x7fff 0x7fff 0xffff 0x0 0xffff
|
||||
punpckldq(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xffffffff 0x1 0x80000000 0x80000000
|
||||
ppacksswb(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x80ff 0x7f 0x201 0x8003 0x7f80 0xffff 0x8050 0x80fe
|
||||
pcmpgtb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x0 0x0 0xff 0x0 0x0 0xff 0xff 0x0 0x0 0x0 0xff 0xff 0x0 0x0 0x0 0xff
|
||||
pcmpgtw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xffff 0x0 0xffff 0xffff 0x0 0xffff 0xffff 0x0
|
||||
pcmpgtd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x0 0x0 0xffffffff 0xffffffff
|
||||
packuswb(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0xff 0x201 0x3 0xff00 0x0 0x50 0x0
|
||||
punpckhbw(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xfe 0x8 0x84 0x7 0x72 0x81 0x52 0x6 0xa5 0xa 0x0 0xf 0xc0 0x10 0x32 0x1
|
||||
punpckhwd(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x1 0x50 0x2 0x9000 0x3 0xfffe 0x8001 0x8001
|
||||
punpckhdq(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x7fffffff 0x5 0x0 0xfffffffe
|
||||
ppackssdw(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x8000ffff 0x7fff 0x80000001 0xfffe0005
|
||||
punpcklqdq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0xffffffffffffffff 0x1
|
||||
punpckhqdq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0x8000000000000000 0x8000000000000000
|
||||
pshufd(0xffffffff 0x80000000 0x7fffffff 0x0 0) = 0xffffffff 0xffffffff 0xffffffff 0xffffffff
|
||||
pshufd(0xffffffff 0x80000000 0x7fffffff 0x0 255) = 0x0 0x0 0x0 0x0
|
||||
pshufd(0xffffffff 0x80000000 0x7fffffff 0x0 170) = 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff
|
||||
pshufd(0xffffffff 0x80000000 0x7fffffff 0x0 2) = 0x7fffffff 0xffffffff 0xffffffff 0xffffffff
|
||||
psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 0) = 0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001
|
||||
psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 255) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
|
||||
psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 170) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
|
||||
psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 2) = 0x3fff 0x2000 0x1fff 0x0 0x0 0x0 0x0 0x2000
|
||||
psrld(0xffffffff 0x80000000 0x7fffffff 0x0 0) = 0xffffffff 0x80000000 0x7fffffff 0x0
|
||||
psrld(0xffffffff 0x80000000 0x7fffffff 0x0 255) = 0x0 0x0 0x0 0x0
|
||||
psrld(0xffffffff 0x80000000 0x7fffffff 0x0 170) = 0x0 0x0 0x0 0x0
|
||||
psrld(0xffffffff 0x80000000 0x7fffffff 0x0 2) = 0x3fffffff 0x20000000 0x1fffffff 0x0
|
||||
psrlq(0xffffffffffffffff 0x8000000000000000 0) = 0xffffffffffffffff 0x8000000000000000
|
||||
psrlq(0xffffffffffffffff 0x8000000000000000 255) = 0x0 0x0
|
||||
psrlq(0xffffffffffffffff 0x8000000000000000 170) = 0x0 0x0
|
||||
psrlq(0xffffffffffffffff 0x8000000000000000 2) = 0x3fffffffffffffff 0x2000000000000000
|
||||
psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 0) = 0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001
|
||||
psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 255) = 0xffff 0xffff 0x0 0x0 0x0 0x0 0x0 0xffff
|
||||
psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 170) = 0xffff 0xffff 0x0 0x0 0x0 0x0 0x0 0xffff
|
||||
psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 2) = 0xffff 0xe000 0x1fff 0x0 0x0 0x0 0x0 0xe000
|
||||
psrad(0xffffffff 0x80000000 0x7fffffff 0x0 0) = 0xffffffff 0x80000000 0x7fffffff 0x0
|
||||
psrad(0xffffffff 0x80000000 0x7fffffff 0x0 255) = 0xffffffff 0xffffffff 0x0 0x0
|
||||
psrad(0xffffffff 0x80000000 0x7fffffff 0x0 170) = 0xffffffff 0xffffffff 0x0 0x0
|
||||
psrad(0xffffffff 0x80000000 0x7fffffff 0x0 2) = 0xffffffff 0xe0000000 0x1fffffff 0x0
|
||||
psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 0) = 0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001
|
||||
psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 255) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
|
||||
psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 170) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
|
||||
psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 2) = 0xfffc 0x0 0xfffc 0x0 0x4 0x8 0xc 0x4
|
||||
pslld(0xffffffff 0x80000000 0x7fffffff 0x0 0) = 0xffffffff 0x80000000 0x7fffffff 0x0
|
||||
pslld(0xffffffff 0x80000000 0x7fffffff 0x0 255) = 0x0 0x0 0x0 0x0
|
||||
pslld(0xffffffff 0x80000000 0x7fffffff 0x0 170) = 0x0 0x0 0x0 0x0
|
||||
pslld(0xffffffff 0x80000000 0x7fffffff 0x0 2) = 0xfffffffc 0x0 0xfffffffc 0x0
|
||||
psllq(0xffffffffffffffff 0x8000000000000000 0) = 0xffffffffffffffff 0x8000000000000000
|
||||
psllq(0xffffffffffffffff 0x8000000000000000 255) = 0x0 0x0
|
||||
psllq(0xffffffffffffffff 0x8000000000000000 170) = 0x0 0x0
|
||||
psllq(0xffffffffffffffff 0x8000000000000000 2) = 0xfffffffffffffffc 0x0
|
||||
pcmpeqb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
|
||||
pcmpeqw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0xffff
|
||||
pcmpeqd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x0 0xffffffff 0x0 0x0
|
||||
haddpd(1 2 , 0 -2 ) = 3 -2
|
||||
haddpd(0 -2 , inf -inf ) = -2 0xfff8000000000000
|
||||
haddpd(1 2 , 0x7ff8000000000000 -0 ) = 3 0x7ff8000000000000
|
||||
haddpd(0 -2 , 0x7ff8000000000000 -0 ) = -2 0x7ff8000000000000
|
||||
haddpd(inf -inf , 0x7ff8000000000000 -0 ) = 0xfff8000000000000 0x7ff8000000000000
|
||||
haddpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0x7ff8000000000000
|
||||
|
BIN
tests/test17
BIN
tests/test17
Binary file not shown.
@ -252,6 +252,10 @@ printf(N " %g, %g => %g\n", b, a, *(float*)&r);
|
||||
a128.mm = _mm_##A##_epi##N(a128_##N.mm); \
|
||||
printf("%s(", #C); print_##N(a128_##N); \
|
||||
printf(") = "); print_##N(a128); printf("\n");
|
||||
#define GO1C(A, N, C, A1, I) \
|
||||
a128.mm = _mm_##A##_epi##N(A1.mm, I); \
|
||||
printf("%s(", #C); print_##N(A1); \
|
||||
printf("%d) = ", I); print_##N(a128); printf("\n");
|
||||
#define GO2(A, N, C, A1, A2) \
|
||||
a128.mm = _mm_##A##_epi##N(A1.mm, A2.mm); \
|
||||
printf("%s(", #C); print_##N(A1); \
|
||||
@ -355,9 +359,58 @@ printf(N " %g, %g => %g\n", b, a, *(float*)&r);
|
||||
GO2(unpacklo, 16, punpcklwd, a128_16, b128_16)
|
||||
GO2(unpacklo, 32, punpckldq, a128_32, b128_32)
|
||||
GO2(packs, 16, ppacksswb, a128_16, b128_16)
|
||||
|
||||
GO2(cmpgt, 8, pcmpgtb, a128_8, b128_8)
|
||||
GO2(cmpgt, 16, pcmpgtw, a128_16, b128_16)
|
||||
GO2(cmpgt, 32, pcmpgtd, a128_32, b128_32)
|
||||
GO2(packus, 16, packuswb, a128_16, b128_16)
|
||||
GO2(unpackhi, 8, punpckhbw, a128_8, b128_8)
|
||||
GO2(unpackhi, 16, punpckhwd, a128_16, b128_16)
|
||||
GO2(unpackhi, 32, punpckhdq, a128_32, b128_32)
|
||||
GO2(packs, 32, ppackssdw, a128_32, b128_32)
|
||||
GO2(unpacklo, 64, punpcklqdq, a128_64, b128_64)
|
||||
GO2(unpackhi, 64, punpckhqdq, a128_64, b128_64)
|
||||
GO1C(shuffle, 32, pshufd, a128_32, 0)
|
||||
GO1C(shuffle, 32, pshufd, a128_32, 0xff)
|
||||
GO1C(shuffle, 32, pshufd, a128_32, 0xaa)
|
||||
GO1C(shuffle, 32, pshufd, a128_32, 2)
|
||||
GO1C(srli, 16, psrlw, a128_16, 0)
|
||||
GO1C(srli, 16, psrlw, a128_16, 0xff)
|
||||
GO1C(srli, 16, psrlw, a128_16, 0xaa)
|
||||
GO1C(srli, 16, psrlw, a128_16, 2)
|
||||
GO1C(srli, 32, psrld, a128_32, 0)
|
||||
GO1C(srli, 32, psrld, a128_32, 0xff)
|
||||
GO1C(srli, 32, psrld, a128_32, 0xaa)
|
||||
GO1C(srli, 32, psrld, a128_32, 2)
|
||||
GO1C(srli, 64, psrlq, a128_64, 0)
|
||||
GO1C(srli, 64, psrlq, a128_64, 0xff)
|
||||
GO1C(srli, 64, psrlq, a128_64, 0xaa)
|
||||
GO1C(srli, 64, psrlq, a128_64, 2)
|
||||
GO1C(srai, 16, psraw, a128_16, 0)
|
||||
GO1C(srai, 16, psraw, a128_16, 0xff)
|
||||
GO1C(srai, 16, psraw, a128_16, 0xaa)
|
||||
GO1C(srai, 16, psraw, a128_16, 2)
|
||||
GO1C(srai, 32, psrad, a128_32, 0)
|
||||
GO1C(srai, 32, psrad, a128_32, 0xff)
|
||||
GO1C(srai, 32, psrad, a128_32, 0xaa)
|
||||
GO1C(srai, 32, psrad, a128_32, 2)
|
||||
GO1C(slli, 16, psllw, a128_16, 0)
|
||||
GO1C(slli, 16, psllw, a128_16, 0xff)
|
||||
GO1C(slli, 16, psllw, a128_16, 0xaa)
|
||||
GO1C(slli, 16, psllw, a128_16, 2)
|
||||
GO1C(slli, 32, pslld, a128_32, 0)
|
||||
GO1C(slli, 32, pslld, a128_32, 0xff)
|
||||
GO1C(slli, 32, pslld, a128_32, 0xaa)
|
||||
GO1C(slli, 32, pslld, a128_32, 2)
|
||||
GO1C(slli, 64, psllq, a128_64, 0)
|
||||
GO1C(slli, 64, psllq, a128_64, 0xff)
|
||||
GO1C(slli, 64, psllq, a128_64, 0xaa)
|
||||
GO1C(slli, 64, psllq, a128_64, 2)
|
||||
GO2(cmpeq, 8, pcmpeqb, a128_8, b128_8)
|
||||
GO2(cmpeq, 16, pcmpeqw, a128_16, b128_16)
|
||||
GO2(cmpeq, 32, pcmpeqd, a128_32, b128_32)
|
||||
MULITGO2pd(hadd, haddpd)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user