|
|
title "Move Test" ;++ ; ; Copyright (c) 2001 Microsoft Corporation ; ; Module Name: ; ; move.asm ; ; Abstract: ; ; This module implements code to test x86 move instruction timing. ; ; Author: ; ; Mark Lucovsky (markl) 28-Sep-1990 ; ; Revision History: ; ;-- .386p .xlist include ks386.inc include callconv.inc .list
_TEXT SEGMENT DWORD PUBLIC 'CODE' ASSUME DS:FLAT, ES:FLAT, SS:NOTHING, FS:NOTHING, GS:NOTHING
subttl "Move To register" ;++ ; ; VOID ; FASTCALL ; RegToMem ( ; IN ULONG Count, ; IN PULONG Address ; ) ; ; Routine Description: ; ; This function performs a move dword to register in a loop such that the ; loop overhead is negligible. ; ; Arguments: ; ; Count (ecx) - Supplies the iteration count. ; ; Address (edx) - Supplies the source address. ; ; Return Value: ; ; None. ; ;--
cPublicFastCall RegToMem, 2
RTM10: mov [edx], eax ; repeat move 32 times in a loop mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; mov [edx], eax ; dec ecx ; jnz RTM10 ; fstRET RegToMem
fstENDP RegToMem
subttl "Move To register" ;++ ; ; VOID ; FASTCALL ; MemToReg ( ; IN ULONG Count, ; IN PULONG Address ; ) ; ; Routine Description: ; ; This function performs a move dword to register in a loop such that the ; loop overhead is negligible. ; ; Arguments: ; ; Count (ecx) - Supplies the iteration count. ; ; Address (edx) - Supplies the source address. ; ; Return Value: ; ; None. ; ;--
cPublicFastCall MemToReg, 2
MTR10: mov eax, [edx] ; repeat move 32 times in a loop mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; mov eax, [edx] ; dec ecx ; jnz MTR10 ; fstRET MemToReg
fstENDP MemToReg
_TEXT ends
end
|