diff options
Diffstat (limited to 'csrc/mkf_asm_data.c')
-rw-r--r-- | csrc/mkf_asm_data.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/csrc/mkf_asm_data.c b/csrc/mkf_asm_data.c index 032034a..555f861 100644 --- a/csrc/mkf_asm_data.c +++ b/csrc/mkf_asm_data.c @@ -669,8 +669,22 @@ void cfcn_00455040(void *arg1, void *arg2) bx -= 0xfd; void *old_esi = esi; /* push esi */ esi = edi - 1 - dx; - memcpy(edi, esi, bx); /* using rep movsb */ + + /* the following is a little bit tricky, + * if we use memcpy/memmove, the picture is broken + */ +#if 1 + ecx = bx; + do { + *(uint8_t*)edi = *(uint8_t*)esi; + edi++; + esi++; + ecx--; + } while (ecx); +#else + memmove(edi, esi, bx); /* using rep movsb */ edi += bx; /* by movsb */ +#endif esi = old_esi; /* pop esi */ ecx = old_ecx; /* restore ecx */ } |