Changeset 66135 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Mar 16, 2017 3:53:06 PM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 114038
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllCImpl.cpp.h
r66044 r66135 6474 6474 6475 6475 6476 /** 6477 * Implements 'AAA'. 6478 */ 6479 IEM_CIMPL_DEF_0(iemCImpl_aaa) 6480 { 6481 PCPUMCTX pCtx = IEM_GET_CTX(pVCpu); 6482 6483 uint8_t const uMaskedAl = pCtx->al & 0xf; 6484 if ( pCtx->eflags.Bits.u1AF 6485 || uMaskedAl >= 10) 6486 { 6487 pCtx->ax += 0x106; 6488 pCtx->al &= 0xf; 6489 pCtx->eflags.Bits.u1AF = 1; 6490 pCtx->eflags.Bits.u1CF = 1; 6491 } 6492 else 6493 { 6494 pCtx->eflags.Bits.u1AF = 0; 6495 pCtx->eflags.Bits.u1CF = 0; 6496 pCtx->al = uMaskedAl; 6497 } 6498 6499 iemHlpUpdateArithEFlagsU8(pVCpu, pCtx->al, X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF, X86_EFL_OF); 6500 iemRegAddToRipAndClearRF(pVCpu, cbInstr); 6501 return VINF_SUCCESS; 6502 } 6503 6504 6476 6505 6477 6506 -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsOneByte.cpp.h
r66132 r66135 22 22 extern const PFNIEMOP g_apfnOneByteMap[256]; /* not static since we need to forward declare it. */ 23 23 24 /* * @def og_gen General25 * @{ 26 */ 27 28 /** @def og_gen_arithArithmetic29 * @{30 */31 /** @defgroup og_gen_arith_bin Binarynumbers */32 /** @defgroup og_gen_arith_dec Decimal numbers*/24 /* Instruction group definitions: */ 25 26 /** @defgroup og_gen General 27 * @{ */ 28 /** @defgroup og_gen_arith Arithmetic 29 * @{ */ 30 /** @defgroup og_gen_arith_bin Binary numbers */ 31 /** @defgroup og_gen_arith_dec Decimal numbers */ 32 /** @} */ 33 33 /** @} */ 34 35 /** @defgroup og_stack Stack 36 * @{ */ 37 /** @defgroup og_stack_sreg Segment registers */ 38 /** @} */ 39 40 /** @defgroup og_prefix Prefixes */ 41 /** @defgroup og_escapes Escape bytes */ 34 42 35 43 … … 51 59 * @ophints harmless ignores_op_size 52 60 * @opstats add_Eb_Gb 53 * @opgroup o p_gen_arith_bin61 * @opgroup og_gen_arith_bin 54 62 * @optest op1=1 op2=1 -> op1=2 efl&|=nc,pe,na,nz,pl,nv 55 63 * @optest efl|=cf op1=1 op2=2 -> op1=3 efl&|=nc,po,na,nz,pl,nv … … 66 74 /** 67 75 * @opcode 0x01 68 * @opgroup o p_gen_arith_bin76 * @opgroup og_gen_arith_bin 69 77 * @opflmodify cf,pf,af,zf,sf,of 70 78 * @optest op1=1 op2=1 -> op1=2 efl&|=nc,pe,na,nz,pl,nv … … 82 90 /** 83 91 * @opcode 0x02 84 * @opgroup o p_gen_arith_bin92 * @opgroup og_gen_arith_bin 85 93 * @opflmodify cf,pf,af,zf,sf,of 86 94 * @opcopytests iemOp_add_Eb_Gb … … 95 103 /** 96 104 * @opcode 0x03 97 * @opgroup o p_gen_arith_bin105 * @opgroup og_gen_arith_bin 98 106 * @opflmodify cf,pf,af,zf,sf,of 99 107 * @opcopytests iemOp_add_Ev_Gv … … 108 116 /** 109 117 * @opcode 0x04 110 * @opgroup o p_gen_arith_bin118 * @opgroup og_gen_arith_bin 111 119 * @opflmodify cf,pf,af,zf,sf,of 112 120 * @opcopytests iemOp_add_Eb_Gb … … 121 129 /** 122 130 * @opcode 0x05 123 * @opgroup o p_gen_arith_bin131 * @opgroup og_gen_arith_bin 124 132 * @opflmodify cf,pf,af,zf,sf,of 125 133 * @optest op1=1 op2=1 -> op1=2 efl&|=nv,pl,nz,na,pe … … 137 145 /** 138 146 * @opcode 0x06 139 * @opgroup o p_stack_sreg147 * @opgroup og_stack_sreg 140 148 */ 141 149 FNIEMOP_DEF(iemOp_push_ES) … … 149 157 /** 150 158 * @opcode 0x07 151 * @opgroup o p_stack_sreg159 * @opgroup og_stack_sreg 152 160 */ 153 161 FNIEMOP_DEF(iemOp_pop_ES) … … 162 170 /** 163 171 * @opcode 0x08 164 * @opgroup o p_gen_arith_bin172 * @opgroup og_gen_arith_bin 165 173 * @opflmodify cf,pf,af,zf,sf,of 166 174 * @opflundef af … … 181 189 /* 182 190 * @opcode 0x09 183 * @opgroup o p_gen_arith_bin191 * @opgroup og_gen_arith_bin 184 192 * @opflmodify cf,pf,af,zf,sf,of 185 193 * @opflundef af … … 202 210 /** 203 211 * @opcode 0x0a 204 * @opgroup o p_gen_arith_bin212 * @opgroup og_gen_arith_bin 205 213 * @opflmodify cf,pf,af,zf,sf,of 206 214 * @opflundef af … … 218 226 /** 219 227 * @opcode 0x0b 220 * @opgroup o p_gen_arith_bin228 * @opgroup og_gen_arith_bin 221 229 * @opflmodify cf,pf,af,zf,sf,of 222 230 * @opflundef af … … 234 242 /** 235 243 * @opcode 0x0c 236 * @opgroup o p_gen_arith_bin244 * @opgroup og_gen_arith_bin 237 245 * @opflmodify cf,pf,af,zf,sf,of 238 246 * @opflundef af … … 250 258 /** 251 259 * @opcode 0x0d 252 * @opgroup o p_gen_arith_bin260 * @opgroup og_gen_arith_bin 253 261 * @opflmodify cf,pf,af,zf,sf,of 254 262 * @opflundef af … … 272 280 /** 273 281 * @opcode 0x0e 274 * @opgroup o p_stack_sreg282 * @opgroup og_stack_sreg 275 283 */ 276 284 FNIEMOP_DEF(iemOp_push_CS) … … 288 296 * @opdisenum OP_2B_ESC 289 297 * @ophints harmless 290 * @opgroup o p_escapes298 * @opgroup og_escapes 291 299 */ 292 300 FNIEMOP_DEF(iemOp_2byteEscape) … … 326 334 /** 327 335 * @opcode 0x10 328 * @opgroup o p_gen_arith_bin336 * @opgroup og_gen_arith_bin 329 337 * @opfltest cf 330 338 * @opflmodify cf,pf,af,zf,sf,of … … 344 352 /** 345 353 * @opcode 0x11 346 * @opgroup o p_gen_arith_bin354 * @opgroup og_gen_arith_bin 347 355 * @opfltest cf 348 356 * @opflmodify cf,pf,af,zf,sf,of … … 362 370 /** 363 371 * @opcode 0x12 364 * @opgroup o p_gen_arith_bin372 * @opgroup og_gen_arith_bin 365 373 * @opfltest cf 366 374 * @opflmodify cf,pf,af,zf,sf,of … … 376 384 /** 377 385 * @opcode 0x13 378 * @opgroup o p_gen_arith_bin386 * @opgroup og_gen_arith_bin 379 387 * @opfltest cf 380 388 * @opflmodify cf,pf,af,zf,sf,of … … 390 398 /** 391 399 * @opcode 0x14 392 * @opgroup o p_gen_arith_bin400 * @opgroup og_gen_arith_bin 393 401 * @opfltest cf 394 402 * @opflmodify cf,pf,af,zf,sf,of … … 404 412 /** 405 413 * @opcode 0x15 406 * @opgroup o p_gen_arith_bin414 * @opgroup og_gen_arith_bin 407 415 * @opfltest cf 408 416 * @opflmodify cf,pf,af,zf,sf,of … … 429 437 /** 430 438 * @opcode 0x17 431 * @opgroup o p_gen_arith_bin439 * @opgroup og_gen_arith_bin 432 440 * @opfltest cf 433 441 * @opflmodify cf,pf,af,zf,sf,of … … 444 452 /** 445 453 * @opcode 0x18 446 * @opgroup o p_gen_arith_bin454 * @opgroup og_gen_arith_bin 447 455 * @opfltest cf 448 456 * @opflmodify cf,pf,af,zf,sf,of … … 457 465 /** 458 466 * @opcode 0x19 459 * @opgroup o p_gen_arith_bin467 * @opgroup og_gen_arith_bin 460 468 * @opfltest cf 461 469 * @opflmodify cf,pf,af,zf,sf,of … … 470 478 /** 471 479 * @opcode 0x1a 472 * @opgroup o p_gen_arith_bin480 * @opgroup og_gen_arith_bin 473 481 * @opfltest cf 474 482 * @opflmodify cf,pf,af,zf,sf,of … … 483 491 /** 484 492 * @opcode 0x1b 485 * @opgroup o p_gen_arith_bin493 * @opgroup og_gen_arith_bin 486 494 * @opfltest cf 487 495 * @opflmodify cf,pf,af,zf,sf,of … … 496 504 /** 497 505 * @opcode 0x1c 498 * @opgroup o p_gen_arith_bin506 * @opgroup og_gen_arith_bin 499 507 * @opfltest cf 500 508 * @opflmodify cf,pf,af,zf,sf,of … … 509 517 /** 510 518 * @opcode 0x1d 511 * @opgroup o p_gen_arith_bin519 * @opgroup og_gen_arith_bin 512 520 * @opfltest cf 513 521 * @opflmodify cf,pf,af,zf,sf,of … … 522 530 /** 523 531 * @opcode 0x1e 524 * @opgroup o p_stack_sreg532 * @opgroup og_stack_sreg 525 533 */ 526 534 FNIEMOP_DEF(iemOp_push_DS) … … 534 542 /** 535 543 * @opcode 0x1f 536 * @opgroup o p_stack_sreg544 * @opgroup og_stack_sreg 537 545 */ 538 546 FNIEMOP_DEF(iemOp_pop_DS) … … 547 555 /** 548 556 * @opcode 0x20 549 * @opgroup o p_gen_arith_bin557 * @opgroup og_gen_arith_bin 550 558 * @opflmodify cf,pf,af,zf,sf,of 551 559 * @opflundef af … … 562 570 /** 563 571 * @opcode 0x21 564 * @opgroup o p_gen_arith_bin572 * @opgroup og_gen_arith_bin 565 573 * @opflmodify cf,pf,af,zf,sf,of 566 574 * @opflundef af … … 577 585 /** 578 586 * @opcode 0x22 579 * @opgroup o p_gen_arith_bin587 * @opgroup og_gen_arith_bin 580 588 * @opflmodify cf,pf,af,zf,sf,of 581 589 * @opflundef af … … 592 600 /** 593 601 * @opcode 0x23 594 * @opgroup o p_gen_arith_bin602 * @opgroup og_gen_arith_bin 595 603 * @opflmodify cf,pf,af,zf,sf,of 596 604 * @opflundef af … … 607 615 /** 608 616 * @opcode 0x24 609 * @opgroup o p_gen_arith_bin617 * @opgroup og_gen_arith_bin 610 618 * @opflmodify cf,pf,af,zf,sf,of 611 619 * @opflundef af … … 622 630 /** 623 631 * @opcode 0x25 624 * @opgroup o p_gen_arith_bin632 * @opgroup og_gen_arith_bin 625 633 * @opflmodify cf,pf,af,zf,sf,of 626 634 * @opflundef af … … 639 647 * @opmnemonic SEG 640 648 * @op1 ES 641 * @opgroup o p_prefix649 * @opgroup og_prefix 642 650 * @openc prefix 643 651 * @opdisenum OP_SEG … … 673 681 /** 674 682 * @opcode 0x28 675 * @opgroup o p_gen_arith_bin683 * @opgroup og_gen_arith_bin 676 684 * @opflmodify cf,pf,af,zf,sf,of 677 685 */ … … 685 693 /** 686 694 * @opcode 0x29 687 * @opgroup o p_gen_arith_bin695 * @opgroup og_gen_arith_bin 688 696 * @opflmodify cf,pf,af,zf,sf,of 689 697 */ … … 697 705 /** 698 706 * @opcode 0x2a 699 * @opgroup o p_gen_arith_bin707 * @opgroup og_gen_arith_bin 700 708 * @opflmodify cf,pf,af,zf,sf,of 701 709 */ … … 709 717 /** 710 718 * @opcode 0x2b 711 * @opgroup o p_gen_arith_bin719 * @opgroup og_gen_arith_bin 712 720 * @opflmodify cf,pf,af,zf,sf,of 713 721 */ … … 721 729 /** 722 730 * @opcode 0x2c 723 * @opgroup o p_gen_arith_bin731 * @opgroup og_gen_arith_bin 724 732 * @opflmodify cf,pf,af,zf,sf,of 725 733 */ … … 733 741 /** 734 742 * @opcode 0x2d 735 * @opgroup o p_gen_arith_bin743 * @opgroup og_gen_arith_bin 736 744 * @opflmodify cf,pf,af,zf,sf,of 737 745 */ … … 747 755 * @opmnemonic SEG 748 756 * @op1 CS 749 * @opgroup o p_prefix757 * @opgroup og_prefix 750 758 * @openc prefix 751 759 * @opdisenum OP_SEG … … 781 789 /** 782 790 * @opcode 0x30 783 * @opgroup o p_gen_arith_bin791 * @opgroup og_gen_arith_bin 784 792 * @opflmodify cf,pf,af,zf,sf,of 785 793 * @opflundef af … … 796 804 /** 797 805 * @opcode 0x31 798 * @opgroup o p_gen_arith_bin806 * @opgroup og_gen_arith_bin 799 807 * @opflmodify cf,pf,af,zf,sf,of 800 808 * @opflundef af … … 811 819 /** 812 820 * @opcode 0x32 813 * @opgroup o p_gen_arith_bin821 * @opgroup og_gen_arith_bin 814 822 * @opflmodify cf,pf,af,zf,sf,of 815 823 * @opflundef af … … 826 834 /** 827 835 * @opcode 0x33 828 * @opgroup o p_gen_arith_bin836 * @opgroup og_gen_arith_bin 829 837 * @opflmodify cf,pf,af,zf,sf,of 830 838 * @opflundef af … … 841 849 /** 842 850 * @opcode 0x34 843 * @opgroup o p_gen_arith_bin851 * @opgroup og_gen_arith_bin 844 852 * @opflmodify cf,pf,af,zf,sf,of 845 853 * @opflundef af … … 856 864 /** 857 865 * @opcode 0x35 858 * @opgroup o p_gen_arith_bin866 * @opgroup og_gen_arith_bin 859 867 * @opflmodify cf,pf,af,zf,sf,of 860 868 * @opflundef af … … 871 879 /** 872 880 * @opcode 0x36 881 * @opmnemonic SEG 882 * @op1 SS 883 * @opgroup og_prefix 884 * @openc prefix 885 * @opdisenum OP_SEG 886 * @ophints harmless 873 887 */ 874 888 FNIEMOP_DEF(iemOp_seg_SS) … … 885 899 /** 886 900 * @opcode 0x37 887 */ 888 FNIEMOP_STUB(iemOp_aaa); 901 * @opfltest af,cf 902 * @opflmodify cf,pf,af,zf,sf,of 903 * @opflundef of 904 * @opgroup og_gen_arith_dec 905 * @optest efl&~=af ax=9 -> efl&|=nc,po,na,nz,pl,nv 906 * @optest efl&~=af ax=0 -> efl&|=nc,po,na,zf,pl,nv 907 * @optest efl|=af ax=0 -> ax=0x0106 efl&|=cf,po,af,nz,pl,nv 908 * @optest efl|=af ax=0x0100 -> ax=0x0206 efl&|=cf,po,af,nz,pl,nv 909 * @optest efl|=af ax=0x000a -> ax=0x0100 efl&|=cf,po,af,zf,pl,nv 910 * @optest efl|=af ax=0x010a -> ax=0x0200 efl&|=cf,po,af,zf,pl,nv 911 * @optest efl|=af ax=0x0f0a -> ax=0x1000 efl&|=cf,po,af,zf,pl,nv 912 * @optest efl|=af ax=0x7f0a -> ax=0x8000 efl&|=cf,po,af,zf,pl,nv 913 * @optest efl|=af ax=0xff0a -> ax=0x0000 efl&|=cf,po,af,zf,pl,nv 914 * @optest efl&~=af ax=0xff0a -> ax=0x0000 efl&|=cf,po,af,zf,pl,nv 915 * @optest efl&~=af ax=0x000b -> ax=0x0101 efl&|=cf,pe,af,nz,pl,nv 916 * @optest efl&~=af ax=0x000c -> ax=0x0102 efl&|=cf,pe,af,nz,pl,nv 917 * @optest efl&~=af ax=0x000d -> ax=0x0103 efl&|=cf,po,af,nz,pl,nv 918 * @optest efl&~=af ax=0x000e -> ax=0x0104 efl&|=cf,pe,af,nz,pl,nv 919 * @optest efl&~=af ax=0x000f -> ax=0x0105 efl&|=cf,po,af,nz,pl,nv 920 * @optest efl&~=af ax=0x020f -> ax=0x0305 efl&|=cf,po,af,nz,pl,nv 921 */ 922 FNIEMOP_DEF(iemOp_aaa) 923 { 924 IEMOP_MNEMONIC0(FIXED, AAA, aaa, DISOPTYPE_HARMLESS | DISOPTYPE_INVALID_64, 0); /* express implicit AL/AX register use */ 925 IEMOP_HLP_NO_64BIT(); 926 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 927 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_OF); 928 929 return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_aaa); 930 } 889 931 890 932 … … 1853 1895 * @opmnemonic segfs 1854 1896 * @opmincpu 80386 1855 * @opgroup o p_prefixes1897 * @opgroup og_prefixes 1856 1898 */ 1857 1899 FNIEMOP_DEF(iemOp_seg_FS) … … 1872 1914 * @opmnemonic seggs 1873 1915 * @opmincpu 80386 1874 * @opgroup o p_prefixes1916 * @opgroup og_prefixes 1875 1917 */ 1876 1918 FNIEMOP_DEF(iemOp_seg_GS) … … 1893 1935 * @opmincpu 80386 1894 1936 * @ophints harmless 1895 * @opgroup o p_prefixes1937 * @opgroup og_prefixes 1896 1938 */ 1897 1939 FNIEMOP_DEF(iemOp_op_size) … … 1919 1961 * @opmincpu 80386 1920 1962 * @ophints harmless 1921 * @opgroup o p_prefixes1963 * @opgroup og_prefixes 1922 1964 */ 1923 1965 FNIEMOP_DEF(iemOp_addr_size) … … 3132 3174 * @opcode 0x82 3133 3175 * @opmnemonic grp1_82 3134 * @opgroup o p_groups3176 * @opgroup og_groups 3135 3177 */ 3136 3178 FNIEMOP_DEF(iemOp_Grp1_Eb_Ib_82) -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py
r66128 r66135 1205 1205 self.oReStatsName = re.compile('^[A-Za-z_][A-Za-z0-9_]*$'); 1206 1206 self.oReFunctionName= re.compile('^iemOp_[A-Za-z_][A-Za-z0-9_]*$'); 1207 self.oReGroupName = re.compile('^o p_[a-z0-9]+(|_[a-z0-9]+|_[a-z0-9]+_[a-z0-9]+)$');1207 self.oReGroupName = re.compile('^og_[a-z0-9]+(|_[a-z0-9]+|_[a-z0-9]+_[a-z0-9]+)$'); 1208 1208 self.oReDisEnum = re.compile('^OP_[A-Z0-9_]+$'); 1209 1209 self.fDebug = True; … … 2548 2548 IEMOP_MNEMONIC3, and IEMOP_MNEMONIC4 macros. 2549 2549 """ 2550 if asOperands == 0:2550 if not asOperands: 2551 2551 return self.workerIemOpMnemonicEx(sMacro, sLower, sLower, sForm, sUpper, sLower, sDisHints, sIemHints, asOperands); 2552 2552 return self.workerIemOpMnemonicEx(sMacro, sLower + '_' + '_'.join(asOperands), sLower + ' ' + ','.join(asOperands),
Note:
See TracChangeset
for help on using the changeset viewer.