VirtualBox

Changeset 66113 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Mar 15, 2017 2:32:28 PM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
114001
Message:

bs3-cpu-generated-1,IEM: updates.

Location:
trunk/src/VBox/VMM/VMMAll
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsOneByte.cpp.h

    r65959 r66113  
    5252 * @opstats     add_Eb_Gb
    5353 * @opgroup     op_gen_arith_bin
    54  * @optest      op1=1 op2=1 -> op1=2 efl=of,sf,zf,af
     54 * @optest      op1=1 op2=1 -> op1=2 efl&|=nv,pl,nz,na,pe
    5555 */
    5656FNIEMOP_DEF(iemOp_add_Eb_Gb)
     
    101101 * @opgroup     op_gen_arith_bin
    102102 * @opflmodify  of,sf,zf,af,pf,cf
    103  * @optest      op1=1 op2=1 -> op1=2 efl=of,sf,zf,af
     103 * @optest      op1=1 op2=1 -> op1=2 efl&|=nv,pl,nz,na,pe
    104104 */
    105105FNIEMOP_DEF(iemOp_add_Al_Ib)
     
    114114 * @opgroup     op_gen_arith_bin
    115115 * @opflmodify  of,sf,zf,af,pf,cf
    116  * @optest      op1=1 op2=1 -> op1=2 efl=of,sf,zf,af
     116 * @optest      op1=1 op2=1 -> op1=2 efl&|=nv,pl,nz,na,pe
    117117 */
    118118FNIEMOP_DEF(iemOp_add_eAX_Iz)
     
    297297 * @opfltest    cf
    298298 * @opflmodify  of,sf,zf,af,pf,cf
    299  * @optest      op1=1 op2=1 efl&~=cf -> op1=2 efl&|=of,sf,zf,af
    300  * @optest      op1=1 op2=1 efl|=cf  -> op1=3 efl&|=of,sf,zf,af
     299 * @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
    301301 */
    302302FNIEMOP_DEF(iemOp_adc_Eb_Gb)
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py

    r65962 r66113  
    7474    'X86_EFL_LIVE_MASK':   0x003f7fd5, # UINT32_C(0x003f7fd5)
    7575    'X86_EFL_RA1_MASK':    0x00000002, # RT_BIT_32(1)
     76};
     77
     78## EFlags values allowed in \@opfltest, \@opflmodify, \@opflundef, \@opflset, and \@opflclear.
     79g_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',
    76122};
    77123
     
    588634        fSet   = 0;
    589635        for sFlag in sValue.split(','):
    590             sConstant = SimpleParser.kdEFlags.get(sFlag, None);
     636            sConstant = g_kdEFlagsMnemonics.get(sFlag, None);
    591637            if sConstant is None:
    592638                raise self.BadValue('Unknown flag "%s" in "%s"' % (sFlag, sValue))
     
    643689        # Flags.
    644690        'efl':      ( 'efl',  '', ),
     691        'efl_undef': ( 'uint',  '', ),
    645692        # 8-bit GPRs.
    646693        'al':       ( 'uint', '', ),
     
    823870
    824871    def __init__(self, oInstr): # type: (InstructionTest, Instruction)
    825         self.oInstr         = oInstr; # type: InstructionTest
    826         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)
    829876
    830877
     
    9751022        raise Exception('unsupported opcode byte spec "%s" for %s' % (sOpcode, self,));
    9761023
     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);
    9771056
    9781057
     
    16071686        return True;
    16081687
    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 
    16551688    ## EFlags tag to Instruction attribute name.
    16561689    kdOpFlagToAttr = {
     
    16771710            fRc = True;
    16781711            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:
    16811714                        asFlags[iFlag] = sFlag.strip();
    16821715                    else:
     
    19902023                                            oItem = TestInOut(sField, sOp, sValue, sType);
    19912024                                        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 "&|="'
    19932026                                                                        % ( sTag, sDesc, sItem, ));
    19942027                                    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, ));
    19972030                                else:
    19982031                                    self.errorComment(iTagLine, '%s: invalid %s type "%s" in "%s" (valid types: %s)'
Note: See TracChangeset for help on using the changeset viewer.

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