diff options
author | Juan J. Martinez <jjm@usebox.net> | 2023-07-09 21:55:17 +0100 |
---|---|---|
committer | Juan J. Martinez <jjm@usebox.net> | 2023-07-09 21:55:17 +0100 |
commit | f7c861e94eb95579c725dcd5d403acd7b4b318e3 (patch) | |
tree | e92db4f270a475de61b79c2f859314992dcd01ac /src/vga.c | |
parent | 9ff574061910f9562ccf4b2f6a21dda66e2a3f08 (diff) | |
download | gold-mine-run-f7c861e94eb95579c725dcd5d403acd7b4b318e3.tar.gz gold-mine-run-f7c861e94eb95579c725dcd5d403acd7b4b318e3.zip |
Assembler optimised blit copy hardcoded to 16x16
Diffstat (limited to 'src/vga.c')
-rw-r--r-- | src/vga.c | 25 |
1 files changed, 25 insertions, 0 deletions
@@ -196,3 +196,28 @@ void blit_copy(const Rect *dst) dtarget += 320; } } + +void blit_copy16x16(const Rect *dst) +{ + uint8_t *src = buffer + dst->x + dst->y * 320; + uint8_t *dtarget = screen + dst->x + dst->y * 320; + + asm volatile ( + "movl $16, %%eax\n\t" + "movl $0x130, %%ebx\n\t" + "cld\n\t" + "blit_copy16x16_loop:\n\t" + "movsl\n\t" + "movsl\n\t" + "movsl\n\t" + "movsl\n\t" + "addl %%ebx, %%esi\n\t" + "addl %%ebx, %%edi\n\t" + "decl %%eax\n\t" + "orl %%eax, %%eax\n\t" + "jne blit_copy16x16_loop\n\t" + : /* no output */ + : "S" (src), "D" (dtarget) + : "ecx", "ebx", "eax" + ); +} |