Changeset 66113 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Mar 15, 2017 2:32:28 PM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 114001
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsOneByte.cpp.h
r65959 r66113 52 52 * @opstats add_Eb_Gb 53 53 * @opgroup op_gen_arith_bin 54 * @optest op1=1 op2=1 -> op1=2 efl =of,sf,zf,af54 * @optest op1=1 op2=1 -> op1=2 efl&|=nv,pl,nz,na,pe 55 55 */ 56 56 FNIEMOP_DEF(iemOp_add_Eb_Gb) … … 101 101 * @opgroup op_gen_arith_bin 102 102 * @opflmodify of,sf,zf,af,pf,cf 103 * @optest op1=1 op2=1 -> op1=2 efl =of,sf,zf,af103 * @optest op1=1 op2=1 -> op1=2 efl&|=nv,pl,nz,na,pe 104 104 */ 105 105 FNIEMOP_DEF(iemOp_add_Al_Ib) … … 114 114 * @opgroup op_gen_arith_bin 115 115 * @opflmodify of,sf,zf,af,pf,cf 116 * @optest op1=1 op2=1 -> op1=2 efl =of,sf,zf,af116 * @optest op1=1 op2=1 -> op1=2 efl&|=nv,pl,nz,na,pe 117 117 */ 118 118 FNIEMOP_DEF(iemOp_add_eAX_Iz) … … 297 297 * @opfltest cf 298 298 * @opflmodify of,sf,zf,af,pf,cf 299 * @optest op1=1 op2=1 efl&~=cf -> op1=2 efl&|= of,sf,zf,af300 * @optest op1=1 op2=1 efl|=cf -> op1=3 efl&|= of,sf,zf,af299 * @optest op1=1 op2=1 efl&~=cf -> op1=2 efl&|=nc,nv,pl,nz,na,pe 300 * @optest op1=1 op2=1 efl|=cf -> op1=3 efl&|=nc,nv,pl,nz,na,po 301 301 */ 302 302 FNIEMOP_DEF(iemOp_adc_Eb_Gb) -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py
r65962 r66113 74 74 'X86_EFL_LIVE_MASK': 0x003f7fd5, # UINT32_C(0x003f7fd5) 75 75 'X86_EFL_RA1_MASK': 0x00000002, # RT_BIT_32(1) 76 }; 77 78 ## EFlags values allowed in \@opfltest, \@opflmodify, \@opflundef, \@opflset, and \@opflclear. 79 g_kdEFlagsMnemonics = { 80 # Debugger flag notation: 81 'ov': 'X86_EFL_OF', ##< OVerflow. 82 'nv': '!X86_EFL_OF', ##< No Overflow. 83 84 'ng': 'X86_EFL_SF', ##< NeGative (sign). 85 'pl': '!X86_EFL_SF', ##< PLuss (sign). 86 87 'zr': 'X86_EFL_ZF', ##< ZeRo. 88 'nz': '!X86_EFL_ZF', ##< No Zero. 89 90 'af': 'X86_EFL_AF', ##< Aux Flag. 91 'na': '!X86_EFL_AF', ##< No Aux. 92 93 'po': 'X86_EFL_PF', ##< Parity Pdd. 94 'pe': '!X86_EFL_PF', ##< Parity Even. 95 96 'cf': 'X86_EFL_CF', ##< Carry Flag. 97 'nc': '!X86_EFL_CF', ##< No Carry. 98 99 'ei': 'X86_EFL_IF', ##< Enabled Interrupts. 100 'di': '!X86_EFL_IF', ##< Disabled Interrupts. 101 102 'dn': 'X86_EFL_DF', ##< DowN (string op direction). 103 'up': '!X86_EFL_DF', ##< UP (string op direction). 104 105 'vip': 'X86_EFL_VIP', ##< Virtual Interrupt Pending. 106 'vif': 'X86_EFL_VIF', ##< Virtual Interrupt Flag. 107 'ac': 'X86_EFL_AC', ##< Alignment Check. 108 'vm': 'X86_EFL_VM', ##< Virtual-8086 Mode. 109 'rf': 'X86_EFL_RF', ##< Resume Flag. 110 'nt': 'X86_EFL_NT', ##< Nested Task. 111 'tf': 'X86_EFL_TF', ##< Trap flag. 112 113 # Reference manual notation: 114 'of': 'X86_EFL_OF', 115 'sf': 'X86_EFL_SF', 116 'zf': 'X86_EFL_ZF', 117 'pf': 'X86_EFL_PF', 118 'if': 'X86_EFL_IF', 119 'df': 'X86_EFL_DF', 120 'iopl': 'X86_EFL_IOPL', 121 'id': 'X86_EFL_ID', 76 122 }; 77 123 … … 588 634 fSet = 0; 589 635 for sFlag in sValue.split(','): 590 sConstant = SimpleParser.kdEFlags.get(sFlag, None);636 sConstant = g_kdEFlagsMnemonics.get(sFlag, None); 591 637 if sConstant is None: 592 638 raise self.BadValue('Unknown flag "%s" in "%s"' % (sFlag, sValue)) … … 643 689 # Flags. 644 690 'efl': ( 'efl', '', ), 691 'efl_undef': ( 'uint', '', ), 645 692 # 8-bit GPRs. 646 693 'al': ( 'uint', '', ), … … 823 870 824 871 def __init__(self, oInstr): # type: (InstructionTest, Instruction) 825 self.oInstr = oInstr; # type: InstructionTest826 self.aoInputs = []; 827 self.aoOutputs = []; 828 self.aoSelectors = []; # type: list(TestSelector)872 self.oInstr = oInstr; # type: InstructionTest 873 self.aoInputs = []; # type: TestInOut 874 self.aoOutputs = []; # type: TestInOut 875 self.aoSelectors = []; # type: list(TestSelector) 829 876 830 877 … … 975 1022 raise Exception('unsupported opcode byte spec "%s" for %s' % (sOpcode, self,)); 976 1023 1024 @staticmethod 1025 def _flagsToIntegerMask(asFlags): 1026 """ 1027 Returns the integer mask value for asFlags. 1028 """ 1029 uRet = 0; 1030 if asFlags: 1031 for sFlag in asFlags: 1032 sConstant = g_kdEFlagsMnemonics[sFlag]; 1033 assert sConstant[0] != '!', sConstant 1034 uRet |= g_kdX86EFlagsConstants[sConstant]; 1035 return uRet; 1036 1037 def getTestedFlagsMask(self): 1038 """ Returns asFlTest into a integer mask value """ 1039 return self._flagsToIntegerMask(self.asFlTest); 1040 1041 def getModifiedFlagsMask(self): 1042 """ Returns asFlModify into a integer mask value """ 1043 return self._flagsToIntegerMask(self.asFlModify); 1044 1045 def getUndefinedFlagsMask(self): 1046 """ Returns asFlUndefined into a integer mask value """ 1047 return self._flagsToIntegerMask(self.asFlUndefined); 1048 1049 def getSetFlagsMask(self): 1050 """ Returns asFlSet into a integer mask value """ 1051 return self._flagsToIntegerMask(self.asFlSet); 1052 1053 def getClearedFlagsMask(self): 1054 """ Returns asFlClear into a integer mask value """ 1055 return self._flagsToIntegerMask(self.asFlClear); 977 1056 978 1057 … … 1607 1686 return True; 1608 1687 1609 ## EFlags values allowed in \@opfltest, \@opflmodify, \@opflundef, \@opflset, and \@opflclear.1610 kdEFlags = {1611 # Debugger flag notation:1612 'ov': 'X86_EFL_OF', ##< OVerflow.1613 'nv': '!X86_EFL_OF', ##< No Overflow.1614 1615 'ng': 'X86_EFL_SF', ##< NeGative (sign).1616 'pl': '!X86_EFL_SF', ##< PLuss (sign).1617 1618 'zr': 'X86_EFL_ZF', ##< ZeRo.1619 'nz': '!X86_EFL_ZF', ##< No Zero.1620 1621 'af': 'X86_EFL_AF', ##< Aux Flag.1622 'na': '!X86_EFL_AF', ##< No Aux.1623 1624 'po': 'X86_EFL_PF', ##< Parity Pdd.1625 'pe': '!X86_EFL_PF', ##< Parity Even.1626 1627 'cf': 'X86_EFL_CF', ##< Carry Flag.1628 'nc': '!X86_EFL_CF', ##< No Carry.1629 1630 'ei': 'X86_EFL_IF', ##< Enabled Interrupts.1631 'di': '!X86_EFL_IF', ##< Disabled Interrupts.1632 1633 'dn': 'X86_EFL_DF', ##< DowN (string op direction).1634 'up': '!X86_EFL_DF', ##< UP (string op direction).1635 1636 'vip': 'X86_EFL_VIP', ##< Virtual Interrupt Pending.1637 'vif': 'X86_EFL_VIF', ##< Virtual Interrupt Flag.1638 'ac': 'X86_EFL_AC', ##< Alignment Check.1639 'vm': 'X86_EFL_VM', ##< Virtual-8086 Mode.1640 'rf': 'X86_EFL_RF', ##< Resume Flag.1641 'nt': 'X86_EFL_NT', ##< Nested Task.1642 'tf': 'X86_EFL_TF', ##< Trap flag.1643 1644 # Reference manual notation:1645 'of': 'X86_EFL_OF',1646 'sf': 'X86_EFL_SF',1647 'zf': 'X86_EFL_ZF',1648 'pf': 'X86_EFL_PF',1649 'if': 'X86_EFL_IF',1650 'df': 'X86_EFL_DF',1651 'iopl': 'X86_EFL_IOPL',1652 'id': 'X86_EFL_ID',1653 };1654 1655 1688 ## EFlags tag to Instruction attribute name. 1656 1689 kdOpFlagToAttr = { … … 1677 1710 fRc = True; 1678 1711 for iFlag, sFlag in enumerate(asFlags): 1679 if sFlag not in self.kdEFlags:1680 if sFlag.strip() in self.kdEFlags:1712 if sFlag not in g_kdEFlagsMnemonics: 1713 if sFlag.strip() in g_kdEFlagsMnemonics: 1681 1714 asFlags[iFlag] = sFlag.strip(); 1682 1715 else: … … 1990 2023 oItem = TestInOut(sField, sOp, sValue, sType); 1991 2024 else: 1992 self.errorComment(iTagLine, '%s: and-or %s value "%s" can only be used with the "="'2025 self.errorComment(iTagLine, '%s: and-or %s value "%s" can only be used with "&|="' 1993 2026 % ( sTag, sDesc, sItem, )); 1994 2027 else: 1995 self.errorComment(iTagLine, '%s: invalid %s value "%s" in "%s" (type: %s) '1996 % ( sTag, sDesc, sValue, sItem, sType, ));2028 self.errorComment(iTagLine, '%s: invalid %s value "%s" in "%s" (type: %s): %s' 2029 % ( sTag, sDesc, sValue, sItem, sType, oValid, )); 1997 2030 else: 1998 2031 self.errorComment(iTagLine, '%s: invalid %s type "%s" in "%s" (valid types: %s)'
Note:
See TracChangeset
for help on using the changeset viewer.