MdOpCodes.h 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft Corporation and contributors. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. #define o(form) OPBYTE_ ## form
  6. #ifndef f
  7. # define f(form) FORM_ ## form
  8. #endif
  9. // opcode layout attribute byte2 form opbyte dope leadin legal form
  10. MACRO(ADD , Reg2 , OpSideEffect , R000 , f(BINOP) , o(ADD) , DOPEQ|DSETCC|DCOMMOP , OLB_NONE , LEGAL_RM_RM_RMI)
  11. MACRO(ADDPD , Reg2 , None , RNON , f(MODRM) , o(ADDPD) , DNO16|DOPEQ|D66|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  12. MACRO(ADDPS , Reg2 , None , RNON , f(MODRM) , o(ADDPS) , DNO16|DOPEQ|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  13. MACRO(ADDSD , Reg2 , None , RNON , f(MODRM) , o(ADDSD) , DNO16|DOPEQ|DCOMMOP|DF2 , OLB_0F , LEGAL_R_R_RM )
  14. MACRO(ADDSS , Reg2 , None , RNON , f(MODRM) , o(ADDSS) , DNO16|DOPEQ|DF3|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  15. MACRO(AND , Reg2 , OpSideEffect , R100 , f(BINOP) , o(AND) , DOPEQ|DSETCC|DCOMMOP , OLB_NONE , LEGAL_RM_RM_RMI)
  16. MACRO(ANDNPD , Reg2 , None , RNON , f(MODRM) , o(ANDNPD) , DNO16|DOPEQ|D66 , OLB_NONE , LEGAL_R_R_RM )
  17. MACRO(ANDNPS , Reg2 , None , RNON , f(MODRM) , o(ANDNPS) , DNO16|DOPEQ , OLB_0F , LEGAL_R_R_RM )
  18. MACRO(ANDPD , Reg2 , None , RNON , f(MODRM) , o(ANDPD) , DNO16|DOPEQ|D66|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  19. MACRO(ANDPS , Reg2 , None , RNON , f(MODRM) , o(ANDPS) , DNO16|DOPEQ|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  20. MACRO(BSF , Reg2 , None , RNON , f(MODRM) , o(BSF) , DDST|DSETCC , OLB_0F , LEGAL_R_RM )
  21. MACRO(BSR , Reg2 , None , RNON , f(MODRM) , o(BSR) , DDST|DSETCC , OLB_0F , LEGAL_R_RM )
  22. MACRO(BT , Reg2 , OpSideEffect , R100 , f(SPMOD) , o(BT) , DSETCC , OLB_0F , LEGAL_N_RM_RI )
  23. MACRO(BTR , Reg2 , OpSideEffect , R110 , f(SPMOD) , o(BTR) , DOPEQ|DSETCC , OLB_0F , LEGAL_RM_RM_RI )
  24. MACRO(BTS , Reg2 , OpSideEffect , R101 , f(SPMOD) , o(BTS) , DOPEQ|DSETCC , OLB_0F , LEGAL_RM_RM_RI )
  25. MACRO(CALL , CallI , OpSideEffect , R010 , f(CALL) , o(CALL) , DSETCC , OLB_NONE , LEGAL_CALL )
  26. MACRO(CDQ , Empty , OpSideEffect , RNON , f(NO) , o(CDQ) , DNO16 , OLB_NONE , LEGAL_R )
  27. MACRO(CMOVA , Reg2 , None , RNON , f(MODRM) , o(CMOVA) , DDST|DUSECC , OLB_0F , LEGAL_CUSTOM )
  28. MACRO(CMOVAE , Reg2 , None , RNON , f(MODRM) , o(CMOVAE) , DDST|DUSECC , OLB_0F , LEGAL_CUSTOM )
  29. MACRO(CMOVB , Reg2 , None , RNON , f(MODRM) , o(CMOVB) , DDST|DUSECC , OLB_0F , LEGAL_CUSTOM )
  30. MACRO(CMOVBE , Reg2 , None , RNON , f(MODRM) , o(CMOVBE) , DDST|DUSECC , OLB_0F , LEGAL_CUSTOM )
  31. MACRO(CMOVE , Reg2 , None , RNON , f(MODRM) , o(CMOVE) , DDST|DUSECC , OLB_0F , LEGAL_CUSTOM )
  32. MACRO(CMOVG , Reg2 , None , RNON , f(MODRM) , o(CMOVG) , DDST|DUSECC , OLB_0F , LEGAL_CUSTOM )
  33. MACRO(CMOVGE , Reg2 , None , RNON , f(MODRM) , o(CMOVGE) , DDST|DUSECC , OLB_0F , LEGAL_CUSTOM )
  34. MACRO(CMOVL , Reg2 , None , RNON , f(MODRM) , o(CMOVL) , DDST|DUSECC , OLB_0F , LEGAL_CUSTOM )
  35. MACRO(CMOVLE , Reg2 , None , RNON , f(MODRM) , o(CMOVLE) , DDST|DUSECC , OLB_0F , LEGAL_CUSTOM )
  36. MACRO(CMOVNE , Reg2 , None , RNON , f(MODRM) , o(CMOVNE) , DDST|DUSECC , OLB_0F , LEGAL_CUSTOM )
  37. MACRO(CMOVNO , Reg2 , None , RNON , f(MODRM) , o(CMOVNO) , DDST|DUSECC , OLB_0F , LEGAL_CUSTOM )
  38. MACRO(CMOVNP , Reg2 , None , RNON , f(MODRM) , o(CMOVNP) , DDST|DUSECC , OLB_0F , LEGAL_CUSTOM )
  39. MACRO(CMOVNS , Reg2 , None , RNON , f(MODRM) , o(CMOVNS) , DDST|DUSECC , OLB_0F , LEGAL_CUSTOM )
  40. MACRO(CMOVO , Reg2 , None , RNON , f(MODRM) , o(CMOVO) , DDST|DUSECC , OLB_0F , LEGAL_CUSTOM )
  41. MACRO(CMOVP , Reg2 , None , RNON , f(MODRM) , o(CMOVP) , DDST|DUSECC , OLB_0F , LEGAL_CUSTOM )
  42. MACRO(CMOVS , Reg2 , None , RNON , f(MODRM) , o(CMOVS) , DDST|DUSECC , OLB_0F , LEGAL_CUSTOM )
  43. MACRO(CMP , Empty , OpSideEffect , R111 , f(BINOP) , o(CMP) , DSETCC , OLB_NONE , LEGAL_N_RM_RMI )
  44. MACRO(CMPEQPD , Empty , None , RNON , f(MODRM) , o(CMPPD) , D66|DSSE|DOPEQ , OLB_0F , LEGAL_R_R_RM )
  45. MACRO(CMPEQPS , Empty , None , RNON , f(MODRM) , o(CMPPS) , DSSE|DOPEQ , OLB_0F , LEGAL_R_R_RM )
  46. MACRO(CMPLEPD , Empty , None , RNON , f(MODRM) , o(CMPPD) , D66|DSSE|DOPEQ , OLB_0F , LEGAL_R_R_RM )
  47. MACRO(CMPLEPS , Empty , None , RNON , f(MODRM) , o(CMPPS) , DSSE|DOPEQ , OLB_0F , LEGAL_R_R_RM )
  48. MACRO(CMPLTPD , Empty , None , RNON , f(MODRM) , o(CMPPD) , D66|DSSE|DOPEQ , OLB_0F , LEGAL_R_R_RM )
  49. MACRO(CMPLTPS , Empty , None , RNON , f(MODRM) , o(CMPPS) , DSSE|DOPEQ , OLB_0F , LEGAL_R_R_RM )
  50. MACRO(CMPNEQPD , Empty , None , RNON , f(MODRM) , o(CMPPD) , D66|DSSE|DOPEQ , OLB_0F , LEGAL_R_R_RM )
  51. MACRO(CMPNEQPS , Empty , None , RNON , f(MODRM) , o(CMPPS) , DSSE|DOPEQ , OLB_0F , LEGAL_R_R_RM )
  52. MACRO(CMPUNORDPS , Empty , None , RNON , f(MODRM) , o(CMPPS) , DSSE|DOPEQ , OLB_0F , LEGAL_R_R_RM )
  53. MACRO(CMPXCHG8B , Reg1 , OpSideEffect , R001 , f(SPMOD) , o(CMPXCHG8B) , DNO16|DSETCC , OLB_0F , LEGAL_CUSTOM )
  54. MACRO(COMISD , Empty , OpSideEffect , RNON , f(MODRM) , o(COMISD) , DNO16|D66|DSETCC , OLB_0F , LEGAL_N_R_RM )
  55. MACRO(COMISS , Empty , OpSideEffect , RNON , f(MODRM) , o(COMISS) , DNO16|DSETCC , OLB_0F , LEGAL_N_R_RM )
  56. MACRO(CQO , Empty , OpSideEffect , RNON , f(NO) , o(CQO) , DNO16 , OLB_NONE , LEGAL_R )
  57. MACRO(CVTDQ2PD , Reg2 , None , RNON , f(MODRM) , o(CVTDQ2PD) , DDST|DNO16|DF3 , OLB_0F , LEGAL_R_RM )
  58. MACRO(CVTDQ2PS , Reg2 , None , RNON , f(MODRM) , o(CVTDQ2PS) , DDST|DNO16 , OLB_0F , LEGAL_R_RM )
  59. MACRO(CVTPD2PS , Reg2 , None , RNON , f(MODRM) , o(CVTPD2PS) , DDST|DNO16|D66 , OLB_0F , LEGAL_R_RM )
  60. MACRO(CVTPS2PD , Reg2 , None , RNON , f(MODRM) , o(CVTPS2PD) , DDST|DNO16 , OLB_0F , LEGAL_R_RM )
  61. MACRO(CVTSD2SI , Reg2 , None , RNON , f(MODRM) , o(CVTSD2SI) , DDST|DNO16|DF2 , OLB_0F , LEGAL_R_RM )
  62. MACRO(CVTSD2SS , Reg2 , None , RNON , f(MODRM) , o(CVTSD2SS) , DDST|DNO16|DF2 , OLB_0F , LEGAL_R_RM )
  63. MACRO(CVTSI2SD , Reg2 , None , RNON , f(MODRM) , o(CVTSI2SD) , DDST|DNO16|DF2|DREXSRC , OLB_0F , LEGAL_R_RM )
  64. MACRO(CVTSI2SS , Reg2 , None , RNON , f(MODRM) , o(CVTSI2SS) , DDST|DNO16|DF3|DREXSRC , OLB_0F , LEGAL_R_RM )
  65. MACRO(CVTSS2SD , Reg2 , None , RNON , f(MODRM) , o(CVTSS2SD) , DDST|DNO16|DF3 , OLB_0F , LEGAL_R_RM )
  66. MACRO(CVTSS2SI , Reg2 , None , RNON , f(MODRM) , o(CVTSS2SI) , DDST|DNO16|DF3 , OLB_0F , LEGAL_R_RM )
  67. MACRO(CVTTPD2DQ , Reg2 , None , RNON , f(MODRM) , o(CVTTPD2DQ) , DDST|DNO16|D66 , OLB_0F , LEGAL_R_RM )
  68. MACRO(CVTTPS2DQ , Reg2 , None , RNON , f(MODRM) , o(CVTTPS2DQ) , DDST|DNO16|DF3 , OLB_0F , LEGAL_R_RM )
  69. MACRO(CVTTSD2SI , Reg2 , None , RNON , f(MODRM) , o(CVTTSD2SI) , DDST|DNO16|DF2 , OLB_0F , LEGAL_R_RM )
  70. MACRO(CVTTSS2SI , Reg2 , None , RNON , f(MODRM) , o(CVTTSS2SI) , DDST|DNO16|DF3 , OLB_0F , LEGAL_R_RM )
  71. MACRO(DEC , Reg2 , OpSideEffect , R001 , f(INCDEC) , o(DEC) , DOPEQ|DSETCC , OLB_NONE , LEGAL_RM_RM )
  72. MACRO(DIV , Reg3 , None , R110 , f(MULDIV) , o(DIV) , DSETCC , OLB_NONE , LEGAL_R_R_RM )
  73. MACRO(DIVPD , Reg3 , None , RNON , f(MODRM) , o(DIVPD) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  74. MACRO(DIVPS , Reg3 , None , RNON , f(MODRM) , o(DIVPS) , DNO16|DOPEQ , OLB_0F , LEGAL_R_R_RM )
  75. MACRO(DIVSD , Reg3 , None , RNON , f(MODRM) , o(DIVSD) , DNO16|DOPEQ|DF2 , OLB_0F , LEGAL_R_R_RM )
  76. MACRO(DIVSS , Reg3 , None , RNON , f(MODRM) , o(DIVSS) , DNO16|DOPEQ|DF3 , OLB_0F , LEGAL_R_R_RM )
  77. MACRO(IDIV , Reg3 , None , R111 , f(MULDIV) , o(IDIV) , DSETCC , OLB_NONE , LEGAL_R_R_RM )
  78. MACRO(IMUL , Reg3 , OpSideEffect , R101 , f(MULDIV) , o(IMUL) , DSETCC , OLB_NONE , LEGAL_R_R_RM )
  79. MACRO(IMUL2 , Reg3 , OpSideEffect , RNON , f(SPMOD) , o(IMUL2) , DOPEQ|DSETCC|DCOMMOP , OLB_0F , LEGAL_R_R_RMI )
  80. MACRO(INC , Reg2 , OpSideEffect , R000 , f(INCDEC) , o(INC) , DOPEQ|DSETCC , OLB_NONE , LEGAL_RM_RM )
  81. MACRO(INT , Reg1 , OpSideEffect , RNON , f(SPECIAL) , o(INT) , DUSECC|DSETCC , OLB_NONE , LEGAL_N_I )
  82. MACRO(JA , BrReg2 , OpSideEffect , RNON , f(JCC) , o(JA) , DUSECC|DNO16 , OLB_0F , LEGAL_CUSTOM )
  83. MACRO(JAE , BrReg2 , OpSideEffect , RNON , f(JCC) , o(JAE) , DUSECC|DNO16 , OLB_0F , LEGAL_CUSTOM )
  84. MACRO(JB , BrReg2 , OpSideEffect , RNON , f(JCC) , o(JB) , DUSECC|DNO16 , OLB_0F , LEGAL_CUSTOM )
  85. MACRO(JBE , BrReg2 , OpSideEffect , RNON , f(JCC) , o(JBE) , DUSECC|DNO16 , OLB_0F , LEGAL_CUSTOM )
  86. MACRO(JEQ , BrReg2 , OpSideEffect , RNON , f(JCC) , o(JEQ) , DUSECC|DNO16 , OLB_0F , LEGAL_CUSTOM )
  87. MACRO(JGE , BrReg2 , OpSideEffect , RNON , f(JCC) , o(JGE) , DUSECC|DNO16 , OLB_0F , LEGAL_CUSTOM )
  88. MACRO(JGT , BrReg2 , OpSideEffect , RNON , f(JCC) , o(JGT) , DUSECC|DNO16 , OLB_0F , LEGAL_CUSTOM )
  89. MACRO(JLE , BrReg2 , OpSideEffect , RNON , f(JCC) , o(JLE) , DUSECC|DNO16 , OLB_0F , LEGAL_CUSTOM )
  90. MACRO(JLT , BrReg2 , OpSideEffect , RNON , f(JCC) , o(JLT) , DUSECC|DNO16 , OLB_0F , LEGAL_CUSTOM )
  91. MACRO(JMP , Br , OpSideEffect , R100 , f(JMP) , o(JMP) , DNO16 , OLB_NONE , LEGAL_CUSTOM )
  92. MACRO(JNE , BrReg2 , OpSideEffect , RNON , f(JCC) , o(JNE) , DUSECC|DNO16 , OLB_0F , LEGAL_CUSTOM )
  93. MACRO(JNO , BrReg2 , OpSideEffect , RNON , f(JCC) , o(JNO) , DUSECC|DNO16 , OLB_0F , LEGAL_CUSTOM )
  94. MACRO(JNP , BrReg2 , OpSideEffect , RNON , f(JCC) , o(JNP) , DUSECC|DNO16 , OLB_0F , LEGAL_CUSTOM )
  95. MACRO(JNSB , BrReg2 , OpSideEffect , RNON , f(JCC) , o(JNSB) , DUSECC|DNO16 , OLB_0F , LEGAL_CUSTOM )
  96. MACRO(JO , BrReg2 , OpSideEffect , RNON , f(JCC) , o(JO) , DUSECC|DNO16 , OLB_0F , LEGAL_CUSTOM )
  97. MACRO(JP , BrReg2 , OpSideEffect , RNON , f(JCC) , o(JP) , DUSECC|DNO16 , OLB_0F , LEGAL_CUSTOM )
  98. MACRO(JSB , BrReg2 , OpSideEffect , RNON , f(JCC) , o(JSB) , DUSECC|DNO16 , OLB_0F , LEGAL_CUSTOM )
  99. MACRO(LEA , Reg2 , None , RNON , f(MODRM) , o(LEA) , DDST , OLB_NONE , LEGAL_R_M )
  100. MACRO(LOCKCMPXCHG8B, Reg1 , OpSideEffect , R001 , f(SPMOD) , o(CMPXCHG8B) , DNO16|DSETCC|DLOCK , OLB_0F , LEGAL_CUSTOM )
  101. MACRO(LOCKOR , Reg2 , OpSideEffect , R001 , f(BINOP) , o(OR) , DOPEQ|DSETCC|DCOMMOP|DLOCK , OLB_NONE , LEGAL_RM_RM_RMI)
  102. MACRO(LZCNT , Reg2 , None , RNON , f(MODRM) , o(LZCNT) , DF3|DSETCC|DDST , OLB_0F , LEGAL_R_RM )
  103. MACRO(MAXPD , Reg2 , None , RNON , f(MODRM) , o(MAXPD) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  104. MACRO(MAXPS , Reg2 , None , RNON , f(MODRM) , o(MAXPS) , DNO16|DOPEQ , OLB_0F , LEGAL_R_R_RM )
  105. MACRO(MINPD , Reg2 , None , RNON , f(MODRM) , o(MINPD) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  106. MACRO(MINPS , Reg2 , None , RNON , f(MODRM) , o(MINPS) , DNO16|DOPEQ , OLB_0F , LEGAL_R_R_RM )
  107. MACRO(MOV_TRUNC , Reg2 , None , R000 , f(MOV) , o(MOV) , DDST|DMOV , OLB_NONE , LEGAL_R_RMI )
  108. MACRO(MOV , Reg2 , None , R000 , f(MOV) , o(MOV) , DDST|DMOV , OLB_NONE , LEGAL_CUSTOM )
  109. MACRO(MOVAPD , Reg2 , None , RNON , f(SPECIAL) , o(MOVAPD) , DDST|DNO16|D66 , OLB_0F , LEGAL_RM_RM )
  110. MACRO(MOVAPS , Reg2 , None , RNON , f(SPECIAL) , o(MOVAPS) , DDST|DNO16 , OLB_0F , LEGAL_RM_RM )
  111. MACRO(MOVD , Reg2 , None , RNON , f(SPECIAL) , o(MOVD) , DDST|DNO16|D66 , OLB_0F , LEGAL_RM_RM )
  112. MACRO(MOVHLPS , Reg2 , None , RNON , f(SPECIAL) , o(MOVHLPS) , DDST|DNO16 , OLB_0F , LEGAL_R_R )
  113. MACRO(MOVHPD , Reg2 , None , RNON , f(SPECIAL) , o(MOVHPD) , DDST|DNO16|D66 , OLB_0F , LEGAL_RM_RM )
  114. MACRO(MOVLHPS , Reg2 , None , RNON , f(SPECIAL) , o(MOVLHPS) , DDST|DNO16 , OLB_0F , LEGAL_R_R )
  115. MACRO(MOVLPD , Reg2 , None , RNON , f(SPECIAL) , o(MOVLPD) , DDST|DNO16|D66 , OLB_0F , LEGAL_RM_RM )
  116. MACRO(MOVMSKPD , Reg2 , None , RNON , f(SPECIAL) , o(MOVMSKPD) , DDST|DNO16|D66 , OLB_0F , LEGAL_R_R )
  117. MACRO(MOVMSKPS , Reg2 , None , RNON , f(SPECIAL) , o(MOVMSKPS) , DDST|DNO16 , OLB_0F , LEGAL_R_R )
  118. MACRO(MOVQ , Reg2 , None , RNON , f(SPECIAL) , o(MOVQ) , DDST|DNO16|D66 , OLB_0F , LEGAL_RM_RM )
  119. MACRO(MOVSD_ZERO , Reg2 , None , RNON , f(MODRM) , o(MOVSD) , 0 , OLB_NONE , LEGAL_RM )
  120. MACRO(MOVSD , Reg2 , None , RNON , f(SPECIAL) , o(MOVSD) , DDST|DNO16|DF2 , OLB_0F , LEGAL_RM_RM )
  121. MACRO(MOVSS , Reg2 , None , RNON , f(SPECIAL) , o(MOVSS) , DDST|DNO16|DF3 , OLB_0F , LEGAL_RM_RM )
  122. MACRO(MOVSX , Reg2 , None , RNON , f(MODRM) , o(MOVSX) , DDST , OLB_0F , LEGAL_RM_RM )
  123. MACRO(MOVSXD , Reg2 , None , RNON , f(MODRM) , o(MOVSXD) , DDST , OLB_NONE , LEGAL_R_RM )
  124. MACRO(MOVSXW , Reg2 , None , RNON , f(MODRM) , o(MOVSXW) , DDST , OLB_0F , LEGAL_RM_RM )
  125. MACRO(MOVUPS , Reg2 , None , RNON , f(SPECIAL) , o(MOVUPS) , DDST|DNO16 , OLB_0F , LEGAL_RM_RM )
  126. MACRO(MOVZX , Reg2 , None , RNON , f(MODRM) , o(MOVZX) , DDST , OLB_0F , LEGAL_R_RM )
  127. MACRO(MOVZXW , Reg2 , None , RNON , f(MODRM) , o(MOVZXW) , DDST , OLB_0F , LEGAL_R_RM )
  128. MACRO(MULPD , Reg3 , None , RNON , f(MODRM) , o(MULPD) , DNO16|DOPEQ|D66|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  129. MACRO(MULPS , Reg3 , None , RNON , f(MODRM) , o(MULPS) , DNO16|DOPEQ|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  130. MACRO(MULSD , Reg3 , None , RNON , f(MODRM) , o(MULSD) , DNO16|DOPEQ|DF2 , OLB_0F , LEGAL_R_R_RM )
  131. MACRO(MULSS , Reg3 , None , RNON , f(MODRM) , o(MULSS) , DNO16|DOPEQ|DF3|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  132. MACRO(NEG , Reg2 , OpSideEffect , R011 , f(MODRMW) , o(NEG) , DOPEQ|DSETCC , OLB_NONE , LEGAL_RM_RM )
  133. MACRO(NOP , Empty , None , RNON , f(SPECIAL) , o(NOP) , DNO16 , OLB_NONE , LEGAL_CUSTOM )
  134. MACRO(NOT , Reg2 , OpSideEffect , R010 , f(MODRMW) , o(NOT) , DOPEQ , OLB_NONE , LEGAL_RM_RM )
  135. MACRO(OR , Reg2 , OpSideEffect , R001 , f(BINOP) , o(OR) , DOPEQ|DSETCC|DCOMMOP , OLB_NONE , LEGAL_RM_RM_RMI)
  136. MACRO(ORPS , Reg2 , None , R001 , f(MODRM) , o(ORPS) , DOPEQ|DOPEQ|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  137. MACRO(PADDB , Reg2 , None , RNON , f(MODRM) , o(PADDB) , DNO16|DOPEQ|D66|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  138. MACRO(PADDD , Reg2 , None , RNON , f(MODRM) , o(PADDD) , DNO16|DOPEQ|D66|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  139. MACRO(PADDQ , Reg2 , None , RNON , f(MODRM) , o(PADDQ) , DNO16|DOPEQ|D66|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  140. MACRO(PADDSB , Reg2 , None , RNON , f(MODRM) , o(PADDSB) , DNO16|DOPEQ|D66|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  141. MACRO(PADDSW , Reg2 , None , RNON , f(MODRM) , o(PADDSW) , DNO16|DOPEQ|D66|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  142. MACRO(PADDUSB , Reg2 , None , RNON , f(MODRM) , o(PADDUSB) , DNO16|DOPEQ|D66|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  143. MACRO(PADDUSW , Reg2 , None , RNON , f(MODRM) , o(PADDUSW) , DNO16|DOPEQ|D66|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  144. MACRO(PADDW , Reg2 , None , RNON , f(MODRM) , o(PADDW) , DNO16|DOPEQ|D66|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  145. MACRO(PAND , Reg2 , None , RNON , f(MODRM) , o(PAND) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  146. MACRO(PANDN , Reg2 , None , RNON , f(MODRM) , o(PANDN) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  147. MACRO(PCMPEQB , Reg2 , None , RNON , f(MODRM) , o(PCMPEQB) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  148. MACRO(PCMPEQD , Reg2 , None , RNON , f(MODRM) , o(PCMPEQD) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  149. MACRO(PCMPEQW , Reg2 , None , RNON , f(MODRM) , o(PCMPEQW) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  150. MACRO(PCMPGTB , Reg2 , None , RNON , f(MODRM) , o(PCMPGTB) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  151. MACRO(PCMPGTD , Reg2 , None , RNON , f(MODRM) , o(PCMPGTD) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  152. MACRO(PCMPGTW , Reg2 , None , RNON , f(MODRM) , o(PCMPGTW) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  153. MACRO(PEXTRD , Reg3 , None , RNON , f(SPECIAL) , o(PEXTRD) , DDST|DNO16|DSSE|D66 , OLB_0F3A , LEGAL_RM_R_I )
  154. MACRO(PEXTRQ , Reg3 , None , RNON , f(SPECIAL) , o(PEXTRQ) , DDST|DNO16|D66|DREXSRC|DSSE , OLB_0F3A , LEGAL_RM_R_I )
  155. MACRO(PEXTRW , Reg3 , None , RNON , f(MODRM) , o(PEXTRW) , DDST|DNO16|D66|DSSE , OLB_0F , LEGAL_RM_R_I )
  156. MACRO(PINSRD , Reg3 , None , RNON , f(MODRM) , o(PINSRD) , DDST|DNO16|DSSE|D66 , OLB_0F3A , LEGAL_R_RM_I )
  157. MACRO(PINSRQ , Reg3 , None , RNON , f(MODRM) , o(PINSRQ) , DDST|DNO16|D66|DREXSRC|DSSE , OLB_0F3A , LEGAL_R_RM_I )
  158. MACRO(PINSRW , Reg2 , None , RNON , f(MODRM) , o(PINSRW) , DDST|DNO16|DSSE|D66 , OLB_0F , LEGAL_R_RM_I )
  159. MACRO(PMAXSW , Reg2 , None , RNON , f(MODRM) , o(PMAXSW) , DNO16|DOPEQ|D66|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  160. MACRO(PMAXUB , Reg2 , None , RNON , f(MODRM) , o(PMAXUB) , DNO16|DOPEQ|D66|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  161. MACRO(PMINSW , Reg2 , None , RNON , f(MODRM) , o(PMINSW) , DNO16|DOPEQ|D66|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  162. MACRO(PMINUB , Reg2 , None , RNON , f(MODRM) , o(PMINUB) , DNO16|DOPEQ|D66|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  163. MACRO(PMOVMSKB , Reg2 , None , RNON , f(SPECIAL) , o(PMOVMSKB) , DDST|DNO16|D66 , OLB_0F , LEGAL_R_R )
  164. MACRO(PMULLW , Reg2 , None , RNON , f(MODRM) , o(PMULLW) , DNO16|DOPEQ|D66|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  165. MACRO(PMULUDQ , Reg2 , None , RNON , f(MODRM) , o(PMULUDQ) , DNO16|DOPEQ|D66|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  166. MACRO(POP , Reg1 , OpSideEffect , R000 , f(PSHPOP) , o(POP) , DDST , OLB_NONE , LEGAL_R_OR )
  167. MACRO(POPCNT , Reg2 , None , RNON , f(MODRM) , o(POPCNT) , DF3|DSETCC|DDST , OLB_0F , LEGAL_R_RM )
  168. MACRO(POR , Reg2 , None , RNON , f(MODRM) , o(POR) , DNO16|DOPEQ|D66|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  169. MACRO(PSHUFD , Reg3 , None , RNON , f(MODRM) , o(PSHUFD) , DDST|DNO16|D66|DSSE , OLB_0F , LEGAL_R_RM_I )
  170. MACRO(PSLLD , Reg2 , None , R110 , f(SPECIAL) , o(PSLLD) , DNO16|DOPEQ|D66|DSSE , OLB_0F , LEGAL_R_R_RI )
  171. MACRO(PSLLDQ , Reg2 , None , R111 , f(SPECIAL) , o(PSLLDQ) , DDST|DNO16|DOPEQ|D66|DSSE , OLB_0F , LEGAL_R_R_RI )
  172. MACRO(PSLLQ , Reg2 , None , RNON , f(MODRM) , o(PSLLQ) , DNO16|DOPEQ|D66|DSSE , OLB_0F , LEGAL_R_R_RI )
  173. MACRO(PSLLW , Reg2 , None , R110 , f(SPECIAL) , o(PSLLW) , DNO16|DOPEQ|D66|DSSE , OLB_0F , LEGAL_R_R_RI )
  174. MACRO(PSRAD , Reg2 , None , R100 , f(SPECIAL) , o(PSRAD) , DNO16|DOPEQ|D66|DSSE , OLB_0F , LEGAL_R_R_RI )
  175. MACRO(PSRAW , Reg2 , None , R100 , f(SPECIAL) , o(PSRAW) , DNO16|DOPEQ|D66|DSSE , OLB_0F , LEGAL_R_R_RI )
  176. MACRO(PSRLD , Reg2 , None , R010 , f(SPECIAL) , o(PSRLD) , DNO16|DOPEQ|D66|DSSE , OLB_0F , LEGAL_R_R_RI )
  177. MACRO(PSRLDQ , Reg2 , None , R011 , f(SPECIAL) , o(PSRLDQ) , DDST|DNO16|DOPEQ|D66|DSSE , OLB_0F , LEGAL_R_R_RI )
  178. MACRO(PSRLQ , Reg2 , None , RNON , f(MODRM) , o(PSRLQ) , DNO16|DOPEQ|D66|DSSE , OLB_0F , LEGAL_R_R_RI )
  179. MACRO(PSRLW , Reg2 , None , R010 , f(SPECIAL) , o(PSRLW) , DNO16|DOPEQ|D66|DSSE , OLB_0F , LEGAL_R_R_RI )
  180. MACRO(PSUBB , Reg2 , None , RNON , f(MODRM) , o(PSUBB) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  181. MACRO(PSUBD , Reg2 , None , RNON , f(MODRM) , o(PSUBD) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  182. MACRO(PSUBQ , Reg2 , None , RNON , f(MODRM) , o(PSUBQ) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  183. MACRO(PSUBSB , Reg2 , None , RNON , f(MODRM) , o(PSUBSB) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  184. MACRO(PSUBSW , Reg2 , None , RNON , f(MODRM) , o(PSUBSW) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  185. MACRO(PSUBUSB , Reg2 , None , RNON , f(MODRM) , o(PSUBUSB) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  186. MACRO(PSUBUSW , Reg2 , None , RNON , f(MODRM) , o(PSUBUSW) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  187. MACRO(PSUBW , Reg2 , None , RNON , f(MODRM) , o(PSUBW) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  188. MACRO(PUNPCKLBW , Reg2 , None , RNON , f(MODRM) , o(PUNPCKLBW) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  189. MACRO(PUNPCKLDQ , Reg2 , None , RNON , f(MODRM) , o(PUNPCKLDQ) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  190. MACRO(PUNPCKLWD , Reg2 , None , RNON , f(MODRM) , o(PUNPCKLWD) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  191. MACRO(PUSH , Reg1 , OpSideEffect , R110 , f(PSHPOP) , o(PUSH) , 0 , OLB_NONE , LEGAL_N_RMI )
  192. MACRO(PXOR , Reg2 , None , RNON , f(MODRM) , o(PXOR) , DNO16|DOPEQ|D66|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  193. MACRO(RET , Empty , OpSideEffect , RNON , f(SPECIAL) , o(RET) , DSETCC , OLB_NONE , LEGAL_N_I_OR )
  194. MACRO(ROL , Reg2 , None , R000 , f(SHIFT) , o(ROL) , DOPEQ|DSETCC , OLB_NONE , LEGAL_RM_RM_RI )
  195. MACRO(ROR , Reg2 , None , R001 , f(SHIFT) , o(ROR) , DOPEQ|DSETCC , OLB_NONE , LEGAL_RM_RM_RI )
  196. MACRO(ROUNDSD , Reg3 , None , RNON , f(MODRM) , o(ROUNDSD) , DDST|DNO16|DSSE|D66 , OLB_0F3A , LEGAL_R_RM_I )
  197. MACRO(ROUNDSS , Reg3 , None , RNON , f(MODRM) , o(ROUNDSS) , DDST|DNO16|DSSE|D66 , OLB_0F3A , LEGAL_R_RM_I )
  198. MACRO(SAR , Reg2 , OpSideEffect , R111 , f(SHIFT) , o(SAR) , DOPEQ|DSETCC , OLB_NONE , LEGAL_RM_RM_RI )
  199. MACRO(SBB , Reg2 , None , R011 , f(BINOP) , o(SBB) , DOPEQ|DUSECC|DSETCC , OLB_NONE , LEGAL_RM_RM_RMI)
  200. MACRO(SETA , Reg1 , None , RNON , f(MODRM) , o(SETA) , DOPEQ|DUSECC|DDST , OLB_0F , LEGAL_RM_RM )
  201. MACRO(SETAE , Reg1 , None , RNON , f(MODRM) , o(SETAE) , DOPEQ|DUSECC|DDST , OLB_0F , LEGAL_RM_RM )
  202. MACRO(SETB , Reg1 , None , RNON , f(MODRM) , o(SETB) , DOPEQ|DUSECC|DDST , OLB_0F , LEGAL_RM_RM )
  203. MACRO(SETBE , Reg1 , None , RNON , f(MODRM) , o(SETBE) , DOPEQ|DUSECC|DDST , OLB_0F , LEGAL_RM_RM )
  204. MACRO(SETE , Reg1 , None , RNON , f(MODRM) , o(SETE) , DOPEQ|DUSECC|DDST , OLB_0F , LEGAL_RM_RM )
  205. MACRO(SETG , Reg1 , None , RNON , f(MODRM) , o(SETG) , DOPEQ|DUSECC|DDST , OLB_0F , LEGAL_RM_RM )
  206. MACRO(SETGE , Reg1 , None , RNON , f(MODRM) , o(SETGE) , DOPEQ|DUSECC|DDST , OLB_0F , LEGAL_RM_RM )
  207. MACRO(SETL , Reg1 , None , RNON , f(MODRM) , o(SETL) , DOPEQ|DUSECC|DDST , OLB_0F , LEGAL_RM_RM )
  208. MACRO(SETLE , Reg1 , None , RNON , f(MODRM) , o(SETLE) , DOPEQ|DUSECC|DDST , OLB_0F , LEGAL_RM_RM )
  209. MACRO(SETNE , Reg1 , None , RNON , f(MODRM) , o(SETNE) , DOPEQ|DUSECC|DDST , OLB_0F , LEGAL_RM_RM )
  210. MACRO(SETO , Reg1 , None , RNON , f(MODRM) , o(SETO) , DOPEQ|DUSECC|DDST , OLB_0F , LEGAL_RM_RM )
  211. MACRO(SHL , Reg2 , OpSideEffect , R100 , f(SHIFT) , o(SHL) , DOPEQ|DSETCC , OLB_NONE , LEGAL_RM_RM_RI )
  212. MACRO(SHLD , Reg3 , OpSideEffect , R100 , f(SPECIAL) , o(SHLD) , DDST , OLB_0F , LEGAL_RM_R_I )
  213. MACRO(SHR , Reg2 , OpSideEffect , R101 , f(SHIFT) , o(SHR) , DOPEQ|DSETCC , OLB_NONE , LEGAL_RM_RM_RI )
  214. MACRO(SHUFPD , Reg2 , None , RNON , f(MODRM) , o(SHUFPD) , DDST|DNO16|D66|DSSE , OLB_0F , LEGAL_R_RM_I )
  215. MACRO(SHUFPS , Reg2 , None , RNON , f(MODRM) , o(SHUFPS) , DDST|DNO16|DSSE , OLB_0F , LEGAL_R_RM_I )
  216. MACRO(SQRTPD , Reg2 , None , RNON , f(MODRM) , o(SQRTPD) , DDST|DNO16|D66 , OLB_0F , LEGAL_R_RM )
  217. MACRO(SQRTPS , Reg2 , None , RNON , f(MODRM) , o(SQRTPS) , DDST|DNO16 , OLB_0F , LEGAL_R_RM )
  218. MACRO(SQRTSD , Reg2 , None , RNON , f(MODRM) , o(SQRTSD) , DDST|DNO16|DF2 , OLB_0F , LEGAL_R_RM )
  219. MACRO(SQRTSS , Reg2 , None , RNON , f(MODRM) , o(SQRTSS) , DDST|DNO16|DF3 , OLB_0F , LEGAL_R_RM )
  220. MACRO(SUB , Reg2 , OpSideEffect , R101 , f(BINOP) , o(SUB) , DOPEQ|DSETCC , OLB_NONE , LEGAL_RM_RM_RMI)
  221. MACRO(SUBPD , Reg3 , None , RNON , f(MODRM) , o(SUBPD) , DNO16|DOPEQ|D66 , OLB_0F , LEGAL_R_R_RM )
  222. MACRO(SUBPS , Reg3 , None , RNON , f(MODRM) , o(SUBPS) , DNO16|DOPEQ , OLB_0F , LEGAL_R_R_RM )
  223. MACRO(SUBSD , Reg3 , None , RNON , f(MODRM) , o(SUBSD) , DNO16|DOPEQ|DF2 , OLB_0F , LEGAL_R_R_RM )
  224. MACRO(SUBSS , Reg3 , None , RNON , f(MODRM) , o(SUBSS) , DNO16|DOPEQ|DF3 , OLB_0F , LEGAL_R_R_RM )
  225. MACRO(TEST , Empty , OpSideEffect , R000 , f(TEST) , o(TEST) , DSETCC|DCOMMOP , OLB_NONE , LEGAL_N_RM_RI )
  226. MACRO(TZCNT , Reg2 , None , RNON , f(MODRM) , o(TZCNT) , DF3|DSETCC|DDST , OLB_0F , LEGAL_R_RM )
  227. MACRO(UCOMISD , Empty , None , RNON , f(MODRM) , o(UCOMISD) , DNO16|D66|DSETCC , OLB_0F , LEGAL_N_R_RM )
  228. MACRO(UCOMISS , Empty , None , RNON , f(MODRM) , o(UCOMISS) , DNO16|DSETCC , OLB_0F , LEGAL_N_R_RM )
  229. MACRO(XCHG , Reg2 , OpSideEffect , R000 , f(XCHG) , o(XCHG) , DOPEQ , OLB_NONE , LEGAL_RM_RM_RM )
  230. MACRO(XOR , Reg2 , OpSideEffect , R110 , f(BINOP) , o(XOR) , DOPEQ|DSETCC|DCOMMOP , OLB_NONE , LEGAL_RM_RM_RMI)
  231. MACRO(XORPS , Reg3 , None , RNON , f(MODRM) , o(XORPS) , DNO16|DOPEQ|DCOMMOP , OLB_0F , LEGAL_R_R_RM )
  232. #undef o
  233. #undef f