diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-06-02 13:10:50 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-06-02 13:10:50 +0200 |
| commit | 2493706315db07b7146ba5e9ade9bed7d33e467e (patch) | |
| tree | 30eab9ef1479f21adde9ce69996887d04e68e198 /src | |
| parent | b49273c079dd9fa02ba1ee709e6d4edb1e728f71 (diff) | |
| download | box64-2493706315db07b7146ba5e9ade9bed7d33e467e.tar.gz box64-2493706315db07b7146ba5e9ade9bed7d33e467e.zip | |
[COSIM] Improved reliability with AVX (but there is still something wrong there)
Diffstat (limited to 'src')
| -rw-r--r-- | src/emu/modrm.h | 9 | ||||
| -rw-r--r-- | src/emu/x64test.c | 20 |
2 files changed, 15 insertions, 14 deletions
diff --git a/src/emu/modrm.h b/src/emu/modrm.h index 8bc3cbd4..03cccdba 100644 --- a/src/emu/modrm.h +++ b/src/emu/modrm.h @@ -43,11 +43,14 @@ #define GETEX32(D) opex=TestEx32O(test, &addr, rex, nextop, D, 0) #define GETEX_OFFS(D, O) opex=TestExO(test, &addr, rex, nextop, D, O) #define GETGX opgx=GetGx(test->emu, &addr, rex, nextop) -#define GETGY opgy=GetGy(emu, &addr, rex, nextop) -#define GETEY opey=(opex>=&emu->xmm[0] && opex<=&emu->xmm[15])?((sse_regs_t*)((uintptr_t)opex+offsetof(x64emu_t, ymm)-offsetof(x64emu_t, xmm))):((sse_regs_t*)((uintptr_t)opex+16)) +#define GETGY opgy=GetGy(test->emu, &addr, rex, nextop) +#define GETEY opey=(opex>=&test->emu->xmm[0] && opex<=&test->emu->xmm[15])?((sse_regs_t*)((uintptr_t)opex+offsetof(x64emu_t, ymm)-offsetof(x64emu_t, xmm))):((sse_regs_t*)((uintptr_t)opex+16)) #define GETEM(D) opem=TestEm(test, &addr, rex, nextop, D) #define GETEM32(D) opem=TestEm32O(test, &addr, rex, nextop, D, 0) #define GETGM opgm=GetGm(test->emu, &addr, rex, nextop) +#define GETVX opvx=&test->emu->xmm[vex.v] +#define GETVY opvy=&test->emu->ymm[vex.v] +#define GETVD opvd=&test->emu->regs[vex.v] #else #define GETED(D) oped=GetEd(emu, &addr, rex, nextop, D) #define GETE4(D) GETED(D) @@ -76,10 +79,10 @@ #define GETEM(D) opem=GetEm(emu, &addr, rex, nextop, D) #define GETEM32(D) opem=GetEm32O(emu, &addr, rex, nextop, D, 0) #define GETGM opgm=GetGm(emu, &addr, rex, nextop) -#endif #define GETVX opvx=&emu->xmm[vex.v] #define GETVY opvy=&emu->ymm[vex.v] #define GETVD opvd=&emu->regs[vex.v] +#endif #define ED oped #define GD opgd #define VD opvd diff --git a/src/emu/x64test.c b/src/emu/x64test.c index 62ff1c32..49bd09cf 100644 --- a/src/emu/x64test.c +++ b/src/emu/x64test.c @@ -108,22 +108,20 @@ void x64test_check(x64emu_t* ref, uintptr_t ip) BANNER; printf_log(LOG_NONE, "MXCSR: %x | %x\n", ref->mxcsr.x32, emu->mxcsr.x32); } - if(box64_avx) { - if(memcmp(ref->xmm, emu->xmm, sizeof(emu->xmm)) || memcmp(ref->ymm, emu->ymm, sizeof(emu->ymm))) { + if(box64_avx) + if(memcmp(ref->ymm, emu->ymm, sizeof(emu->ymm))) { BANNER; for(int i=0; i<16; ++i) { - if(ref->ymm[i].u128!=emu->ymm[i].u128 || ref->xmm[i].u128!=emu->xmm[i].u128 ) { - printf_log(LOG_NONE, "YMM[%02d]: %016zx-%016zx-%016zx-%016zx | %016zx-%016zx-%016zx-%016zx\n", i, ref->ymm[i].q[1], ref->ymm[i].q[0], ref->xmm[i].q[1], ref->xmm[i].q[0], emu->ymm[i].q[1], emu->ymm[i].q[0], emu->xmm[i].q[1], emu->xmm[i].q[0]); + if(ref->ymm[i].u128!=emu->ymm[i].u128) { + printf_log(LOG_NONE, "YMM[%02d]: %016zx-%016zx | %016zx-%016zx\n", i, ref->ymm[i].q[1], ref->ymm[i].q[0], emu->ymm[i].q[1], emu->ymm[i].q[0]); } } } - } else { - if(memcmp(ref->xmm, emu->xmm, sizeof(emu->xmm))) { - BANNER; - for(int i=0; i<16; ++i) { - if(ref->xmm[i].u128!=emu->xmm[i].u128) { - printf_log(LOG_NONE, "XMM[%02d]: %016zx-%016zx | %016zx-%016zx\n", i, ref->xmm[i].q[1], ref->xmm[i].q[0], emu->xmm[i].q[1], emu->xmm[i].q[0]); - } + if(memcmp(ref->xmm, emu->xmm, sizeof(emu->xmm))) { + BANNER; + for(int i=0; i<16; ++i) { + if(ref->xmm[i].u128!=emu->xmm[i].u128) { + printf_log(LOG_NONE, "XMM[%02d]: %016zx-%016zx | %016zx-%016zx\n", i, ref->xmm[i].q[1], ref->xmm[i].q[0], emu->xmm[i].q[1], emu->xmm[i].q[0]); } } } |