VirtualBox

Changeset 46550 in vbox for trunk


Ignore:
Timestamp:
Jun 14, 2013 11:32:24 AM (12 years ago)
Author:
vboxsync
Message:

elf, gcc and 32-bit.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/iprt/asmdefs.mac

    r46548 r46550  
    138138  %define IMP2(name)    dword [IMPNAME(name)]
    139139 %endif
     140%elifdef ASM_FORMAT_ELF
     141 %ifdef RT_ARCH_AMD64
     142  %define IMP2(name)    qword [rel IMPNAME(name) wrt ..got]
     143 %else
     144  %define IMP2(name)    IMPNAME(name) wrt ..plt
     145 %endif
     146%elifdef ASM_FORMAT_MACHO
     147 %ifdef RT_ARCH_AMD64
     148  %define IMP2(name)    qword [IMPNAME(name) wrt rip]
     149 %else
     150  %define IMP2(name)    IMPNAME(name)
     151 %endif
    140152%else
    141153 %ifdef RT_ARCH_AMD64
  • trunk/src/VBox/VMM/testcase/Instructions/InstructionTestGen.py

    r46543 r46550  
    103103                   'r8w', 'r9w', 'r10w', 'r11w', 'r12w', 'r13w', 'r14w', 'r15w');
    104104g_asGRegs8      = ('al',  'cl',  'dl',  'bl',  'ah',  'ah',  'dh',  'bh');
    105 g_asGRegs8_64   = ('al',  'cl',  'dl',  'bl',  'spl', 'bpl', 'sil',  'dil',
     105g_asGRegs8_64   = ('al',  'cl',  'dl',  'bl',  'spl', 'bpl', 'sil',  'dil',        # pylint: disable=C0103
    106106                   'r8b', 'r9b', 'r10b', 'r11b', 'r12b', 'r13b', 'r14b', 'r15b');
    107107## @}
     
    250250        self.sInstr = sInstr if sInstr else sName.split()[0];
    251251
     252    def isApplicable(self, oGen):
     253        """
     254        Tests if the instruction test is applicable to the selected environment.
     255        """
     256        _ = oGen;
     257        return True;
    252258
    253259    def generateTest(self, oGen, sTestFnName):
    254         """ Emits the test assembly code. """
     260        """
     261        Emits the test assembly code.
     262        """
    255263        oGen.write(';; @todo not implemented. This is for the linter: %s, %s\n' % (oGen, sTestFnName));
    256264        return True;
     
    302310        return True;
    303311
     312    def generateOneStdTest(self, oGen, cbEffOp, cbMaxOp, iOp1, iOp2, uInput, uResult):
     313        """ Generate one standard test. """
     314        oGen.write('        call VBINSTST_NAME(Common_LoadKnownValues)\n');
     315        oGen.write('        mov     %s, 0x%x\n' % (oGen.oTarget.asGRegs[iOp2], uInput,));
     316        oGen.write('        push    %s\n' % (oGen.oTarget.asGRegs[iOp2],));
     317        self.writeInstrGregGreg(cbEffOp, iOp1, iOp2, oGen);
     318        oGen.pushConst(uResult, cbMaxOp);
     319        oGen.write('        call VBINSTST_NAME(%s)\n' % (oGen.needGRegChecker(iOp1, iOp2),));
     320        return True;
     321
    304322    def generateStandardTests(self, oGen):
    305323        """ Generate standard tests. """
     
    311329
    312330        for cbEffOp in self.acbOpVars:
     331            if cbEffOp > cbMaxOp:
     332                continue;
    313333            for iOp1 in range(oGen.oTarget.getGRegCount()):
    314334                if oGen.oTarget.asGRegsNoSp[iOp1] is None:
     
    318338                        continue;
    319339                    for uInput in auInputs:
    320                         uResult = self.fnCalcResult(cbEffOp, uInput, oGen.au64Regs[iOp1] if iOp1 != iOp2 else uInput, oGen);
     340                        uResult = self.fnCalcResult(cbEffOp, uInput, oGen.auRegValues[iOp1] if iOp1 != iOp2 else uInput, oGen);
    321341                        oGen.newSubTest();
    322                         oGen.write('        call VBINSTST_NAME(Common_LoadKnownValues)\n');
    323                         oGen.write('        mov     %s, 0x%x\n' % (oGen.oTarget.asGRegs[iOp2], uInput,));
    324                         oGen.write('        push    %s\n' % (oGen.oTarget.asGRegs[iOp2],));
    325                         self.writeInstrGregGreg(cbEffOp, iOp1, iOp2, oGen);
    326                         oGen.pushConst(uResult, cbMaxOp);
    327                         oGen.write('        call VBINSTST_NAME(%s)\n' % (oGen.needGRegChecker(iOp1, iOp2),));
     342                        self.generateOneStdTest(oGen, cbEffOp, cbMaxOp, iOp1, iOp2, uInput, uResult);
     343        return True;
    328344
    329345    def generateTest(self, oGen, sTestFnName):
     
    362378        return True;
    363379
     380    def isApplicable(self, oGen):
     381        return oGen.oTarget.is64Bit();
     382
    364383    @staticmethod
    365384    def calc_movsxd(cbEffOp, uInput, uCur, oGen):
     
    403422        self.au32Regs       = [(self.au64Regs[i] & UINT32_MAX) for i in range(8)];
    404423        self.au16Regs       = [(self.au64Regs[i] & UINT16_MAX) for i in range(8)];
     424        self.auRegValues    = self.au64Regs if self.oTarget.is64Bit() else self.au32Regs;
    405425
    406426        # Declare state variables used while generating.
     
    688708            for iInstrTest in range(iInstrTestStart, iInstrTestEnd):
    689709                oInstrTest = g_aoInstructionTests[iInstrTest];
    690                 self.write('%%ifdef ASM_CALL64_GCC\n'
    691                            '        lea  rdi, [.szInstr%03u wrt rip]\n'
    692                            '%%elifdef ASM_CALL64_MSC\n'
    693                            '        lea  rcx, [.szInstr%03u wrt rip]\n'
    694                            '%%else\n'
    695                            '        mov  xAX, .szInstr%03u\n'
    696                            '        mov  [xSP], xAX\n'
    697                            '%%endif\n'
    698                            '        VBINSTST_CALL_FN_SUB_TEST\n'
    699                            '        call VBINSTST_NAME(%s)\n'
    700                            % ( iInstrTest, iInstrTest, iInstrTest, self._calcTestFunctionName(oInstrTest, iInstrTest)));
     710                if oInstrTest.isApplicable(self):
     711                    self.write('%%ifdef ASM_CALL64_GCC\n'
     712                               '        lea  rdi, [.szInstr%03u wrt rip]\n'
     713                               '%%elifdef ASM_CALL64_MSC\n'
     714                               '        lea  rcx, [.szInstr%03u wrt rip]\n'
     715                               '%%else\n'
     716                               '        mov  xAX, .szInstr%03u\n'
     717                               '        mov  [xSP], xAX\n'
     718                               '%%endif\n'
     719                               '        VBINSTST_CALL_FN_SUB_TEST\n'
     720                               '        call VBINSTST_NAME(%s)\n'
     721                               % ( iInstrTest, iInstrTest, iInstrTest, self._calcTestFunctionName(oInstrTest, iInstrTest)));
    701722
    702723            self.write('\n'
Note: See TracChangeset for help on using the changeset viewer.

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