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 |