cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; $Id$
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;; @file
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; bootsector2 test1 - multi mode template.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync; Copyright (C) 2007-2015 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
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync;;
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync; Run the Read CR4 benchmark for this mode.
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync;
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync; @uses nothing
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync;
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsyncBEGINCODELOW
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsyncBITS 16
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsyncBEGINPROC TMPL_NM(BenchmarkRdCr4_rm)
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync call TMPL_NM(Bs2IsModeSupported_rm)
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync jz .done
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync call TMPL_NM(Bs2EnterMode_rm)
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsyncBITS TMPL_BITS
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync push xBP
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync mov xBP, xSP
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync push sAX
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync push sBX
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync push sCX
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync push sDX
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync push sDI
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync sub sSP, 20h
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync ; Get the current time.
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync mov xAX, xSP
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync call TMPL_NM_CMN(GetNanoTS)
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync ; Do the test.
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync mov edi, TEST_INSTRUCTION_COUNT_READCR4 / 4
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync.again:
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync mov sAX, cr4
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync mov sAX, cr4
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync mov sAX, cr4
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync mov sAX, cr4
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync dec edi
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync jnz .again
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync ; Calc the elapsed time and report the result.
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync mov xAX, xSP
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync call TMPL_NM_CMN(GetElapsedNanoTS)
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync mov xCX, .s_szTestName
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync mov edx, TEST_INSTRUCTION_COUNT_READCR4
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync mov xAX, xSP
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync call TMPL_NM_CMN(ReportResult)
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync add sSP, 20h
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync pop sDI
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync pop sDX
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync pop sCX
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync pop sBX
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync pop sAX
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync leave
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync call TMPL_NM(Bs2ExitMode)
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsyncBITS 16
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync.done:
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync ret
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync.s_szTestName:
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync db TMPL_MODE_STR, ', Read CR4', 0
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsyncENDPROC TMPL_NM(BenchmarkRdCr4_rm)
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsyncTMPL_BEGINCODE
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsyncBITS TMPL_BITS
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync
3cb585d34a2e3df35c60e45e7182dde65f3a6c22vboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Prologue for the I/O port tests.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%ifndef HaveIoPortPrologue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%define HaveIoPortPrologue
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync%macro IoPortPrologue 2
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.
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync mov dx, %2
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync mov ecx, (%1) / 5
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%endmacro
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%endif
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Epilogue for the I/O port tests.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%ifndef HaveIoPortEpilogue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%define HaveIoPortEpilogue
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync%macro IoPortEpilogue 1
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
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync mov edx, (%1)
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)
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync IoPortPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_IOPORT_NOP
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
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync IoPortEpilogue TEST_INSTRUCTION_COUNT_IO
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)
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync IoPortPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_IOPORT_NOP
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
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync IoPortEpilogue TEST_INSTRUCTION_COUNT_IO
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)
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync IoPortPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_IOPORT_NOP
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
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync IoPortEpilogue TEST_INSTRUCTION_COUNT_IO
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)
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync IoPortPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_IOPORT_NOP
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
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync IoPortEpilogue TEST_INSTRUCTION_COUNT_IO
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)
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync IoPortPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_IOPORT_NOP
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
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync IoPortEpilogue TEST_INSTRUCTION_COUNT_IO
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)
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync IoPortPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_IOPORT_NOP
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
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync IoPortEpilogue TEST_INSTRUCTION_COUNT_IO
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.s_szTestName:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db TMPL_MODE_STR, ', 8-bit OUT', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(BenchmarkIoPortNop8Out)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync;;
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync; Benchmarks: IN eax, NOP_R3
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync;
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync; @uses nothing
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync;
da76e955a98bc0c8a04904c8803159043dd6956dvboxsyncBEGINPROC TMPL_NM(BenchmarkIoPortRing3Nop32In)
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync IoPortPrologue TEST_INSTRUCTION_COUNT_IO / 4, VMMDEV_TESTING_IOPORT_NOP_R3
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync.again:
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync in eax, dx
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync in eax, dx
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync in eax, dx
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync in eax, dx
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync in eax, dx
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync dec ecx
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync jnz .again
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync IoPortEpilogue TEST_INSTRUCTION_COUNT_IO / 4
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync.s_szTestName:
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync db TMPL_MODE_STR, ', 32-bit IN-to-ring-3', 0
da76e955a98bc0c8a04904c8803159043dd6956dvboxsyncENDPROC TMPL_NM(BenchmarkIoPortRing3Nop32In)
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync;;
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync; Benchmarks: OUT NOP_R3, eax
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync;
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync; @uses nothing
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync;
da76e955a98bc0c8a04904c8803159043dd6956dvboxsyncBEGINPROC TMPL_NM(BenchmarkIoPortRing3Nop32Out)
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync IoPortPrologue TEST_INSTRUCTION_COUNT_IO / 4, VMMDEV_TESTING_IOPORT_NOP_R3
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync.again:
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync out dx, eax
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync out dx, eax
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync out dx, eax
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync out dx, eax
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync out dx, eax
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync dec ecx
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync jnz .again
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync IoPortEpilogue TEST_INSTRUCTION_COUNT_IO / 4
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync.s_szTestName:
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync db TMPL_MODE_STR, ', 32-bit OUT-to-ring-3', 0
da76e955a98bc0c8a04904c8803159043dd6956dvboxsyncENDPROC TMPL_NM(BenchmarkIoPortRing3Nop32Out)
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync
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
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync call TMPL_NM(BenchmarkIoPortRing3Nop32In)
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync call TMPL_NM(BenchmarkIoPortRing3Nop32Out)
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
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync%macro MmioPrologue 2
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
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync mov ebx, VMMDEV_TESTING_MMIO_RM_OFF(%2)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync %else
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov bx, BS2_SEL_MMIO16
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ds, bx
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync mov ebx, %2 - BS2_SEL_MMIO16_BASE
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync %endif
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%else
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync mov xBX, %2
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%endif
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync mov ecx, (%1) / 5
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%endmacro
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%endif
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Epilogue for the MMIO tests.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%ifndef HaveMmioEpilogue
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%define HaveMmioEpilogue
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync%macro MmioEpilogue 1
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
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync mov edx, (%1)
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)
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync MmioPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_MMIO_NOP
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
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.s_szTestName:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db TMPL_MODE_STR, ', 32-bit read', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(BenchmarkMmioNop32Read)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync; Benchmarks: MOV [NOP], eax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; @uses nothing
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(BenchmarkMmioNop32Write)
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync MmioPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_MMIO_NOP
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
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO
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)
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync MmioPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_MMIO_NOP
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
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.s_szTestName:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db TMPL_MODE_STR, ', 16-bit read', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(BenchmarkMmioNop16Read)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync; Benchmarks: MOV [NOP], ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; @uses nothing
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(BenchmarkMmioNop16Write)
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync MmioPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_MMIO_NOP
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
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO
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)
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync MmioPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_MMIO_NOP
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
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.s_szTestName:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db TMPL_MODE_STR, ', 8-bit read', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(BenchmarkMmioNop8Read)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync; Benchmarks: MOV [NOP], al
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; @uses nothing
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(BenchmarkMmioNop8Write)
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync MmioPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_MMIO_NOP
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
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.s_szTestName:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db TMPL_MODE_STR, ', 8-bit write', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(BenchmarkMmioNop8Write)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync;;
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync; Benchmarks: MOV eax, [NOP_R3]
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync;
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync; @uses nothing
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync;
da76e955a98bc0c8a04904c8803159043dd6956dvboxsyncBEGINPROC TMPL_NM(BenchmarkMmioRing3Nop32Read)
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync MmioPrologue TEST_INSTRUCTION_COUNT_IO / 4, VMMDEV_TESTING_MMIO_NOP_R3
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync.again:
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync mov eax, [sBX]
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync mov eax, [sBX]
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync mov eax, [sBX]
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync mov eax, [sBX]
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync mov eax, [sBX]
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync dec ecx
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync jnz .again
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO / 4
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync.s_szTestName:
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync db TMPL_MODE_STR, ', 32-bit read-to-ring-3', 0
da76e955a98bc0c8a04904c8803159043dd6956dvboxsyncENDPROC TMPL_NM(BenchmarkMmioRing3Nop32Read)
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync;;
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync; Benchmarks: MOV [NOP_R3], eax
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync;
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync; @uses nothing
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync;
da76e955a98bc0c8a04904c8803159043dd6956dvboxsyncBEGINPROC TMPL_NM(BenchmarkMmioRing3Nop32Write)
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync MmioPrologue TEST_INSTRUCTION_COUNT_IO / 4, VMMDEV_TESTING_MMIO_NOP_R3
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync.again:
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync mov [sBX], eax
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync mov [sBX], eax
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync mov [sBX], eax
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync mov [sBX], eax
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync mov [sBX], eax
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync dec ecx
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync jnz .again
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO / 4
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync.s_szTestName:
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync db TMPL_MODE_STR, ', 32-bit write-to-ring-3', 0
da76e955a98bc0c8a04904c8803159043dd6956dvboxsyncENDPROC TMPL_NM(BenchmarkMmioRing3Nop32Write)
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync
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
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync call TMPL_NM(BenchmarkMmioRing3Nop32Read)
da76e955a98bc0c8a04904c8803159043dd6956dvboxsync call TMPL_NM(BenchmarkMmioRing3Nop32Write)
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