Changeset 65879 in vbox
- Timestamp:
- Feb 25, 2017 2:00:07 PM (8 years ago)
- Location:
- trunk/src/VBox
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Disassembler/DisasmTables.cpp
r65878 r65879 101 101 OP("or %eAX,%Iz", IDX_ParseFixedReg, IDX_ParseImmZ, 0, OP_OR, OP_PARM_REG_EAX, OP_PARM_Iz, OP_PARM_NONE, DISOPTYPE_HARMLESS), 102 102 OP("push CS", IDX_ParseFixedReg, 0, 0, OP_PUSH, OP_PARM_REG_CS, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_INVALID_64 | DISOPTYPE_POTENTIALLY_DANGEROUS), 103 OP(" 2-BYTE ESCAPE",IDX_ParseTwoByteEsc, 0, 0, OP_2B_ESC, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),103 OP("EscTwo0f", IDX_ParseTwoByteEsc, 0, 0, OP_2B_ESC, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 104 104 105 105 /* 1 */ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsOneByte.cpp.h
r65876 r65879 250 250 /** 251 251 * @opcode 0x0f 252 * @ mnemonic 2byteescape253 * @ encodingtwo0f252 * @opmnemonic EscTwo0f 253 * @openc two0f 254 254 * @opdisenum OP_2B_ESC 255 255 * @ophints harmless … … 278 278 return FNIEMOP_CALL(g_apfnTwoByteMap[(uintptr_t)b * 4 + pVCpu->iem.s.idxPrefix]); 279 279 } 280 /* @opdone */ 280 281 281 282 /* … … 291 292 /** 292 293 * @opcode 0x10 293 * @opmnemonic adc 294 * @op1 reg:Eb 295 * @op2 rm:Gb 296 * @opmaps one 297 * @oppfx none 298 * @openc ModR/M 294 * @opgroup op_gen_arith_bin 299 295 * @opfltest cf 300 296 * @opflmodify of,sf,zf,af,pf,cf 301 * @ophints harmless302 * @opgroup op_gen_arith_bin303 297 * @optest op1=1 op2=1 efl&~=cf -> op1=2 efl&|=of,sf,zf,af 304 298 * @optest op1=1 op2=1 efl|=cf -> op1=3 efl&|=of,sf,zf,af … … 306 300 FNIEMOP_DEF(iemOp_adc_Eb_Gb) 307 301 { 308 IEMOP_MNEMONIC (adc_Eb_Gb, "adc Eb,Gb");302 IEMOP_MNEMONIC2(MR, ADC, adc, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 309 303 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_r8, &g_iemAImpl_adc); 310 304 } … … 313 307 /** 314 308 * @opcode 0x11 309 * @opgroup op_gen_arith_bin 310 * @opfltest cf 311 * @opflmodify of,sf,zf,af,pf,cf 315 312 */ 316 313 FNIEMOP_DEF(iemOp_adc_Ev_Gv) 317 314 { 318 IEMOP_MNEMONIC (adc_Ev_Gv, "adc Ev,Gv");315 IEMOP_MNEMONIC2(MR, ADC, adc, Ev, Gv, DISOPTYPE_HARMLESS, 0); 319 316 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_rv, &g_iemAImpl_adc); 320 317 } … … 323 320 /** 324 321 * @opcode 0x12 322 * @opgroup op_gen_arith_bin 323 * @opfltest cf 324 * @opflmodify of,sf,zf,af,pf,cf 325 325 */ 326 326 FNIEMOP_DEF(iemOp_adc_Gb_Eb) 327 327 { 328 IEMOP_MNEMONIC (adc_Gb_Eb, "adc Gb,Eb");328 IEMOP_MNEMONIC2(RM, ADC, adc, Gb, Eb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 329 329 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_r8_rm, &g_iemAImpl_adc); 330 330 } … … 333 333 /** 334 334 * @opcode 0x13 335 * @opgroup op_gen_arith_bin 336 * @opfltest cf 337 * @opflmodify of,sf,zf,af,pf,cf 335 338 */ 336 339 FNIEMOP_DEF(iemOp_adc_Gv_Ev) 337 340 { 338 IEMOP_MNEMONIC (adc_Gv_Ev, "adc Gv,Ev");341 IEMOP_MNEMONIC2(RM, ADC, adc, Gv, Ev, DISOPTYPE_HARMLESS, 0); 339 342 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rv_rm, &g_iemAImpl_adc); 340 343 } … … 343 346 /** 344 347 * @opcode 0x14 348 * @opgroup op_gen_arith_bin 349 * @opfltest cf 350 * @opflmodify of,sf,zf,af,pf,cf 345 351 */ 346 352 FNIEMOP_DEF(iemOp_adc_Al_Ib) 347 353 { 348 IEMOP_MNEMONIC (adc_al_Ib, "adc al,Ib");354 IEMOP_MNEMONIC2(FIXED, ADC, adc, AL, Ib, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 349 355 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_AL_Ib, &g_iemAImpl_adc); 350 356 } … … 353 359 /** 354 360 * @opcode 0x15 361 * @opgroup op_gen_arith_bin 362 * @opfltest cf 363 * @opflmodify of,sf,zf,af,pf,cf 355 364 */ 356 365 FNIEMOP_DEF(iemOp_adc_eAX_Iz) 357 366 { 358 IEMOP_MNEMONIC (adc_rAX_Iz, "adc rAX,Iz");367 IEMOP_MNEMONIC2(FIXED, ADC, adc, rAX, Iz, DISOPTYPE_HARMLESS, 0); 359 368 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rAX_Iz, &g_iemAImpl_adc); 360 369 } … … 366 375 FNIEMOP_DEF(iemOp_push_SS) 367 376 { 368 IEMOP_MNEMONIC (push_ss, "push ss");377 IEMOP_MNEMONIC1(FIXED, PUSH, push, SS, DISOPTYPE_HARMLESS | DISOPTYPE_INVALID_64 | DISOPTYPE_RRM_DANGEROUS, 0); 369 378 IEMOP_HLP_NO_64BIT(); 370 379 return FNIEMOP_CALL_1(iemOpCommonPushSReg, X86_SREG_SS); … … 374 383 /** 375 384 * @opcode 0x17 385 * @opgroup op_gen_arith_bin 386 * @opfltest cf 387 * @opflmodify of,sf,zf,af,pf,cf 376 388 */ 377 389 FNIEMOP_DEF(iemOp_pop_SS) 378 390 { 379 IEMOP_MNEMONIC (pop_ss, "pop ss"); /** @todo implies instruction fusing? */391 IEMOP_MNEMONIC1(FIXED, POP, pop, SS, DISOPTYPE_HARMLESS | DISOPTYPE_INHIBIT_IRQS | DISOPTYPE_INVALID_64 | DISOPTYPE_RRM_DANGEROUS , 0); 380 392 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 381 393 IEMOP_HLP_NO_64BIT(); … … 386 398 /** 387 399 * @opcode 0x18 400 * @opgroup op_gen_arith_bin 401 * @opfltest cf 402 * @opflmodify of,sf,zf,af,pf,cf 388 403 */ 389 404 FNIEMOP_DEF(iemOp_sbb_Eb_Gb) 390 405 { 391 IEMOP_MNEMONIC (sbb_Eb_Gb, "sbb Eb,Gb");406 IEMOP_MNEMONIC2(MR, SBB, sbb, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 392 407 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_r8, &g_iemAImpl_sbb); 393 408 } … … 396 411 /** 397 412 * @opcode 0x19 413 * @opgroup op_gen_arith_bin 414 * @opfltest cf 415 * @opflmodify of,sf,zf,af,pf,cf 398 416 */ 399 417 FNIEMOP_DEF(iemOp_sbb_Ev_Gv) 400 418 { 401 IEMOP_MNEMONIC (sbb_Ev_Gv, "sbb Ev,Gv");419 IEMOP_MNEMONIC2(MR, SBB, sbb, Ev, Gv, DISOPTYPE_HARMLESS, 0); 402 420 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_rv, &g_iemAImpl_sbb); 403 421 } … … 406 424 /** 407 425 * @opcode 0x1a 426 * @opgroup op_gen_arith_bin 427 * @opfltest cf 428 * @opflmodify of,sf,zf,af,pf,cf 408 429 */ 409 430 FNIEMOP_DEF(iemOp_sbb_Gb_Eb) 410 431 { 411 IEMOP_MNEMONIC (sbb_Gb_Eb, "sbb Gb,Eb");432 IEMOP_MNEMONIC2(RM, SBB, sbb, Gb, Eb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 412 433 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_r8_rm, &g_iemAImpl_sbb); 413 434 } … … 416 437 /** 417 438 * @opcode 0x1b 439 * @opgroup op_gen_arith_bin 440 * @opfltest cf 441 * @opflmodify of,sf,zf,af,pf,cf 418 442 */ 419 443 FNIEMOP_DEF(iemOp_sbb_Gv_Ev) 420 444 { 421 IEMOP_MNEMONIC (sbb_Gv_Ev, "sbb Gv,Ev");445 IEMOP_MNEMONIC2(RM, SBB, sbb, Gv, Ev, DISOPTYPE_HARMLESS, 0); 422 446 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rv_rm, &g_iemAImpl_sbb); 423 447 } … … 426 450 /** 427 451 * @opcode 0x1c 452 * @opgroup op_gen_arith_bin 453 * @opfltest cf 454 * @opflmodify of,sf,zf,af,pf,cf 428 455 */ 429 456 FNIEMOP_DEF(iemOp_sbb_Al_Ib) 430 457 { 431 IEMOP_MNEMONIC (sbb_al_Ib, "sbb al,Ib");458 IEMOP_MNEMONIC2(FIXED, SBB, sbb, AL, Ib, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 432 459 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_AL_Ib, &g_iemAImpl_sbb); 433 460 } … … 436 463 /** 437 464 * @opcode 0x1d 465 * @opgroup op_gen_arith_bin 466 * @opfltest cf 467 * @opflmodify of,sf,zf,af,pf,cf 438 468 */ 439 469 FNIEMOP_DEF(iemOp_sbb_eAX_Iz) 440 470 { 441 IEMOP_MNEMONIC (sbb_rAX_Iz, "sbb rAX,Iz");471 IEMOP_MNEMONIC2(FIXED, SBB, sbb, rAX, Iz, DISOPTYPE_HARMLESS, 0); 442 472 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rAX_Iz, &g_iemAImpl_sbb); 443 473 } … … 446 476 /** 447 477 * @opcode 0x1e 478 * @opgroup op_stack_sreg 448 479 */ 449 480 FNIEMOP_DEF(iemOp_push_DS) 450 481 { 451 IEMOP_MNEMONIC (push_ds, "push ds");482 IEMOP_MNEMONIC1(FIXED, PUSH, push, DS, DISOPTYPE_HARMLESS | DISOPTYPE_INVALID_64, 0); 452 483 IEMOP_HLP_NO_64BIT(); 453 484 return FNIEMOP_CALL_1(iemOpCommonPushSReg, X86_SREG_DS); … … 457 488 /** 458 489 * @opcode 0x1f 490 * @opgroup op_stack_sreg 459 491 */ 460 492 FNIEMOP_DEF(iemOp_pop_DS) 461 493 { 462 IEMOP_MNEMONIC (pop_ds, "pop ds");494 IEMOP_MNEMONIC1(FIXED, POP, pop, DS, DISOPTYPE_HARMLESS | DISOPTYPE_INVALID_64 | DISOPTYPE_RRM_DANGEROUS, 0); 463 495 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 464 496 IEMOP_HLP_NO_64BIT(); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py
r65876 r65879 97 97 ## \@op[1-4] types 98 98 ## 99 ## First value entry is the normal IDX_ParseXXX handler (IDX_UseModRM == IDX_ParseModRM). 100 ## Second value entry is the location (g_kdOpLocations). 101 ## Third value entry is disassembler format string version of the type. 99 ## Value fields: 100 ## - 0: the normal IDX_ParseXXX handler (IDX_UseModRM == IDX_ParseModRM). 101 ## - 1: the location (g_kdOpLocations). 102 ## - 2: disassembler format string version of the type. 103 ## - 3: disassembler OP_PARAM_XXX (XXX only). 102 104 ## 103 105 ## Note! See the A.2.1 in SDM vol 2 for the type names. 104 106 g_kdOpTypes = { 105 107 # Fixed addresses 106 'Ap': ( 'IDX_ParseImmAddrF', 'imm', '%Ap',),108 'Ap': ( 'IDX_ParseImmAddrF', 'imm', '%Ap', 'Ap', ), 107 109 108 110 # ModR/M.rm 109 'Eb': ( 'IDX_UseModRM', 'rm', '%Eb',),110 'Ew': ( 'IDX_UseModRM', 'rm', '%Ew',),111 'Ev': ( 'IDX_UseModRM', 'rm', '%Ev',),111 'Eb': ( 'IDX_UseModRM', 'rm', '%Eb', 'Eb', ), 112 'Ew': ( 'IDX_UseModRM', 'rm', '%Ew', 'Ew', ), 113 'Ev': ( 'IDX_UseModRM', 'rm', '%Ev', 'Ev', ), 112 114 113 115 # ModR/M.rm - memory only. 114 'Ma': ( 'IDX_UseModRM', 'rm', '%Ma',), ##< Only used by BOUND.116 'Ma': ( 'IDX_UseModRM', 'rm', '%Ma', 'Ma', ), ##< Only used by BOUND. 115 117 116 118 # ModR/M.reg 117 'Gb': ( 'IDX_UseModRM', 'reg', '%Gb',),118 'Gw': ( 'IDX_UseModRM', 'reg', '%Gw',),119 'Gv': ( 'IDX_UseModRM', 'reg', '%Gv',),119 'Gb': ( 'IDX_UseModRM', 'reg', '%Gb', 'Gb', ), 120 'Gw': ( 'IDX_UseModRM', 'reg', '%Gw', 'Gw', ), 121 'Gv': ( 'IDX_UseModRM', 'reg', '%Gv', 'Gv', ), 120 122 121 123 # Immediate values. 122 'Ib': ( 'IDX_ParseImmByte', 'imm', '%Ib',), ##< NB! Could be IDX_ParseImmByteSX for some instructions.123 'Iw': ( 'IDX_ParseImmUshort', 'imm', '%Iw',),124 'Id': ( 'IDX_ParseImmUlong', 'imm', '%Id',),125 'Iq': ( 'IDX_ParseImmQword', 'imm', '%Iq',),126 'Iv': ( 'IDX_ParseImmV', 'imm', '%Iv',), ##< o16: word, o32: dword, o64: qword127 'Iz': ( 'IDX_ParseImmZ', 'imm', '%Iz',), ##< o16: word, o32|o64:dword124 'Ib': ( 'IDX_ParseImmByte', 'imm', '%Ib', 'Ib', ), ##< NB! Could be IDX_ParseImmByteSX for some instructions. 125 'Iw': ( 'IDX_ParseImmUshort', 'imm', '%Iw', 'Iw', ), 126 'Id': ( 'IDX_ParseImmUlong', 'imm', '%Id', 'Id', ), 127 'Iq': ( 'IDX_ParseImmQword', 'imm', '%Iq', 'Iq', ), 128 'Iv': ( 'IDX_ParseImmV', 'imm', '%Iv', 'Iv', ), ##< o16: word, o32: dword, o64: qword 129 'Iz': ( 'IDX_ParseImmZ', 'imm', '%Iz', 'Iz', ), ##< o16: word, o32|o64:dword 128 130 129 131 # Address operands (no ModR/M). 130 'Ob': ( 'IDX_ParseImmAddr', 'imm', '%Ob',),131 'Ov': ( 'IDX_ParseImmAddr', 'imm', '%Ov',),132 'Ob': ( 'IDX_ParseImmAddr', 'imm', '%Ob', 'Ob', ), 133 'Ov': ( 'IDX_ParseImmAddr', 'imm', '%Ov', 'Ov', ), 132 134 133 135 # Relative jump targets 134 'Jb': ( 'IDX_ParseImmBRel', 'imm', '%Jb',),135 'Jv': ( 'IDX_ParseImmVRel', 'imm', '%Jv',),136 'Jb': ( 'IDX_ParseImmBRel', 'imm', '%Jb', 'Jb', ), 137 'Jv': ( 'IDX_ParseImmVRel', 'imm', '%Jv', 'Jv', ), 136 138 137 139 # DS:rSI 138 'Xb': ( 'IDX_ParseXb', 'rSI', '%eSI',),139 'Xv': ( 'IDX_ParseXv', 'rSI', '%eSI',),140 'Xb': ( 'IDX_ParseXb', 'rSI', '%eSI', 'Xb', ), 141 'Xv': ( 'IDX_ParseXv', 'rSI', '%eSI', 'Xv', ), 140 142 # ES:rDI 141 'Yb': ( 'IDX_ParseYb', 'rDI', '%eDI',),142 'Yv': ( 'IDX_ParseYv', 'rDI', '%eDI',),143 144 'Fv': ( 'IDX_ParseFixedReg', 'rFLAGS', '%Fv', ),143 'Yb': ( 'IDX_ParseYb', 'rDI', '%eDI', 'Yb', ), 144 'Yv': ( 'IDX_ParseYv', 'rDI', '%eDI', 'Yv', ), 145 146 'Fv': ( 'IDX_ParseFixedReg', 'rFLAGS', '%Fv', 'Fv', ), 145 147 146 148 # Fixed registers. 147 'AL': ( 'IDX_ParseFixedReg', 'AL', 'al'),148 'rAX': ( 'IDX_ParseFixedReg', 'rAX', '%eAX', ),149 'CS': ( 'IDX_ParseFixedReg', 'CS', 'cs'), # 8086: push CS150 'DS': ( 'IDX_ParseFixedReg', 'DS', 'ds'),151 'ES': ( 'IDX_ParseFixedReg', 'ES', 'es'),152 'FS': ( 'IDX_ParseFixedReg', 'FS', 'fs'),153 'GS': ( 'IDX_ParseFixedReg', 'GS', 'gs'),154 'SS': ( 'IDX_ParseFixedReg', 'SS', 'ss'),149 'AL': ( 'IDX_ParseFixedReg', 'AL', 'al', 'REG_AL', ), 150 'rAX': ( 'IDX_ParseFixedReg', 'rAX', '%eAX', 'REG_EAX', ), 151 'CS': ( 'IDX_ParseFixedReg', 'CS', 'cs', 'REG_CS', ), # 8086: push CS 152 'DS': ( 'IDX_ParseFixedReg', 'DS', 'ds', 'REG_DS', ), 153 'ES': ( 'IDX_ParseFixedReg', 'ES', 'es', 'REG_ES', ), 154 'FS': ( 'IDX_ParseFixedReg', 'FS', 'fs', 'REG_FS', ), 155 'GS': ( 'IDX_ParseFixedReg', 'GS', 'gs', 'REG_GS', ), 156 'SS': ( 'IDX_ParseFixedReg', 'SS', 'ss', 'REG_SS', ), 155 157 }; 156 158 … … 338 340 }; 339 341 340 def __init__(self, sName, asLeadOpcodes = None, sSelector = 'byte', sEncoding = 'legacy' ):342 def __init__(self, sName, asLeadOpcodes = None, sSelector = 'byte', sEncoding = 'legacy', sDisParse = None): 341 343 assert sSelector in self.kdSelectors; 342 344 assert sEncoding in self.kdEncodings; … … 346 348 for sOpcode in asLeadOpcodes: 347 349 assert _isValidOpcodeByte(sOpcode); 350 assert sDisParse is None or sDisParse.startswith('IDX_Parse'); 348 351 349 352 self.sName = sName; … … 352 355 self.sEncoding = sEncoding; ##< The encoding, see kdSelectors. 353 356 self.aoInstructions = []; # type: Instruction 357 self.sDisParse = sDisParse; ##< IDX_ParseXXX. 354 358 355 359 def getTableSize(self): … … 995 999 'grp11_c7_r': InstructionMap('grp11_c7_r',asLeadOpcodes = ['0xc7',], sSelector = '11'), # xbegin 996 1000 997 'two0f': InstructionMap('two0f', asLeadOpcodes = ['0x0f',] ),1001 'two0f': InstructionMap('two0f', asLeadOpcodes = ['0x0f',], sDisParse = 'IDX_ParseTwoByteEsc'), 998 1002 'grp6': InstructionMap('grp6', asLeadOpcodes = ['0x0f', '0x00',], sSelector = '/r'), 999 1003 'grp7_m': InstructionMap('grp7_m', asLeadOpcodes = ['0x0f', '0x01',], sSelector = '!11 /r'), … … 1575 1579 """ 1576 1580 Tag: \@openc 1577 Value: ModR/M| TBD1581 Value: ModR/M|fixed|prefix|<map name> 1578 1582 1579 1583 The instruction operand encoding style. … … 1584 1588 sEncoding = self.flattenAllSections(aasSections); 1585 1589 if sEncoding in g_kdEncodings: 1590 pass; 1591 elif sEncoding in g_dInstructionMaps: 1586 1592 pass; 1587 1593 elif not _isValidOpcodeByte(sEncoding): … … 2148 2154 elif sCurTag == '@default': 2149 2155 sFlatDefault = self.flattenAllSections(aasSections); 2156 elif '@op' + sCurTag[1:] in self.dTagHandlers: 2157 self.errorComment(iCurTagLine, 'Did you mean "@op%s" rather than "%s"?' % (sCurTag[1:], sCurTag)); 2158 elif sCurTag in ['@encoding', '@opencoding']: 2159 self.errorComment(iCurTagLine, 'Did you mean "@openc" rather than "%s"?' % (sCurTag,)); 2150 2160 2151 2161 # … … 2574 2584 2575 2585 if cErrors != 0: 2576 raise Exception('%d parse errors' % (cErrors,)); 2586 #raise Exception('%d parse errors' % (cErrors,)); 2587 sys.exit(1); 2577 2588 return True; 2578 2589 … … 2626 2637 for iOperand, oOperand in enumerate(oInstr.aoOperands): 2627 2638 sTmp += ' ' if iOperand == 0 else ','; 2628 sTmp += g_kdOpTypes[oOperand.sType][2]; 2639 if g_kdOpTypes[oOperand.sType][2][0] != '%': ## @todo remove upper() later. 2640 sTmp += g_kdOpTypes[oOperand.sType][2].upper(); ## @todo remove upper() later. 2641 else: 2642 sTmp += g_kdOpTypes[oOperand.sType][2]; 2629 2643 sTmp += '",'; 2630 2644 asColumns = [ sTmp, ]; … … 2634 2648 # 2635 2649 iStart = len(asColumns); 2650 #print 'debug: %s' % (oInstr,); 2636 2651 if oInstr.sEncoding is None: 2637 2652 pass; … … 2650 2665 elif oInstr.sEncoding == 'vex3': 2651 2666 asColumns.append('IDX_ParseVex3b,') 2667 elif oInstr.sEncoding in g_dInstructionMaps: 2668 asColumns.append(g_dInstructionMaps[oInstr.sEncoding].sDisParse + ','); 2652 2669 else: 2653 2670 ## @todo … … 2691 2708 iStart = len(asColumns) 2692 2709 for oOperand in oInstr.aoOperands: 2693 asColumns.append('OP_PARM_' + oOperand.sType+ ',');2710 asColumns.append('OP_PARM_' + g_kdOpTypes[oOperand.sType][3] + ','); 2694 2711 asColumns.extend(['OP_PARM_NONE,'] * (cMaxOperands - (len(asColumns) - iStart))); 2695 2712
Note:
See TracChangeset
for help on using the changeset viewer.