| OLD | NEW |
| 1 /* Print i386 instructions for GDB, the GNU debugger. | 1 /* Print i386 instructions for GDB, the GNU debugger. |
| 2 Copyright 1988, 1989, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, | 2 Copyright 1988, 1989, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, |
| 3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 | 3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 |
| 4 Free Software Foundation, Inc. | 4 Free Software Foundation, Inc. |
| 5 | 5 |
| 6 This file is part of the GNU opcodes library. | 6 This file is part of the GNU opcodes library. |
| 7 | 7 |
| 8 This library is free software; you can redistribute it and/or modify | 8 This library is free software; you can redistribute it and/or modify |
| 9 it under the terms of the GNU General Public License as published by | 9 it under the terms of the GNU General Public License as published by |
| 10 the Free Software Foundation; either version 3, or (at your option) | 10 the Free Software Foundation; either version 3, or (at your option) |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 static void VCMP_Fixup (int, int); | 101 static void VCMP_Fixup (int, int); |
| 102 static void OP_0f07 (int, int); | 102 static void OP_0f07 (int, int); |
| 103 static void OP_Monitor (int, int); | 103 static void OP_Monitor (int, int); |
| 104 static void OP_Mwait (int, int); | 104 static void OP_Mwait (int, int); |
| 105 static void NOP_Fixup1 (int, int); | 105 static void NOP_Fixup1 (int, int); |
| 106 static void NOP_Fixup2 (int, int); | 106 static void NOP_Fixup2 (int, int); |
| 107 static void OP_3DNowSuffix (int, int); | 107 static void OP_3DNowSuffix (int, int); |
| 108 static void CMP_Fixup (int, int); | 108 static void CMP_Fixup (int, int); |
| 109 static void BadOp (void); | 109 static void BadOp (void); |
| 110 static void REP_Fixup (int, int); | 110 static void REP_Fixup (int, int); |
| 111 static void HLE_Fixup1 (int, int); |
| 112 static void HLE_Fixup2 (int, int); |
| 113 static void HLE_Fixup3 (int, int); |
| 111 static void CMPXCHG8B_Fixup (int, int); | 114 static void CMPXCHG8B_Fixup (int, int); |
| 112 static void XMM_Fixup (int, int); | 115 static void XMM_Fixup (int, int); |
| 113 static void CRC32_Fixup (int, int); | 116 static void CRC32_Fixup (int, int); |
| 114 static void FXSAVE_Fixup (int, int); | 117 static void FXSAVE_Fixup (int, int); |
| 115 static void OP_LWPCB_E (int, int); | 118 static void OP_LWPCB_E (int, int); |
| 116 static void OP_LWP_E (int, int); | 119 static void OP_LWP_E (int, int); |
| 117 static void OP_Vex_2src_1 (int, int); | 120 static void OP_Vex_2src_1 (int, int); |
| 118 static void OP_Vex_2src_2 (int, int); | 121 static void OP_Vex_2src_2 (int, int); |
| 119 | 122 |
| 120 static void MOVBE_Fixup (int, int); | 123 static void MOVBE_Fixup (int, int); |
| (...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 405 /* Used handle "rep" prefix for string instructions. */ | 408 /* Used handle "rep" prefix for string instructions. */ |
| 406 #define Xbr { REP_Fixup, eSI_reg } | 409 #define Xbr { REP_Fixup, eSI_reg } |
| 407 #define Xvr { REP_Fixup, eSI_reg } | 410 #define Xvr { REP_Fixup, eSI_reg } |
| 408 #define Ybr { REP_Fixup, eDI_reg } | 411 #define Ybr { REP_Fixup, eDI_reg } |
| 409 #define Yvr { REP_Fixup, eDI_reg } | 412 #define Yvr { REP_Fixup, eDI_reg } |
| 410 #define Yzr { REP_Fixup, eDI_reg } | 413 #define Yzr { REP_Fixup, eDI_reg } |
| 411 #define indirDXr { REP_Fixup, indir_dx_reg } | 414 #define indirDXr { REP_Fixup, indir_dx_reg } |
| 412 #define ALr { REP_Fixup, al_reg } | 415 #define ALr { REP_Fixup, al_reg } |
| 413 #define eAXr { REP_Fixup, eAX_reg } | 416 #define eAXr { REP_Fixup, eAX_reg } |
| 414 | 417 |
| 418 /* Used handle HLE prefix for lockable instructions. */ |
| 419 #define Ebh1 { HLE_Fixup1, b_mode } |
| 420 #define Evh1 { HLE_Fixup1, v_mode } |
| 421 #define Ebh2 { HLE_Fixup2, b_mode } |
| 422 #define Evh2 { HLE_Fixup2, v_mode } |
| 423 #define Ebh3 { HLE_Fixup3, b_mode } |
| 424 #define Evh3 { HLE_Fixup3, v_mode } |
| 425 |
| 415 #define cond_jump_flag { NULL, cond_jump_mode } | 426 #define cond_jump_flag { NULL, cond_jump_mode } |
| 416 #define loop_jcxz_flag { NULL, loop_jcxz_mode } | 427 #define loop_jcxz_flag { NULL, loop_jcxz_mode } |
| 417 | 428 |
| 418 /* bits in sizeflag */ | 429 /* bits in sizeflag */ |
| 419 #define SUFFIX_ALWAYS 4 | 430 #define SUFFIX_ALWAYS 4 |
| 420 #define AFLAG 2 | 431 #define AFLAG 2 |
| 421 #define DFLAG 1 | 432 #define DFLAG 1 |
| 422 | 433 |
| 423 enum | 434 enum |
| 424 { | 435 { |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 635 REG_VEX_0F38F3, | 646 REG_VEX_0F38F3, |
| 636 REG_XOP_LWPCB, | 647 REG_XOP_LWPCB, |
| 637 REG_XOP_LWP, | 648 REG_XOP_LWP, |
| 638 REG_XOP_TBM_01, | 649 REG_XOP_TBM_01, |
| 639 REG_XOP_TBM_02 | 650 REG_XOP_TBM_02 |
| 640 }; | 651 }; |
| 641 | 652 |
| 642 enum | 653 enum |
| 643 { | 654 { |
| 644 MOD_8D = 0, | 655 MOD_8D = 0, |
| 656 MOD_C6_REG_7, |
| 657 MOD_C7_REG_7, |
| 645 MOD_0F01_REG_0, | 658 MOD_0F01_REG_0, |
| 646 MOD_0F01_REG_1, | 659 MOD_0F01_REG_1, |
| 647 MOD_0F01_REG_2, | 660 MOD_0F01_REG_2, |
| 648 MOD_0F01_REG_3, | 661 MOD_0F01_REG_3, |
| 649 MOD_0F01_REG_7, | 662 MOD_0F01_REG_7, |
| 650 MOD_0F12_PREFIX_0, | 663 MOD_0F12_PREFIX_0, |
| 651 MOD_0F13, | 664 MOD_0F13, |
| 652 MOD_0F16_PREFIX_0, | 665 MOD_0F16_PREFIX_0, |
| 653 MOD_0F17, | 666 MOD_0F17, |
| 654 MOD_0F18_REG_0, | 667 MOD_0F18_REG_0, |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 723 MOD_VEX_0F382D_PREFIX_2, | 736 MOD_VEX_0F382D_PREFIX_2, |
| 724 MOD_VEX_0F382E_PREFIX_2, | 737 MOD_VEX_0F382E_PREFIX_2, |
| 725 MOD_VEX_0F382F_PREFIX_2, | 738 MOD_VEX_0F382F_PREFIX_2, |
| 726 MOD_VEX_0F385A_PREFIX_2, | 739 MOD_VEX_0F385A_PREFIX_2, |
| 727 MOD_VEX_0F388C_PREFIX_2, | 740 MOD_VEX_0F388C_PREFIX_2, |
| 728 MOD_VEX_0F388E_PREFIX_2, | 741 MOD_VEX_0F388E_PREFIX_2, |
| 729 }; | 742 }; |
| 730 | 743 |
| 731 enum | 744 enum |
| 732 { | 745 { |
| 733 RM_0F01_REG_0 = 0, | 746 RM_C6_REG_7 = 0, |
| 747 RM_C7_REG_7, |
| 748 RM_0F01_REG_0, |
| 734 RM_0F01_REG_1, | 749 RM_0F01_REG_1, |
| 735 RM_0F01_REG_2, | 750 RM_0F01_REG_2, |
| 736 RM_0F01_REG_3, | 751 RM_0F01_REG_3, |
| 737 RM_0F01_REG_7, | 752 RM_0F01_REG_7, |
| 738 RM_0FAE_REG_5, | 753 RM_0FAE_REG_5, |
| 739 RM_0FAE_REG_6, | 754 RM_0FAE_REG_6, |
| 740 RM_0FAE_REG_7 | 755 RM_0FAE_REG_7 |
| 741 }; | 756 }; |
| 742 | 757 |
| 743 enum | 758 enum |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 829 PREFIX_0F3880, | 844 PREFIX_0F3880, |
| 830 PREFIX_0F3881, | 845 PREFIX_0F3881, |
| 831 PREFIX_0F3882, | 846 PREFIX_0F3882, |
| 832 PREFIX_0F38DB, | 847 PREFIX_0F38DB, |
| 833 PREFIX_0F38DC, | 848 PREFIX_0F38DC, |
| 834 PREFIX_0F38DD, | 849 PREFIX_0F38DD, |
| 835 PREFIX_0F38DE, | 850 PREFIX_0F38DE, |
| 836 PREFIX_0F38DF, | 851 PREFIX_0F38DF, |
| 837 PREFIX_0F38F0, | 852 PREFIX_0F38F0, |
| 838 PREFIX_0F38F1, | 853 PREFIX_0F38F1, |
| 854 PREFIX_0F38F6, |
| 839 PREFIX_0F3A08, | 855 PREFIX_0F3A08, |
| 840 PREFIX_0F3A09, | 856 PREFIX_0F3A09, |
| 841 PREFIX_0F3A0A, | 857 PREFIX_0F3A0A, |
| 842 PREFIX_0F3A0B, | 858 PREFIX_0F3A0B, |
| 843 PREFIX_0F3A0C, | 859 PREFIX_0F3A0C, |
| 844 PREFIX_0F3A0D, | 860 PREFIX_0F3A0D, |
| 845 PREFIX_0F3A0E, | 861 PREFIX_0F3A0E, |
| 846 PREFIX_0F3A14, | 862 PREFIX_0F3A14, |
| 847 PREFIX_0F3A15, | 863 PREFIX_0F3A15, |
| 848 PREFIX_0F3A16, | 864 PREFIX_0F3A16, |
| (...skipping 790 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1639 "LW" => print 'd', 'q' depending on the VEX.W bit | 1655 "LW" => print 'd', 'q' depending on the VEX.W bit |
| 1640 | 1656 |
| 1641 Many of the above letters print nothing in Intel mode. See "putop" | 1657 Many of the above letters print nothing in Intel mode. See "putop" |
| 1642 for the details. | 1658 for the details. |
| 1643 | 1659 |
| 1644 Braces '{' and '}', and vertical bars '|', indicate alternative | 1660 Braces '{' and '}', and vertical bars '|', indicate alternative |
| 1645 mnemonic strings for AT&T and Intel. */ | 1661 mnemonic strings for AT&T and Intel. */ |
| 1646 | 1662 |
| 1647 static const struct dis386 dis386[] = { | 1663 static const struct dis386 dis386[] = { |
| 1648 /* 00 */ | 1664 /* 00 */ |
| 1649 { "addB",» » { Eb, Gb } }, | 1665 { "addB",» » { Ebh1, Gb } }, |
| 1650 { "addS",» » { Ev, Gv } }, | 1666 { "addS",» » { Evh1, Gv } }, |
| 1651 { "addB", { Gb, EbS } }, | 1667 { "addB", { Gb, EbS } }, |
| 1652 { "addS", { Gv, EvS } }, | 1668 { "addS", { Gv, EvS } }, |
| 1653 { "addB", { AL, Ib } }, | 1669 { "addB", { AL, Ib } }, |
| 1654 { "addS", { eAX, Iv } }, | 1670 { "addS", { eAX, Iv } }, |
| 1655 { X86_64_TABLE (X86_64_06) }, | 1671 { X86_64_TABLE (X86_64_06) }, |
| 1656 { X86_64_TABLE (X86_64_07) }, | 1672 { X86_64_TABLE (X86_64_07) }, |
| 1657 /* 08 */ | 1673 /* 08 */ |
| 1658 { "orB",» » { Eb, Gb } }, | 1674 { "orB",» » { Ebh1, Gb } }, |
| 1659 { "orS",» » { Ev, Gv } }, | 1675 { "orS",» » { Evh1, Gv } }, |
| 1660 { "orB", { Gb, EbS } }, | 1676 { "orB", { Gb, EbS } }, |
| 1661 { "orS", { Gv, EvS } }, | 1677 { "orS", { Gv, EvS } }, |
| 1662 { "orB", { AL, Ib } }, | 1678 { "orB", { AL, Ib } }, |
| 1663 { "orS", { eAX, Iv } }, | 1679 { "orS", { eAX, Iv } }, |
| 1664 { X86_64_TABLE (X86_64_0D) }, | 1680 { X86_64_TABLE (X86_64_0D) }, |
| 1665 { Bad_Opcode }, /* 0x0f extended opcode escape */ | 1681 { Bad_Opcode }, /* 0x0f extended opcode escape */ |
| 1666 /* 10 */ | 1682 /* 10 */ |
| 1667 { "adcB",» » { Eb, Gb } }, | 1683 { "adcB",» » { Ebh1, Gb } }, |
| 1668 { "adcS",» » { Ev, Gv } }, | 1684 { "adcS",» » { Evh1, Gv } }, |
| 1669 { "adcB", { Gb, EbS } }, | 1685 { "adcB", { Gb, EbS } }, |
| 1670 { "adcS", { Gv, EvS } }, | 1686 { "adcS", { Gv, EvS } }, |
| 1671 { "adcB", { AL, Ib } }, | 1687 { "adcB", { AL, Ib } }, |
| 1672 { "adcS", { eAX, Iv } }, | 1688 { "adcS", { eAX, Iv } }, |
| 1673 { X86_64_TABLE (X86_64_16) }, | 1689 { X86_64_TABLE (X86_64_16) }, |
| 1674 { X86_64_TABLE (X86_64_17) }, | 1690 { X86_64_TABLE (X86_64_17) }, |
| 1675 /* 18 */ | 1691 /* 18 */ |
| 1676 { "sbbB",» » { Eb, Gb } }, | 1692 { "sbbB",» » { Ebh1, Gb } }, |
| 1677 { "sbbS",» » { Ev, Gv } }, | 1693 { "sbbS",» » { Evh1, Gv } }, |
| 1678 { "sbbB", { Gb, EbS } }, | 1694 { "sbbB", { Gb, EbS } }, |
| 1679 { "sbbS", { Gv, EvS } }, | 1695 { "sbbS", { Gv, EvS } }, |
| 1680 { "sbbB", { AL, Ib } }, | 1696 { "sbbB", { AL, Ib } }, |
| 1681 { "sbbS", { eAX, Iv } }, | 1697 { "sbbS", { eAX, Iv } }, |
| 1682 { X86_64_TABLE (X86_64_1E) }, | 1698 { X86_64_TABLE (X86_64_1E) }, |
| 1683 { X86_64_TABLE (X86_64_1F) }, | 1699 { X86_64_TABLE (X86_64_1F) }, |
| 1684 /* 20 */ | 1700 /* 20 */ |
| 1685 { "andB",» » { Eb, Gb } }, | 1701 { "andB",» » { Ebh1, Gb } }, |
| 1686 { "andS",» » { Ev, Gv } }, | 1702 { "andS",» » { Evh1, Gv } }, |
| 1687 { "andB", { Gb, EbS } }, | 1703 { "andB", { Gb, EbS } }, |
| 1688 { "andS", { Gv, EvS } }, | 1704 { "andS", { Gv, EvS } }, |
| 1689 { "andB", { AL, Ib } }, | 1705 { "andB", { AL, Ib } }, |
| 1690 { "andS", { eAX, Iv } }, | 1706 { "andS", { eAX, Iv } }, |
| 1691 { Bad_Opcode }, /* SEG ES prefix */ | 1707 { Bad_Opcode }, /* SEG ES prefix */ |
| 1692 { X86_64_TABLE (X86_64_27) }, | 1708 { X86_64_TABLE (X86_64_27) }, |
| 1693 /* 28 */ | 1709 /* 28 */ |
| 1694 { "subB",» » { Eb, Gb } }, | 1710 { "subB",» » { Ebh1, Gb } }, |
| 1695 { "subS",» » { Ev, Gv } }, | 1711 { "subS",» » { Evh1, Gv } }, |
| 1696 { "subB", { Gb, EbS } }, | 1712 { "subB", { Gb, EbS } }, |
| 1697 { "subS", { Gv, EvS } }, | 1713 { "subS", { Gv, EvS } }, |
| 1698 { "subB", { AL, Ib } }, | 1714 { "subB", { AL, Ib } }, |
| 1699 { "subS", { eAX, Iv } }, | 1715 { "subS", { eAX, Iv } }, |
| 1700 { Bad_Opcode }, /* SEG CS prefix */ | 1716 { Bad_Opcode }, /* SEG CS prefix */ |
| 1701 { X86_64_TABLE (X86_64_2F) }, | 1717 { X86_64_TABLE (X86_64_2F) }, |
| 1702 /* 30 */ | 1718 /* 30 */ |
| 1703 { "xorB",» » { Eb, Gb } }, | 1719 { "xorB",» » { Ebh1, Gb } }, |
| 1704 { "xorS",» » { Ev, Gv } }, | 1720 { "xorS",» » { Evh1, Gv } }, |
| 1705 { "xorB", { Gb, EbS } }, | 1721 { "xorB", { Gb, EbS } }, |
| 1706 { "xorS", { Gv, EvS } }, | 1722 { "xorS", { Gv, EvS } }, |
| 1707 { "xorB", { AL, Ib } }, | 1723 { "xorB", { AL, Ib } }, |
| 1708 { "xorS", { eAX, Iv } }, | 1724 { "xorS", { eAX, Iv } }, |
| 1709 { Bad_Opcode }, /* SEG SS prefix */ | 1725 { Bad_Opcode }, /* SEG SS prefix */ |
| 1710 { X86_64_TABLE (X86_64_37) }, | 1726 { X86_64_TABLE (X86_64_37) }, |
| 1711 /* 38 */ | 1727 /* 38 */ |
| 1712 { "cmpB", { Eb, Gb } }, | 1728 { "cmpB", { Eb, Gb } }, |
| 1713 { "cmpS", { Ev, Gv } }, | 1729 { "cmpS", { Ev, Gv } }, |
| 1714 { "cmpB", { Gb, EbS } }, | 1730 { "cmpB", { Gb, EbS } }, |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1789 { "jgeH", { Jb, XX, cond_jump_flag } }, | 1805 { "jgeH", { Jb, XX, cond_jump_flag } }, |
| 1790 { "jleH", { Jb, XX, cond_jump_flag } }, | 1806 { "jleH", { Jb, XX, cond_jump_flag } }, |
| 1791 { "jgH", { Jb, XX, cond_jump_flag } }, | 1807 { "jgH", { Jb, XX, cond_jump_flag } }, |
| 1792 /* 80 */ | 1808 /* 80 */ |
| 1793 { REG_TABLE (REG_80) }, | 1809 { REG_TABLE (REG_80) }, |
| 1794 { REG_TABLE (REG_81) }, | 1810 { REG_TABLE (REG_81) }, |
| 1795 { Bad_Opcode }, | 1811 { Bad_Opcode }, |
| 1796 { REG_TABLE (REG_82) }, | 1812 { REG_TABLE (REG_82) }, |
| 1797 { "testB", { Eb, Gb } }, | 1813 { "testB", { Eb, Gb } }, |
| 1798 { "testS", { Ev, Gv } }, | 1814 { "testS", { Ev, Gv } }, |
| 1799 { "xchgB",» » { Eb, Gb } }, | 1815 { "xchgB",» » { Ebh2, Gb } }, |
| 1800 { "xchgS",» » { Ev, Gv } }, | 1816 { "xchgS",» » { Evh2, Gv } }, |
| 1801 /* 88 */ | 1817 /* 88 */ |
| 1802 { "movB",» » { Eb, Gb } }, | 1818 { "movB",» » { Ebh3, Gb } }, |
| 1803 { "movS",» » { Ev, Gv } }, | 1819 { "movS",» » { Evh3, Gv } }, |
| 1804 { "movB", { Gb, EbS } }, | 1820 { "movB", { Gb, EbS } }, |
| 1805 { "movS", { Gv, EvS } }, | 1821 { "movS", { Gv, EvS } }, |
| 1806 { "movD", { Sv, Sw } }, | 1822 { "movD", { Sv, Sw } }, |
| 1807 { MOD_TABLE (MOD_8D) }, | 1823 { MOD_TABLE (MOD_8D) }, |
| 1808 { "movD", { Sw, Sv } }, | 1824 { "movD", { Sw, Sv } }, |
| 1809 { REG_TABLE (REG_8F) }, | 1825 { REG_TABLE (REG_8F) }, |
| 1810 /* 90 */ | 1826 /* 90 */ |
| 1811 { PREFIX_TABLE (PREFIX_90) }, | 1827 { PREFIX_TABLE (PREFIX_90) }, |
| 1812 { "xchgS", { RMeCX, eAX } }, | 1828 { "xchgS", { RMeCX, eAX } }, |
| 1813 { "xchgS", { RMeDX, eAX } }, | 1829 { "xchgS", { RMeDX, eAX } }, |
| (...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2122 { "cpuid", { XX } }, | 2138 { "cpuid", { XX } }, |
| 2123 { "btS", { Ev, Gv } }, | 2139 { "btS", { Ev, Gv } }, |
| 2124 { "shldS", { Ev, Gv, Ib } }, | 2140 { "shldS", { Ev, Gv, Ib } }, |
| 2125 { "shldS", { Ev, Gv, CL } }, | 2141 { "shldS", { Ev, Gv, CL } }, |
| 2126 { REG_TABLE (REG_0FA6) }, | 2142 { REG_TABLE (REG_0FA6) }, |
| 2127 { REG_TABLE (REG_0FA7) }, | 2143 { REG_TABLE (REG_0FA7) }, |
| 2128 /* a8 */ | 2144 /* a8 */ |
| 2129 { "pushT", { gs } }, | 2145 { "pushT", { gs } }, |
| 2130 { "popT", { gs } }, | 2146 { "popT", { gs } }, |
| 2131 { "rsm", { XX } }, | 2147 { "rsm", { XX } }, |
| 2132 { "btsS",» » { Ev, Gv } }, | 2148 { "btsS",» » { Evh1, Gv } }, |
| 2133 { "shrdS", { Ev, Gv, Ib } }, | 2149 { "shrdS", { Ev, Gv, Ib } }, |
| 2134 { "shrdS", { Ev, Gv, CL } }, | 2150 { "shrdS", { Ev, Gv, CL } }, |
| 2135 { REG_TABLE (REG_0FAE) }, | 2151 { REG_TABLE (REG_0FAE) }, |
| 2136 { "imulS", { Gv, Ev } }, | 2152 { "imulS", { Gv, Ev } }, |
| 2137 /* b0 */ | 2153 /* b0 */ |
| 2138 { "cmpxchgB",»» { Eb, Gb } }, | 2154 { "cmpxchgB",»» { Ebh1, Gb } }, |
| 2139 { "cmpxchgS",»» { Ev, Gv } }, | 2155 { "cmpxchgS",»» { Evh1, Gv } }, |
| 2140 { MOD_TABLE (MOD_0FB2) }, | 2156 { MOD_TABLE (MOD_0FB2) }, |
| 2141 { "btrS",» » { Ev, Gv } }, | 2157 { "btrS",» » { Evh1, Gv } }, |
| 2142 { MOD_TABLE (MOD_0FB4) }, | 2158 { MOD_TABLE (MOD_0FB4) }, |
| 2143 { MOD_TABLE (MOD_0FB5) }, | 2159 { MOD_TABLE (MOD_0FB5) }, |
| 2144 { "movz{bR|x}", { Gv, Eb } }, | 2160 { "movz{bR|x}", { Gv, Eb } }, |
| 2145 { "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */ | 2161 { "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */ |
| 2146 /* b8 */ | 2162 /* b8 */ |
| 2147 { PREFIX_TABLE (PREFIX_0FB8) }, | 2163 { PREFIX_TABLE (PREFIX_0FB8) }, |
| 2148 { "ud1", { XX } }, | 2164 { "ud1", { XX } }, |
| 2149 { REG_TABLE (REG_0FBA) }, | 2165 { REG_TABLE (REG_0FBA) }, |
| 2150 { "btcS",» » { Ev, Gv } }, | 2166 { "btcS",» » { Evh1, Gv } }, |
| 2151 { PREFIX_TABLE (PREFIX_0FBC) }, | 2167 { PREFIX_TABLE (PREFIX_0FBC) }, |
| 2152 { PREFIX_TABLE (PREFIX_0FBD) }, | 2168 { PREFIX_TABLE (PREFIX_0FBD) }, |
| 2153 { "movs{bR|x}", { Gv, Eb } }, | 2169 { "movs{bR|x}", { Gv, Eb } }, |
| 2154 { "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */ | 2170 { "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */ |
| 2155 /* c0 */ | 2171 /* c0 */ |
| 2156 { "xaddB",» » { Eb, Gb } }, | 2172 { "xaddB",» » { Ebh1, Gb } }, |
| 2157 { "xaddS",» » { Ev, Gv } }, | 2173 { "xaddS",» » { Evh1, Gv } }, |
| 2158 { PREFIX_TABLE (PREFIX_0FC2) }, | 2174 { PREFIX_TABLE (PREFIX_0FC2) }, |
| 2159 { PREFIX_TABLE (PREFIX_0FC3) }, | 2175 { PREFIX_TABLE (PREFIX_0FC3) }, |
| 2160 { "pinsrw", { MX, Edqw, Ib } }, | 2176 { "pinsrw", { MX, Edqw, Ib } }, |
| 2161 { "pextrw", { Gdq, MS, Ib } }, | 2177 { "pextrw", { Gdq, MS, Ib } }, |
| 2162 { "shufpX", { XM, EXx, Ib } }, | 2178 { "shufpX", { XM, EXx, Ib } }, |
| 2163 { REG_TABLE (REG_0FC7) }, | 2179 { REG_TABLE (REG_0FC7) }, |
| 2164 /* c8 */ | 2180 /* c8 */ |
| 2165 { "bswap", { RMeAX } }, | 2181 { "bswap", { RMeAX } }, |
| 2166 { "bswap", { RMeCX } }, | 2182 { "bswap", { RMeCX } }, |
| 2167 { "bswap", { RMeDX } }, | 2183 { "bswap", { RMeDX } }, |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2429 static const char *att_names_ymm[] = { | 2445 static const char *att_names_ymm[] = { |
| 2430 "%ymm0", "%ymm1", "%ymm2", "%ymm3", | 2446 "%ymm0", "%ymm1", "%ymm2", "%ymm3", |
| 2431 "%ymm4", "%ymm5", "%ymm6", "%ymm7", | 2447 "%ymm4", "%ymm5", "%ymm6", "%ymm7", |
| 2432 "%ymm8", "%ymm9", "%ymm10", "%ymm11", | 2448 "%ymm8", "%ymm9", "%ymm10", "%ymm11", |
| 2433 "%ymm12", "%ymm13", "%ymm14", "%ymm15" | 2449 "%ymm12", "%ymm13", "%ymm14", "%ymm15" |
| 2434 }; | 2450 }; |
| 2435 | 2451 |
| 2436 static const struct dis386 reg_table[][8] = { | 2452 static const struct dis386 reg_table[][8] = { |
| 2437 /* REG_80 */ | 2453 /* REG_80 */ |
| 2438 { | 2454 { |
| 2439 { "addA",» { Eb, Ib } }, | 2455 { "addA",» { Ebh1, Ib } }, |
| 2440 { "orA",» { Eb, Ib } }, | 2456 { "orA",» { Ebh1, Ib } }, |
| 2441 { "adcA",» { Eb, Ib } }, | 2457 { "adcA",» { Ebh1, Ib } }, |
| 2442 { "sbbA",» { Eb, Ib } }, | 2458 { "sbbA",» { Ebh1, Ib } }, |
| 2443 { "andA",» { Eb, Ib } }, | 2459 { "andA",» { Ebh1, Ib } }, |
| 2444 { "subA",» { Eb, Ib } }, | 2460 { "subA",» { Ebh1, Ib } }, |
| 2445 { "xorA",» { Eb, Ib } }, | 2461 { "xorA",» { Ebh1, Ib } }, |
| 2446 { "cmpA", { Eb, Ib } }, | 2462 { "cmpA", { Eb, Ib } }, |
| 2447 }, | 2463 }, |
| 2448 /* REG_81 */ | 2464 /* REG_81 */ |
| 2449 { | 2465 { |
| 2450 { "addQ",» { Ev, Iv } }, | 2466 { "addQ",» { Evh1, Iv } }, |
| 2451 { "orQ",» { Ev, Iv } }, | 2467 { "orQ",» { Evh1, Iv } }, |
| 2452 { "adcQ",» { Ev, Iv } }, | 2468 { "adcQ",» { Evh1, Iv } }, |
| 2453 { "sbbQ",» { Ev, Iv } }, | 2469 { "sbbQ",» { Evh1, Iv } }, |
| 2454 { "andQ",» { Ev, Iv } }, | 2470 { "andQ",» { Evh1, Iv } }, |
| 2455 { "subQ",» { Ev, Iv } }, | 2471 { "subQ",» { Evh1, Iv } }, |
| 2456 { "xorQ",» { Ev, Iv } }, | 2472 { "xorQ",» { Evh1, Iv } }, |
| 2457 { "cmpQ", { Ev, Iv } }, | 2473 { "cmpQ", { Ev, Iv } }, |
| 2458 }, | 2474 }, |
| 2459 /* REG_82 */ | 2475 /* REG_82 */ |
| 2460 { | 2476 { |
| 2461 { "addQ",» { Ev, sIb } }, | 2477 { "addQ",» { Evh1, sIb } }, |
| 2462 { "orQ",» { Ev, sIb } }, | 2478 { "orQ",» { Evh1, sIb } }, |
| 2463 { "adcQ",» { Ev, sIb } }, | 2479 { "adcQ",» { Evh1, sIb } }, |
| 2464 { "sbbQ",» { Ev, sIb } }, | 2480 { "sbbQ",» { Evh1, sIb } }, |
| 2465 { "andQ",» { Ev, sIb } }, | 2481 { "andQ",» { Evh1, sIb } }, |
| 2466 { "subQ",» { Ev, sIb } }, | 2482 { "subQ",» { Evh1, sIb } }, |
| 2467 { "xorQ",» { Ev, sIb } }, | 2483 { "xorQ",» { Evh1, sIb } }, |
| 2468 { "cmpQ", { Ev, sIb } }, | 2484 { "cmpQ", { Ev, sIb } }, |
| 2469 }, | 2485 }, |
| 2470 /* REG_8F */ | 2486 /* REG_8F */ |
| 2471 { | 2487 { |
| 2472 { "popU", { stackEv } }, | 2488 { "popU", { stackEv } }, |
| 2473 { XOP_8F_TABLE (XOP_09) }, | 2489 { XOP_8F_TABLE (XOP_09) }, |
| 2474 { Bad_Opcode }, | 2490 { Bad_Opcode }, |
| 2475 { Bad_Opcode }, | 2491 { Bad_Opcode }, |
| 2476 { Bad_Opcode }, | 2492 { Bad_Opcode }, |
| 2477 { XOP_8F_TABLE (XOP_09) }, | 2493 { XOP_8F_TABLE (XOP_09) }, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 2493 { "rorQ", { Ev, Ib } }, | 2509 { "rorQ", { Ev, Ib } }, |
| 2494 { "rclQ", { Ev, Ib } }, | 2510 { "rclQ", { Ev, Ib } }, |
| 2495 { "rcrQ", { Ev, Ib } }, | 2511 { "rcrQ", { Ev, Ib } }, |
| 2496 { "shlQ", { Ev, Ib } }, | 2512 { "shlQ", { Ev, Ib } }, |
| 2497 { "shrQ", { Ev, Ib } }, | 2513 { "shrQ", { Ev, Ib } }, |
| 2498 { Bad_Opcode }, | 2514 { Bad_Opcode }, |
| 2499 { "sarQ", { Ev, Ib } }, | 2515 { "sarQ", { Ev, Ib } }, |
| 2500 }, | 2516 }, |
| 2501 /* REG_C6 */ | 2517 /* REG_C6 */ |
| 2502 { | 2518 { |
| 2503 { "movA",» { Eb, Ib } }, | 2519 { "movA",» { Ebh3, Ib } }, |
| 2520 { Bad_Opcode }, |
| 2521 { Bad_Opcode }, |
| 2522 { Bad_Opcode }, |
| 2523 { Bad_Opcode }, |
| 2524 { Bad_Opcode }, |
| 2525 { Bad_Opcode }, |
| 2526 { MOD_TABLE (MOD_C6_REG_7) }, |
| 2504 }, | 2527 }, |
| 2505 /* REG_C7 */ | 2528 /* REG_C7 */ |
| 2506 { | 2529 { |
| 2507 { "movQ",» { Ev, Iv } }, | 2530 { "movQ",» { Evh3, Iv } }, |
| 2531 { Bad_Opcode }, |
| 2532 { Bad_Opcode }, |
| 2533 { Bad_Opcode }, |
| 2534 { Bad_Opcode }, |
| 2535 { Bad_Opcode }, |
| 2536 { Bad_Opcode }, |
| 2537 { MOD_TABLE (MOD_C7_REG_7) }, |
| 2508 }, | 2538 }, |
| 2509 /* REG_D0 */ | 2539 /* REG_D0 */ |
| 2510 { | 2540 { |
| 2511 { "rolA", { Eb, I1 } }, | 2541 { "rolA", { Eb, I1 } }, |
| 2512 { "rorA", { Eb, I1 } }, | 2542 { "rorA", { Eb, I1 } }, |
| 2513 { "rclA", { Eb, I1 } }, | 2543 { "rclA", { Eb, I1 } }, |
| 2514 { "rcrA", { Eb, I1 } }, | 2544 { "rcrA", { Eb, I1 } }, |
| 2515 { "shlA", { Eb, I1 } }, | 2545 { "shlA", { Eb, I1 } }, |
| 2516 { "shrA", { Eb, I1 } }, | 2546 { "shrA", { Eb, I1 } }, |
| 2517 { Bad_Opcode }, | 2547 { Bad_Opcode }, |
| (...skipping 29 matching lines...) Expand all Loading... |
| 2547 { "rcrQ", { Ev, CL } }, | 2577 { "rcrQ", { Ev, CL } }, |
| 2548 { "shlQ", { Ev, CL } }, | 2578 { "shlQ", { Ev, CL } }, |
| 2549 { "shrQ", { Ev, CL } }, | 2579 { "shrQ", { Ev, CL } }, |
| 2550 { Bad_Opcode }, | 2580 { Bad_Opcode }, |
| 2551 { "sarQ", { Ev, CL } }, | 2581 { "sarQ", { Ev, CL } }, |
| 2552 }, | 2582 }, |
| 2553 /* REG_F6 */ | 2583 /* REG_F6 */ |
| 2554 { | 2584 { |
| 2555 { "testA", { Eb, Ib } }, | 2585 { "testA", { Eb, Ib } }, |
| 2556 { Bad_Opcode }, | 2586 { Bad_Opcode }, |
| 2557 { "notA",» { Eb } }, | 2587 { "notA",» { Ebh1 } }, |
| 2558 { "negA",» { Eb } }, | 2588 { "negA",» { Ebh1 } }, |
| 2559 { "mulA", { Eb } }, /* Don't print the implicit %al register, */ | 2589 { "mulA", { Eb } }, /* Don't print the implicit %al register, */ |
| 2560 { "imulA", { Eb } }, /* to distinguish these opcodes from other */ | 2590 { "imulA", { Eb } }, /* to distinguish these opcodes from other */ |
| 2561 { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */ | 2591 { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */ |
| 2562 { "idivA", { Eb } }, /* and idiv for consistency. */ | 2592 { "idivA", { Eb } }, /* and idiv for consistency. */ |
| 2563 }, | 2593 }, |
| 2564 /* REG_F7 */ | 2594 /* REG_F7 */ |
| 2565 { | 2595 { |
| 2566 { "testQ", { Ev, Iv } }, | 2596 { "testQ", { Ev, Iv } }, |
| 2567 { Bad_Opcode }, | 2597 { Bad_Opcode }, |
| 2568 { "notQ",» { Ev } }, | 2598 { "notQ",» { Evh1 } }, |
| 2569 { "negQ",» { Ev } }, | 2599 { "negQ",» { Evh1 } }, |
| 2570 { "mulQ", { Ev } }, /* Don't print the implicit register. */ | 2600 { "mulQ", { Ev } }, /* Don't print the implicit register. */ |
| 2571 { "imulQ", { Ev } }, | 2601 { "imulQ", { Ev } }, |
| 2572 { "divQ", { Ev } }, | 2602 { "divQ", { Ev } }, |
| 2573 { "idivQ", { Ev } }, | 2603 { "idivQ", { Ev } }, |
| 2574 }, | 2604 }, |
| 2575 /* REG_FE */ | 2605 /* REG_FE */ |
| 2576 { | 2606 { |
| 2577 { "incA",» { Eb } }, | 2607 { "incA",» { Ebh1 } }, |
| 2578 { "decA",» { Eb } }, | 2608 { "decA",» { Ebh1 } }, |
| 2579 }, | 2609 }, |
| 2580 /* REG_FF */ | 2610 /* REG_FF */ |
| 2581 { | 2611 { |
| 2582 { "incQ",» { Ev } }, | 2612 { "incQ",» { Evh1 } }, |
| 2583 { "decQ",» { Ev } }, | 2613 { "decQ",» { Evh1 } }, |
| 2584 { "call{T|}", { indirEv } }, | 2614 { "call{T|}", { indirEv } }, |
| 2585 { "Jcall{T|}", { indirEp } }, | 2615 { "Jcall{T|}", { indirEp } }, |
| 2586 { "jmp{T|}", { indirEv } }, | 2616 { "jmp{T|}", { indirEv } }, |
| 2587 { "Jjmp{T|}", { indirEp } }, | 2617 { "Jjmp{T|}", { indirEp } }, |
| 2588 { "pushU", { stackEv } }, | 2618 { "pushU", { stackEv } }, |
| 2589 { Bad_Opcode }, | 2619 { Bad_Opcode }, |
| 2590 }, | 2620 }, |
| 2591 /* REG_0F00 */ | 2621 /* REG_0F00 */ |
| 2592 { | 2622 { |
| 2593 { "sldtD", { Sv } }, | 2623 { "sldtD", { Sv } }, |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2679 { MOD_TABLE (MOD_0FAE_REG_6) }, | 2709 { MOD_TABLE (MOD_0FAE_REG_6) }, |
| 2680 { MOD_TABLE (MOD_0FAE_REG_7) }, | 2710 { MOD_TABLE (MOD_0FAE_REG_7) }, |
| 2681 }, | 2711 }, |
| 2682 /* REG_0FBA */ | 2712 /* REG_0FBA */ |
| 2683 { | 2713 { |
| 2684 { Bad_Opcode }, | 2714 { Bad_Opcode }, |
| 2685 { Bad_Opcode }, | 2715 { Bad_Opcode }, |
| 2686 { Bad_Opcode }, | 2716 { Bad_Opcode }, |
| 2687 { Bad_Opcode }, | 2717 { Bad_Opcode }, |
| 2688 { "btQ", { Ev, Ib } }, | 2718 { "btQ", { Ev, Ib } }, |
| 2689 { "btsQ",» { Ev, Ib } }, | 2719 { "btsQ",» { Evh1, Ib } }, |
| 2690 { "btrQ",» { Ev, Ib } }, | 2720 { "btrQ",» { Evh1, Ib } }, |
| 2691 { "btcQ",» { Ev, Ib } }, | 2721 { "btcQ",» { Evh1, Ib } }, |
| 2692 }, | 2722 }, |
| 2693 /* REG_0FC7 */ | 2723 /* REG_0FC7 */ |
| 2694 { | 2724 { |
| 2695 { Bad_Opcode }, | 2725 { Bad_Opcode }, |
| 2696 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } }, | 2726 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } }, |
| 2697 { Bad_Opcode }, | 2727 { Bad_Opcode }, |
| 2698 { Bad_Opcode }, | 2728 { Bad_Opcode }, |
| 2699 { Bad_Opcode }, | 2729 { Bad_Opcode }, |
| 2700 { Bad_Opcode }, | 2730 { Bad_Opcode }, |
| 2701 { MOD_TABLE (MOD_0FC7_REG_6) }, | 2731 { MOD_TABLE (MOD_0FC7_REG_6) }, |
| (...skipping 747 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3449 }, | 3479 }, |
| 3450 | 3480 |
| 3451 /* PREFIX_0F38F1 */ | 3481 /* PREFIX_0F38F1 */ |
| 3452 { | 3482 { |
| 3453 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } }, | 3483 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } }, |
| 3454 { Bad_Opcode }, | 3484 { Bad_Opcode }, |
| 3455 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } }, | 3485 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } }, |
| 3456 { "crc32", { Gdq, { CRC32_Fixup, v_mode } } }, | 3486 { "crc32", { Gdq, { CRC32_Fixup, v_mode } } }, |
| 3457 }, | 3487 }, |
| 3458 | 3488 |
| 3489 /* PREFIX_0F38F6 */ |
| 3490 { |
| 3491 { Bad_Opcode }, |
| 3492 { "adoxS", { Gdq, Edq} }, |
| 3493 { "adcxS", { Gdq, Edq} }, |
| 3494 { Bad_Opcode }, |
| 3495 }, |
| 3496 |
| 3459 /* PREFIX_0F3A08 */ | 3497 /* PREFIX_0F3A08 */ |
| 3460 { | 3498 { |
| 3461 { Bad_Opcode }, | 3499 { Bad_Opcode }, |
| 3462 { Bad_Opcode }, | 3500 { Bad_Opcode }, |
| 3463 { "roundps", { XM, EXx, Ib } }, | 3501 { "roundps", { XM, EXx, Ib } }, |
| 3464 }, | 3502 }, |
| 3465 | 3503 |
| 3466 /* PREFIX_0F3A09 */ | 3504 /* PREFIX_0F3A09 */ |
| 3467 { | 3505 { |
| 3468 { Bad_Opcode }, | 3506 { Bad_Opcode }, |
| (...skipping 2550 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6019 { Bad_Opcode }, | 6057 { Bad_Opcode }, |
| 6020 { Bad_Opcode }, | 6058 { Bad_Opcode }, |
| 6021 { Bad_Opcode }, | 6059 { Bad_Opcode }, |
| 6022 /* f0 */ | 6060 /* f0 */ |
| 6023 { PREFIX_TABLE (PREFIX_0F38F0) }, | 6061 { PREFIX_TABLE (PREFIX_0F38F0) }, |
| 6024 { PREFIX_TABLE (PREFIX_0F38F1) }, | 6062 { PREFIX_TABLE (PREFIX_0F38F1) }, |
| 6025 { Bad_Opcode }, | 6063 { Bad_Opcode }, |
| 6026 { Bad_Opcode }, | 6064 { Bad_Opcode }, |
| 6027 { Bad_Opcode }, | 6065 { Bad_Opcode }, |
| 6028 { Bad_Opcode }, | 6066 { Bad_Opcode }, |
| 6029 { Bad_Opcode }, | 6067 { PREFIX_TABLE (PREFIX_0F38F6) }, |
| 6030 { Bad_Opcode }, | 6068 { Bad_Opcode }, |
| 6031 /* f8 */ | 6069 /* f8 */ |
| 6032 { Bad_Opcode }, | 6070 { Bad_Opcode }, |
| 6033 { Bad_Opcode }, | 6071 { Bad_Opcode }, |
| 6034 { Bad_Opcode }, | 6072 { Bad_Opcode }, |
| 6035 { Bad_Opcode }, | 6073 { Bad_Opcode }, |
| 6036 { Bad_Opcode }, | 6074 { Bad_Opcode }, |
| 6037 { Bad_Opcode }, | 6075 { Bad_Opcode }, |
| 6038 { Bad_Opcode }, | 6076 { Bad_Opcode }, |
| 6039 { Bad_Opcode }, | 6077 { Bad_Opcode }, |
| (...skipping 4019 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10059 { "vaeskeygenassist", { XM, EXx, Ib } }, | 10097 { "vaeskeygenassist", { XM, EXx, Ib } }, |
| 10060 }, | 10098 }, |
| 10061 }; | 10099 }; |
| 10062 | 10100 |
| 10063 static const struct dis386 mod_table[][2] = { | 10101 static const struct dis386 mod_table[][2] = { |
| 10064 { | 10102 { |
| 10065 /* MOD_8D */ | 10103 /* MOD_8D */ |
| 10066 { "leaS", { Gv, M } }, | 10104 { "leaS", { Gv, M } }, |
| 10067 }, | 10105 }, |
| 10068 { | 10106 { |
| 10107 /* MOD_C6_REG_7 */ |
| 10108 { Bad_Opcode }, |
| 10109 { RM_TABLE (RM_C6_REG_7) }, |
| 10110 }, |
| 10111 { |
| 10112 /* MOD_C7_REG_7 */ |
| 10113 { Bad_Opcode }, |
| 10114 { RM_TABLE (RM_C7_REG_7) }, |
| 10115 }, |
| 10116 { |
| 10069 /* MOD_0F01_REG_0 */ | 10117 /* MOD_0F01_REG_0 */ |
| 10070 { X86_64_TABLE (X86_64_0F01_REG_0) }, | 10118 { X86_64_TABLE (X86_64_0F01_REG_0) }, |
| 10071 { RM_TABLE (RM_0F01_REG_0) }, | 10119 { RM_TABLE (RM_0F01_REG_0) }, |
| 10072 }, | 10120 }, |
| 10073 { | 10121 { |
| 10074 /* MOD_0F01_REG_1 */ | 10122 /* MOD_0F01_REG_1 */ |
| 10075 { X86_64_TABLE (X86_64_0F01_REG_1) }, | 10123 { X86_64_TABLE (X86_64_0F01_REG_1) }, |
| 10076 { RM_TABLE (RM_0F01_REG_1) }, | 10124 { RM_TABLE (RM_0F01_REG_1) }, |
| 10077 }, | 10125 }, |
| 10078 { | 10126 { |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10277 { "lgsS", { Gv, Mp } }, | 10325 { "lgsS", { Gv, Mp } }, |
| 10278 }, | 10326 }, |
| 10279 { | 10327 { |
| 10280 /* MOD_0FC7_REG_6 */ | 10328 /* MOD_0FC7_REG_6 */ |
| 10281 { PREFIX_TABLE (PREFIX_0FC7_REG_6) }, | 10329 { PREFIX_TABLE (PREFIX_0FC7_REG_6) }, |
| 10282 { "rdrand", { Ev } }, | 10330 { "rdrand", { Ev } }, |
| 10283 }, | 10331 }, |
| 10284 { | 10332 { |
| 10285 /* MOD_0FC7_REG_7 */ | 10333 /* MOD_0FC7_REG_7 */ |
| 10286 { "vmptrst", { Mq } }, | 10334 { "vmptrst", { Mq } }, |
| 10335 { "rdseed", { Ev } }, |
| 10287 }, | 10336 }, |
| 10288 { | 10337 { |
| 10289 /* MOD_0FD7 */ | 10338 /* MOD_0FD7 */ |
| 10290 { Bad_Opcode }, | 10339 { Bad_Opcode }, |
| 10291 { "pmovmskb", { Gdq, MS } }, | 10340 { "pmovmskb", { Gdq, MS } }, |
| 10292 }, | 10341 }, |
| 10293 { | 10342 { |
| 10294 /* MOD_0FE7_PREFIX_2 */ | 10343 /* MOD_0FE7_PREFIX_2 */ |
| 10295 { "movntdq", { Mx, XM } }, | 10344 { "movntdq", { Mx, XM } }, |
| 10296 }, | 10345 }, |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10447 { "vpmaskmov%LW", { XM, Vex, Mx } }, | 10496 { "vpmaskmov%LW", { XM, Vex, Mx } }, |
| 10448 }, | 10497 }, |
| 10449 { | 10498 { |
| 10450 /* MOD_VEX_0F388E_PREFIX_2 */ | 10499 /* MOD_VEX_0F388E_PREFIX_2 */ |
| 10451 { "vpmaskmov%LW", { Mx, Vex, XM } }, | 10500 { "vpmaskmov%LW", { Mx, Vex, XM } }, |
| 10452 }, | 10501 }, |
| 10453 }; | 10502 }; |
| 10454 | 10503 |
| 10455 static const struct dis386 rm_table[][8] = { | 10504 static const struct dis386 rm_table[][8] = { |
| 10456 { | 10505 { |
| 10506 /* RM_C6_REG_7 */ |
| 10507 { "xabort", { Skip_MODRM, Ib } }, |
| 10508 }, |
| 10509 { |
| 10510 /* RM_C7_REG_7 */ |
| 10511 { "xbeginT", { Skip_MODRM, Jv } }, |
| 10512 }, |
| 10513 { |
| 10457 /* RM_0F01_REG_0 */ | 10514 /* RM_0F01_REG_0 */ |
| 10458 { Bad_Opcode }, | 10515 { Bad_Opcode }, |
| 10459 { "vmcall", { Skip_MODRM } }, | 10516 { "vmcall", { Skip_MODRM } }, |
| 10460 { "vmlaunch", { Skip_MODRM } }, | 10517 { "vmlaunch", { Skip_MODRM } }, |
| 10461 { "vmresume", { Skip_MODRM } }, | 10518 { "vmresume", { Skip_MODRM } }, |
| 10462 { "vmxoff", { Skip_MODRM } }, | 10519 { "vmxoff", { Skip_MODRM } }, |
| 10463 }, | 10520 }, |
| 10464 { | 10521 { |
| 10465 /* RM_0F01_REG_1 */ | 10522 /* RM_0F01_REG_1 */ |
| 10466 { "monitor", { { OP_Monitor, 0 } } }, | 10523 { "monitor", { { OP_Monitor, 0 } } }, |
| 10467 { "mwait", { { OP_Mwait, 0 } } }, | 10524 { "mwait", { { OP_Mwait, 0 } } }, |
| 10468 }, | 10525 }, |
| 10469 { | 10526 { |
| 10470 /* RM_0F01_REG_2 */ | 10527 /* RM_0F01_REG_2 */ |
| 10471 { "xgetbv", { Skip_MODRM } }, | 10528 { "xgetbv", { Skip_MODRM } }, |
| 10472 { "xsetbv", { Skip_MODRM } }, | 10529 { "xsetbv", { Skip_MODRM } }, |
| 10530 { Bad_Opcode }, |
| 10531 { Bad_Opcode }, |
| 10532 { "vmfunc", { Skip_MODRM } }, |
| 10533 { "xend", { Skip_MODRM } }, |
| 10534 { "xtest", { Skip_MODRM } }, |
| 10535 { Bad_Opcode }, |
| 10473 }, | 10536 }, |
| 10474 { | 10537 { |
| 10475 /* RM_0F01_REG_3 */ | 10538 /* RM_0F01_REG_3 */ |
| 10476 { "vmrun", { Skip_MODRM } }, | 10539 { "vmrun", { Skip_MODRM } }, |
| 10477 { "vmmcall", { Skip_MODRM } }, | 10540 { "vmmcall", { Skip_MODRM } }, |
| 10478 { "vmload", { Skip_MODRM } }, | 10541 { "vmload", { Skip_MODRM } }, |
| 10479 { "vmsave", { Skip_MODRM } }, | 10542 { "vmsave", { Skip_MODRM } }, |
| 10480 { "stgi", { Skip_MODRM } }, | 10543 { "stgi", { Skip_MODRM } }, |
| 10481 { "clgi", { Skip_MODRM } }, | 10544 { "clgi", { Skip_MODRM } }, |
| 10482 { "skinit", { Skip_MODRM } }, | 10545 { "skinit", { Skip_MODRM } }, |
| (...skipping 20 matching lines...) Expand all Loading... |
| 10503 | 10566 |
| 10504 #define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>") | 10567 #define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>") |
| 10505 | 10568 |
| 10506 /* We use the high bit to indicate different name for the same | 10569 /* We use the high bit to indicate different name for the same |
| 10507 prefix. */ | 10570 prefix. */ |
| 10508 #define ADDR16_PREFIX (0x67 | 0x100) | 10571 #define ADDR16_PREFIX (0x67 | 0x100) |
| 10509 #define ADDR32_PREFIX (0x67 | 0x200) | 10572 #define ADDR32_PREFIX (0x67 | 0x200) |
| 10510 #define DATA16_PREFIX (0x66 | 0x100) | 10573 #define DATA16_PREFIX (0x66 | 0x100) |
| 10511 #define DATA32_PREFIX (0x66 | 0x200) | 10574 #define DATA32_PREFIX (0x66 | 0x200) |
| 10512 #define REP_PREFIX (0xf3 | 0x100) | 10575 #define REP_PREFIX (0xf3 | 0x100) |
| 10576 #define XACQUIRE_PREFIX (0xf2 | 0x200) |
| 10577 #define XRELEASE_PREFIX (0xf3 | 0x400) |
| 10513 | 10578 |
| 10514 static int | 10579 static int |
| 10515 ckprefix (void) | 10580 ckprefix (void) |
| 10516 { | 10581 { |
| 10517 int newrex, i, length; | 10582 int newrex, i, length; |
| 10518 rex = 0; | 10583 rex = 0; |
| 10519 rex_ignored = 0; | 10584 rex_ignored = 0; |
| 10520 prefixes = 0; | 10585 prefixes = 0; |
| 10521 used_prefixes = 0; | 10586 used_prefixes = 0; |
| 10522 rex_used = 0; | 10587 rex_used = 0; |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10733 case ADDR16_PREFIX: | 10798 case ADDR16_PREFIX: |
| 10734 return "addr16"; | 10799 return "addr16"; |
| 10735 case ADDR32_PREFIX: | 10800 case ADDR32_PREFIX: |
| 10736 return "addr32"; | 10801 return "addr32"; |
| 10737 case DATA16_PREFIX: | 10802 case DATA16_PREFIX: |
| 10738 return "data16"; | 10803 return "data16"; |
| 10739 case DATA32_PREFIX: | 10804 case DATA32_PREFIX: |
| 10740 return "data32"; | 10805 return "data32"; |
| 10741 case REP_PREFIX: | 10806 case REP_PREFIX: |
| 10742 return "rep"; | 10807 return "rep"; |
| 10808 case XACQUIRE_PREFIX: |
| 10809 return "xacquire"; |
| 10810 case XRELEASE_PREFIX: |
| 10811 return "xrelease"; |
| 10743 default: | 10812 default: |
| 10744 return NULL; | 10813 return NULL; |
| 10745 } | 10814 } |
| 10746 } | 10815 } |
| 10747 | 10816 |
| 10748 static char op_out[MAX_OPERANDS][100]; | 10817 static char op_out[MAX_OPERANDS][100]; |
| 10749 static int op_ad, op_index[MAX_OPERANDS]; | 10818 static int op_ad, op_index[MAX_OPERANDS]; |
| 10750 static int two_source_ops; | 10819 static int two_source_ops; |
| 10751 static bfd_vma op_address[MAX_OPERANDS]; | 10820 static bfd_vma op_address[MAX_OPERANDS]; |
| 10752 static bfd_vma op_riprel[MAX_OPERANDS]; | 10821 static bfd_vma op_riprel[MAX_OPERANDS]; |
| (...skipping 3598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14351 break; | 14420 break; |
| 14352 case eSI_reg: | 14421 case eSI_reg: |
| 14353 OP_DSreg (bytemode, sizeflag); | 14422 OP_DSreg (bytemode, sizeflag); |
| 14354 break; | 14423 break; |
| 14355 default: | 14424 default: |
| 14356 abort (); | 14425 abort (); |
| 14357 break; | 14426 break; |
| 14358 } | 14427 } |
| 14359 } | 14428 } |
| 14360 | 14429 |
| 14430 /* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as |
| 14431 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix. |
| 14432 */ |
| 14433 |
| 14434 static void |
| 14435 HLE_Fixup1 (int bytemode, int sizeflag) |
| 14436 { |
| 14437 if (modrm.mod != 3 |
| 14438 && (prefixes & PREFIX_LOCK) != 0) |
| 14439 { |
| 14440 if (prefixes & PREFIX_REPZ) |
| 14441 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX; |
| 14442 if (prefixes & PREFIX_REPNZ) |
| 14443 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX; |
| 14444 } |
| 14445 |
| 14446 OP_E (bytemode, sizeflag); |
| 14447 } |
| 14448 |
| 14449 /* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as |
| 14450 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix. |
| 14451 */ |
| 14452 |
| 14453 static void |
| 14454 HLE_Fixup2 (int bytemode, int sizeflag) |
| 14455 { |
| 14456 if (modrm.mod != 3) |
| 14457 { |
| 14458 if (prefixes & PREFIX_REPZ) |
| 14459 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX; |
| 14460 if (prefixes & PREFIX_REPNZ) |
| 14461 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX; |
| 14462 } |
| 14463 |
| 14464 OP_E (bytemode, sizeflag); |
| 14465 } |
| 14466 |
| 14467 /* Similar to OP_E. But the 0xf3 prefixes should be displayed as |
| 14468 "xrelease" for memory operand. No check for LOCK prefix. */ |
| 14469 |
| 14470 static void |
| 14471 HLE_Fixup3 (int bytemode, int sizeflag) |
| 14472 { |
| 14473 if (modrm.mod != 3 |
| 14474 && last_repz_prefix > last_repnz_prefix |
| 14475 && (prefixes & PREFIX_REPZ) != 0) |
| 14476 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX; |
| 14477 |
| 14478 OP_E (bytemode, sizeflag); |
| 14479 } |
| 14480 |
| 14361 static void | 14481 static void |
| 14362 CMPXCHG8B_Fixup (int bytemode, int sizeflag) | 14482 CMPXCHG8B_Fixup (int bytemode, int sizeflag) |
| 14363 { | 14483 { |
| 14364 USED_REX (REX_W); | 14484 USED_REX (REX_W); |
| 14365 if (rex & REX_W) | 14485 if (rex & REX_W) |
| 14366 { | 14486 { |
| 14367 /* Change cmpxchg8b to cmpxchg16b. */ | 14487 /* Change cmpxchg8b to cmpxchg16b. */ |
| 14368 char *p = mnemonicendp - 2; | 14488 char *p = mnemonicendp - 2; |
| 14369 mnemonicendp = stpcpy (p, "16b"); | 14489 mnemonicendp = stpcpy (p, "16b"); |
| 14370 bytemode = o_mode; | 14490 bytemode = o_mode; |
| 14371 } | 14491 } |
| 14492 else if ((prefixes & PREFIX_LOCK) != 0) |
| 14493 { |
| 14494 if (prefixes & PREFIX_REPZ) |
| 14495 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX; |
| 14496 if (prefixes & PREFIX_REPNZ) |
| 14497 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX; |
| 14498 } |
| 14499 |
| 14372 OP_M (bytemode, sizeflag); | 14500 OP_M (bytemode, sizeflag); |
| 14373 } | 14501 } |
| 14374 | 14502 |
| 14375 static void | 14503 static void |
| 14376 XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED) | 14504 XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED) |
| 14377 { | 14505 { |
| 14378 const char **names; | 14506 const char **names; |
| 14379 | 14507 |
| 14380 if (need_vex) | 14508 if (need_vex) |
| 14381 { | 14509 { |
| (...skipping 676 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15058 const char **names; | 15186 const char **names; |
| 15059 | 15187 |
| 15060 if (vex.w) | 15188 if (vex.w) |
| 15061 names = names64; | 15189 names = names64; |
| 15062 else | 15190 else |
| 15063 names = names32; | 15191 names = names32; |
| 15064 | 15192 |
| 15065 oappend (names[vex.register_specifier]); | 15193 oappend (names[vex.register_specifier]); |
| 15066 } | 15194 } |
| 15067 | 15195 |
| OLD | NEW |