Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(672)

Side by Side Diff: opcodes/i386-dis.c

Issue 11969036: Merge GDB 7.5.1 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@master
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « opcodes/i370-opc.c ('k') | opcodes/i386-gen.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « opcodes/i370-opc.c ('k') | opcodes/i386-gen.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698