VirtualBox

source: vbox/trunk/src/VBox/ValidationKit/bootsectors/bootsector2-test1-template.mac

Last change on this file was 106061, checked in by vboxsync, 9 days ago

Copyright year updates by scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 18.7 KB
Line 
1; $Id: bootsector2-test1-template.mac 106061 2024-09-16 14:03:52Z vboxsync $
2;; @file
3; bootsector2 test1 - multi mode template.
4;
5
6;
7; Copyright (C) 2007-2024 Oracle and/or its affiliates.
8;
9; This file is part of VirtualBox base platform packages, as
10; available from https://www.virtualbox.org.
11;
12; This program is free software; you can redistribute it and/or
13; modify it under the terms of the GNU General Public License
14; as published by the Free Software Foundation, in version 3 of the
15; License.
16;
17; This program is distributed in the hope that it will be useful, but
18; WITHOUT ANY WARRANTY; without even the implied warranty of
19; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20; General Public License for more details.
21;
22; You should have received a copy of the GNU General Public License
23; along with this program; if not, see <https://www.gnu.org/licenses>.
24;
25; The contents of this file may alternatively be used under the terms
26; of the Common Development and Distribution License Version 1.0
27; (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
28; in the VirtualBox distribution, in which case the provisions of the
29; CDDL are applicable instead of those of the GPL.
30;
31; You may elect to license modified versions of this file under the
32; terms and conditions of either the GPL or the CDDL or both.
33;
34; SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
35;
36
37
38%include "bootsector2-template-header.mac"
39
40;;
41; Run the CPUID benchmark for this mode.
42;
43; @uses nothing
44;
45BEGINCODELOW
46BITS 16
47BEGINPROC TMPL_NM(BenchmarkFlushCmd_rm)
48 call TMPL_NM(Bs2IsModeSupported_rm)
49 jz .done
50 call TMPL_NM(Bs2EnterMode_rm)
51BITS TMPL_BITS
52 push xBP
53 mov xBP, xSP
54 push sAX
55 push sBX
56 push sCX
57 push sDX
58 push sDI
59 sub sSP, 20h
60
61 ; Get the current time.
62 mov xAX, xSP
63 call TMPL_NM_CMN(GetNanoTS)
64
65 ; Do the test.
66 mov edi, TEST_INSTRUCTION_COUNT_IO / 4
67%define MSR_IA32_FLUSH_CMD 0x10b
68%define MSR_IA32_FLUSH_CMD_F_L1D RT_BIT_32(0)
69 mov ecx, MSR_IA32_FLUSH_CMD
70 mov eax, MSR_IA32_FLUSH_CMD_F_L1D
71 xor edx, edx
72.again:
73 wrmsr
74 wrmsr
75 wrmsr
76 wrmsr
77 dec edi
78 jnz .again
79
80 ; Calc the elapsed time and report the result.
81 mov xAX, xSP
82 call TMPL_NM_CMN(GetElapsedNanoTS)
83
84 mov xCX, .s_szTestName
85 mov edx, TEST_INSTRUCTION_COUNT_IO
86 mov xAX, xSP
87 call TMPL_NM_CMN(ReportResult)
88
89 add sSP, 20h
90 pop sDI
91 pop sDX
92 pop sCX
93 pop sBX
94 pop sAX
95 leave
96
97 call TMPL_NM(Bs2ExitMode)
98BITS 16
99.done:
100 ret
101
102.s_szTestName:
103 db TMPL_MODE_STR, ', FLUSH_CMD', 0
104ENDPROC TMPL_NM(BenchmarkFlushCmd_rm)
105
106TMPL_BEGINCODE
107BITS TMPL_BITS
108
109
110;;
111; Run the CPUID benchmark for this mode.
112;
113; @uses nothing
114;
115BEGINCODELOW
116BITS 16
117BEGINPROC TMPL_NM(BenchmarkCpuId_rm)
118 call TMPL_NM(Bs2IsModeSupported_rm)
119 jz .done
120 call TMPL_NM(Bs2EnterMode_rm)
121BITS TMPL_BITS
122 push xBP
123 mov xBP, xSP
124 push sAX
125 push sBX
126 push sCX
127 push sDX
128 push sDI
129 sub sSP, 20h
130
131 ; Get the current time.
132 mov xAX, xSP
133 call TMPL_NM_CMN(GetNanoTS)
134
135 ; Do the test.
136 mov edi, TEST_INSTRUCTION_COUNT_CPUID / 4
137.again:
138 mov eax, 1
139 cpuid
140 mov eax, 1
141 cpuid
142 mov eax, 1
143 cpuid
144 mov eax, 1
145 cpuid
146 dec edi
147 jnz .again
148
149 ; Calc the elapsed time and report the result.
150 mov xAX, xSP
151 call TMPL_NM_CMN(GetElapsedNanoTS)
152
153 mov xCX, .s_szTestName
154 mov edx, TEST_INSTRUCTION_COUNT_CPUID
155 mov xAX, xSP
156 call TMPL_NM_CMN(ReportResult)
157
158 add sSP, 20h
159 pop sDI
160 pop sDX
161 pop sCX
162 pop sBX
163 pop sAX
164 leave
165
166 call TMPL_NM(Bs2ExitMode)
167BITS 16
168.done:
169 ret
170
171.s_szTestName:
172 db TMPL_MODE_STR, ', CPUID', 0
173ENDPROC TMPL_NM(BenchmarkCpuId_rm)
174
175TMPL_BEGINCODE
176BITS TMPL_BITS
177
178
179;;
180; Run the RDTSC benchmark for this mode.
181;
182; @uses nothing
183;
184BEGINCODELOW
185BITS 16
186BEGINPROC TMPL_NM(BenchmarkRdTsc_rm)
187 call TMPL_NM(Bs2IsModeSupported_rm)
188 jz .done
189 call TMPL_NM(Bs2EnterMode_rm)
190BITS TMPL_BITS
191 push xBP
192 mov xBP, xSP
193 push sAX
194 push sBX
195 push sCX
196 push sDX
197 push sDI
198 sub sSP, 20h
199
200 ; Get the current time.
201 mov xAX, xSP
202 call TMPL_NM_CMN(GetNanoTS)
203
204 ; Do the test.
205 mov edi, TEST_INSTRUCTION_COUNT_RDTSC / 4
206.again:
207 rdtsc
208 rdtsc
209 rdtsc
210 rdtsc
211 dec edi
212 jnz .again
213
214 ; Calc the elapsed time and report the result.
215 mov xAX, xSP
216 call TMPL_NM_CMN(GetElapsedNanoTS)
217
218 mov xCX, .s_szTestName
219 mov edx, TEST_INSTRUCTION_COUNT_RDTSC
220 mov xAX, xSP
221 call TMPL_NM_CMN(ReportResult)
222
223 add sSP, 20h
224 pop sDI
225 pop sDX
226 pop sCX
227 pop sBX
228 pop sAX
229 leave
230
231 call TMPL_NM(Bs2ExitMode)
232BITS 16
233.done:
234 ret
235
236.s_szTestName:
237 db TMPL_MODE_STR, ', RDTSC', 0
238ENDPROC TMPL_NM(BenchmarkRdTsc_rm)
239
240TMPL_BEGINCODE
241BITS TMPL_BITS
242
243
244;;
245; Run the Read CR4 benchmark for this mode.
246;
247; @uses nothing
248;
249BEGINCODELOW
250BITS 16
251BEGINPROC TMPL_NM(BenchmarkRdCr4_rm)
252 call TMPL_NM(Bs2IsModeSupported_rm)
253 jz .done
254 call TMPL_NM(Bs2EnterMode_rm)
255BITS TMPL_BITS
256 push xBP
257 mov xBP, xSP
258 push sAX
259 push sBX
260 push sCX
261 push sDX
262 push sDI
263 sub sSP, 20h
264
265 ; Get the current time.
266 mov xAX, xSP
267 call TMPL_NM_CMN(GetNanoTS)
268
269 ; Do the test.
270 mov edi, TEST_INSTRUCTION_COUNT_READCR4 / 4
271.again:
272 mov sAX, cr4
273 mov sAX, cr4
274 mov sAX, cr4
275 mov sAX, cr4
276 dec edi
277 jnz .again
278
279 ; Calc the elapsed time and report the result.
280 mov xAX, xSP
281 call TMPL_NM_CMN(GetElapsedNanoTS)
282
283 mov xCX, .s_szTestName
284 mov edx, TEST_INSTRUCTION_COUNT_READCR4
285 mov xAX, xSP
286 call TMPL_NM_CMN(ReportResult)
287
288 add sSP, 20h
289 pop sDI
290 pop sDX
291 pop sCX
292 pop sBX
293 pop sAX
294 leave
295
296 call TMPL_NM(Bs2ExitMode)
297BITS 16
298.done:
299 ret
300
301.s_szTestName:
302 db TMPL_MODE_STR, ', Read CR4', 0
303ENDPROC TMPL_NM(BenchmarkRdCr4_rm)
304
305TMPL_BEGINCODE
306BITS TMPL_BITS
307
308
309;;
310; Prologue for the I/O port tests.
311%ifndef HaveIoPortPrologue
312%define HaveIoPortPrologue
313%macro IoPortPrologue 2
314 push xBP
315 mov xBP, xSP
316 push sAX
317 push sDX
318 push sCX
319 sub xSP, 20h
320
321 ; Get the current time.
322 mov xAX, xSP
323 call TMPL_NM_CMN(GetNanoTS)
324
325 ; Do the test.
326 mov dx, %2
327 mov ecx, (%1) / 5
328%endmacro
329%endif
330
331
332;;
333; Epilogue for the I/O port tests.
334%ifndef HaveIoPortEpilogue
335%define HaveIoPortEpilogue
336%macro IoPortEpilogue 1
337 ; Calc the elapsed time and report the result.
338 mov xAX, xSP
339 call TMPL_NM_CMN(GetElapsedNanoTS)
340
341 mov xCX, .s_szTestName
342 mov edx, (%1)
343 mov xAX, xSP
344 call TMPL_NM_CMN(ReportResult)
345
346 add xSP, 20h
347 pop sCX
348 pop sDX
349 pop sAX
350 leave
351 ret
352%endmacro
353%endif
354
355
356;;
357; Benchmarks: IN eax, NOP
358;
359; @uses nothing
360;
361BEGINPROC TMPL_NM(BenchmarkIoPortNop32In)
362 IoPortPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_IOPORT_NOP
363.again:
364 in eax, dx
365 in eax, dx
366 in eax, dx
367 in eax, dx
368 in eax, dx
369 dec ecx
370 jnz .again
371 IoPortEpilogue TEST_INSTRUCTION_COUNT_IO
372.s_szTestName:
373 db TMPL_MODE_STR, ', 32-bit IN', 0
374ENDPROC TMPL_NM(BenchmarkIoPortNop32In)
375
376
377;;
378; Benchmarks: OUT NOP, eax
379;
380; @uses nothing
381;
382BEGINPROC TMPL_NM(BenchmarkIoPortNop32Out)
383 IoPortPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_IOPORT_NOP
384.again:
385 out dx, eax
386 out dx, eax
387 out dx, eax
388 out dx, eax
389 out dx, eax
390 dec ecx
391 jnz .again
392 IoPortEpilogue TEST_INSTRUCTION_COUNT_IO
393.s_szTestName:
394 db TMPL_MODE_STR, ', 32-bit OUT', 0
395ENDPROC TMPL_NM(BenchmarkIoPortNop32Out)
396
397
398;;
399; Benchmarks: IN ax, NOP
400;
401; @uses nothing
402;
403BEGINPROC TMPL_NM(BenchmarkIoPortNop16In)
404 IoPortPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_IOPORT_NOP
405.again:
406 in ax, dx
407 in ax, dx
408 in ax, dx
409 in ax, dx
410 in ax, dx
411 dec ecx
412 jnz .again
413 IoPortEpilogue TEST_INSTRUCTION_COUNT_IO
414.s_szTestName:
415 db TMPL_MODE_STR, ', 16-bit IN', 0
416ENDPROC TMPL_NM(BenchmarkIoPortNop16In)
417
418
419;;
420; Benchmarks: OUT NOP, ax
421;
422; @uses nothing
423;
424BEGINPROC TMPL_NM(BenchmarkIoPortNop16Out)
425 IoPortPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_IOPORT_NOP
426.again:
427 out dx, ax
428 out dx, ax
429 out dx, ax
430 out dx, ax
431 out dx, ax
432 dec ecx
433 jnz .again
434 IoPortEpilogue TEST_INSTRUCTION_COUNT_IO
435.s_szTestName:
436 db TMPL_MODE_STR, ', 16-bit OUT', 0
437ENDPROC TMPL_NM(BenchmarkIoPortNop16Out)
438
439
440;;
441; Benchmarks: IN al, NOP
442;
443; @uses nothing
444;
445BEGINPROC TMPL_NM(BenchmarkIoPortNop8In)
446 IoPortPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_IOPORT_NOP
447.again:
448 in al, dx
449 in al, dx
450 in al, dx
451 in al, dx
452 in al, dx
453 dec ecx
454 jnz .again
455 IoPortEpilogue TEST_INSTRUCTION_COUNT_IO
456.s_szTestName:
457 db TMPL_MODE_STR, ', 8-bit IN', 0
458ENDPROC TMPL_NM(BenchmarkIoPortNop8In)
459
460
461;;
462; Benchmarks: OUT NOP, al
463;
464; @uses nothing
465;
466BEGINPROC TMPL_NM(BenchmarkIoPortNop8Out)
467 IoPortPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_IOPORT_NOP
468.again:
469 out dx, al
470 out dx, al
471 out dx, al
472 out dx, al
473 out dx, al
474 dec ecx
475 jnz .again
476 IoPortEpilogue TEST_INSTRUCTION_COUNT_IO
477.s_szTestName:
478 db TMPL_MODE_STR, ', 8-bit OUT', 0
479ENDPROC TMPL_NM(BenchmarkIoPortNop8Out)
480
481
482;;
483; Benchmarks: IN eax, NOP_R3
484;
485; @uses nothing
486;
487BEGINPROC TMPL_NM(BenchmarkIoPortRing3Nop32In)
488 IoPortPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_IOPORT_NOP_R3
489.again:
490 in eax, dx
491 in eax, dx
492 in eax, dx
493 in eax, dx
494 in eax, dx
495 dec ecx
496 jnz .again
497 IoPortEpilogue TEST_INSTRUCTION_COUNT_IO
498.s_szTestName:
499 db TMPL_MODE_STR, ', 32-bit IN-to-ring-3', 0
500ENDPROC TMPL_NM(BenchmarkIoPortRing3Nop32In)
501
502
503;;
504; Benchmarks: OUT NOP_R3, eax
505;
506; @uses nothing
507;
508BEGINPROC TMPL_NM(BenchmarkIoPortRing3Nop32Out)
509 IoPortPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_IOPORT_NOP_R3
510.again:
511 out dx, eax
512 out dx, eax
513 out dx, eax
514 out dx, eax
515 out dx, eax
516 dec ecx
517 jnz .again
518 IoPortEpilogue TEST_INSTRUCTION_COUNT_IO
519.s_szTestName:
520 db TMPL_MODE_STR, ', 32-bit OUT-to-ring-3', 0
521ENDPROC TMPL_NM(BenchmarkIoPortRing3Nop32Out)
522
523
524%undef IoPortPrologue
525%undef IoPortEpilogue
526
527
528;;
529; Run the I/O benchmarks for this mode.
530;
531; @uses nothing
532;
533BEGINCODELOW
534BITS 16
535BEGINPROC TMPL_NM(BenchmarkIoPortNop_rm)
536 call TMPL_NM(Bs2IsModeSupported_rm)
537 jz .done
538 call TMPL_NM(Bs2EnterMode_rm)
539BITS TMPL_BITS
540
541 call TMPL_NM(BenchmarkIoPortNop32In)
542 call TMPL_NM(BenchmarkIoPortNop32Out)
543%ifndef QUICK_TEST
544 call TMPL_NM(BenchmarkIoPortNop16In)
545 call TMPL_NM(BenchmarkIoPortNop16Out)
546 call TMPL_NM(BenchmarkIoPortNop8In)
547 call TMPL_NM(BenchmarkIoPortNop8Out)
548%endif
549 call TMPL_NM(BenchmarkIoPortRing3Nop32In)
550 call TMPL_NM(BenchmarkIoPortRing3Nop32Out)
551
552 call TMPL_NM(Bs2ExitMode)
553BITS 16
554.done:
555 ret
556ENDPROC TMPL_NM(BenchmarkIoPortNop_rm)
557
558TMPL_BEGINCODE
559BITS TMPL_BITS
560
561
562
563
564;;
565; Prologue for the MMIO tests.
566%ifndef HaveMmioPrologue
567%define HaveMmioPrologue
568%macro MmioPrologue 2
569 push xBP
570 mov xBP, xSP
571 push sAX
572 push sDX
573 push sCX
574 push sBX
575 sub xSP, 20h
576
577 ; Get the current time.
578 mov xAX, xSP
579 call TMPL_NM_CMN(GetNanoTS)
580
581 ; Do the test - X million 32-bit IN instructions.
582%ifdef TMPL_16BIT
583 mov dx, ds ; save ds
584 %ifdef TMPL_RM
585 mov bx, VMMDEV_TESTING_MMIO_RM_SEL
586 mov ds, bx
587 mov ebx, VMMDEV_TESTING_MMIO_RM_OFF(%2)
588 %else
589 mov bx, BS2_SEL_MMIO16
590 mov ds, bx
591 mov ebx, %2 - BS2_SEL_MMIO16_BASE
592 %endif
593%else
594 mov xBX, %2
595%endif
596 mov ecx, (%1) / 5
597%endmacro
598%endif
599
600;;
601; Epilogue for the MMIO tests.
602%ifndef HaveMmioEpilogue
603%define HaveMmioEpilogue
604%macro MmioEpilogue 1
605%ifdef TMPL_16BIT
606 mov ds, dx ; restore ds
607%endif
608
609 ; Calc the elapsed time and report the result.
610 mov xAX, xSP
611 call TMPL_NM_CMN(GetElapsedNanoTS)
612
613 mov xCX, .s_szTestName
614 mov edx, (%1)
615 mov xAX, xSP
616 call TMPL_NM_CMN(ReportResult)
617
618 add xSP, 20h
619 pop sBX
620 pop sCX
621 pop sDX
622 pop sAX
623 leave
624 ret
625%endmacro
626%endif
627
628
629;;
630; Benchmarks: MOV eax, [NOP]
631;
632; @uses nothing
633;
634BEGINPROC TMPL_NM(BenchmarkMmioNop32Read)
635 MmioPrologue TEST_INSTRUCTION_COUNT_MMIO, VMMDEV_TESTING_MMIO_NOP
636.again:
637 mov eax, [sBX]
638 mov eax, [sBX]
639 mov eax, [sBX]
640 mov eax, [sBX]
641 mov eax, [sBX]
642 dec ecx
643 jnz .again
644 MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO
645.s_szTestName:
646 db TMPL_MODE_STR, ', 32-bit read', 0
647ENDPROC TMPL_NM(BenchmarkMmioNop32Read)
648
649
650;;
651; Benchmarks: MOV [NOP], eax
652;
653; @uses nothing
654;
655BEGINPROC TMPL_NM(BenchmarkMmioNop32Write)
656 MmioPrologue TEST_INSTRUCTION_COUNT_MMIO, VMMDEV_TESTING_MMIO_NOP
657.again:
658 mov [sBX], eax
659 mov [sBX], eax
660 mov [sBX], eax
661 mov [sBX], eax
662 mov [sBX], eax
663 dec ecx
664 jnz .again
665 MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO
666.s_szTestName:
667 db TMPL_MODE_STR, ', 32-bit write', 0
668ENDPROC TMPL_NM(BenchmarkMmioNop32Write)
669
670
671;;
672; Benchmarks: MOV ax, [NOP]
673;
674; @uses nothing
675;
676BEGINPROC TMPL_NM(BenchmarkMmioNop16Read)
677 MmioPrologue TEST_INSTRUCTION_COUNT_MMIO, VMMDEV_TESTING_MMIO_NOP
678.again:
679 mov ax, [xBX]
680 mov ax, [xBX]
681 mov ax, [xBX]
682 mov ax, [xBX]
683 mov ax, [xBX]
684 dec ecx
685 jnz .again
686 MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO
687.s_szTestName:
688 db TMPL_MODE_STR, ', 16-bit read', 0
689ENDPROC TMPL_NM(BenchmarkMmioNop16Read)
690
691
692;;
693; Benchmarks: MOV [NOP], ax
694;
695; @uses nothing
696;
697BEGINPROC TMPL_NM(BenchmarkMmioNop16Write)
698 MmioPrologue TEST_INSTRUCTION_COUNT_MMIO, VMMDEV_TESTING_MMIO_NOP
699.again:
700 mov [xBX], ax
701 mov [xBX], ax
702 mov [xBX], ax
703 mov [xBX], ax
704 mov [xBX], ax
705 dec ecx
706 jnz .again
707 MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO
708.s_szTestName:
709 db TMPL_MODE_STR, ', 16-bit write', 0
710ENDPROC TMPL_NM(BenchmarkMmioNop16Write)
711
712
713;;
714; Benchmarks: MOV al, [NOP]
715;
716; @uses nothing
717;
718BEGINPROC TMPL_NM(BenchmarkMmioNop8Read)
719 MmioPrologue TEST_INSTRUCTION_COUNT_MMIO, VMMDEV_TESTING_MMIO_NOP
720.again:
721 mov al, [xBX]
722 mov al, [xBX]
723 mov al, [xBX]
724 mov al, [xBX]
725 mov al, [xBX]
726 dec ecx
727 jnz .again
728 MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO
729.s_szTestName:
730 db TMPL_MODE_STR, ', 8-bit read', 0
731ENDPROC TMPL_NM(BenchmarkMmioNop8Read)
732
733
734;;
735; Benchmarks: MOV [NOP], al
736;
737; @uses nothing
738;
739BEGINPROC TMPL_NM(BenchmarkMmioNop8Write)
740 MmioPrologue TEST_INSTRUCTION_COUNT_MMIO, VMMDEV_TESTING_MMIO_NOP
741.again:
742 mov [xBX], al
743 mov [xBX], al
744 mov [xBX], al
745 mov [xBX], al
746 mov [xBX], al
747 dec ecx
748 jnz .again
749 MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO
750.s_szTestName:
751 db TMPL_MODE_STR, ', 8-bit write', 0
752ENDPROC TMPL_NM(BenchmarkMmioNop8Write)
753
754
755;;
756; Benchmarks: MOV eax, [NOP_R3]
757;
758; @uses nothing
759;
760BEGINPROC TMPL_NM(BenchmarkMmioRing3Nop32Read)
761 MmioPrologue TEST_INSTRUCTION_COUNT_MMIO, VMMDEV_TESTING_MMIO_NOP_R3
762.again:
763 mov eax, [sBX]
764 mov eax, [sBX]
765 mov eax, [sBX]
766 mov eax, [sBX]
767 mov eax, [sBX]
768 dec ecx
769 jnz .again
770 MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO
771.s_szTestName:
772 db TMPL_MODE_STR, ', 32-bit read-to-ring-3', 0
773ENDPROC TMPL_NM(BenchmarkMmioRing3Nop32Read)
774
775
776;;
777; Benchmarks: MOV [NOP_R3], eax
778;
779; @uses nothing
780;
781BEGINPROC TMPL_NM(BenchmarkMmioRing3Nop32Write)
782 MmioPrologue TEST_INSTRUCTION_COUNT_MMIO, VMMDEV_TESTING_MMIO_NOP_R3
783.again:
784 mov [sBX], eax
785 mov [sBX], eax
786 mov [sBX], eax
787 mov [sBX], eax
788 mov [sBX], eax
789 dec ecx
790 jnz .again
791 MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO
792.s_szTestName:
793 db TMPL_MODE_STR, ', 32-bit write-to-ring-3', 0
794ENDPROC TMPL_NM(BenchmarkMmioRing3Nop32Write)
795
796
797%undef MmioPrologue
798%undef MmioEpilogue
799
800
801;;
802; Do the MMIO tests for this mode.
803;
804; @uses nothing
805;
806BEGINCODELOW
807BITS 16
808BEGINPROC TMPL_NM(BenchmarkMmioNop_rm)
809 call TMPL_NM(Bs2IsModeSupported_rm)
810 jz .done
811 call TMPL_NM(Bs2EnterMode_rm)
812BITS TMPL_BITS
813
814 call TMPL_NM(BenchmarkMmioNop32Read)
815 call TMPL_NM(BenchmarkMmioNop32Write)
816%ifndef QUICK_TEST
817 call TMPL_NM(BenchmarkMmioNop16Read)
818 call TMPL_NM(BenchmarkMmioNop16Write)
819 call TMPL_NM(BenchmarkMmioNop8Read)
820 call TMPL_NM(BenchmarkMmioNop8Write)
821%endif
822 call TMPL_NM(BenchmarkMmioRing3Nop32Read)
823 call TMPL_NM(BenchmarkMmioRing3Nop32Write)
824
825 call TMPL_NM(Bs2ExitMode)
826BITS 16
827.done:
828 ret
829ENDPROC TMPL_NM(BenchmarkMmioNop_rm)
830
831TMPL_BEGINCODE
832BITS TMPL_BITS
833
834
835%include "bootsector2-template-footer.mac"
836
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette