diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-08-07 10:13:43 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-08-07 10:13:43 +0200 |
| commit | d24f13cd73812c28431668eb74a2b6933a466629 (patch) | |
| tree | 3051caafebbff8110017de8716542c55bfddeb51 /src | |
| parent | e8fad1112807320f05b87a8cf2e1c2e7d9fa64ee (diff) | |
| download | box64-d24f13cd73812c28431668eb74a2b6933a466629.tar.gz box64-d24f13cd73812c28431668eb74a2b6933a466629.zip | |
Small optimisation on xsave / xrstor helper
Diffstat (limited to 'src')
| -rw-r--r-- | src/emu/x87emu_private.c | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/src/emu/x87emu_private.c b/src/emu/x87emu_private.c index c54f80d5..92c14268 100644 --- a/src/emu/x87emu_private.c +++ b/src/emu/x87emu_private.c @@ -473,13 +473,11 @@ void fpu_xsave_mask(x64emu_t* emu, void* ed, int is32bits, uint64_t mask) } // copy SSE regs if(h->xstate_bv&0b10) { - for(int i=0; i<(is32bits?8:16); ++i) - memcpy(&p->XmmRegisters[i], &emu->xmm[i], 16); + memcpy(&p->XmmRegisters[0], &emu->xmm[0], 16*(is32bits?8:16)); } if(h->xstate_bv&0b100) { sse_regs_t* avx = (sse_regs_t*)(h+1); - for(int i=0; i<(is32bits?8:16); ++i) - memcpy(&avx[i], &emu->ymm[i], 16); + memcpy(&avx[0], &emu->ymm[0], 16*(is32bits?8:16)); } } @@ -525,20 +523,16 @@ void fpu_xrstor(x64emu_t* emu, void* ed, int is32bits) } if(to_restore&0b010) { // copy SSE regs - for(int i=0; i<(is32bits?8:16); ++i) - memcpy(&emu->xmm[i], &p->XmmRegisters[i], 16); + memcpy(&emu->xmm[0], &p->XmmRegisters[0], 16*(is32bits?8:16)); } else if(to_init&0b010) { - for(int i=0; i<(is32bits?8:16); ++i) - memset(&emu->xmm[i], 0, 16); + memset(&emu->xmm[0], 0, 16*(is32bits?8:16)); } if(to_restore&0b100) { // copy AVX upper part of regs sse_regs_t* avx = (sse_regs_t*)(h+1); - for(int i=0; i<(is32bits?8:16); ++i) - memcpy(&emu->ymm[i], &avx[i], 16); + memcpy(&emu->ymm[0], &avx[0], 16*(is32bits?8:16)); } else if(to_init&0b100) { - for(int i=0; i<(is32bits?8:16); ++i) - memset(&emu->ymm[i], 0, 16); + memset(&emu->ymm[0], 0, 16*(is32bits?8:16)); } } |