bootsector2-test1-template.mac revision 2b41f73e305b2cd1a4dadff538705a7a8fb63f02
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; $Id$
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;; @file
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; bootsector2 test1 - multi mode template.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Copyright (C) 2007-2014 Oracle Corporation
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; This file is part of VirtualBox Open Source Edition (OSE), as
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; available from http://www.virtualbox.org. This file is free software;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; you can redistribute it and/or modify it under the terms of the GNU
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; General Public License (GPL) as published by the Free Software
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Foundation, in version 2 as it comes in the "COPYING" file of the
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; The contents of this file may alternatively be used under the terms
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; of the Common Development and Distribution License Version 1.0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; VirtualBox OSE distribution, in which case the provisions of the
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; CDDL are applicable instead of those of the GPL.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; You may elect to license modified versions of this file under the
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; terms and conditions of either the GPL or the CDDL or both.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%include "bootsector2-template-header.mac"
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Run the CPUID benchmark for this mode.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; @uses nothing
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINCODELOW
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBITS 16
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(BenchmarkCpuId_rm)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(Bs2IsModeSupported_rm)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jz .done
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(Bs2EnterMode_rm)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBITS TMPL_BITS
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push xBP
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov xBP, xSP
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push sAX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push sBX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push sCX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push sDX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push sDI
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync sub sSP, 20h
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ; Get the current time.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov xAX, xSP
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM_CMN(GetNanoTS)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ; Do the test.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov edi, TEST_INSTRUCTION_COUNT_IO / 4
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.again:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov eax, 1
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync cpuid
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov eax, 1
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync cpuid
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov eax, 1
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync cpuid
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov eax, 1
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync cpuid
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync dec edi
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jnz .again
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ; Calc the elapsed time and report the result.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov xAX, xSP
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM_CMN(GetElapsedNanoTS)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov xCX, .s_szTestName
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov edx, TEST_INSTRUCTION_COUNT_IO
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov xAX, xSP
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM_CMN(ReportResult)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync add sSP, 20h
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync pop sDI
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync pop sDX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync pop sCX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync pop sBX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync pop sAX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync leave
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(Bs2ExitMode)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBITS 16
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.done:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ret
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.s_szTestName:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db TMPL_MODE_STR, ', CPUID', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(BenchmarkCpuId_rm)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncTMPL_BEGINCODE
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBITS TMPL_BITS
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync;;
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync; Run the RDTSC benchmark for this mode.
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync;
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync; @uses nothing
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync;
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsyncBEGINCODELOW
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsyncBITS 16
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsyncBEGINPROC TMPL_NM(BenchmarkRdTsc_rm)
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync call TMPL_NM(Bs2IsModeSupported_rm)
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync jz .done
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync call TMPL_NM(Bs2EnterMode_rm)
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsyncBITS TMPL_BITS
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync push xBP
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync mov xBP, xSP
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync push sAX
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync push sBX
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync push sCX
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync push sDX
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync push sDI
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync sub sSP, 20h
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync ; Get the current time.
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync mov xAX, xSP
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync call TMPL_NM_CMN(GetNanoTS)
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync ; Do the test.
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync mov edi, TEST_INSTRUCTION_COUNT_RDTSC / 4
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync.again:
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync rdtsc
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync rdtsc
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync rdtsc
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync rdtsc
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync dec edi
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync jnz .again
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync ; Calc the elapsed time and report the result.
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync mov xAX, xSP
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync call TMPL_NM_CMN(GetElapsedNanoTS)
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync mov xCX, .s_szTestName
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync mov edx, TEST_INSTRUCTION_COUNT_RDTSC
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync mov xAX, xSP
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync call TMPL_NM_CMN(ReportResult)
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync add sSP, 20h
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync pop sDI
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync pop sDX
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync pop sCX
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync pop sBX
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync pop sAX
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync leave
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync call TMPL_NM(Bs2ExitMode)
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsyncBITS 16
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync.done:
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync ret
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync.s_szTestName:
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync db TMPL_MODE_STR, ', RDTSC', 0
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsyncENDPROC TMPL_NM(BenchmarkRdTsc_rm)
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsyncTMPL_BEGINCODE
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsyncBITS TMPL_BITS
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync
2b41f73e305b2cd1a4dadff538705a7a8fb63f02vboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Prologue for the I/O port tests.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%ifndef HaveIoPortPrologue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%define HaveIoPortPrologue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%macro IoPortPrologue 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push xBP
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov xBP, xSP
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push sAX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push sDX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push sCX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync sub xSP, 20h
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ; Get the current time.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov xAX, xSP
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM_CMN(GetNanoTS)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ; Do the test.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov dx, VMMDEV_TESTING_IOPORT_NOP
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ecx, TEST_INSTRUCTION_COUNT_IO / 5
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%endmacro
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%endif
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Epilogue for the I/O port tests.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%ifndef HaveIoPortEpilogue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%define HaveIoPortEpilogue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%macro IoPortEpilogue 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ; Calc the elapsed time and report the result.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov xAX, xSP
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM_CMN(GetElapsedNanoTS)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov xCX, .s_szTestName
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov edx, TEST_INSTRUCTION_COUNT_IO
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov xAX, xSP
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM_CMN(ReportResult)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync add xSP, 20h
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync pop sCX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync pop sDX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync pop sAX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync leave
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ret
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%endmacro
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%endif
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Benchmarks: IN eax, NOP
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; @uses nothing
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(BenchmarkIoPortNop32In)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync IoPortPrologue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.again:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync in eax, dx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync in eax, dx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync in eax, dx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync in eax, dx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync in eax, dx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync dec ecx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jnz .again
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync IoPortEpilogue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.s_szTestName:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db TMPL_MODE_STR, ', 32-bit IN', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(BenchmarkIoPortNop32In)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Benchmarks: OUT NOP, eax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; @uses nothing
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(BenchmarkIoPortNop32Out)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync IoPortPrologue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.again:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync out dx, eax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync out dx, eax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync out dx, eax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync out dx, eax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync out dx, eax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync dec ecx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jnz .again
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync IoPortEpilogue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.s_szTestName:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db TMPL_MODE_STR, ', 32-bit OUT', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(BenchmarkIoPortNop32Out)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Benchmarks: IN ax, NOP
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; @uses nothing
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(BenchmarkIoPortNop16In)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync IoPortPrologue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.again:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync in ax, dx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync in ax, dx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync in ax, dx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync in ax, dx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync in ax, dx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync dec ecx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jnz .again
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync IoPortEpilogue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.s_szTestName:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db TMPL_MODE_STR, ', 16-bit IN', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(BenchmarkIoPortNop16In)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Benchmarks: OUT NOP, ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; @uses nothing
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(BenchmarkIoPortNop16Out)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync IoPortPrologue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.again:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync out dx, ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync out dx, ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync out dx, ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync out dx, ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync out dx, ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync dec ecx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jnz .again
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync IoPortEpilogue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.s_szTestName:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db TMPL_MODE_STR, ', 16-bit OUT', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(BenchmarkIoPortNop16Out)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Benchmarks: IN al, NOP
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; @uses nothing
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(BenchmarkIoPortNop8In)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync IoPortPrologue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.again:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync in al, dx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync in al, dx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync in al, dx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync in al, dx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync in al, dx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync dec ecx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jnz .again
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync IoPortEpilogue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.s_szTestName:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db TMPL_MODE_STR, ', 8-bit IN', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(BenchmarkIoPortNop8In)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Benchmarks: OUT NOP, al
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; @uses nothing
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(BenchmarkIoPortNop8Out)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync IoPortPrologue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.again:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync out dx, al
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync out dx, al
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync out dx, al
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync out dx, al
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync out dx, al
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync dec ecx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jnz .again
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync IoPortEpilogue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.s_szTestName:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db TMPL_MODE_STR, ', 8-bit OUT', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(BenchmarkIoPortNop8Out)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%undef IoPortPrologue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%undef IoPortEpilogue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Run the I/O benchmarks for this mode.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; @uses nothing
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINCODELOW
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBITS 16
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(BenchmarkIoPortNop_rm)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(Bs2IsModeSupported_rm)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jz .done
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(Bs2EnterMode_rm)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBITS TMPL_BITS
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(BenchmarkIoPortNop32In)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(BenchmarkIoPortNop32Out)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%ifndef QUICK_TEST
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(BenchmarkIoPortNop16In)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(BenchmarkIoPortNop16Out)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(BenchmarkIoPortNop8In)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(BenchmarkIoPortNop8Out)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%endif
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(Bs2ExitMode)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBITS 16
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.done:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ret
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(BenchmarkIoPortNop_rm)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncTMPL_BEGINCODE
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBITS TMPL_BITS
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Prologue for the MMIO tests.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%ifndef HaveMmioPrologue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%define HaveMmioPrologue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%macro MmioPrologue 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push xBP
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov xBP, xSP
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push sAX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push sDX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push sCX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push sBX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync sub xSP, 20h
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ; Get the current time.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov xAX, xSP
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM_CMN(GetNanoTS)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ; Do the test - X million 32-bit IN instructions.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%ifdef TMPL_16BIT
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov dx, ds ; save ds
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync %ifdef TMPL_RM
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov bx, VMMDEV_TESTING_MMIO_RM_SEL
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ds, bx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ebx, VMMDEV_TESTING_MMIO_RM_OFF(VMMDEV_TESTING_MMIO_NOP)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync %else
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov bx, BS2_SEL_MMIO16
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ds, bx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ebx, VMMDEV_TESTING_MMIO_NOP - BS2_SEL_MMIO16_BASE
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync %endif
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%else
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov xBX, VMMDEV_TESTING_MMIO_NOP
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%endif
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ecx, TEST_INSTRUCTION_COUNT_MMIO / 5
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%endmacro
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%endif
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Epilogue for the MMIO tests.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%ifndef HaveMmioEpilogue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%define HaveMmioEpilogue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%macro MmioEpilogue 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%ifdef TMPL_16BIT
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ds, dx ; restore ds
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%endif
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ; Calc the elapsed time and report the result.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov xAX, xSP
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM_CMN(GetElapsedNanoTS)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov xCX, .s_szTestName
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov edx, TEST_INSTRUCTION_COUNT_MMIO
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov xAX, xSP
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM_CMN(ReportResult)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync add xSP, 20h
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync pop sBX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync pop sCX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync pop sDX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync pop sAX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync leave
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ret
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%endmacro
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%endif
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Benchmarks: MOV eax, [NOP]
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; @uses nothing
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(BenchmarkMmioNop32Read)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync MmioPrologue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.again:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov eax, [sBX]
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov eax, [sBX]
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov eax, [sBX]
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov eax, [sBX]
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov eax, [sBX]
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync dec ecx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jnz .again
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync MmioEpilogue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.s_szTestName:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db TMPL_MODE_STR, ', 32-bit read', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(BenchmarkMmioNop32Read)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Benchmarks: OUT NOP, eax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; @uses nothing
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(BenchmarkMmioNop32Write)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync MmioPrologue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.again:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov [sBX], eax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov [sBX], eax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov [sBX], eax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov [sBX], eax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov [sBX], eax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync dec ecx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jnz .again
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync MmioEpilogue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.s_szTestName:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db TMPL_MODE_STR, ', 32-bit write', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(BenchmarkMmioNop32Write)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Benchmarks: MOV ax, [NOP]
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; @uses nothing
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(BenchmarkMmioNop16Read)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync MmioPrologue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.again:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ax, [xBX]
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ax, [xBX]
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ax, [xBX]
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ax, [xBX]
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ax, [xBX]
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync dec ecx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jnz .again
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync MmioEpilogue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.s_szTestName:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db TMPL_MODE_STR, ', 16-bit read', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(BenchmarkMmioNop16Read)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Benchmarks: OUT NOP, ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; @uses nothing
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(BenchmarkMmioNop16Write)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync MmioPrologue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.again:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov [xBX], ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov [xBX], ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov [xBX], ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov [xBX], ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov [xBX], ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync dec ecx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jnz .again
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync MmioEpilogue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.s_szTestName:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db TMPL_MODE_STR, ', 16-bit write', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(BenchmarkMmioNop16Write)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Benchmarks: MOV al, [NOP]
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; @uses nothing
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(BenchmarkMmioNop8Read)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync MmioPrologue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.again:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov al, [xBX]
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov al, [xBX]
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov al, [xBX]
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov al, [xBX]
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov al, [xBX]
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync dec ecx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jnz .again
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync MmioEpilogue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.s_szTestName:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db TMPL_MODE_STR, ', 8-bit read', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(BenchmarkMmioNop8Read)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Benchmarks: OUT NOP, al
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; @uses nothing
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(BenchmarkMmioNop8Write)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync MmioPrologue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.again:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov [xBX], al
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov [xBX], al
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov [xBX], al
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov [xBX], al
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov [xBX], al
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync dec ecx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jnz .again
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync MmioEpilogue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.s_szTestName:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db TMPL_MODE_STR, ', 8-bit write', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(BenchmarkMmioNop8Write)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%undef MmioPrologue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%undef MmioEpilogue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Do the MMIO tests for this mode.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; @uses nothing
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINCODELOW
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBITS 16
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(BenchmarkMmioNop_rm)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(Bs2IsModeSupported_rm)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jz .done
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(Bs2EnterMode_rm)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBITS TMPL_BITS
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(BenchmarkMmioNop32Read)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(BenchmarkMmioNop32Write)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%ifndef QUICK_TEST
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(BenchmarkMmioNop16Read)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(BenchmarkMmioNop16Write)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(BenchmarkMmioNop8Read)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(BenchmarkMmioNop8Write)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%endif
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(Bs2ExitMode)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBITS 16
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.done:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ret
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(BenchmarkMmioNop_rm)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncTMPL_BEGINCODE
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBITS TMPL_BITS
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%include "bootsector2-template-footer.mac"
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync