📄 vgmemcpy.s
字号:
.global _vgmemcpy.global _vgmemcpy16################################################################ vgmemcpy###############################################################_vgmemcpy: push %r2 - %r7 ld ( %sp, 0x1C ), %r3 ld ( %sp, 0x20 ), %r2 ld ( %sp, 0x24 ), %r1 and %r1, 0xFFFFFFFF, %r1 # 父老狼 荤怕俊 措厚 jz MEMCOPY_END ############################################################## # 16byte捞窍绰 葛滴 8bit 傈价 ############################################################## tst %r1, 0xfffffff0 jz FLUSH_8 xor %r3, %r2, %r0 and %r0, 3, %r0 jnz CHECK_16 ############################################################## # 32bit 傈价啊瓷 ##############################################################PREPROCESS_32_0: tst %r2, 1 jz PREPROCESS_32_1 ldbu ( %r2, 0x0 ), %r0 stb %r0, ( %r3, 0x0 ) add %r2, 1, %r2 add %r3, 1, %r3 sub %r1, 1, %r1PREPROCESS_32_1: tst %r2, 2 jz PROCESS_32 ldsu ( %r2, 0x0 ), %r0 sts %r0, ( %r3, 0x0 ) add %r2, 2, %r2 add %r3, 2, %r3 sub %r1, 2, %r1 PROCESS_32: and %r1, 0xFFFFFFE0, %r0 jz FLUSH_8PROCESS_32_burst8: ld ( %r2, 0x0 ), %r4 ld ( %r2, 0x4 ), %r5 ld ( %r2, 0x8 ), %r6 ld ( %r2, 0xc ), %r7 st %r4, ( %r3, 0x0 ) st %r5, ( %r3, 0x4 ) st %r6, ( %r3, 0x8 ) st %r7, ( %r3, 0xc ) ld ( %r2, 0x10 ), %r4 ld ( %r2, 0x14 ), %r5 ld ( %r2, 0x18 ), %r6 ld ( %r2, 0x1c ), %r7 st %r4, ( %r3, 0x10 ) st %r5, ( %r3, 0x14 ) st %r6, ( %r3, 0x18 ) st %r7, ( %r3, 0x1c ) add %r2, 0x20, %r2 add %r3, 0x20, %r3 sub %r0, 0x20, %r0 jnz PROCESS_32_burst8 and %r1, 0x0000001F, %r1 jz MEMCOPY_END jmp FLUSH_8CHECK_16: xor %r0, 2, %r0 jnz PROCESS_8 ############################################################## # 16bit 傈价啊瓷 ##############################################################PREPROCESS_16: tst %r2, 1 jz PROCESS_16 ldbu ( %r2, 0x0 ), %r4 stb %r4, ( %r3, 0x0 ) add %r2, 1, %r2 add %r3, 1, %r3 sub %r1, 1, %r1 #jmp PREPROCESS_16 # 鞘夸绝澜PROCESS_16: and %r1, 0xFFFFFFE0, %r0 jz FLUSH_8PROCESS_16_burst16: ldsu ( %r2, 0x0 ), %r4 ldsu ( %r2, 0x2 ), %r5 ldsu ( %r2, 0x4 ), %r6 ldsu ( %r2, 0x6 ), %r7 sts %r4, ( %r3, 0x0 ) sts %r5, ( %r3, 0x2 ) sts %r6, ( %r3, 0x4 ) sts %r7, ( %r3, 0x6 ) ldsu ( %r2, 0x8 ), %r4 ldsu ( %r2, 0xa ), %r5 ldsu ( %r2, 0xc ), %r6 ldsu ( %r2, 0xe ), %r7 sts %r4, ( %r3, 0x8 ) sts %r5, ( %r3, 0xa ) sts %r6, ( %r3, 0xc ) sts %r7, ( %r3, 0xe ) ldsu ( %r2, 0x10 ), %r4 ldsu ( %r2, 0x12 ), %r5 ldsu ( %r2, 0x14 ), %r6 ldsu ( %r2, 0x16 ), %r7 sts %r4, ( %r3, 0x10 ) sts %r5, ( %r3, 0x12 ) sts %r6, ( %r3, 0x14 ) sts %r7, ( %r3, 0x16 ) ldsu ( %r2, 0x18 ), %r4 ldsu ( %r2, 0x1a ), %r5 ldsu ( %r2, 0x1c ), %r6 ldsu ( %r2, 0x1e ), %r7 sts %r4, ( %r3, 0x18 ) sts %r5, ( %r3, 0x1a ) sts %r6, ( %r3, 0x1c ) sts %r7, ( %r3, 0x1e ) add %r2, 0x20, %r2 add %r3, 0x20, %r3 sub %r0, 0x20, %r0 jnz PROCESS_16_burst16 and %r1, 0x0000001F, %r1 jz MEMCOPY_END jmp FLUSH_8 ############################################################## # 8bit 傈价父 啊瓷 ##############################################################PROCESS_8: and %r1, 0xFFFFFFF0, %r0 jz FLUSH_8PROCESS_8_burst16: ldbu ( %r2, 0x0 ), %r4 ldbu ( %r2, 0x1 ), %r5 ldbu ( %r2, 0x2 ), %r6 ldbu ( %r2, 0x3 ), %r7 stb %r4, ( %r3, 0x0 ) stb %r5, ( %r3, 0x1 ) stb %r6, ( %r3, 0x2 ) stb %r7, ( %r3, 0x3 ) ldbu ( %r2, 0x4 ), %r4 ldbu ( %r2, 0x5 ), %r5 ldbu ( %r2, 0x6 ), %r6 ldbu ( %r2, 0x7 ), %r7 stb %r4, ( %r3, 0x4 ) stb %r5, ( %r3, 0x5 ) stb %r6, ( %r3, 0x6 ) stb %r7, ( %r3, 0x7 ) ldbu ( %r2, 0x8 ), %r4 ldbu ( %r2, 0x9 ), %r5 ldbu ( %r2, 0xa ), %r6 ldbu ( %r2, 0xb ), %r7 stb %r4, ( %r3, 0x8 ) stb %r5, ( %r3, 0x9 ) stb %r6, ( %r3, 0xa ) stb %r7, ( %r3, 0xb ) ldbu ( %r2, 0xc ), %r4 ldbu ( %r2, 0xd ), %r5 ldbu ( %r2, 0xe ), %r6 ldbu ( %r2, 0xf ), %r7 stb %r4, ( %r3, 0xc ) stb %r5, ( %r3, 0xd ) stb %r6, ( %r3, 0xe ) stb %r7, ( %r3, 0xf ) add %r2, 0x10, %r2 add %r3, 0x10, %r3 sub %r0, 0x10, %r0 jnz PROCESS_8_burst16 and %r1, 0x0000000f, %r1 jz MEMCOPY_END #jmp FLUSH_8 FLUSH_8: ldbu ( %r2, 0x0 ), %r0 stb %r0, ( %r3, 0x0 ) add %r2, 1, %r2 add %r3, 1, %r3 sub %r1, 1, %r1 jnz FLUSH_8MEMCOPY_END: pop %r2 - %r7 ,%pc ################################################################ vgmemcpy16###############################################################_vgmemcpy16: push %r2 - %r7 ld ( %sp, 0x1C ), %r3 ld ( %sp, 0x20 ), %r2 ld ( %sp, 0x24 ), %r1 and %r3, 0xFFFFFFFE, %r3 # 父老狼 荤怕俊 措厚 and %r2, 0xFFFFFFFE, %r2 # 父老狼 荤怕俊 措厚 and %r1, 0xFFFFFFFE, %r1 # 父老狼 荤怕俊 措厚 jz MEM16_MEMCOPY_END # 32bit 傈价啊瓷己 八荤 xor %r2, %r3, %r0 and %r0, 3, %r0 jnz MEM16_PROCESS_16MEM16_PREPROCESS_32: tst %r2, 2 jz MEM16_PROCESS_32 ldsu ( %r2, 0x0 ), %r0 sts %r0, ( %r3, 0x0 ) add %r2, 2, %r2 add %r3, 2, %r3 sub %r1, 2, %r1 jz MEM16_MEMCOPY_ENDMEM16_PROCESS_32: and %r1, 0xFFFFFFE0, %r0 jz MEM16_FLUSH_16MEM16_PROCESS_32_burst8: ld ( %r2, 0x0 ), %r4 ld ( %r2, 0x4 ), %r5 ld ( %r2, 0x8 ), %r6 ld ( %r2, 0xc ), %r7 st %r4, ( %r3, 0x0 ) st %r5, ( %r3, 0x4 ) st %r6, ( %r3, 0x8 ) st %r7, ( %r3, 0xc ) ld ( %r2, 0x10 ), %r4 ld ( %r2, 0x14 ), %r5 ld ( %r2, 0x18 ), %r6 ld ( %r2, 0x1c ), %r7 st %r4, ( %r3, 0x10 ) st %r5, ( %r3, 0x14 ) st %r6, ( %r3, 0x18 ) st %r7, ( %r3, 0x1c ) add %r2, 0x20, %r2 add %r3, 0x20, %r3 sub %r0, 0x20, %r0 jnz MEM16_PROCESS_32_burst8 and %r1, 0x0000001F, %r1 jz MEM16_MEMCOPY_END jmp MEM16_FLUSH_16 MEM16_PROCESS_16: and %r1, 0xFFFFFFE0, %r0 jz MEM16_FLUSH_16MEM16_PROCESS_16_burst16: ldsu ( %r2, 0x0 ), %r4 ldsu ( %r2, 0x2 ), %r5 ldsu ( %r2, 0x4 ), %r6 ldsu ( %r2, 0x6 ), %r7 sts %r4, ( %r3, 0x0 ) sts %r5, ( %r3, 0x2 ) sts %r6, ( %r3, 0x4 ) sts %r7, ( %r3, 0x6 ) ldsu ( %r2, 0x8 ), %r4 ldsu ( %r2, 0xa ), %r5 ldsu ( %r2, 0xc ), %r6 ldsu ( %r2, 0xe ), %r7 sts %r4, ( %r3, 0x8 ) sts %r5, ( %r3, 0xa ) sts %r6, ( %r3, 0xc ) sts %r7, ( %r3, 0xe ) ldsu ( %r2, 0x10 ), %r4 ldsu ( %r2, 0x12 ), %r5 ldsu ( %r2, 0x14 ), %r6 ldsu ( %r2, 0x16 ), %r7 sts %r4, ( %r3, 0x10 ) sts %r5, ( %r3, 0x12 ) sts %r6, ( %r3, 0x14 ) sts %r7, ( %r3, 0x16 ) ldsu ( %r2, 0x18 ), %r4 ldsu ( %r2, 0x1a ), %r5 ldsu ( %r2, 0x1c ), %r6 ldsu ( %r2, 0x1e ), %r7 sts %r4, ( %r3, 0x18 ) sts %r5, ( %r3, 0x1a ) sts %r6, ( %r3, 0x1c ) sts %r7, ( %r3, 0x1e ) add %r2, 0x20, %r2 add %r3, 0x20, %r3 sub %r0, 0x20, %r0 jnz MEM16_PROCESS_16_burst16 and %r1, 0x0000001F, %r1 jz MEM16_MEMCOPY_END #jmp MEM16_FLUSH_16 MEM16_FLUSH_16: ldsu ( %r2, 0x0 ), %r0 sts %r0, ( %r3, 0x0 ) add %r2, 2, %r2 add %r3, 2, %r3 sub %r1, 2, %r1 jnz MEM16_FLUSH_16MEM16_MEMCOPY_END: pop %r2 - %r7 ,%pc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -