\r
;------------------------------------------------------------------------------\r
; VOID *\r
-; _mem_SetMem64 (\r
+; InternalMemSetMem64 (\r
; IN VOID *Buffer,\r
; IN UINTN Count,\r
-; IN UINT8 Value\r
+; IN UINT64 Value\r
; )\r
;------------------------------------------------------------------------------\r
-InternalMemSetMem64 PROC USES rdi\r
- mov rdi, rcx\r
- mov r9, rcx\r
- test cl, 8\r
+InternalMemSetMem64 PROC\r
+ mov rax, rcx ; rax <- Buffer\r
+ xchg rcx, rdx ; rcx <- Count & rdx <- Buffer\r
+ test dl, 8\r
+ movd xmm0, r8\r
jz @F\r
- mov [rdi], r8\r
- add rdi, 8\r
- dec rdx\r
+ mov [rdx], r8\r
+ add rdx, 8\r
+ dec rcx\r
@@:\r
- mov rcx, rdx\r
shr rcx, 1\r
jz @SetQwords\r
- movd xmm0, r8\r
movlhps xmm0, xmm0\r
@@:\r
- movntdq [rdi], xmm0\r
- add rdi, 16\r
+ movntdq [rdx], xmm0\r
+ lea rdx, [rdx + 16]\r
loop @B\r
mfence\r
@SetQwords:\r
- test dl, 1\r
- jz @F\r
- mov [rdi], r8\r
+ jnc @F\r
+ mov [rdx], r8\r
@@:\r
ret\r
InternalMemSetMem64 ENDP\r