mirror of
https://github.com/gnif/LookingGlass.git
synced 2025-08-09 20:24:14 +00:00
[host] use the new memcpySSE implementation
This commit is contained in:
@@ -4,8 +4,11 @@ memcpySSE proc
|
||||
; src = rdx
|
||||
; len = r8
|
||||
|
||||
mov rax, rcx
|
||||
|
||||
test r8, r8
|
||||
jz @Exit
|
||||
|
||||
cmp rcx, rdx
|
||||
je @Exit
|
||||
|
||||
@@ -16,7 +19,7 @@ memcpySSE proc
|
||||
; void * end = dst + (length & ~0x7F);
|
||||
; end = r10
|
||||
mov r9 , r8
|
||||
and r9 , -07Fh
|
||||
and r9 , 0FFFFFFFFFFFFFF80h
|
||||
jz @RemainingBlocks
|
||||
mov r10, rcx
|
||||
add r10, r9
|
||||
@@ -50,6 +53,7 @@ memcpySSE proc
|
||||
and r11, 07Fh
|
||||
jz @RestoreExit
|
||||
shr r11, 4
|
||||
jz @FinalBytes
|
||||
|
||||
mov r10, 7
|
||||
sub r10, r11
|
||||
@@ -59,12 +63,11 @@ memcpySSE proc
|
||||
jmp r9
|
||||
|
||||
@RestoreExit:
|
||||
movdqa xmm6 , oword ptr [rsp + 4*8 + 00 ]
|
||||
movdqa xmm7 , oword ptr [rsp + 4*8 + 16 ]
|
||||
movdqa xmm6 , oword ptr [rsp + 4*8 + 00]
|
||||
movdqa xmm7 , oword ptr [rsp + 4*8 + 16]
|
||||
add rsp, 8 + 2*16 + 4*8
|
||||
|
||||
@Exit:
|
||||
sfence
|
||||
ret
|
||||
|
||||
@FinalBlocks:
|
||||
@@ -82,135 +85,132 @@ memcpySSE proc
|
||||
vmovntdq xmmword ptr [rcx + 010h], xmm1
|
||||
vmovaps xmm0 , xmmword ptr [rdx + 000h]
|
||||
vmovntdq xmmword ptr [rcx + 000h], xmm0
|
||||
nop
|
||||
nop
|
||||
|
||||
imul r9, 16
|
||||
add rdx, r9
|
||||
add rcx, r9
|
||||
movdqa xmm6 , oword ptr [rsp + 4*8 + 00]
|
||||
movdqa xmm7 , oword ptr [rsp + 4*8 + 16]
|
||||
add rsp, 8 + 2*16 + 4*8
|
||||
sfence
|
||||
|
||||
@EndBlocks:
|
||||
shl r11, 4
|
||||
add rdx, r11
|
||||
add rcx, r11
|
||||
|
||||
@FinalBytes:
|
||||
and r8, 0Fh
|
||||
test r8, r8
|
||||
je @RestoreExit
|
||||
jz @Exit
|
||||
imul r8, 5
|
||||
lea r9, @FinalBytesTable
|
||||
add r9, r8
|
||||
jmp r9
|
||||
|
||||
cmp r8, 2
|
||||
je @Copy2
|
||||
cmp r8, 3
|
||||
je @Copy3
|
||||
cmp r8, 4
|
||||
je @Copy4
|
||||
cmp r8, 5
|
||||
je @Copy5
|
||||
cmp r8, 6
|
||||
je @Copy6
|
||||
cmp r8, 7
|
||||
je @Copy7
|
||||
cmp r8, 8
|
||||
je @Copy8
|
||||
cmp r8, 9
|
||||
je @Copy9
|
||||
cmp r8, 10
|
||||
je @Copy10
|
||||
cmp r8, 11
|
||||
je @Copy11
|
||||
cmp r8, 12
|
||||
je @Copy12
|
||||
cmp r8, 13
|
||||
je @Copy13
|
||||
cmp r8, 14
|
||||
je @Copy14
|
||||
cmp r8, 15
|
||||
je @Copy15
|
||||
@FinalBytesTable:
|
||||
jmp @Copy1
|
||||
jmp @Copy2
|
||||
jmp @Copy3
|
||||
jmp @Copy4
|
||||
jmp @Copy5
|
||||
jmp @Copy6
|
||||
jmp @Copy7
|
||||
jmp @Copy8
|
||||
jmp @Copy9
|
||||
jmp @Copy10
|
||||
jmp @Copy11
|
||||
jmp @Copy12
|
||||
jmp @Copy13
|
||||
jmp @Copy14
|
||||
jmp @Copy15
|
||||
|
||||
db 128 DUP(0CCh)
|
||||
|
||||
; fall through - 1 byte
|
||||
@Copy1:
|
||||
mov al, byte ptr [rdx]
|
||||
mov byte ptr [rcx], al
|
||||
jmp @RestoreExit
|
||||
ret
|
||||
|
||||
@Copy2:
|
||||
mov r10w, word ptr [rdx]
|
||||
mov word ptr [rcx], r10w
|
||||
jmp @RestoreExit
|
||||
ret
|
||||
|
||||
@Copy3:
|
||||
mov r10w, word ptr [rdx]
|
||||
mov word ptr [rcx], r10w
|
||||
mov al, byte ptr [rdx + 02h]
|
||||
mov byte ptr [rcx + 02h], al
|
||||
jmp @RestoreExit
|
||||
mov r11b, byte ptr [rdx + 02h]
|
||||
mov byte ptr [rcx + 02h], r11b
|
||||
ret
|
||||
|
||||
@Copy4:
|
||||
mov r9d, dword ptr [rdx]
|
||||
mov dword ptr [rcx], r9d
|
||||
jmp @RestoreExit
|
||||
ret
|
||||
|
||||
@Copy5:
|
||||
mov r9d, dword ptr [rdx ]
|
||||
mov al , byte ptr [rdx + 04h]
|
||||
mov r11b , byte ptr [rdx + 04h]
|
||||
mov dword ptr [rcx ], r9d
|
||||
mov byte ptr [rcx + 04h], al
|
||||
jmp @RestoreExit
|
||||
mov byte ptr [rcx + 04h], r11b
|
||||
ret
|
||||
|
||||
@Copy6:
|
||||
mov r9d , dword ptr [rdx ]
|
||||
mov r10w, word ptr [rdx + 04h]
|
||||
mov dword ptr [rcx ], r9d
|
||||
mov word ptr [rcx + 04h], r10w
|
||||
jmp @RestoreExit
|
||||
ret
|
||||
|
||||
@Copy7:
|
||||
mov r9d , dword ptr [rdx ]
|
||||
mov r10w, word ptr [rdx + 04h]
|
||||
mov al , byte ptr [rdx + 06h]
|
||||
mov r11b, byte ptr [rdx + 06h]
|
||||
mov dword ptr [rcx ], r9d
|
||||
mov word ptr [rcx + 04h], r10w
|
||||
mov byte ptr [rcx + 06h], al
|
||||
jmp @RestoreExit
|
||||
mov byte ptr [rcx + 06h], r11b
|
||||
ret
|
||||
|
||||
@Copy8:
|
||||
mov r8, qword ptr [rdx]
|
||||
mov qword ptr [rcx], r8
|
||||
jmp @RestoreExit
|
||||
ret
|
||||
|
||||
@Copy9:
|
||||
mov r8, qword ptr [rdx ]
|
||||
mov al, byte ptr [rdx + 08h]
|
||||
mov r8 , qword ptr [rdx ]
|
||||
mov r11b, byte ptr [rdx + 08h]
|
||||
mov qword ptr [rcx ], r8
|
||||
mov byte ptr [rcx + 08h], al
|
||||
jmp @RestoreExit
|
||||
mov byte ptr [rcx + 08h], r11b
|
||||
ret
|
||||
|
||||
@Copy10:
|
||||
mov r8 , qword ptr [rdx ]
|
||||
mov r10w, word ptr [rdx + 08h]
|
||||
mov qword ptr [rcx ], r8
|
||||
mov word ptr [rcx + 08h], r10w
|
||||
jmp @RestoreExit
|
||||
ret
|
||||
|
||||
@Copy11:
|
||||
mov r8 , qword ptr [rdx ]
|
||||
mov r10w, word ptr [rdx + 08h]
|
||||
mov al , byte ptr [rdx + 0Ah]
|
||||
mov r11b, byte ptr [rdx + 0Ah]
|
||||
mov qword ptr [rcx ], r8
|
||||
mov word ptr [rcx + 08h], r10w
|
||||
mov byte ptr [rcx + 0Ah], al
|
||||
jmp @RestoreExit
|
||||
mov byte ptr [rcx + 0Ah], r11b
|
||||
ret
|
||||
|
||||
@Copy12:
|
||||
mov r8 , qword ptr [rdx ]
|
||||
mov r9d, dword ptr [rdx + 08h]
|
||||
mov qword ptr [rcx ], r8
|
||||
mov dword ptr [rcx + 08h], r9d
|
||||
jmp @RestoreExit
|
||||
ret
|
||||
|
||||
@Copy13:
|
||||
mov r8 , qword ptr [rdx ]
|
||||
mov r9d, dword ptr [rdx + 08h]
|
||||
mov al , byte ptr [rdx + 0Ch]
|
||||
mov r8 , qword ptr [rdx ]
|
||||
mov r9d , dword ptr [rdx + 08h]
|
||||
mov r11b, byte ptr [rdx + 0Ch]
|
||||
mov qword ptr [rcx ], r8
|
||||
mov dword ptr [rcx + 08h], r9d
|
||||
mov byte ptr [rcx + 0Ch], al
|
||||
jmp @RestoreExit
|
||||
mov byte ptr [rcx + 0Ch], r11b
|
||||
ret
|
||||
|
||||
@Copy14:
|
||||
mov r8 , qword ptr [rdx ]
|
||||
@@ -219,19 +219,19 @@ memcpySSE proc
|
||||
mov qword ptr [rcx ], r8
|
||||
mov dword ptr [rcx + 08h], r9d
|
||||
mov word ptr [rcx + 0Ch], r10w
|
||||
jmp @RestoreExit
|
||||
ret
|
||||
|
||||
; copy 15
|
||||
@Copy15:
|
||||
mov r8 , qword ptr [rdx + 00h]
|
||||
mov r9d , dword ptr [rdx + 08h]
|
||||
mov r10w, word ptr [rdx + 0Ch]
|
||||
mov al , byte ptr [rdx + 0Eh]
|
||||
mov r11b, byte ptr [rdx + 0Eh]
|
||||
mov qword ptr [rcx + 00h], r8
|
||||
mov dword ptr [rcx + 08h], r9d
|
||||
mov word ptr [rcx + 0Ch], r10w
|
||||
mov byte ptr [rcx + 0Eh], al
|
||||
jmp @RestoreExit
|
||||
mov byte ptr [rcx + 0Eh], r11b
|
||||
ret
|
||||
|
||||
memcpySSE endp
|
||||
end
|
Reference in New Issue
Block a user