- Timestamp:
- Oct 24, 2019 1:37:27 AM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 134229
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllCImplStrInstr.cpp.h
r80641 r81501 551 551 /* If unaligned, we drop thru and do the page crossing access 552 552 below. Otherwise, do the next page. */ 553 if (!(uVirtAddr & (OP_SIZE - 1)))553 if (!(uVirtAddr & (OP_SIZE / 8 - 1))) 554 554 { 555 555 IEM_CHECK_FF_YIELD_REPSTR_MAYBE_RETURN(pVM, pVCpu, uEFlags); … … 683 683 /* If unaligned, we drop thru and do the page crossing access 684 684 below. Otherwise, do the next page. */ 685 if (!(uVirtAddr & (OP_SIZE - 1)))685 if (!(uVirtAddr & (OP_SIZE / 8 - 1))) 686 686 { 687 687 IEM_CHECK_FF_YIELD_REPSTR_MAYBE_RETURN(pVM, pVCpu, uEFlags); … … 984 984 /* If unaligned, we drop thru and do the page crossing access 985 985 below. Otherwise, do the next page. */ 986 if (!(uVirtAddr & (OP_SIZE - 1)))986 if (!(uVirtAddr & (OP_SIZE / 8 - 1))) 987 987 { 988 988 IEM_CHECK_FF_YIELD_REPSTR_MAYBE_RETURN(pVM, pVCpu, pVCpu->cpum.GstCtx.eflags.u); … … 990 990 } 991 991 cLeftPage = 0; 992 } 993 /* If we got an invalid physical address in the page table, just skip 994 ahead to the next page or the counter reaches zero. This crazy 995 optimization is for a buggy EFI firmware that's driving me nuts. */ 996 else if (rcStrict == VERR_PGM_PHYS_TLB_UNASSIGNED) 997 { 998 pVCpu->cpum.GstCtx.ADDR_rCX = uCounterReg -= cLeftPage; 999 pVCpu->cpum.GstCtx.ADDR_rDI = uAddrReg += cLeftPage * cbIncr; 1000 if (uCounterReg == 0) 1001 break; 1002 if (!(uVirtAddr & (OP_SIZE / 8 - 1))) 1003 { 1004 IEM_CHECK_FF_YIELD_REPSTR_MAYBE_RETURN(pVM, pVCpu, pVCpu->cpum.GstCtx.eflags.u); 1005 continue; 1006 } 992 1007 } 993 1008 } … … 1101 1116 /* If unaligned, we drop thru and do the page crossing access 1102 1117 below. Otherwise, do the next page. */ 1103 if (!(uVirtAddr & (OP_SIZE - 1)))1118 if (!(uVirtAddr & (OP_SIZE / 8 - 1))) 1104 1119 { 1105 1120 IEM_CHECK_FF_YIELD_REPSTR_MAYBE_RETURN(pVM, pVCpu, pVCpu->cpum.GstCtx.eflags.u); … … 1384 1399 if (uCounterReg == 0) 1385 1400 break; 1386 if (!(uVirtAddr & (OP_SIZE - 1)))1401 if (!(uVirtAddr & (OP_SIZE / 8 - 1))) 1387 1402 { 1388 1403 IEM_CHECK_FF_YIELD_REPSTR_MAYBE_RETURN(pVM, pVCpu, pVCpu->cpum.GstCtx.eflags.u); … … 1665 1680 /* If unaligned, we drop thru and do the page crossing access 1666 1681 below. Otherwise, do the next page. */ 1667 if (!(uVirtAddr & (OP_SIZE - 1)))1682 if (!(uVirtAddr & (OP_SIZE / 8 - 1))) 1668 1683 { 1669 1684 IEM_CHECK_FF_YIELD_REPSTR_MAYBE_RETURN(pVM, pVCpu, pVCpu->cpum.GstCtx.eflags.u);
Note:
See TracChangeset
for help on using the changeset viewer.