From 43dbe48afc5a30f6f8eab2d6049fef92f7b30a3e Mon Sep 17 00:00:00 2001 From: kobalicek Date: Thu, 9 Feb 2017 14:15:08 +0100 Subject: [PATCH] Added CodeCompiler::newSimilarReg, merged generate-xxx tools from next-wip branch, changed pcmpgtq to be in SSE4.2 group --- src/asmjit/x86/x86compiler.h | 9 +- src/asmjit/x86/x86inst.cpp | 599 ++++++++-------- src/asmjit/x86/x86inst.h | 2 +- tools/configure-mac-xcode.sh | 0 tools/configure-unix-makefiles-dbg.sh | 0 tools/configure-unix-makefiles-rel.sh | 0 tools/generate-arm.js | 207 ++++++ tools/generate-base.js | 488 +++++++++++++ tools/generate-x86.js | 985 ++++++++++---------------- 9 files changed, 1390 insertions(+), 900 deletions(-) mode change 100644 => 100755 tools/configure-mac-xcode.sh mode change 100644 => 100755 tools/configure-unix-makefiles-dbg.sh mode change 100644 => 100755 tools/configure-unix-makefiles-rel.sh create mode 100644 tools/generate-arm.js create mode 100644 tools/generate-base.js diff --git a/src/asmjit/x86/x86compiler.h b/src/asmjit/x86/x86compiler.h index 38b0fad..ca0547a 100644 --- a/src/asmjit/x86/x86compiler.h +++ b/src/asmjit/x86/x86compiler.h @@ -122,7 +122,14 @@ public: } template - RegT newSimilarReg(const RegT& ref, const char* nameFmt, ...) { + ASMJIT_INLINE RegT newSimilarReg(const RegT& ref) { + RegT reg(NoInit); + _newReg(reg, ref, nullptr); + return reg; + } + + template + ASMJIT_INLINE RegT newSimilarReg(const RegT& ref, const char* nameFmt, ...) { RegT reg(NoInit); ASMJIT_NEW_REG(reg, ref, nameFmt); return reg; diff --git a/src/asmjit/x86/x86inst.cpp b/src/asmjit/x86/x86inst.cpp index 34ff167..c5b1854 100644 --- a/src/asmjit/x86/x86inst.cpp +++ b/src/asmjit/x86/x86inst.cpp @@ -592,178 +592,178 @@ const X86Inst X86InstDB::instData[] = { INST(Pabsb , ExtRm_P , O(000F38,1C,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 66 , 5714, 189), INST(Pabsd , ExtRm_P , O(000F38,1E,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 66 , 5721, 189), INST(Pabsw , ExtRm_P , O(000F38,1D,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 67 , 5735, 189), - INST(Packssdw , ExtRm_P , O(000F00,6B,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 68 , 5742, 189), - INST(Packsswb , ExtRm_P , O(000F00,63,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 68 , 5752, 189), + INST(Packssdw , ExtRm_P , O(000F00,6B,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 68 , 5742, 190), + INST(Packsswb , ExtRm_P , O(000F00,63,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 68 , 5752, 190), INST(Packusdw , ExtRm , O(660F38,2B,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 69 , 5762, 6 ), - INST(Packuswb , ExtRm_P , O(000F00,67,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 68 , 5772, 189), - INST(Paddb , ExtRm_P , O(000F00,FC,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 68 , 5782, 189), - INST(Paddd , ExtRm_P , O(000F00,FE,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 68 , 5789, 189), - INST(Paddq , ExtRm_P , O(000F00,D4,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 70 , 5796, 189), - INST(Paddsb , ExtRm_P , O(000F00,EC,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 68 , 5803, 189), - INST(Paddsw , ExtRm_P , O(000F00,ED,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 68 , 5811, 189), - INST(Paddusb , ExtRm_P , O(000F00,DC,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 68 , 5819, 189), - INST(Paddusw , ExtRm_P , O(000F00,DD,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 68 , 5828, 189), - INST(Paddw , ExtRm_P , O(000F00,FD,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 68 , 5837, 189), - INST(Palignr , ExtRmi_P , O(000F3A,0F,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 71 , 5844, 190), - INST(Pand , ExtRm_P , O(000F00,DB,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 68 , 5853, 191), - INST(Pandn , ExtRm_P , O(000F00,DF,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 72 , 5866, 192), - INST(Pause , X86Op , O(F30000,90,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilyNone, 0 , 1762, 193), - INST(Pavgb , ExtRm_P , O(000F00,E0,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 73 , 5896, 189), - INST(Pavgusb , Ext3dNow , O(000F0F,BF,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1768, 194), - INST(Pavgw , ExtRm_P , O(000F00,E3,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 75 , 5903, 189), + INST(Packuswb , ExtRm_P , O(000F00,67,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 68 , 5772, 190), + INST(Paddb , ExtRm_P , O(000F00,FC,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 68 , 5782, 190), + INST(Paddd , ExtRm_P , O(000F00,FE,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 68 , 5789, 190), + INST(Paddq , ExtRm_P , O(000F00,D4,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 70 , 5796, 190), + INST(Paddsb , ExtRm_P , O(000F00,EC,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 68 , 5803, 190), + INST(Paddsw , ExtRm_P , O(000F00,ED,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 68 , 5811, 190), + INST(Paddusb , ExtRm_P , O(000F00,DC,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 68 , 5819, 190), + INST(Paddusw , ExtRm_P , O(000F00,DD,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 68 , 5828, 190), + INST(Paddw , ExtRm_P , O(000F00,FD,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 68 , 5837, 190), + INST(Palignr , ExtRmi_P , O(000F3A,0F,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 71 , 5844, 191), + INST(Pand , ExtRm_P , O(000F00,DB,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 68 , 5853, 192), + INST(Pandn , ExtRm_P , O(000F00,DF,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 72 , 5866, 193), + INST(Pause , X86Op , O(F30000,90,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilyNone, 0 , 1762, 194), + INST(Pavgb , ExtRm_P , O(000F00,E0,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 73 , 5896, 190), + INST(Pavgusb , Ext3dNow , O(000F0F,BF,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1768, 195), + INST(Pavgw , ExtRm_P , O(000F00,E3,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 75 , 5903, 190), INST(Pblendvb , ExtRm_XMM0 , O(660F38,10,_,_,_,_,_,_ ), 0 , F(RW)|F(Special) , EF(________), 0 , 0 , kFamilySse , 76 , 5919, 18 ), INST(Pblendw , ExtRmi , O(660F3A,0E,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 77 , 5929, 17 ), INST(Pclmulqdq , ExtRmi , O(660F3A,44,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 78 , 6022, 17 ), - INST(Pcmpeqb , ExtRm_P , O(000F00,74,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 79 , 6054, 192), - INST(Pcmpeqd , ExtRm_P , O(000F00,76,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 79 , 6063, 192), - INST(Pcmpeqq , ExtRm , O(660F38,29,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 80 , 6072, 195), - INST(Pcmpeqw , ExtRm_P , O(000F00,75,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 79 , 6081, 192), - INST(Pcmpestri , ExtRmi , O(660F3A,61,_,_,_,_,_,_ ), 0 , F(WO)|F(Special) , EF(________), 0 , 0 , kFamilySse , 81 , 6090, 196), - INST(Pcmpestrm , ExtRmi , O(660F3A,60,_,_,_,_,_,_ ), 0 , F(WO)|F(Special) , EF(________), 0 , 0 , kFamilySse , 81 , 6101, 197), - INST(Pcmpgtb , ExtRm_P , O(000F00,64,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 79 , 6112, 192), - INST(Pcmpgtd , ExtRm_P , O(000F00,66,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 79 , 6121, 192), - INST(Pcmpgtq , ExtRm , O(660F38,37,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 80 , 6130, 195), - INST(Pcmpgtw , ExtRm_P , O(000F00,65,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 79 , 6139, 192), - INST(Pcmpistri , ExtRmi , O(660F3A,63,_,_,_,_,_,_ ), 0 , F(WO)|F(Special) , EF(________), 0 , 0 , kFamilySse , 81 , 6148, 198), - INST(Pcmpistrm , ExtRmi , O(660F3A,62,_,_,_,_,_,_ ), 0 , F(WO)|F(Special) , EF(________), 0 , 0 , kFamilySse , 81 , 6159, 199), + INST(Pcmpeqb , ExtRm_P , O(000F00,74,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 79 , 6054, 193), + INST(Pcmpeqd , ExtRm_P , O(000F00,76,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 79 , 6063, 193), + INST(Pcmpeqq , ExtRm , O(660F38,29,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 80 , 6072, 196), + INST(Pcmpeqw , ExtRm_P , O(000F00,75,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 79 , 6081, 193), + INST(Pcmpestri , ExtRmi , O(660F3A,61,_,_,_,_,_,_ ), 0 , F(WO)|F(Special) , EF(________), 0 , 0 , kFamilySse , 81 , 6090, 197), + INST(Pcmpestrm , ExtRmi , O(660F3A,60,_,_,_,_,_,_ ), 0 , F(WO)|F(Special) , EF(________), 0 , 0 , kFamilySse , 81 , 6101, 198), + INST(Pcmpgtb , ExtRm_P , O(000F00,64,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 79 , 6112, 193), + INST(Pcmpgtd , ExtRm_P , O(000F00,66,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 79 , 6121, 193), + INST(Pcmpgtq , ExtRm , O(660F38,37,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 82 , 6130, 196), + INST(Pcmpgtw , ExtRm_P , O(000F00,65,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 79 , 6139, 193), + INST(Pcmpistri , ExtRmi , O(660F3A,63,_,_,_,_,_,_ ), 0 , F(WO)|F(Special) , EF(________), 0 , 0 , kFamilySse , 81 , 6148, 199), + INST(Pcmpistrm , ExtRmi , O(660F3A,62,_,_,_,_,_,_ ), 0 , F(WO)|F(Special) , EF(________), 0 , 0 , kFamilySse , 81 , 6159, 200), INST(Pcommit , X86Op_O , O(660F00,AE,7,_,_,_,_,_ ), 0 , F(Volatile) , EF(________), 0 , 0 , kFamilyNone, 0 , 1776, 73 ), - INST(Pdep , VexRvm_Wx , V(F20F38,F5,_,0,x,_,_,_ ), 0 , F(WO) , EF(________), 0 , 0 , kFamilyNone, 0 , 1784, 200), - INST(Pext , VexRvm_Wx , V(F30F38,F5,_,0,x,_,_,_ ), 0 , F(WO) , EF(________), 0 , 0 , kFamilyNone, 0 , 1789, 200), - INST(Pextrb , ExtExtract , O(000F3A,14,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 82 , 6564, 201), - INST(Pextrd , ExtExtract , O(000F3A,16,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 82 , 6572, 75 ), - INST(Pextrq , ExtExtract , O(000F3A,16,_,_,1,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 82 , 6580, 202), - INST(Pextrw , ExtPextrw , O(000F00,C5,_,_,_,_,_,_ ), O(000F3A,15,_,_,_,_,_,_ ), F(WO) , EF(________), 0 , 8 , kFamilySse , 83 , 6588, 203), - INST(Pf2id , Ext3dNow , O(000F0F,1D,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 74 , 1794, 204), - INST(Pf2iw , Ext3dNow , O(000F0F,1C,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 84 , 1800, 204), - INST(Pfacc , Ext3dNow , O(000F0F,AE,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1806, 194), - INST(Pfadd , Ext3dNow , O(000F0F,9E,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1812, 194), - INST(Pfcmpeq , Ext3dNow , O(000F0F,B0,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1818, 194), - INST(Pfcmpge , Ext3dNow , O(000F0F,90,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1826, 194), - INST(Pfcmpgt , Ext3dNow , O(000F0F,A0,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1834, 194), - INST(Pfmax , Ext3dNow , O(000F0F,A4,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1842, 194), - INST(Pfmin , Ext3dNow , O(000F0F,94,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1848, 194), - INST(Pfmul , Ext3dNow , O(000F0F,B4,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1854, 194), - INST(Pfnacc , Ext3dNow , O(000F0F,8A,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 84 , 1860, 194), - INST(Pfpnacc , Ext3dNow , O(000F0F,8E,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 84 , 1867, 194), - INST(Pfrcp , Ext3dNow , O(000F0F,96,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 74 , 1875, 204), - INST(Pfrcpit1 , Ext3dNow , O(000F0F,A6,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1881, 194), - INST(Pfrcpit2 , Ext3dNow , O(000F0F,B6,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1890, 194), - INST(Pfrcpv , Ext3dNow , O(000F0F,86,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 85 , 1899, 194), - INST(Pfrsqit1 , Ext3dNow , O(000F0F,A7,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 0 , kFamilySse , 74 , 1906, 205), - INST(Pfrsqrt , Ext3dNow , O(000F0F,97,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 0 , kFamilySse , 74 , 1915, 205), - INST(Pfrsqrtv , Ext3dNow , O(000F0F,87,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 85 , 1923, 194), - INST(Pfsub , Ext3dNow , O(000F0F,9A,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1932, 194), - INST(Pfsubr , Ext3dNow , O(000F0F,AA,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1938, 194), - INST(Phaddd , ExtRm_P , O(000F38,02,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 86 , 6667, 189), - INST(Phaddsw , ExtRm_P , O(000F38,03,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 87 , 6684, 189), - INST(Phaddw , ExtRm_P , O(000F38,01,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 88 , 6753, 189), - INST(Phminposuw , ExtRm , O(660F38,41,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 89 , 6779, 6 ), - INST(Phsubd , ExtRm_P , O(000F38,06,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 90 , 6800, 189), - INST(Phsubsw , ExtRm_P , O(000F38,07,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 91 , 6817, 189), - INST(Phsubw , ExtRm_P , O(000F38,05,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 91 , 6826, 189), - INST(Pi2fd , Ext3dNow , O(000F0F,0D,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 74 , 1945, 204), - INST(Pi2fw , Ext3dNow , O(000F0F,0C,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 84 , 1951, 204), - INST(Pinsrb , ExtRmi , O(660F3A,20,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 92 , 6843, 206), - INST(Pinsrd , ExtRmi , O(660F3A,22,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 92 , 6851, 207), - INST(Pinsrq , ExtRmi , O(660F3A,22,_,_,1,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 92 , 6859, 208), - INST(Pinsrw , ExtRmi_P , O(000F00,C4,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 93 , 6867, 209), - INST(Pmaddubsw , ExtRm_P , O(000F38,04,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 94 , 7037, 189), - INST(Pmaddwd , ExtRm_P , O(000F00,F5,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 95 , 7048, 189), - INST(Pmaxsb , ExtRm , O(660F38,3C,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 96 , 7079, 14 ), - INST(Pmaxsd , ExtRm , O(660F38,3D,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 96 , 7087, 14 ), - INST(Pmaxsw , ExtRm_P , O(000F00,EE,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 97 , 7103, 191), - INST(Pmaxub , ExtRm_P , O(000F00,DE,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 97 , 7111, 191), - INST(Pmaxud , ExtRm , O(660F38,3F,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 98 , 7119, 14 ), - INST(Pmaxuw , ExtRm , O(660F38,3E,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 99 , 7135, 14 ), - INST(Pminsb , ExtRm , O(660F38,38,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 99 , 7143, 14 ), - INST(Pminsd , ExtRm , O(660F38,39,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 99 , 7151, 14 ), - INST(Pminsw , ExtRm_P , O(000F00,EA,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 100, 7167, 191), - INST(Pminub , ExtRm_P , O(000F00,DA,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 100, 7175, 191), - INST(Pminud , ExtRm , O(660F38,3B,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 101, 7183, 14 ), - INST(Pminuw , ExtRm , O(660F38,3A,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 102, 7199, 14 ), - INST(Pmovmskb , ExtRm_P , O(000F00,D7,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 103, 7277, 210), - INST(Pmovsxbd , ExtRm , O(660F38,21,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 104, 7374, 211), - INST(Pmovsxbq , ExtRm , O(660F38,22,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 104, 7384, 212), - INST(Pmovsxbw , ExtRm , O(660F38,20,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 104, 7394, 56 ), - INST(Pmovsxdq , ExtRm , O(660F38,25,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 104, 7404, 56 ), - INST(Pmovsxwd , ExtRm , O(660F38,23,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 104, 7414, 56 ), - INST(Pmovsxwq , ExtRm , O(660F38,24,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 104, 7424, 211), - INST(Pmovzxbd , ExtRm , O(660F38,31,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 105, 7511, 211), - INST(Pmovzxbq , ExtRm , O(660F38,32,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 105, 7521, 212), - INST(Pmovzxbw , ExtRm , O(660F38,30,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 105, 7531, 56 ), - INST(Pmovzxdq , ExtRm , O(660F38,35,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 105, 7541, 56 ), - INST(Pmovzxwd , ExtRm , O(660F38,33,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 105, 7551, 56 ), - INST(Pmovzxwq , ExtRm , O(660F38,34,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 105, 7561, 211), - INST(Pmuldq , ExtRm , O(660F38,28,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 106, 7571, 6 ), - INST(Pmulhrsw , ExtRm_P , O(000F38,0B,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 107, 7579, 189), - INST(Pmulhrw , Ext3dNow , O(000F0F,B7,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1957, 194), - INST(Pmulhuw , ExtRm_P , O(000F00,E4,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 108, 7589, 189), - INST(Pmulhw , ExtRm_P , O(000F00,E5,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 109, 7598, 189), - INST(Pmulld , ExtRm , O(660F38,40,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 110, 7606, 6 ), - INST(Pmullw , ExtRm_P , O(000F00,D5,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 111, 7622, 189), - INST(Pmuludq , ExtRm_P , O(000F00,F4,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 112, 7645, 189), - INST(Pop , X86Pop , O(000000,8F,0,_,_,_,_,_ ), O(000000,58,_,_,_,_,_,_ ), F(WO)|F(Volatile)|F(Special) , EF(________), 0 , 0 , kFamilyNone, 0 , 1965, 213), - INST(Popa , X86Op , O(660000,61,_,_,_,_,_,_ ), 0 , F(Volatile)|F(Special) , EF(________), 0 , 0 , kFamilyNone, 0 , 1969, 214), - INST(Popad , X86Op , O(000000,61,_,_,_,_,_,_ ), 0 , F(Volatile)|F(Special) , EF(________), 0 , 0 , kFamilyNone, 0 , 1974, 214), - INST(Popcnt , X86Rm , O(F30F00,B8,_,_,x,_,_,_ ), 0 , F(WO) , EF(WWWWWW__), 0 , 0 , kFamilyNone, 0 , 1980, 215), - INST(Popf , X86Op , O(660000,9D,_,_,_,_,_,_ ), 0 , F(Volatile)|F(Special) , EF(WWWWWWWW), 0 , 0 , kFamilyNone, 0 , 1987, 216), - INST(Popfd , X86Op , O(000000,9D,_,_,_,_,_,_ ), 0 , F(Volatile)|F(Special) , EF(WWWWWWWW), 0 , 0 , kFamilyNone, 0 , 1992, 217), - INST(Popfq , X86Op , O(000000,9D,_,_,_,_,_,_ ), 0 , F(Volatile)|F(Special) , EF(WWWWWWWW), 0 , 0 , kFamilyNone, 0 , 1998, 218), - INST(Por , ExtRm_P , O(000F00,EB,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 113, 7654, 191), + INST(Pdep , VexRvm_Wx , V(F20F38,F5,_,0,x,_,_,_ ), 0 , F(WO) , EF(________), 0 , 0 , kFamilyNone, 0 , 1784, 201), + INST(Pext , VexRvm_Wx , V(F30F38,F5,_,0,x,_,_,_ ), 0 , F(WO) , EF(________), 0 , 0 , kFamilyNone, 0 , 1789, 201), + INST(Pextrb , ExtExtract , O(000F3A,14,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 83 , 6564, 202), + INST(Pextrd , ExtExtract , O(000F3A,16,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 83 , 6572, 75 ), + INST(Pextrq , ExtExtract , O(000F3A,16,_,_,1,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 83 , 6580, 203), + INST(Pextrw , ExtPextrw , O(000F00,C5,_,_,_,_,_,_ ), O(000F3A,15,_,_,_,_,_,_ ), F(WO) , EF(________), 0 , 8 , kFamilySse , 84 , 6588, 204), + INST(Pf2id , Ext3dNow , O(000F0F,1D,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 74 , 1794, 205), + INST(Pf2iw , Ext3dNow , O(000F0F,1C,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 85 , 1800, 205), + INST(Pfacc , Ext3dNow , O(000F0F,AE,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1806, 195), + INST(Pfadd , Ext3dNow , O(000F0F,9E,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1812, 195), + INST(Pfcmpeq , Ext3dNow , O(000F0F,B0,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1818, 195), + INST(Pfcmpge , Ext3dNow , O(000F0F,90,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1826, 195), + INST(Pfcmpgt , Ext3dNow , O(000F0F,A0,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1834, 195), + INST(Pfmax , Ext3dNow , O(000F0F,A4,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1842, 195), + INST(Pfmin , Ext3dNow , O(000F0F,94,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1848, 195), + INST(Pfmul , Ext3dNow , O(000F0F,B4,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1854, 195), + INST(Pfnacc , Ext3dNow , O(000F0F,8A,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 85 , 1860, 195), + INST(Pfpnacc , Ext3dNow , O(000F0F,8E,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 85 , 1867, 195), + INST(Pfrcp , Ext3dNow , O(000F0F,96,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 74 , 1875, 205), + INST(Pfrcpit1 , Ext3dNow , O(000F0F,A6,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1881, 195), + INST(Pfrcpit2 , Ext3dNow , O(000F0F,B6,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1890, 195), + INST(Pfrcpv , Ext3dNow , O(000F0F,86,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 86 , 1899, 195), + INST(Pfrsqit1 , Ext3dNow , O(000F0F,A7,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 0 , kFamilySse , 74 , 1906, 206), + INST(Pfrsqrt , Ext3dNow , O(000F0F,97,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 0 , kFamilySse , 74 , 1915, 206), + INST(Pfrsqrtv , Ext3dNow , O(000F0F,87,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 86 , 1923, 195), + INST(Pfsub , Ext3dNow , O(000F0F,9A,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1932, 195), + INST(Pfsubr , Ext3dNow , O(000F0F,AA,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1938, 195), + INST(Phaddd , ExtRm_P , O(000F38,02,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 87 , 6667, 190), + INST(Phaddsw , ExtRm_P , O(000F38,03,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 88 , 6684, 190), + INST(Phaddw , ExtRm_P , O(000F38,01,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 89 , 6753, 190), + INST(Phminposuw , ExtRm , O(660F38,41,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 90 , 6779, 6 ), + INST(Phsubd , ExtRm_P , O(000F38,06,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 91 , 6800, 190), + INST(Phsubsw , ExtRm_P , O(000F38,07,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 92 , 6817, 190), + INST(Phsubw , ExtRm_P , O(000F38,05,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 92 , 6826, 190), + INST(Pi2fd , Ext3dNow , O(000F0F,0D,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 74 , 1945, 205), + INST(Pi2fw , Ext3dNow , O(000F0F,0C,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 85 , 1951, 205), + INST(Pinsrb , ExtRmi , O(660F3A,20,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 93 , 6843, 207), + INST(Pinsrd , ExtRmi , O(660F3A,22,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 93 , 6851, 208), + INST(Pinsrq , ExtRmi , O(660F3A,22,_,_,1,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 93 , 6859, 209), + INST(Pinsrw , ExtRmi_P , O(000F00,C4,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 94 , 6867, 210), + INST(Pmaddubsw , ExtRm_P , O(000F38,04,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 95 , 7037, 190), + INST(Pmaddwd , ExtRm_P , O(000F00,F5,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 96 , 7048, 190), + INST(Pmaxsb , ExtRm , O(660F38,3C,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 97 , 7079, 14 ), + INST(Pmaxsd , ExtRm , O(660F38,3D,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 97 , 7087, 14 ), + INST(Pmaxsw , ExtRm_P , O(000F00,EE,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 98 , 7103, 192), + INST(Pmaxub , ExtRm_P , O(000F00,DE,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 98 , 7111, 192), + INST(Pmaxud , ExtRm , O(660F38,3F,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 99 , 7119, 14 ), + INST(Pmaxuw , ExtRm , O(660F38,3E,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 100, 7135, 14 ), + INST(Pminsb , ExtRm , O(660F38,38,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 100, 7143, 14 ), + INST(Pminsd , ExtRm , O(660F38,39,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 100, 7151, 14 ), + INST(Pminsw , ExtRm_P , O(000F00,EA,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 101, 7167, 192), + INST(Pminub , ExtRm_P , O(000F00,DA,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 101, 7175, 192), + INST(Pminud , ExtRm , O(660F38,3B,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 102, 7183, 14 ), + INST(Pminuw , ExtRm , O(660F38,3A,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 103, 7199, 14 ), + INST(Pmovmskb , ExtRm_P , O(000F00,D7,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 104, 7277, 211), + INST(Pmovsxbd , ExtRm , O(660F38,21,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 105, 7374, 212), + INST(Pmovsxbq , ExtRm , O(660F38,22,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 105, 7384, 213), + INST(Pmovsxbw , ExtRm , O(660F38,20,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 105, 7394, 56 ), + INST(Pmovsxdq , ExtRm , O(660F38,25,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 105, 7404, 56 ), + INST(Pmovsxwd , ExtRm , O(660F38,23,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 105, 7414, 56 ), + INST(Pmovsxwq , ExtRm , O(660F38,24,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 105, 7424, 212), + INST(Pmovzxbd , ExtRm , O(660F38,31,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 106, 7511, 212), + INST(Pmovzxbq , ExtRm , O(660F38,32,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 106, 7521, 213), + INST(Pmovzxbw , ExtRm , O(660F38,30,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 106, 7531, 56 ), + INST(Pmovzxdq , ExtRm , O(660F38,35,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 106, 7541, 56 ), + INST(Pmovzxwd , ExtRm , O(660F38,33,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 106, 7551, 56 ), + INST(Pmovzxwq , ExtRm , O(660F38,34,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 106, 7561, 212), + INST(Pmuldq , ExtRm , O(660F38,28,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 107, 7571, 6 ), + INST(Pmulhrsw , ExtRm_P , O(000F38,0B,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 108, 7579, 190), + INST(Pmulhrw , Ext3dNow , O(000F0F,B7,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 74 , 1957, 195), + INST(Pmulhuw , ExtRm_P , O(000F00,E4,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 109, 7589, 190), + INST(Pmulhw , ExtRm_P , O(000F00,E5,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 110, 7598, 190), + INST(Pmulld , ExtRm , O(660F38,40,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 111, 7606, 6 ), + INST(Pmullw , ExtRm_P , O(000F00,D5,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 112, 7622, 190), + INST(Pmuludq , ExtRm_P , O(000F00,F4,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 113, 7645, 190), + INST(Pop , X86Pop , O(000000,8F,0,_,_,_,_,_ ), O(000000,58,_,_,_,_,_,_ ), F(WO)|F(Volatile)|F(Special) , EF(________), 0 , 0 , kFamilyNone, 0 , 1965, 214), + INST(Popa , X86Op , O(660000,61,_,_,_,_,_,_ ), 0 , F(Volatile)|F(Special) , EF(________), 0 , 0 , kFamilyNone, 0 , 1969, 215), + INST(Popad , X86Op , O(000000,61,_,_,_,_,_,_ ), 0 , F(Volatile)|F(Special) , EF(________), 0 , 0 , kFamilyNone, 0 , 1974, 215), + INST(Popcnt , X86Rm , O(F30F00,B8,_,_,x,_,_,_ ), 0 , F(WO) , EF(WWWWWW__), 0 , 0 , kFamilyNone, 0 , 1980, 216), + INST(Popf , X86Op , O(660000,9D,_,_,_,_,_,_ ), 0 , F(Volatile)|F(Special) , EF(WWWWWWWW), 0 , 0 , kFamilyNone, 0 , 1987, 217), + INST(Popfd , X86Op , O(000000,9D,_,_,_,_,_,_ ), 0 , F(Volatile)|F(Special) , EF(WWWWWWWW), 0 , 0 , kFamilyNone, 0 , 1992, 218), + INST(Popfq , X86Op , O(000000,9D,_,_,_,_,_,_ ), 0 , F(Volatile)|F(Special) , EF(WWWWWWWW), 0 , 0 , kFamilyNone, 0 , 1998, 219), + INST(Por , ExtRm_P , O(000F00,EB,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 114, 7654, 192), INST(Prefetch , X86M_Only , O(000F00,0D,0,_,_,_,_,_ ), 0 , F(RO)|F(Volatile) , EF(________), 0 , 0 , kFamilyNone, 0 , 2004, 33 ), INST(Prefetchnta , X86M_Only , O(000F00,18,0,_,_,_,_,_ ), 0 , F(RO)|F(Volatile) , EF(________), 0 , 0 , kFamilyNone, 0 , 2013, 33 ), INST(Prefetcht0 , X86M_Only , O(000F00,18,1,_,_,_,_,_ ), 0 , F(RO)|F(Volatile) , EF(________), 0 , 0 , kFamilyNone, 0 , 2025, 33 ), INST(Prefetcht1 , X86M_Only , O(000F00,18,2,_,_,_,_,_ ), 0 , F(RO)|F(Volatile) , EF(________), 0 , 0 , kFamilyNone, 0 , 2036, 33 ), INST(Prefetcht2 , X86M_Only , O(000F00,18,3,_,_,_,_,_ ), 0 , F(RO)|F(Volatile) , EF(________), 0 , 0 , kFamilyNone, 0 , 2047, 33 ), - INST(Prefetchw , X86M_Only , O(000F00,0D,1,_,_,_,_,_ ), 0 , F(RO)|F(Volatile) , EF(UUUUUU__), 0 , 0 , kFamilyNone, 0 , 2058, 219), - INST(Prefetchwt1 , X86M_Only , O(000F00,0D,2,_,_,_,_,_ ), 0 , F(RO)|F(Volatile) , EF(UUUUUU__), 0 , 0 , kFamilyNone, 0 , 2068, 219), - INST(Psadbw , ExtRm_P , O(000F00,F6,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 114, 3543, 189), - INST(Pshufb , ExtRm_P , O(000F38,00,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 115, 7878, 220), - INST(Pshufd , ExtRmi , O(660F00,70,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 116, 7886, 221), - INST(Pshufhw , ExtRmi , O(F30F00,70,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 116, 7894, 221), - INST(Pshuflw , ExtRmi , O(F20F00,70,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 116, 7903, 221), + INST(Prefetchw , X86M_Only , O(000F00,0D,1,_,_,_,_,_ ), 0 , F(RO)|F(Volatile) , EF(UUUUUU__), 0 , 0 , kFamilyNone, 0 , 2058, 220), + INST(Prefetchwt1 , X86M_Only , O(000F00,0D,2,_,_,_,_,_ ), 0 , F(RO)|F(Volatile) , EF(UUUUUU__), 0 , 0 , kFamilyNone, 0 , 2068, 220), + INST(Psadbw , ExtRm_P , O(000F00,F6,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 115, 3543, 190), + INST(Pshufb , ExtRm_P , O(000F38,00,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 116, 7878, 189), + INST(Pshufd , ExtRmi , O(660F00,70,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 117, 7886, 221), + INST(Pshufhw , ExtRmi , O(F30F00,70,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 117, 7894, 221), + INST(Pshuflw , ExtRmi , O(F20F00,70,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 117, 7903, 221), INST(Pshufw , ExtRmi_P , O(000F00,70,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 37 , 2080, 222), - INST(Psignb , ExtRm_P , O(000F38,08,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 117, 7912, 189), - INST(Psignd , ExtRm_P , O(000F38,0A,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 117, 7920, 189), - INST(Psignw , ExtRm_P , O(000F38,09,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 117, 7928, 189), - INST(Pslld , ExtRmRi_P , O(000F00,F2,_,_,_,_,_,_ ), O(000F00,72,6,_,_,_,_,_ ), F(RW) , EF(________), 0 , 0 , kFamilySse , 118, 7936, 223), - INST(Pslldq , ExtRmRi , 0 , O(660F00,73,7,_,_,_,_,_ ), F(RW) , EF(________), 0 , 0 , kFamilySse , 119, 7943, 224), - INST(Psllq , ExtRmRi_P , O(000F00,F3,_,_,_,_,_,_ ), O(000F00,73,6,_,_,_,_,_ ), F(RW) , EF(________), 0 , 0 , kFamilySse , 118, 7951, 225), - INST(Psllw , ExtRmRi_P , O(000F00,F1,_,_,_,_,_,_ ), O(000F00,71,6,_,_,_,_,_ ), F(RW) , EF(________), 0 , 0 , kFamilySse , 120, 7982, 226), - INST(Psrad , ExtRmRi_P , O(000F00,E2,_,_,_,_,_,_ ), O(000F00,72,4,_,_,_,_,_ ), F(RW) , EF(________), 0 , 0 , kFamilySse , 120, 7989, 227), - INST(Psraw , ExtRmRi_P , O(000F00,E1,_,_,_,_,_,_ ), O(000F00,71,4,_,_,_,_,_ ), F(RW) , EF(________), 0 , 0 , kFamilySse , 121, 8027, 228), - INST(Psrld , ExtRmRi_P , O(000F00,D2,_,_,_,_,_,_ ), O(000F00,72,2,_,_,_,_,_ ), F(RW) , EF(________), 0 , 0 , kFamilySse , 121, 8034, 229), - INST(Psrldq , ExtRmRi , 0 , O(660F00,73,3,_,_,_,_,_ ), F(RW) , EF(________), 0 , 0 , kFamilySse , 122, 8041, 230), - INST(Psrlq , ExtRmRi_P , O(000F00,D3,_,_,_,_,_,_ ), O(000F00,73,2,_,_,_,_,_ ), F(RW) , EF(________), 0 , 0 , kFamilySse , 121, 8049, 231), - INST(Psrlw , ExtRmRi_P , O(000F00,D1,_,_,_,_,_,_ ), O(000F00,71,2,_,_,_,_,_ ), F(RW) , EF(________), 0 , 0 , kFamilySse , 123, 8080, 232), - INST(Psubb , ExtRm_P , O(000F00,F8,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 123, 8087, 192), - INST(Psubd , ExtRm_P , O(000F00,FA,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 123, 8094, 192), - INST(Psubq , ExtRm_P , O(000F00,FB,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 124, 8101, 192), - INST(Psubsb , ExtRm_P , O(000F00,E8,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 123, 8108, 192), - INST(Psubsw , ExtRm_P , O(000F00,E9,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 123, 8116, 192), - INST(Psubusb , ExtRm_P , O(000F00,D8,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 123, 8124, 192), - INST(Psubusw , ExtRm_P , O(000F00,D9,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 123, 8133, 192), - INST(Psubw , ExtRm_P , O(000F00,F9,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 123, 8142, 192), - INST(Pswapd , Ext3dNow , O(000F0F,BB,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 84 , 2087, 204), - INST(Ptest , ExtRm , O(660F38,17,_,_,_,_,_,_ ), 0 , F(RO) , EF(WWWWWW__), 0 , 0 , kFamilySse , 125, 8171, 233), - INST(Punpckhbw , ExtRm_P , O(000F00,68,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 126, 8254, 189), - INST(Punpckhdq , ExtRm_P , O(000F00,6A,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 126, 8265, 189), - INST(Punpckhqdq , ExtRm , O(660F00,6D,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 127, 8276, 6 ), - INST(Punpckhwd , ExtRm_P , O(000F00,69,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 126, 8288, 189), - INST(Punpcklbw , ExtRm_P , O(000F00,60,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 126, 8299, 189), - INST(Punpckldq , ExtRm_P , O(000F00,62,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 126, 8310, 189), - INST(Punpcklqdq , ExtRm , O(660F00,6C,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 127, 8321, 6 ), - INST(Punpcklwd , ExtRm_P , O(000F00,61,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 126, 8333, 189), + INST(Psignb , ExtRm_P , O(000F38,08,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 118, 7912, 190), + INST(Psignd , ExtRm_P , O(000F38,0A,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 118, 7920, 190), + INST(Psignw , ExtRm_P , O(000F38,09,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 118, 7928, 190), + INST(Pslld , ExtRmRi_P , O(000F00,F2,_,_,_,_,_,_ ), O(000F00,72,6,_,_,_,_,_ ), F(RW) , EF(________), 0 , 0 , kFamilySse , 119, 7936, 223), + INST(Pslldq , ExtRmRi , 0 , O(660F00,73,7,_,_,_,_,_ ), F(RW) , EF(________), 0 , 0 , kFamilySse , 120, 7943, 224), + INST(Psllq , ExtRmRi_P , O(000F00,F3,_,_,_,_,_,_ ), O(000F00,73,6,_,_,_,_,_ ), F(RW) , EF(________), 0 , 0 , kFamilySse , 119, 7951, 225), + INST(Psllw , ExtRmRi_P , O(000F00,F1,_,_,_,_,_,_ ), O(000F00,71,6,_,_,_,_,_ ), F(RW) , EF(________), 0 , 0 , kFamilySse , 121, 7982, 226), + INST(Psrad , ExtRmRi_P , O(000F00,E2,_,_,_,_,_,_ ), O(000F00,72,4,_,_,_,_,_ ), F(RW) , EF(________), 0 , 0 , kFamilySse , 121, 7989, 227), + INST(Psraw , ExtRmRi_P , O(000F00,E1,_,_,_,_,_,_ ), O(000F00,71,4,_,_,_,_,_ ), F(RW) , EF(________), 0 , 0 , kFamilySse , 122, 8027, 228), + INST(Psrld , ExtRmRi_P , O(000F00,D2,_,_,_,_,_,_ ), O(000F00,72,2,_,_,_,_,_ ), F(RW) , EF(________), 0 , 0 , kFamilySse , 122, 8034, 229), + INST(Psrldq , ExtRmRi , 0 , O(660F00,73,3,_,_,_,_,_ ), F(RW) , EF(________), 0 , 0 , kFamilySse , 123, 8041, 230), + INST(Psrlq , ExtRmRi_P , O(000F00,D3,_,_,_,_,_,_ ), O(000F00,73,2,_,_,_,_,_ ), F(RW) , EF(________), 0 , 0 , kFamilySse , 122, 8049, 231), + INST(Psrlw , ExtRmRi_P , O(000F00,D1,_,_,_,_,_,_ ), O(000F00,71,2,_,_,_,_,_ ), F(RW) , EF(________), 0 , 0 , kFamilySse , 124, 8080, 232), + INST(Psubb , ExtRm_P , O(000F00,F8,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 124, 8087, 193), + INST(Psubd , ExtRm_P , O(000F00,FA,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 124, 8094, 193), + INST(Psubq , ExtRm_P , O(000F00,FB,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 125, 8101, 193), + INST(Psubsb , ExtRm_P , O(000F00,E8,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 124, 8108, 193), + INST(Psubsw , ExtRm_P , O(000F00,E9,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 124, 8116, 193), + INST(Psubusb , ExtRm_P , O(000F00,D8,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 124, 8124, 193), + INST(Psubusw , ExtRm_P , O(000F00,D9,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 124, 8133, 193), + INST(Psubw , ExtRm_P , O(000F00,F9,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 124, 8142, 193), + INST(Pswapd , Ext3dNow , O(000F0F,BB,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 85 , 2087, 205), + INST(Ptest , ExtRm , O(660F38,17,_,_,_,_,_,_ ), 0 , F(RO) , EF(WWWWWW__), 0 , 0 , kFamilySse , 126, 8171, 233), + INST(Punpckhbw , ExtRm_P , O(000F00,68,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 127, 8254, 190), + INST(Punpckhdq , ExtRm_P , O(000F00,6A,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 127, 8265, 190), + INST(Punpckhqdq , ExtRm , O(660F00,6D,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 128, 8276, 6 ), + INST(Punpckhwd , ExtRm_P , O(000F00,69,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 127, 8288, 190), + INST(Punpcklbw , ExtRm_P , O(000F00,60,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 127, 8299, 190), + INST(Punpckldq , ExtRm_P , O(000F00,62,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 127, 8310, 190), + INST(Punpcklqdq , ExtRm , O(660F00,6C,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 128, 8321, 6 ), + INST(Punpcklwd , ExtRm_P , O(000F00,61,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 127, 8333, 190), INST(Push , X86Push , O(000000,FF,6,_,_,_,_,_ ), O(000000,50,_,_,_,_,_,_ ), F(RO)|F(Volatile)|F(Special) , EF(________), 0 , 0 , kFamilyNone, 0 , 2094, 234), - INST(Pusha , X86Op , O(660000,60,_,_,_,_,_,_ ), 0 , F(Volatile)|F(Special) , EF(________), 0 , 0 , kFamilyNone, 0 , 2099, 214), - INST(Pushad , X86Op , O(000000,60,_,_,_,_,_,_ ), 0 , F(Volatile)|F(Special) , EF(________), 0 , 0 , kFamilyNone, 0 , 2105, 214), + INST(Pusha , X86Op , O(660000,60,_,_,_,_,_,_ ), 0 , F(Volatile)|F(Special) , EF(________), 0 , 0 , kFamilyNone, 0 , 2099, 215), + INST(Pushad , X86Op , O(000000,60,_,_,_,_,_,_ ), 0 , F(Volatile)|F(Special) , EF(________), 0 , 0 , kFamilyNone, 0 , 2105, 215), INST(Pushf , X86Op , O(660000,9C,_,_,_,_,_,_ ), 0 , F(Volatile)|F(Special) , EF(RRRRRRRR), 0 , 0 , kFamilyNone, 0 , 2112, 235), INST(Pushfd , X86Op , O(000000,9C,_,_,_,_,_,_ ), 0 , F(Volatile)|F(Special) , EF(RRRRRRRR), 0 , 0 , kFamilyNone, 0 , 2118, 236), INST(Pushfq , X86Op , O(000000,9C,_,_,_,_,_,_ ), 0 , F(Volatile)|F(Special) , EF(RRRRRRRR), 0 , 0 , kFamilyNone, 0 , 2125, 237), - INST(Pxor , ExtRm_P , O(000F00,EF,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 128, 8344, 192), + INST(Pxor , ExtRm_P , O(000F00,EF,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 129, 8344, 193), INST(Rcl , X86Rot , O(000000,D0,2,_,x,_,_,_ ), 0 , F(RW)|F(Special) , EF(W____X__), 0 , 0 , kFamilyNone, 0 , 2132, 238), - INST(Rcpps , ExtRm , O(000F00,53,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 129, 8472, 57 ), - INST(Rcpss , ExtRm , O(F30F00,53,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 4 , kFamilySse , 130, 8479, 239), + INST(Rcpps , ExtRm , O(000F00,53,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 130, 8472, 57 ), + INST(Rcpss , ExtRm , O(F30F00,53,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 4 , kFamilySse , 131, 8479, 239), INST(Rcr , X86Rot , O(000000,D0,3,_,x,_,_,_ ), 0 , F(RW)|F(Special) , EF(W____X__), 0 , 0 , kFamilyNone, 0 , 2136, 238), INST(Rdfsbase , X86M , O(F30F00,AE,0,_,x,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilyNone, 0 , 2140, 240), INST(Rdgsbase , X86M , O(F30F00,AE,1,_,x,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilyNone, 0 , 2149, 240), @@ -775,12 +775,12 @@ const X86Inst X86InstDB::instData[] = { INST(Rol , X86Rot , O(000000,D0,0,_,x,_,_,_ ), 0 , F(RW)|F(Special) , EF(W____W__), 0 , 0 , kFamilyNone, 0 , 2189, 245), INST(Ror , X86Rot , O(000000,D0,1,_,x,_,_,_ ), 0 , F(RW)|F(Special) , EF(W____W__), 0 , 0 , kFamilyNone, 0 , 2193, 245), INST(Rorx , VexRmi_Wx , V(F20F3A,F0,_,0,x,_,_,_ ), 0 , F(WO) , EF(________), 0 , 0 , kFamilyNone, 0 , 2197, 246), - INST(Roundpd , ExtRmi , O(660F3A,09,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 131, 8574, 221), - INST(Roundps , ExtRmi , O(660F3A,08,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 131, 8583, 221), - INST(Roundsd , ExtRmi , O(660F3A,0B,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 132, 8592, 247), - INST(Roundss , ExtRmi , O(660F3A,0A,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 4 , kFamilySse , 132, 8601, 248), - INST(Rsqrtps , ExtRm , O(000F00,52,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 133, 8698, 57 ), - INST(Rsqrtss , ExtRm , O(F30F00,52,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 4 , kFamilySse , 134, 8707, 239), + INST(Roundpd , ExtRmi , O(660F3A,09,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 132, 8574, 221), + INST(Roundps , ExtRmi , O(660F3A,08,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 132, 8583, 221), + INST(Roundsd , ExtRmi , O(660F3A,0B,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 133, 8592, 247), + INST(Roundss , ExtRmi , O(660F3A,0A,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 4 , kFamilySse , 133, 8601, 248), + INST(Rsqrtps , ExtRm , O(000F00,52,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 134, 8698, 57 ), + INST(Rsqrtss , ExtRm , O(F30F00,52,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 4 , kFamilySse , 135, 8707, 239), INST(Sahf , X86Op , O(000000,9E,_,_,_,_,_,_ ), 0 , F(RO)|F(Volatile)|F(Special) , EF(_WWWWW__), 0 , 0 , kFamilyNone, 0 , 2202, 249), INST(Sal , X86Rot , O(000000,D0,4,_,x,_,_,_ ), 0 , F(RW)|F(Special) , EF(WWWUWW__), 0 , 0 , kFamilyNone, 0 , 2207, 250), INST(Sar , X86Rot , O(000000,D0,7,_,x,_,_,_ ), 0 , F(RW)|F(Special) , EF(WWWUWW__), 0 , 0 , kFamilyNone, 0 , 2211, 250), @@ -818,25 +818,25 @@ const X86Inst X86InstDB::instData[] = { INST(Sets , X86Set , O(000F00,98,_,_,_,_,_,_ ), 0 , F(WO) , EF(_R______), 0 , 1 , kFamilyNone, 0 , 2393, 260), INST(Setz , X86Set , O(000F00,94,_,_,_,_,_,_ ), 0 , F(WO) , EF(__R_____), 0 , 1 , kFamilyNone, 0 , 2398, 255), INST(Sfence , X86Fence , O(000F00,AE,7,_,_,_,_,_ ), 0 , F(Volatile) , EF(________), 0 , 0 , kFamilyNone, 0 , 2403, 73 ), - INST(Sha1msg1 , ExtRm , O(000F38,C9,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 135, 2410, 6 ), - INST(Sha1msg2 , ExtRm , O(000F38,CA,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 135, 2419, 6 ), - INST(Sha1nexte , ExtRm , O(000F38,C8,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 135, 2428, 6 ), - INST(Sha1rnds4 , ExtRmi , O(000F3A,CC,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 135, 2438, 17 ), - INST(Sha256msg1 , ExtRm , O(000F38,CC,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 135, 2448, 6 ), - INST(Sha256msg2 , ExtRm , O(000F38,CD,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 135, 2459, 6 ), - INST(Sha256rnds2 , ExtRm_XMM0 , O(000F38,CB,_,_,_,_,_,_ ), 0 , F(RW)|F(Special) , EF(________), 0 , 0 , kFamilySse , 135, 2470, 18 ), + INST(Sha1msg1 , ExtRm , O(000F38,C9,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 136, 2410, 6 ), + INST(Sha1msg2 , ExtRm , O(000F38,CA,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 136, 2419, 6 ), + INST(Sha1nexte , ExtRm , O(000F38,C8,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 136, 2428, 6 ), + INST(Sha1rnds4 , ExtRmi , O(000F3A,CC,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 136, 2438, 17 ), + INST(Sha256msg1 , ExtRm , O(000F38,CC,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 136, 2448, 6 ), + INST(Sha256msg2 , ExtRm , O(000F38,CD,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 136, 2459, 6 ), + INST(Sha256rnds2 , ExtRm_XMM0 , O(000F38,CB,_,_,_,_,_,_ ), 0 , F(RW)|F(Special) , EF(________), 0 , 0 , kFamilySse , 136, 2470, 18 ), INST(Shl , X86Rot , O(000000,D0,4,_,x,_,_,_ ), 0 , F(RW)|F(Special) , EF(WWWUWW__), 0 , 0 , kFamilyNone, 0 , 2482, 250), INST(Shld , X86ShldShrd , O(000F00,A4,_,_,x,_,_,_ ), 0 , F(RW)|F(Special) , EF(UWWUWW__), 0 , 0 , kFamilyNone, 0 , 7858, 261), INST(Shlx , VexRmv_Wx , V(660F38,F7,_,0,x,_,_,_ ), 0 , F(WO) , EF(________), 0 , 0 , kFamilyNone, 0 , 2486, 251), INST(Shr , X86Rot , O(000000,D0,5,_,x,_,_,_ ), 0 , F(RW)|F(Special) , EF(WWWUWW__), 0 , 0 , kFamilyNone, 0 , 2491, 250), INST(Shrd , X86ShldShrd , O(000F00,AC,_,_,x,_,_,_ ), 0 , F(RW)|F(Special) , EF(UWWUWW__), 0 , 0 , kFamilyNone, 0 , 2495, 261), INST(Shrx , VexRmv_Wx , V(F20F38,F7,_,0,x,_,_,_ ), 0 , F(WO) , EF(________), 0 , 0 , kFamilyNone, 0 , 2500, 251), - INST(Shufpd , ExtRmi , O(660F00,C6,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 136, 8968, 17 ), - INST(Shufps , ExtRmi , O(000F00,C6,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 137, 8976, 17 ), - INST(Sqrtpd , ExtRm , O(660F00,51,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 116, 8984, 57 ), - INST(Sqrtps , ExtRm , O(000F00,51,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 138, 8699, 57 ), - INST(Sqrtsd , ExtRm , O(F20F00,51,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 136, 9000, 262), - INST(Sqrtss , ExtRm , O(F30F00,51,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 4 , kFamilySse , 137, 8708, 239), + INST(Shufpd , ExtRmi , O(660F00,C6,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 137, 8968, 17 ), + INST(Shufps , ExtRmi , O(000F00,C6,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 138, 8976, 17 ), + INST(Sqrtpd , ExtRm , O(660F00,51,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 117, 8984, 57 ), + INST(Sqrtps , ExtRm , O(000F00,51,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 16, kFamilySse , 139, 8699, 57 ), + INST(Sqrtsd , ExtRm , O(F20F00,51,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 8 , kFamilySse , 137, 9000, 262), + INST(Sqrtss , ExtRm , O(F30F00,51,_,_,_,_,_,_ ), 0 , F(WO) , EF(________), 0 , 4 , kFamilySse , 138, 8708, 239), INST(Stac , X86Op , O(000F01,CB,_,_,_,_,_,_ ), 0 , F(Volatile) , EF(___W____), 0 , 0 , kFamilyNone, 0 , 2505, 30 ), INST(Stc , X86Op , O(000000,F9,_,_,_,_,_,_ ), 0 , 0 , EF(_____W__), 0 , 0 , kFamilyNone, 0 , 2510, 263), INST(Std , X86Op , O(000000,FD,_,_,_,_,_,_ ), 0 , 0 , EF(______W_), 0 , 0 , kFamilyNone, 0 , 5959, 264), @@ -844,22 +844,22 @@ const X86Inst X86InstDB::instData[] = { INST(Stmxcsr , X86M_Only , O(000F00,AE,3,_,_,_,_,_ ), 0 , F(Volatile) , EF(________), 0 , 0 , kFamilyNone, 0 , 9016, 266), INST(Stos , X86StrMr , O(000000,AA,_,_,_,_,_,_ ), 0 , F(RW)|F(Special)|F(Rep) , EF(______R_), 0 , 0 , kFamilyNone, 0 , 2518, 267), INST(Sub , X86Arith , O(000000,28,5,_,x,_,_,_ ), 0 , F(RW)|F(Lock) , EF(WWWWWW__), 0 , 0 , kFamilyNone, 0 , 753 , 268), - INST(Subpd , ExtRm , O(660F00,5C,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 139, 4099, 6 ), - INST(Subps , ExtRm , O(000F00,5C,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 140, 4111, 6 ), - INST(Subsd , ExtRm , O(F20F00,5C,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 139, 4787, 7 ), - INST(Subss , ExtRm , O(F30F00,5C,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 140, 4797, 8 ), + INST(Subpd , ExtRm , O(660F00,5C,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 140, 4099, 6 ), + INST(Subps , ExtRm , O(000F00,5C,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 141, 4111, 6 ), + INST(Subsd , ExtRm , O(F20F00,5C,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 140, 4787, 7 ), + INST(Subss , ExtRm , O(F30F00,5C,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 141, 4797, 8 ), INST(Swapgs , X86Op , O(000F01,F8,_,_,_,_,_,_ ), 0 , 0 , EF(________), 0 , 0 , kFamilyNone, 0 , 2523, 269), INST(T1mskc , VexVm_Wx , V(XOP_M9,01,7,0,x,_,_,_ ), 0 , F(WO) , EF(WWWUUW__), 0 , 0 , kFamilyNone, 0 , 2530, 16 ), INST(Test , X86Test , O(000000,84,_,_,x,_,_,_ ), O(000000,F6,_,_,x,_,_,_ ), F(RO) , EF(WWWUWW__), 0 , 0 , kFamilyNone, 0 , 8172, 270), - INST(Tzcnt , X86Rm , O(F30F00,BC,_,_,x,_,_,_ ), 0 , F(WO) , EF(UUWUUW__), 0 , 0 , kFamilyNone, 0 , 2537, 215), + INST(Tzcnt , X86Rm , O(F30F00,BC,_,_,x,_,_,_ ), 0 , F(WO) , EF(UUWUUW__), 0 , 0 , kFamilyNone, 0 , 2537, 216), INST(Tzmsk , VexVm_Wx , V(XOP_M9,01,4,0,x,_,_,_ ), 0 , F(WO) , EF(WWWUUW__), 0 , 0 , kFamilyNone, 0 , 2543, 16 ), - INST(Ucomisd , ExtRm , O(660F00,2E,_,_,_,_,_,_ ), 0 , F(RO) , EF(WWWWWW__), 0 , 0 , kFamilySse , 141, 9069, 51 ), - INST(Ucomiss , ExtRm , O(000F00,2E,_,_,_,_,_,_ ), 0 , F(RO) , EF(WWWWWW__), 0 , 0 , kFamilySse , 142, 9078, 52 ), + INST(Ucomisd , ExtRm , O(660F00,2E,_,_,_,_,_,_ ), 0 , F(RO) , EF(WWWWWW__), 0 , 0 , kFamilySse , 142, 9069, 51 ), + INST(Ucomiss , ExtRm , O(000F00,2E,_,_,_,_,_,_ ), 0 , F(RO) , EF(WWWWWW__), 0 , 0 , kFamilySse , 143, 9078, 52 ), INST(Ud2 , X86Op , O(000F00,0B,_,_,_,_,_,_ ), 0 , 0 , EF(________), 0 , 0 , kFamilyNone, 0 , 2549, 271), - INST(Unpckhpd , ExtRm , O(660F00,15,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 143, 9087, 6 ), - INST(Unpckhps , ExtRm , O(000F00,15,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 144, 9097, 6 ), - INST(Unpcklpd , ExtRm , O(660F00,14,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 143, 9107, 6 ), - INST(Unpcklps , ExtRm , O(000F00,14,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 144, 9117, 6 ), + INST(Unpckhpd , ExtRm , O(660F00,15,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 144, 9087, 6 ), + INST(Unpckhps , ExtRm , O(000F00,15,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 145, 9097, 6 ), + INST(Unpcklpd , ExtRm , O(660F00,14,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 144, 9107, 6 ), + INST(Unpcklps , ExtRm , O(000F00,14,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 145, 9117, 6 ), INST(Vaddpd , VexRvm_Lx , V(660F00,58,_,x,I,1,4,FV ), 0 , F(WO)|F(Vex)|F(Evex) , EF(________), 0 , 0 , kFamilyAvx , 0 , 2553, 272), INST(Vaddps , VexRvm_Lx , V(000F00,58,_,x,I,0,4,FV ), 0 , F(WO)|F(Vex)|F(Evex) , EF(________), 0 , 0 , kFamilyAvx , 1 , 2560, 272), INST(Vaddsd , VexRvm , V(F20F00,58,_,I,I,1,3,T1S), 0 , F(WO)|F(Vex)|F(Evex) , EF(________), 0 , 0 , kFamilyAvx , 2 , 2567, 273), @@ -1535,8 +1535,8 @@ const X86Inst X86InstDB::instData[] = { INST(Xchg , X86Xchg , O(000000,86,_,_,x,_,_,_ ), 0 , F(RW)|F(Xchg)|F(Lock) , EF(________), 0 , 0 , kFamilyNone, 0 , 374 , 461), INST(Xgetbv , X86Op , O(000F01,D0,_,_,_,_,_,_ ), 0 , F(WO)|F(Special) , EF(________), 0 , 0 , kFamilyNone, 0 , 9183, 462), INST(Xor , X86Arith , O(000000,30,6,_,x,_,_,_ ), 0 , F(RW)|F(Lock) , EF(WWWUWW__), 0 , 0 , kFamilyNone, 0 , 8345, 268), - INST(Xorpd , ExtRm , O(660F00,57,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 145, 9127, 195), - INST(Xorps , ExtRm , O(000F00,57,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 146, 9134, 195), + INST(Xorpd , ExtRm , O(660F00,57,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 146, 9127, 196), + INST(Xorps , ExtRm , O(000F00,57,_,_,_,_,_,_ ), 0 , F(RW) , EF(________), 0 , 0 , kFamilySse , 147, 9134, 196), INST(Xrstor , X86M_Only , O(000F00,AE,5,_,_,_,_,_ ), 0 , F(RO)|F(Volatile)|F(Special) , EF(________), 0 , 0 , kFamilyNone, 0 , 1051, 463), INST(Xrstor64 , X86M_Only , O(000F00,AE,5,_,1,_,_,_ ), 0 , F(RO)|F(Volatile)|F(Special) , EF(________), 0 , 0 , kFamilyNone, 0 , 1059, 464), INST(Xrstors , X86M_Only , O(000F00,C7,3,_,_,_,_,_ ), 0 , F(RO)|F(Volatile)|F(Special) , EF(________), 0 , 0 , kFamilyNone, 0 , 9190, 463), @@ -1567,7 +1567,7 @@ const X86Inst::CommonData X86InstDB::commonData[] = { { F(RW)|F(Lock) , 0 , 0 , 0x20, 0x3F, 0 , 14 , 10, JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #3 { F(RW) , 0 , 0 , 0x20, 0x20, 0 , 22 , 2 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #4 { F(RW)|F(Lock) , 0 , 0 , 0x00, 0x3F, 0 , 14 , 10, JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #5 - { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 296, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #6 + { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 298, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #6 { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 351, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #7 { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 352, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #8 { F(RW) , 0 , 0 , 0x01, 0x01, 0 , 22 , 2 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #9 @@ -1575,10 +1575,10 @@ const X86Inst::CommonData X86InstDB::commonData[] = { { F(WO) , 0 , 0 , 0x00, 0x00, 0 , 71 , 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #11 { F(RW)|F(Lock) , 0 , 0 , 0x00, 0x3F, 0 , 14 , 10, JUMP_TYPE(None) , SINGLE_REG(RO) , 0 }, // #12 { F(RW) , 0 , 0 , 0x00, 0x3F, 0 , 251, 2 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #13 - { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 296, 1 , JUMP_TYPE(None) , SINGLE_REG(RO) , 0 }, // #14 + { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 298, 1 , JUMP_TYPE(None) , SINGLE_REG(RO) , 0 }, // #14 { F(RW) , 0 , 0 , 0x00, 0x3F, 0 , 253, 2 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #15 { F(WO) , 0 , 0 , 0x00, 0x3F, 0 , 162, 2 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #16 - { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 298, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #17 + { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 300, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #17 { F(RW)|F(Special) , 0 , 0 , 0x00, 0x00, 0 , 353, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #18 { F(RW) , 0 , 0 , 0x00, 0x3F, 0 , 162, 2 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #19 { F(RW) , 0 , 0 , 0x00, 0x3F, 0 , 21 , 3 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #20 @@ -1752,36 +1752,36 @@ const X86Inst::CommonData X86InstDB::commonData[] = { { F(RO)|F(Volatile)|F(Special)|F(Rep) , 0 , 0 , 0x00, 0x00, 0 , 409, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #188 { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 295, 2 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #189 { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 297, 2 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #190 - { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 295, 2 , JUMP_TYPE(None) , SINGLE_REG(RO) , 0 }, // #191 - { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 295, 2 , JUMP_TYPE(None) , SINGLE_REG(WO) , 0 }, // #192 - { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 263, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #193 - { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 295, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #194 - { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 296, 1 , JUMP_TYPE(None) , SINGLE_REG(WO) , 0 }, // #195 - { F(WO)|F(Special) , 0 , 0 , 0x00, 0x00, 0 , 410, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #196 - { F(WO)|F(Special) , 0 , 0 , 0x00, 0x00, 0 , 411, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #197 - { F(WO)|F(Special) , 0 , 0 , 0x00, 0x00, 0 , 412, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #198 - { F(WO)|F(Special) , 0 , 0 , 0x00, 0x00, 0 , 413, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #199 - { F(WO) , 0 , 0 , 0x00, 0x00, 0 , 251, 2 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #200 - { F(WO) , 0 , 8 , 0x00, 0x00, 0 , 414, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #201 - { F(WO) , 0 , 8 , 0x00, 0x00, 0 , 415, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #202 - { F(WO) , 0 , 8 , 0x00, 0x00, 64 , 299, 2 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #203 - { F(WO) , 0 , 8 , 0x00, 0x00, 0 , 301, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #204 - { F(WO) , 0 , 0 , 0x00, 0x00, 0 , 301, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #205 - { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 416, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #206 - { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 417, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #207 - { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 418, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #208 - { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 419, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #209 - { F(WO) , 0 , 8 , 0x00, 0x00, 0 , 420, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #210 - { F(WO) , 0 , 16 , 0x00, 0x00, 0 , 233, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #211 - { F(WO) , 0 , 16 , 0x00, 0x00, 0 , 236, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #212 - { F(WO)|F(Volatile)|F(Special) , 0 , 0 , 0x00, 0x00, 65 , 120, 4 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #213 - { F(Volatile)|F(Special) , 0 , 0 , 0x00, 0x00, 0 , 421, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #214 - { F(WO) , 0 , 0 , 0x00, 0x3F, 0 , 161, 3 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #215 - { F(Volatile)|F(Special) , 0 , 0 , 0x00, 0xFF, 0 , 263, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #216 - { F(Volatile)|F(Special) , 0 , 0 , 0x00, 0xFF, 0 , 421, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #217 - { F(Volatile)|F(Special) , 0 , 0 , 0x00, 0xFF, 0 , 422, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #218 - { F(RO)|F(Volatile) , 0 , 0 , 0x00, 0x3F, 0 , 358, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #219 - { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 301, 2 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #220 + { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 299, 2 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #191 + { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 297, 2 , JUMP_TYPE(None) , SINGLE_REG(RO) , 0 }, // #192 + { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 297, 2 , JUMP_TYPE(None) , SINGLE_REG(WO) , 0 }, // #193 + { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 263, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #194 + { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 297, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #195 + { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 298, 1 , JUMP_TYPE(None) , SINGLE_REG(WO) , 0 }, // #196 + { F(WO)|F(Special) , 0 , 0 , 0x00, 0x00, 0 , 410, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #197 + { F(WO)|F(Special) , 0 , 0 , 0x00, 0x00, 0 , 411, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #198 + { F(WO)|F(Special) , 0 , 0 , 0x00, 0x00, 0 , 412, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #199 + { F(WO)|F(Special) , 0 , 0 , 0x00, 0x00, 0 , 413, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #200 + { F(WO) , 0 , 0 , 0x00, 0x00, 0 , 251, 2 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #201 + { F(WO) , 0 , 8 , 0x00, 0x00, 0 , 414, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #202 + { F(WO) , 0 , 8 , 0x00, 0x00, 0 , 415, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #203 + { F(WO) , 0 , 8 , 0x00, 0x00, 64 , 301, 2 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #204 + { F(WO) , 0 , 8 , 0x00, 0x00, 0 , 295, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #205 + { F(WO) , 0 , 0 , 0x00, 0x00, 0 , 295, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #206 + { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 416, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #207 + { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 417, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #208 + { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 418, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #209 + { F(RW) , 0 , 0 , 0x00, 0x00, 0 , 419, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #210 + { F(WO) , 0 , 8 , 0x00, 0x00, 0 , 420, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #211 + { F(WO) , 0 , 16 , 0x00, 0x00, 0 , 233, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #212 + { F(WO) , 0 , 16 , 0x00, 0x00, 0 , 236, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #213 + { F(WO)|F(Volatile)|F(Special) , 0 , 0 , 0x00, 0x00, 65 , 120, 4 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #214 + { F(Volatile)|F(Special) , 0 , 0 , 0x00, 0x00, 0 , 421, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #215 + { F(WO) , 0 , 0 , 0x00, 0x3F, 0 , 161, 3 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #216 + { F(Volatile)|F(Special) , 0 , 0 , 0x00, 0xFF, 0 , 263, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #217 + { F(Volatile)|F(Special) , 0 , 0 , 0x00, 0xFF, 0 , 421, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #218 + { F(Volatile)|F(Special) , 0 , 0 , 0x00, 0xFF, 0 , 422, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #219 + { F(RO)|F(Volatile) , 0 , 0 , 0x00, 0x3F, 0 , 358, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #220 { F(WO) , 0 , 16 , 0x00, 0x00, 0 , 71 , 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #221 { F(WO) , 0 , 8 , 0x00, 0x00, 0 , 423, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #222 { F(RW) , 0 , 0 , 0x00, 0x00, 66 , 303, 2 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #223 @@ -1967,7 +1967,7 @@ const X86Inst::CommonData X86InstDB::commonData[] = { { F(WO)|F(Vex)|F(Evex) , 0 , 0 , 0x00, 0x00, 106, 144, 4 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #403 { F(WO)|F(Vex)|F(Evex) , 0 , 0 , 0x00, 0x00, 0 , 414, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #404 { F(WO)|F(Vex)|F(Evex) , 0 , 0 , 0x00, 0x00, 0 , 415, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #405 - { F(WO)|F(Vex)|F(Evex) , 0 , 0 , 0x00, 0x00, 0 , 300, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #406 + { F(WO)|F(Vex)|F(Evex) , 0 , 0 , 0x00, 0x00, 0 , 302, 1 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #406 { F(RW)|F(Vex_VM)|F(Evex) , 0 , 0 , 0x00, 0x00, 107, 98 , 5 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #407 { F(RW)|F(Vex_VM)|F(Evex) , 0 , 0 , 0x00, 0x00, 108, 93 , 5 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #408 { F(RW)|F(Vex_VM)|F(Evex) , 0 , 0 , 0x00, 0x00, 109, 132, 4 , JUMP_TYPE(None) , SINGLE_REG(None), 0 }, // #409 @@ -2273,89 +2273,90 @@ const X86Inst::SseData X86InstDB::sseData[] = { FEATURE(SSE2) , AVX_CONV(Extend) , 576 }, // #79 { FEATURE(SSE4_1) , AVX_CONV(Extend) , 576 }, // #80 { FEATURE(SSE4_2) , AVX_CONV(Move) , 576 }, // #81 - { FEATURE(SSE4_1) , AVX_CONV(Move) , 617 }, // #82 + { FEATURE(SSE4_2) , AVX_CONV(Extend) , 576 }, // #82 + { FEATURE(SSE4_1) , AVX_CONV(Move) , 617 }, // #83 { FEATURE(MMX2) | FEATURE(SSE2) | - FEATURE(SSE4_1) , AVX_CONV(Move) , 617 }, // #83 - { FEATURE(3DNOW2) , AVX_CONV(None) , 0 }, // #84 - { FEATURE(GEODE) , AVX_CONV(None) , 0 }, // #85 - { FEATURE(SSSE3) , AVX_CONV(Extend) , 603 }, // #86 - { FEATURE(SSSE3) , AVX_CONV(Extend) , 604 }, // #87 - { FEATURE(SSSE3) , AVX_CONV(Extend) , 610 }, // #88 - { FEATURE(SSE4_1) , AVX_CONV(Move) , 612 }, // #89 - { FEATURE(SSSE3) , AVX_CONV(Extend) , 613 }, // #90 - { FEATURE(SSSE3) , AVX_CONV(Extend) , 614 }, // #91 - { FEATURE(SSE4_1) , AVX_CONV(Move) , 613 }, // #92 + FEATURE(SSE4_1) , AVX_CONV(Move) , 617 }, // #84 + { FEATURE(3DNOW2) , AVX_CONV(None) , 0 }, // #85 + { FEATURE(GEODE) , AVX_CONV(None) , 0 }, // #86 + { FEATURE(SSSE3) , AVX_CONV(Extend) , 603 }, // #87 + { FEATURE(SSSE3) , AVX_CONV(Extend) , 604 }, // #88 + { FEATURE(SSSE3) , AVX_CONV(Extend) , 610 }, // #89 + { FEATURE(SSE4_1) , AVX_CONV(Move) , 612 }, // #90 + { FEATURE(SSSE3) , AVX_CONV(Extend) , 613 }, // #91 + { FEATURE(SSSE3) , AVX_CONV(Extend) , 614 }, // #92 + { FEATURE(SSE4_1) , AVX_CONV(Move) , 613 }, // #93 { FEATURE(MMX2) | - FEATURE(SSE2) , AVX_CONV(Extend) , 613 }, // #93 - { FEATURE(SSSE3) , AVX_CONV(Extend) , 629 }, // #94 + FEATURE(SSE2) , AVX_CONV(Extend) , 613 }, // #94 + { FEATURE(SSSE3) , AVX_CONV(Extend) , 629 }, // #95 { FEATURE(MMX) | - FEATURE(SSE2) , AVX_CONV(Extend) , 629 }, // #95 - { FEATURE(SSE4_1) , AVX_CONV(Extend) , 631 }, // #96 + FEATURE(SSE2) , AVX_CONV(Extend) , 629 }, // #96 + { FEATURE(SSE4_1) , AVX_CONV(Extend) , 631 }, // #97 { FEATURE(MMX2) | - FEATURE(SSE2) , AVX_CONV(Extend) , 632 }, // #97 - { FEATURE(SSE4_1) , AVX_CONV(Extend) , 632 }, // #98 - { FEATURE(SSE4_1) , AVX_CONV(Extend) , 633 }, // #99 + FEATURE(SSE2) , AVX_CONV(Extend) , 632 }, // #98 + { FEATURE(SSE4_1) , AVX_CONV(Extend) , 632 }, // #99 + { FEATURE(SSE4_1) , AVX_CONV(Extend) , 633 }, // #100 { FEATURE(MMX2) | - FEATURE(SSE2) , AVX_CONV(Extend) , 634 }, // #100 - { FEATURE(SSE4_1) , AVX_CONV(Extend) , 634 }, // #101 - { FEATURE(SSE4_1) , AVX_CONV(Extend) , 635 }, // #102 + FEATURE(SSE2) , AVX_CONV(Extend) , 634 }, // #101 + { FEATURE(SSE4_1) , AVX_CONV(Extend) , 634 }, // #102 + { FEATURE(SSE4_1) , AVX_CONV(Extend) , 635 }, // #103 { FEATURE(MMX2) | - FEATURE(SSE2) , AVX_CONV(Move) , 643 }, // #103 - { FEATURE(SSE4_1) , AVX_CONV(Move) , 653 }, // #104 - { FEATURE(SSE4_1) , AVX_CONV(Move) , 661 }, // #105 - { FEATURE(SSE4_1) , AVX_CONV(Extend) , 661 }, // #106 - { FEATURE(SSSE3) , AVX_CONV(Extend) , 661 }, // #107 + FEATURE(SSE2) , AVX_CONV(Move) , 643 }, // #104 + { FEATURE(SSE4_1) , AVX_CONV(Move) , 653 }, // #105 + { FEATURE(SSE4_1) , AVX_CONV(Move) , 661 }, // #106 + { FEATURE(SSE4_1) , AVX_CONV(Extend) , 661 }, // #107 + { FEATURE(SSSE3) , AVX_CONV(Extend) , 661 }, // #108 { FEATURE(MMX2) | - FEATURE(SSE2) , AVX_CONV(Extend) , 660 }, // #108 - { FEATURE(MMX) | FEATURE(SSE2) , AVX_CONV(Extend) , 660 }, // #109 - { FEATURE(SSE4_1) , AVX_CONV(Extend) , 660 }, // #110 { FEATURE(MMX) | - FEATURE(SSE2) , AVX_CONV(Extend) , 661 }, // #111 - { FEATURE(SSE2) , AVX_CONV(Extend) , 662 }, // #112 + FEATURE(SSE2) , AVX_CONV(Extend) , 660 }, // #110 + { FEATURE(SSE4_1) , AVX_CONV(Extend) , 660 }, // #111 { FEATURE(MMX) | - FEATURE(SSE2) , AVX_CONV(Extend) , 655 }, // #113 + FEATURE(SSE2) , AVX_CONV(Extend) , 661 }, // #112 + { FEATURE(SSE2) , AVX_CONV(Extend) , 662 }, // #113 + { FEATURE(MMX) | + FEATURE(SSE2) , AVX_CONV(Extend) , 655 }, // #114 { FEATURE(MMX2) | - FEATURE(SSE2) , AVX_CONV(Extend) , 663 }, // #114 - { FEATURE(SSSE3) , AVX_CONV(Extend) , 675 }, // #115 - { FEATURE(SSE2) , AVX_CONV(Move) , 675 }, // #116 - { FEATURE(SSSE3) , AVX_CONV(Extend) , 674 }, // #117 + FEATURE(SSE2) , AVX_CONV(Extend) , 663 }, // #115 + { FEATURE(SSSE3) , AVX_CONV(Extend) , 675 }, // #116 + { FEATURE(SSE2) , AVX_CONV(Move) , 675 }, // #117 + { FEATURE(SSSE3) , AVX_CONV(Extend) , 674 }, // #118 { FEATURE(MMX) | - FEATURE(SSE2) , AVX_CONV(Extend) , 674 }, // #118 - { FEATURE(SSE2) , AVX_CONV(Extend) , 674 }, // #119 + FEATURE(SSE2) , AVX_CONV(Extend) , 674 }, // #119 + { FEATURE(SSE2) , AVX_CONV(Extend) , 674 }, // #120 { FEATURE(MMX) | - FEATURE(SSE2) , AVX_CONV(Extend) , 677 }, // #120 + FEATURE(SSE2) , AVX_CONV(Extend) , 677 }, // #121 { FEATURE(MMX) | - FEATURE(SSE2) , AVX_CONV(Extend) , 681 }, // #121 - { FEATURE(SSE2) , AVX_CONV(Extend) , 681 }, // #122 + FEATURE(SSE2) , AVX_CONV(Extend) , 681 }, // #122 + { FEATURE(SSE2) , AVX_CONV(Extend) , 681 }, // #123 { FEATURE(MMX) | - FEATURE(SSE2) , AVX_CONV(Extend) , 684 }, // #123 - { FEATURE(SSE2) , AVX_CONV(Extend) , 684 }, // #124 - { FEATURE(SSE4_1) , AVX_CONV(Move) , 685 }, // #125 + FEATURE(SSE2) , AVX_CONV(Extend) , 684 }, // #124 + { FEATURE(SSE2) , AVX_CONV(Extend) , 684 }, // #125 + { FEATURE(SSE4_1) , AVX_CONV(Move) , 685 }, // #126 { FEATURE(MMX) | - FEATURE(SSE2) , AVX_CONV(Extend) , 693 }, // #126 - { FEATURE(SSE2) , AVX_CONV(Extend) , 693 }, // #127 + FEATURE(SSE2) , AVX_CONV(Extend) , 693 }, // #127 + { FEATURE(SSE2) , AVX_CONV(Extend) , 693 }, // #128 { FEATURE(MMX) | - FEATURE(SSE2) , AVX_CONV(Extend) , 687 }, // #128 - { FEATURE(SSE) , AVX_CONV(Move) , 700 }, // #129 - { FEATURE(SSE) , AVX_CONV(Extend) , 700 }, // #130 - { FEATURE(SSE4_1) , AVX_CONV(Move) , 697 }, // #131 - { FEATURE(SSE4_1) , AVX_CONV(Extend) , 697 }, // #132 - { FEATURE(SSE) , AVX_CONV(Move) , 705 }, // #133 - { FEATURE(SSE) , AVX_CONV(Extend) , 705 }, // #134 - { FEATURE(SHA) , AVX_CONV(None) , 0 }, // #135 - { FEATURE(SSE2) , AVX_CONV(Extend) , 675 }, // #136 - { FEATURE(SSE) , AVX_CONV(Extend) , 675 }, // #137 - { FEATURE(SSE) , AVX_CONV(Move) , 675 }, // #138 - { FEATURE(SSE2) , AVX_CONV(Extend) , 669 }, // #139 - { FEATURE(SSE) , AVX_CONV(Extend) , 669 }, // #140 - { FEATURE(SSE2) , AVX_CONV(Move) , 666 }, // #141 - { FEATURE(SSE) , AVX_CONV(Move) , 666 }, // #142 - { FEATURE(SSE2) , AVX_CONV(Extend) , 665 }, // #143 - { FEATURE(SSE) , AVX_CONV(Extend) , 665 }, // #144 - { FEATURE(SSE2) , AVX_CONV(Extend) , -10 }, // #145 - { FEATURE(SSE) , AVX_CONV(Extend) , -10 } // #146 + FEATURE(SSE2) , AVX_CONV(Extend) , 687 }, // #129 + { FEATURE(SSE) , AVX_CONV(Move) , 700 }, // #130 + { FEATURE(SSE) , AVX_CONV(Extend) , 700 }, // #131 + { FEATURE(SSE4_1) , AVX_CONV(Move) , 697 }, // #132 + { FEATURE(SSE4_1) , AVX_CONV(Extend) , 697 }, // #133 + { FEATURE(SSE) , AVX_CONV(Move) , 705 }, // #134 + { FEATURE(SSE) , AVX_CONV(Extend) , 705 }, // #135 + { FEATURE(SHA) , AVX_CONV(None) , 0 }, // #136 + { FEATURE(SSE2) , AVX_CONV(Extend) , 675 }, // #137 + { FEATURE(SSE) , AVX_CONV(Extend) , 675 }, // #138 + { FEATURE(SSE) , AVX_CONV(Move) , 675 }, // #139 + { FEATURE(SSE2) , AVX_CONV(Extend) , 669 }, // #140 + { FEATURE(SSE) , AVX_CONV(Extend) , 669 }, // #141 + { FEATURE(SSE2) , AVX_CONV(Move) , 666 }, // #142 + { FEATURE(SSE) , AVX_CONV(Move) , 666 }, // #143 + { FEATURE(SSE2) , AVX_CONV(Extend) , 665 }, // #144 + { FEATURE(SSE) , AVX_CONV(Extend) , 665 }, // #145 + { FEATURE(SSE2) , AVX_CONV(Extend) , -10 }, // #146 + { FEATURE(SSE) , AVX_CONV(Extend) , -10 } // #147 }; #undef AVX_CONV #undef FEATURE @@ -3185,15 +3186,15 @@ static const X86Inst::ISignature _x86InstISignatureData[] = { ISIGNATURE(4, 0, 1, 1, 19 , 19 , 16 , 163, 0 , 0 ), // {W:r64, W:r64, R:r64|m64, R:} ISIGNATURE(0, 1, 1, 0, 0 , 0 , 0 , 0 , 0 , 0 ), // #293 {} ISIGNATURE(1, 1, 1, 0, 164, 0 , 0 , 0 , 0 , 0 ), // {R:r16|m16|r32|m32} - ISIGNATURE(2, 1, 1, 0, 165, 166, 0 , 0 , 0 , 0 ), // #295 {X:mm, R:mm|m64} - ISIGNATURE(2, 1, 1, 0, 118, 69 , 0 , 0 , 0 , 0 ), // #296 {X:xmm, R:xmm|m128} - ISIGNATURE(3, 1, 1, 0, 165, 166, 27 , 0 , 0 , 0 ), // #297 {X:mm, R:mm|m64, R:i8} - ISIGNATURE(3, 1, 1, 0, 118, 69 , 27 , 0 , 0 , 0 ), // #298 {X:xmm, R:xmm|m128, R:i8} - ISIGNATURE(3, 1, 1, 0, 161, 64 , 27 , 0 , 0 , 0 ), // #299 {W:r32|r64, R:mm, R:i8} - ISIGNATURE(3, 1, 1, 0, 154, 65 , 27 , 0 , 0 , 0 ), // #300 {W:r32|r64|m16|r16, R:xmm, R:i8} - ISIGNATURE(2, 1, 1, 0, 61 , 166, 0 , 0 , 0 , 0 ), // #301 {W:mm, R:mm|m64} + ISIGNATURE(2, 1, 1, 0, 61 , 165, 0 , 0 , 0 , 0 ), // #295 {W:mm, R:mm|m64} ISIGNATURE(2, 1, 1, 0, 66 , 69 , 0 , 0 , 0 , 0 ), // {W:xmm, R:xmm|m128} - ISIGNATURE(2, 1, 1, 0, 165, 167, 0 , 0 , 0 , 0 ), // #303 {X:mm, R:i8|mm|m64} + ISIGNATURE(2, 1, 1, 0, 166, 165, 0 , 0 , 0 , 0 ), // #297 {X:mm, R:mm|m64} + ISIGNATURE(2, 1, 1, 0, 118, 69 , 0 , 0 , 0 , 0 ), // #298 {X:xmm, R:xmm|m128} + ISIGNATURE(3, 1, 1, 0, 166, 165, 27 , 0 , 0 , 0 ), // #299 {X:mm, R:mm|m64, R:i8} + ISIGNATURE(3, 1, 1, 0, 118, 69 , 27 , 0 , 0 , 0 ), // #300 {X:xmm, R:xmm|m128, R:i8} + ISIGNATURE(3, 1, 1, 0, 161, 64 , 27 , 0 , 0 , 0 ), // #301 {W:r32|r64, R:mm, R:i8} + ISIGNATURE(3, 1, 1, 0, 154, 65 , 27 , 0 , 0 , 0 ), // #302 {W:r32|r64|m16|r16, R:xmm, R:i8} + ISIGNATURE(2, 1, 1, 0, 166, 167, 0 , 0 , 0 , 0 ), // #303 {X:mm, R:i8|mm|m64} ISIGNATURE(2, 1, 1, 0, 118, 79 , 0 , 0 , 0 , 0 ), // {X:xmm, R:i8|xmm|m128} ISIGNATURE(0, 1, 1, 0, 0 , 0 , 0 , 0 , 0 , 0 ), // #305 {} ISIGNATURE(1, 1, 1, 0, 168, 0 , 0 , 0 , 0 , 0 ), // {X:i16} @@ -3260,7 +3261,7 @@ static const X86Inst::ISignature _x86InstISignatureData[] = { ISIGNATURE(4, 1, 1, 4, 47 , 189, 190, 46 , 0 , 0 ), // #367 {X:, W:, X:, W:} ISIGNATURE(2, 0, 1, 2, 48 , 89 , 0 , 0 , 0 , 0 ), // #368 {W:, R:} ISIGNATURE(2, 1, 1, 0, 61 , 69 , 0 , 0 , 0 , 0 ), // #369 {W:mm, R:xmm|m128} - ISIGNATURE(2, 1, 1, 0, 66 , 166, 0 , 0 , 0 , 0 ), // #370 {W:xmm, R:mm|m64} + ISIGNATURE(2, 1, 1, 0, 66 , 165, 0 , 0 , 0 , 0 ), // #370 {W:xmm, R:mm|m64} ISIGNATURE(2, 1, 1, 0, 61 , 67 , 0 , 0 , 0 , 0 ), // #371 {W:mm, R:xmm|m64} ISIGNATURE(2, 1, 1, 0, 161, 67 , 0 , 0 , 0 , 0 ), // #372 {W:r32|r64, R:xmm|m64} ISIGNATURE(2, 1, 1, 0, 66 , 42 , 0 , 0 , 0 , 0 ), // #373 {W:xmm, R:r32|m32|r64|m64} @@ -3290,7 +3291,7 @@ static const X86Inst::ISignature _x86InstISignatureData[] = { ISIGNATURE(2, 1, 1, 0, 160, 179, 0 , 0 , 0 , 0 ), // #397 {W:r16|r32|r64, R:mem} ISIGNATURE(2, 1, 1, 2, 206, 181, 0 , 0 , 0 , 0 ), // #398 {W:, X:} ISIGNATURE(3, 1, 1, 1, 118, 65 , 207, 0 , 0 , 0 ), // #399 {X:xmm, R:xmm, R:} - ISIGNATURE(3, 1, 1, 1, 165, 64 , 207, 0 , 0 , 0 ), // #400 {X:mm, R:mm, R:} + ISIGNATURE(3, 1, 1, 1, 166, 64 , 207, 0 , 0 , 0 ), // #400 {X:mm, R:mm, R:} ISIGNATURE(2, 1, 1, 0, 61 , 65 , 0 , 0 , 0 , 0 ), // #401 {W:mm, R:xmm} ISIGNATURE(2, 1, 1, 0, 66 , 65 , 0 , 0 , 0 , 0 ), // #402 {W:xmm, R:xmm} ISIGNATURE(2, 1, 1, 0, 161, 65 , 0 , 0 , 0 , 0 ), // #403 {W:r32|r64, R:xmm} @@ -3313,7 +3314,7 @@ static const X86Inst::ISignature _x86InstISignatureData[] = { ISIGNATURE(2, 1, 1, 0, 161, 159, 0 , 0 , 0 , 0 ), // #420 {W:r32|r64, R:mm|xmm} ISIGNATURE(0, 1, 0, 0, 0 , 0 , 0 , 0 , 0 , 0 ), // #421 {} ISIGNATURE(0, 0, 1, 0, 0 , 0 , 0 , 0 , 0 , 0 ), // #422 {} - ISIGNATURE(3, 1, 1, 0, 61 , 166, 27 , 0 , 0 , 0 ), // #423 {W:mm, R:mm|m64, R:i8} + ISIGNATURE(3, 1, 1, 0, 61 , 165, 27 , 0 , 0 , 0 ), // #423 {W:mm, R:mm|m64, R:i8} ISIGNATURE(2, 1, 1, 0, 118, 27 , 0 , 0 , 0 , 0 ), // #424 {X:xmm, R:i8} ISIGNATURE(2, 1, 1, 0, 26 , 113, 0 , 0 , 0 , 0 ), // #425 {X:r8lo|r8hi|m8|r16|m16|r32|m32|r64|m64, R:cl|i8} ISIGNATURE(1, 0, 1, 0, 161, 0 , 0 , 0 , 0 , 0 ), // #426 {W:r32|r64} @@ -3535,8 +3536,8 @@ static const X86Inst::OSignature _x86InstOSignatureData[] = { OSIGNATURE(FLAG(R) | FLAG(Implicit) | FLAG(Gpd), 0, 0, 0x04), OSIGNATURE(FLAG(R) | FLAG(Implicit) | FLAG(Gpq), 0, 0, 0x04), OSIGNATURE(FLAG(R) | FLAG(Gpw) | FLAG(Gpd) | FLAG(Mem), MEM(M16) | MEM(M32), 0, 0x00), - OSIGNATURE(FLAG(X) | FLAG(Mm), 0, 0, 0x00), OSIGNATURE(FLAG(R) | FLAG(Mm) | FLAG(Mem), MEM(M64), 0, 0x00), + OSIGNATURE(FLAG(X) | FLAG(Mm), 0, 0, 0x00), OSIGNATURE(FLAG(R) | FLAG(Mm) | FLAG(Mem) | FLAG(I8), MEM(M64), 0, 0x00), OSIGNATURE(FLAG(X) | FLAG(I16), 0, 0, 0x00), OSIGNATURE(FLAG(R) | FLAG(Xmm) | FLAG(Ymm) | FLAG(Mem), MEM(M128) | MEM(M256), 0, 0x00), diff --git a/src/asmjit/x86/x86inst.h b/src/asmjit/x86/x86inst.h index 68fecac..1ce0dd1 100644 --- a/src/asmjit/x86/x86inst.h +++ b/src/asmjit/x86/x86inst.h @@ -482,7 +482,7 @@ struct X86Inst { kIdPcmpestrm, // [ANY] {SSE4_2} kIdPcmpgtb, // [ANY] {MMX|SSE2} kIdPcmpgtd, // [ANY] {MMX|SSE2} - kIdPcmpgtq, // [ANY] {SSE4_1} + kIdPcmpgtq, // [ANY] {SSE4_2} kIdPcmpgtw, // [ANY] {MMX|SSE2} kIdPcmpistri, // [ANY] {SSE4_2} kIdPcmpistrm, // [ANY] {SSE4_2} diff --git a/tools/configure-mac-xcode.sh b/tools/configure-mac-xcode.sh old mode 100644 new mode 100755 diff --git a/tools/configure-unix-makefiles-dbg.sh b/tools/configure-unix-makefiles-dbg.sh old mode 100644 new mode 100755 diff --git a/tools/configure-unix-makefiles-rel.sh b/tools/configure-unix-makefiles-rel.sh old mode 100644 new mode 100755 diff --git a/tools/generate-arm.js b/tools/generate-arm.js new file mode 100644 index 0000000..39843b0 --- /dev/null +++ b/tools/generate-arm.js @@ -0,0 +1,207 @@ +// [Generate-ARM] +// +// NOTE: This script relies on 'asmdb' package. Either install it by using +// node.js package manager (npm) or by copying/symlinking the whole asmdb +// directory as [asmjit]/tools/asmdb. +"use strict"; + +const base = require("./generate-base.js"); +const hasOwn = Object.prototype.hasOwnProperty; +const kIndent = base.kIndent; +const StringUtils = base.StringUtils; + +// ---------------------------------------------------------------------------- +// [ArmDB] +// ---------------------------------------------------------------------------- + +// Create the ARM database. +const arm = base.asmdb.arm; +const isa = new arm.ISA(); + +console.log( + isa.query({ + filter: function(inst) { + return !!inst.extensions.ASIMD; + } + }) +); + +//console.log(JSON.stringify(isa.instructionMap, null, 2)); + +// ---------------------------------------------------------------------------- +// [GenUtils] +// ---------------------------------------------------------------------------- + +class GenUtils { + // Get a list of instructions based on `name` and optional `mode`. + static instsOf(name, mode) { + const insts = isa.query(name); + return !mode ? insts : insts.filter(function(inst) { return inst.arch === mode; }); + } + + static archOf(group) { + var t16Arch = false; + var t32Arch = false; + var a32Arch = false; + var a64Arch = false; + + for (var i = 0; i < group.length; i++) { + const inst = group[i]; + if (inst.encoding === "T16") t16Arch = true; + if (inst.encoding === "T32") t32Arch = true; + if (inst.encoding === "A32") a32Arch = true; + if (inst.encoding === "A64") a64Arch = true; + } + + var s = (t16Arch && !t32Arch) ? "T16" : + (t32Arch && !t16Arch) ? "T32" : + (t16Arch && t32Arch) ? "Txx" : "---"; + s += " "; + s += (a32Arch) ? "A32" : "---"; + s += " "; + s += (a64Arch) ? "A64" : "---"; + + return `[${s}]`; + } + + static featuresOf(group) { + const exts = Object.create(null); + for (var i = 0; i < group.length; i++) { + const inst = group[i]; + for (var k in inst.extensions) + exts[k] = true; + } + const arr = Object.keys(exts); + arr.sort(); + return arr; + } +} + +// ---------------------------------------------------------------------------- +// [ArmGenerator] +// ---------------------------------------------------------------------------- + +class ArmGenerator extends base.BaseGenerator { + constructor() { + super("Arm"); + + this.load([ + "src/asmjit/arm/arminst.cpp", + "src/asmjit/arm/arminst.h" + ]); + } + + // -------------------------------------------------------------------------- + // [Parse] + // -------------------------------------------------------------------------- + + parse() { + this.addInst({ + id: 0, + name: "", + enum: "None" + }); + + var names = isa.instructionNames; + for (var i = 0; i < names.length; i++) { + const name = names[i]; + + const enum_ = StringUtils.upFirst(name); + const insts = GenUtils.instsOf(names[i]); + + this.addInst({ + id : 0, // Instruction id (numeric value). + name : name, // Instruction name. + enum : enum_, // Instruction enum without `kId` prefix. + + familyType : "kFamilyNone", // Family type. + familyIndex : 0, // Index to a family-specific data. + + nameIndex : -1, // Instruction name-index. + commonIndex : -1 + }); + } + + console.log("Number of Instructions: " + this.instArray.length); + } + + // -------------------------------------------------------------------------- + // [Generate] + // -------------------------------------------------------------------------- + + generate() { + // Order doesn't matter here. + this.generateIdData(); + this.generateNameData(); + + // These must be last, and order matters. + this.generateCommonData(); + this.generateInstData(); + + return this; + } + + // -------------------------------------------------------------------------- + // [Generate - CommonData] + // -------------------------------------------------------------------------- + + generateCommonData() { + const table = new base.IndexedArray(); + for (var i = 0; i < this.instArray.length; i++) { + const inst = this.instArray[i]; + + const item = "{ " + StringUtils.padLeft("0", 1) + "}"; + inst.commonIndex = table.addIndexed(item); + } + + var s = `const ArmInst::CommonData ArmInstDB::commonData[] = {\n${StringUtils.format(table, kIndent, true)}\n};\n`; + return this.inject("commonData", StringUtils.disclaimer(s), table.length * 12); + } + + // -------------------------------------------------------------------------- + // [Generate - InstData] + // -------------------------------------------------------------------------- + + generateInstData() { + var s = StringUtils.format(this.instArray, "", false, function(inst) { + return "INST(" + + StringUtils.padLeft(inst.enum , 16) + ", " + + StringUtils.padLeft(inst.encoding , 23) + ", " + + StringUtils.padLeft(inst.opcode0 , 26) + ", " + + StringUtils.padLeft(inst.nameIndex , 4) + ", " + + StringUtils.padLeft(inst.commonIndex, 3) + ")"; + }) + "\n"; + return this.inject("instData", s, this.instArray.length * 12); + } + + // -------------------------------------------------------------------------- + // [Reimplement] + // -------------------------------------------------------------------------- + + getCommentOf(name) { + var insts = GenUtils.instsOf(name); + if (!insts) return ""; + + var features = GenUtils.featuresOf(insts); + var comment = GenUtils.archOf(insts); + + if (features.length) + comment += " {" + features.join("|") + "}"; + + return comment; + } +} + +// ---------------------------------------------------------------------------- +// [Main] +// ---------------------------------------------------------------------------- + +function main() { + const gen = new ArmGenerator(); + + gen.parse(); + gen.generate(); + gen.dumpTableSizes(); + gen.save(); +} +main(); diff --git a/tools/generate-base.js b/tools/generate-base.js new file mode 100644 index 0000000..4b696ed --- /dev/null +++ b/tools/generate-base.js @@ -0,0 +1,488 @@ +// [Generate-Base] +"use strict"; + +const fs = require("fs"); +const hasOwn = Object.prototype.hasOwnProperty; + +// ---------------------------------------------------------------------------- +// [asmdb] +// ---------------------------------------------------------------------------- + +const asmdb = (function() { + try { + // Prefer a local copy of 'asmdb' package if possible. + return require("./asmdb"); + } + catch (ex) { + // Report a possible problem within a local asmdb. + if (ex.code !== "MODULE_NOT_FOUND") + throw ex; + + // Okay, so global then... + return require("asmdb"); + } +})(); +exports.asmdb = asmdb; + +// ---------------------------------------------------------------------------- +// [Constants] +// ---------------------------------------------------------------------------- + +const kIndent = " "; +const kJustify = 79; +const kAsmJitRoot = ".."; + +exports.kIndent = kIndent; +exports.kJustify = kJustify; +exports.kAsmJitRoot = kAsmJitRoot; + +// ---------------------------------------------------------------------------- +// [StringUtils] +// ---------------------------------------------------------------------------- + +function asString(x) { return String(x); } + +class StringUtils { + static trimLeft(s) { + return s.replace(/^\s+/, ""); + } + + static padLeft(s, n, x) { + if (!x) x = " "; + + s = String(s); + if (s.length < n) + s += x.repeat(n - s.length); + + return s; + } + + static upFirst(s) { + if (!s) return ""; + return s[0].toUpperCase() + s.substr(1); + } + + static decToHex(n, nPad) { + var hex = Number(n < 0 ? 0x100000000 + n : n).toString(16); + while (nPad > hex.length) + hex = "0" + hex; + return "0x" + hex.toUpperCase(); + } + + static format(array, indent, showIndex, mapFn) { + if (!mapFn) + mapFn = asString; + + var s = ""; + const commentSize = showIndex ? String(array.length).length : 0; + + for (var i = 0; i < array.length; i++) { + const last = i === array.length - 1; + s += `${indent}${mapFn(array[i])}`; + + if (commentSize) + s += `${last ? " " : ","} // #${i}`; + else if (!last) + s += ","; + + if (!last) s += "\n"; + } + + return s; + } + + static arrayToMap(arr, value) { + if (value === undefined) + value = true; + + const map = Object.create(null); + for (var i = 0; i < arr.length; i++) + map[arr[i]] = value; + return map; + } + + static makeCxxArray(array, code, indent) { + if (!indent) indent = kIndent; + return `${code} = {\n${indent}` + array.join(`,\n${indent}`) + `\n};\n`; + } + + static makeCxxArrayWithComment(array, code, indent) { + if (!indent) indent = kIndent; + var s = ""; + for (var i = 0; i < array.length; i++) { + const last = i === array.length - 1; + s += indent + array[i].data + + (last ? " // " : ", // ") + StringUtils.padLeft(array[i].refs ? "#" + String(i) : "", 5) + array[i].comment + "\n"; + } + return `${code} = {\n${s}};\n`; + } + + static disclaimer(s) { + return "// ------------------- Automatically generated, do not edit -------------------\n" + + s + + "// ----------------------------------------------------------------------------\n"; + } + + static indent(s, indentation) { + var lines = s.split(/\r?\n/g); + if (indentation) { + for (var i = 0; i < lines.length; i++) { + var line = lines[i]; + if (line) lines[i] = indentation + line; + } + } + + return lines.join("\n"); + } + + static inject(s, start, end, code) { + var iStart = s.indexOf(start); + var iEnd = s.indexOf(end); + + if (iStart === -1) + throw new Error(`Utils.inject(): Couldn't locate start mark '${start}'`); + + if (iEnd === -1) + throw new Error(`Utils.inject(): Couldn't locate end mark '${end}'`); + + var nIndent = 0; + while (iStart > 0 && s[iStart-1] === " ") { + iStart--; + nIndent++; + } + + if (nIndent) { + const indentation = " ".repeat(nIndent); + code = StringUtils.indent(code, indentation) + indentation; + } + + return s.substr(0, iStart + start.length + nIndent) + code + s.substr(iEnd); + } +} +exports.StringUtils = StringUtils; + +// ---------------------------------------------------------------------------- +// [IndexedArray] +// ---------------------------------------------------------------------------- + +class IndexedArray extends Array { + constructor() { + super(); + this._index = Object.create(null); + } + + addIndexed(element) { + const key = typeof element === "string" ? element : JSON.stringify(element); + var idx = this._index[key]; + + if (idx !== undefined) + return idx; + + idx = this.length; + this._index[key] = idx; + this.push(element); + return idx; + } +} +exports.IndexedArray = IndexedArray; + +// ---------------------------------------------------------------------------- +// [IndexedString] +// ---------------------------------------------------------------------------- + +class IndexedString { + constructor() { + this.map = Object.create(null); + this.array = []; + this.size = -1; + } + + add(s) { + this.map[s] = -1; + } + + index() { + const map = this.map; + const array = this.array; + const partialMap = Object.create(null); + + var k, kp; + var i, len; + + // Create a map that will contain all keys and partial keys. + for (k in map) { + if (!k) { + partialMap[k] = k; + } + else { + for (i = 0, len = k.length; i < len; i++) { + kp = k.substr(i); + if (!hasOwn.call(partialMap, kp) || partialMap[kp].length < len) + partialMap[kp] = k; + } + } + } + + // Create an array that will only contain keys that are needed. + for (k in map) + if (partialMap[k] === k) + array.push(k); + array.sort(); + + // Create valid offsets to the `array`. + var offMap = Object.create(null); + var offset = 0; + + for (i = 0, len = array.length; i < len; i++) { + k = array[i]; + + offMap[k] = offset; + offset += k.length + 1; + } + this.size = offset; + + // Assign valid offsets to `map`. + for (kp in map) { + k = partialMap[kp]; + map[kp] = offMap[k] + k.length - kp.length; + } + } + + format(indent, justify) { + if (this.size === -1) + throw new Error(`IndexedString.format(): not indexed yet, call index()`); + + const array = this.array; + if (!justify) justify = 0; + + var i; + var s = ""; + var line = ""; + + for (i = 0; i < array.length; i++) { + const item = "\"" + array[i] + ((i !== array.length - 1) ? "\\0\"" : "\";"); + const newl = line + (line ? " " : indent) + item; + + if (newl.length <= justify) { + line = newl; + continue; + } + else { + s += line + "\n"; + line = indent + item; + } + } + + return s + line; + } + + getSize() { + if (this.size === -1) + throw new Error(`IndexedString.getSize(): Not indexed yet, call index()`); + return this.size; + } + + getIndex(k) { + if (this.size === -1) + throw new Error(`IndexedString.getIndex(): Not indexed yet, call index()`); + + if (!hasOwn.call(this.map, k)) + throw new Error(`IndexedString.getIndex(): Key '${k}' not found.`); + + return this.map[k]; + } +} +exports.IndexedString = IndexedString; + +// ---------------------------------------------------------------------------- +// [BaseGenerator] +// ---------------------------------------------------------------------------- + +class BaseGenerator { + constructor(arch) { + this.arch = arch; + + this.instMap = Object.create(null); + this.instArray = []; + + this.files = Object.create(null); + this.tableSizes = Object.create(null); + } + + // --- File management --- + load(fileList) { + for (var i = 0; i < fileList.length; i++) { + const file = fileList[i]; + const path = kAsmJitRoot + "/" + file; + const data = fs.readFileSync(path, "utf8").replace(/\r\n/g, "\n"); + + this.files[file] = { + prev: data, + data: data + }; + } + return this; + } + + save() { + for (var file in this.files) { + const obj = this.files[file]; + if (obj.data !== obj.prev) { + const path = kAsmJitRoot + "/" + file; + console.log(`MODIFIED '${file}'`); + + fs.writeFileSync(path + ".backup", obj.prev, "utf8"); + fs.writeFileSync(path, obj.data, "utf8"); + } + } + } + + dataOf(file) { + const obj = this.files[file]; + if (!obj) + throw new Error(`BaseGenerator.getData(): File ${file} not loaded`); + return obj.data; + } + + // --- Instruction management --- + addInst(inst) { + inst.id = this.instArray.length; + + this.instMap[inst.name] = inst; + this.instArray.push(inst); + + return this; + } + + // --- Code Injection --- + inject(key, str, size) { + const begin = "// ${" + key + ":Begin}\n"; + const end = "// ${" + key + ":End}\n"; + + var done = false; + for (var file in this.files) { + const obj = this.files[file]; + const data = obj.data; + + if (data.indexOf(begin) !== -1) { + obj.data = StringUtils.inject(data, begin, end, str); + done = true; + break; + } + } + + if (!done) + throw new Error(`Generator.inject(): Cannot find '${key}'`); + + if (size) + this.tableSizes[key] = size; + + return this; + } + + // --- Independent Generators --- + generateIdData() { + const instArray = this.instArray; + + var s = ""; + for (var i = 0; i < instArray.length; i++) { + const inst = instArray[i]; + + var line = "kId" + inst.enum + (i ? "" : " = 0") + ","; + var comment = this.getCommentOf(inst.name); + + if (comment) + line = StringUtils.padLeft(line, 37) + "// " + comment; + + s += line + "\n"; + } + s += "_kIdCount\n"; + + return this.inject("idData", s); + } + + generateNameData() { + const arch = this.arch; + const none = `${arch}Inst::kIdNone`; + + const instArray = this.instArray; + const instNames = new IndexedString(); + + const instFirst = new Array(26); + const instLast = new Array(26); + + var maxLength = 0; + for (var i = 0; i < instArray.length; i++) { + const inst = instArray[i]; + instNames.add(inst.name); + maxLength = Math.max(maxLength, inst.name.length); + } + instNames.index(); + + for (var i = 0; i < instArray.length; i++) { + const inst = instArray[i]; + const name = inst.name; + const nameIndex = instNames.getIndex(name); + + const index = name.charCodeAt(0) - 'a'.charCodeAt(0); + if (index < 0 || index >= 26) + throw new Error(`BaseGenerator.generateNameData(): Invalid lookup character '${name[0]}' of '${name}'`); + + inst.nameIndex = nameIndex; + if (instFirst[index] === undefined) + instFirst[index] = `${arch}Inst::kId${inst.enum}`; + instLast[index] = `${arch}Inst::kId${inst.enum}`; + } + + var s = ""; + s += `const char ${arch}InstDB::nameData[] =\n${instNames.format(kIndent, kJustify)}\n`; + s += `\n`; + + s += `enum {\n`; + s += ` k${arch}InstMaxLength = ${maxLength}\n`; + s += `};\n`; + s += `\n`; + + s += `struct InstNameAZ {\n`; + s += ` uint16_t start;\n`; + s += ` uint16_t end;\n`; + s += `};\n`; + s += `\n`; + + s += `static const InstNameAZ ${arch}InstNameAZ[26] = {\n`; + for (var i = 0; i < instFirst.length; i++) { + const firstId = instFirst[i] || none; + const lastId = instLast[i] || none; + + s += ` { ${StringUtils.padLeft(firstId, 22)}, ${StringUtils.padLeft(lastId , 22)} + 1 }`; + if (i !== 26 - 1) + s += `,`; + s += `\n`; + } + s += `};\n`; + + return this.inject("nameData", StringUtils.disclaimer(s), instNames.getSize() + 26 * 4); + } + + // --- Reimplement --- + getCommentOf(name) { + throw new Error("BaseGenerator.getCommentOf(): Must be reimplemented"); + } + + // --- Miscellaneous --- + dumpTableSizes() { + const sizes = this.tableSizes; + + var pad = 24; + var total = 0; + + for (var name in sizes) { + const size = sizes[name]; + total += size; + console.log(StringUtils.padLeft('Size of ' + name, pad) + ": " + size); + } + + console.log(StringUtils.padLeft('Size of all tables', pad) + ": " + total); + } +} +exports.BaseGenerator = BaseGenerator; diff --git a/tools/generate-x86.js b/tools/generate-x86.js index 0a0cf7d..9c144e2 100644 --- a/tools/generate-x86.js +++ b/tools/generate-x86.js @@ -6,302 +6,94 @@ // by a linker to make all pointers the binary application/library uses valid. // This approach decreases the final size of AsmJit binary and relocation data. // -// NOTE: This script now relies on 'asmdb' package. Either install it by using -// node.js package manager (npm) or copy x86data.js and x86util.js files into -// the asmjit/tools directory. +// NOTE: This script relies on 'asmdb' package. Either install it by using +// node.js package manager (npm) or by copying/symlinking the whole asmdb +// directory as [asmjit]/tools/asmdb. "use strict"; -const fs = require("fs"); +const base = require("./generate-base.js"); const hasOwn = Object.prototype.hasOwnProperty; - -const asmdb = (function() { - try { - // Prefer a local copy of 'asmdb' package if possible. - return { - x86data: require("./x86data.js"), - x86util: require("./x86util.js") - }; - } - catch (ex) { - // Okay, so global then... - return require("asmdb.js"); - } -})(); - -// Special cases. -const x86db = new asmdb.x86util.X86DataBase().addDefault(); -x86db.addInstructions([ - // Imul in [reg, imm] form is encoded as [reg, reg, imm]. - ["imul" , "r16, ib" , "RM" , "66 6B /r ib" , "ANY OF=W SF=W ZF=U AF=U PF=U CF=W"], - ["imul" , "r32, ib" , "RM" , "6B /r ib" , "ANY OF=W SF=W ZF=U AF=U PF=U CF=W"], - ["imul" , "r64, ib" , "RM" , "REX.W 6B /r ib" , "X64 OF=W SF=W ZF=U AF=U PF=U CF=W"], - ["imul" , "r16, iw" , "RM" , "66 69 /r iw" , "ANY OF=W SF=W ZF=U AF=U PF=U CF=W"], - ["imul" , "r32, id" , "RM" , "69 /r id" , "ANY OF=W SF=W ZF=U AF=U PF=U CF=W"], - ["imul" , "r64, id" , "RM" , "REX.W 69 /r id" , "X64 OF=W SF=W ZF=U AF=U PF=U CF=W"] -]); +const kIndent = base.kIndent; +const StringUtils = base.StringUtils; // ---------------------------------------------------------------------------- -// [Integration] +// [X86DB] // ---------------------------------------------------------------------------- -const kFileName = "../src/asmjit/x86/x86inst.cpp"; -const kIndent = " "; -const kJustify = 79; -const kX86InstPrefix = "X86Inst::kId"; +// Create the X86 database and add some special cases recognized by AsmJit. +const x86 = base.asmdb.x86; +const isa = new x86.ISA({ + instructions: [ + // Imul in [reg, imm] form is encoded as [reg, reg, imm]. + ["imul" , "r16, ib" , "RM" , "66 6B /r ib" , "ANY OF=W SF=W ZF=U AF=U PF=U CF=W"], + ["imul" , "r32, ib" , "RM" , "6B /r ib" , "ANY OF=W SF=W ZF=U AF=U PF=U CF=W"], + ["imul" , "r64, ib" , "RM" , "REX.W 6B /r ib" , "X64 OF=W SF=W ZF=U AF=U PF=U CF=W"], + ["imul" , "r16, iw" , "RM" , "66 69 /r iw" , "ANY OF=W SF=W ZF=U AF=U PF=U CF=W"], + ["imul" , "r32, id" , "RM" , "69 /r id" , "ANY OF=W SF=W ZF=U AF=U PF=U CF=W"], + ["imul" , "r64, id" , "RM" , "REX.W 69 /r id" , "X64 OF=W SF=W ZF=U AF=U PF=U CF=W"] + ] +}); -const kDisclaimerStart = "// ------------------- Automatically generated, do not edit -------------------\n"; -const kDisclaimerEnd = "// ----------------------------------------------------------------------------\n"; - -// ---------------------------------------------------------------------------- -// [Utils] -// ---------------------------------------------------------------------------- - -class Utils { - static upFirst(s) { - if (!s) return ""; - return s[0].toUpperCase() + s.substr(1); - } - - static trimLeft(s) { - return s.replace(/^\s+/, ""); - } - - static padLeft(s, n, x) { - if (!x) x = " "; - - s = String(s); - if (s.length < n) - s += x.repeat(n - s.length); - - return s; - } - - static decToHex(n, nPad) { - var hex = Number(n < 0 ? 0x100000000 + n : n).toString(16); - while (nPad > hex.length) - hex = "0" + hex; - return "0x" + hex.toUpperCase(); - } - - static format(array, indent, showIndex, mapFn) { - if (!mapFn) - mapFn = function(x) { return String(x); } - - const commentSize = showIndex ? String(array.length).length : 0; - - var s = ""; - for (var i = 0; i < array.length; i++) { - const last = i === array.length - 1; - s += `${indent}${mapFn(array[i])}`; - - if (commentSize) - s += `${last ? " " : ","} // #${i}`; - else if (!last) - s += ","; - - if (!last) s += "\n"; - } - return s; - } - - static inject(s, start, end, code) { - var iStart = s.indexOf(start); - var iEnd = s.indexOf(end); - - if (iStart === -1) - throw new Error(`Utils.inject(): Couldn't locate start mark '${start}'`); - - if (iEnd === -1) - throw new Error(`Utils.inject(): Couldn't locate end mark '${end}'`); - - return s.substr(0, iStart + start.length) + code + s.substr(iEnd); - } -} - -// ---------------------------------------------------------------------------- -// [IndexedArray] -// ---------------------------------------------------------------------------- - -class IndexedArray extends Array { - constructor() { - super(); - this._index = Object.create(null); - } - - addIndexed(element) { - const key = typeof element === "string" ? element : JSON.stringify(element); - var idx = this._index[key]; - - if (idx !== undefined) - return idx; - - idx = this.length; - this._index[key] = idx; - this.push(element); - return idx; - } -} - -// ---------------------------------------------------------------------------- -// [IndexedString] -// ---------------------------------------------------------------------------- - -class IndexedString { - constructor() { - this.map = Object.create(null); - this.array = []; - this.size = -1; - } - - add(s) { - this.map[s] = -1; - } - - index() { - const map = this.map; - const array = this.array; - const partialMap = Object.create(null); - - var k, kp; - var i, len; - - // Create a map that will contain all keys and partial keys. - for (k in map) { - if (!k) { - partialMap[k] = k; - } - else { - for (i = 0, len = k.length; i < len; i++) { - kp = k.substr(i); - if (!hasOwn.call(partialMap, kp) || partialMap[kp].length < len) - partialMap[kp] = k; - } - } - } - - // Create an array that will only contain keys that are needed. - for (k in map) - if (partialMap[k] === k) - array.push(k); - array.sort(); - - // Create valid offsets to the `array`. - var offMap = Object.create(null); - var offset = 0; - - for (i = 0, len = array.length; i < len; i++) { - k = array[i]; - - offMap[k] = offset; - offset += k.length + 1; - } - this.size = offset; - - // Assign valid offsets to `map`. - for (kp in map) { - k = partialMap[kp]; - map[kp] = offMap[k] + k.length - kp.length; - } - } - - format(indent, justify) { - if (this.size === -1) - throw new Error(`IndexedString.format(): not indexed yet, call index()`); - - const array = this.array; - if (!justify) justify = 0; - - var i; - var s = ""; - var line = ""; - - for (i = 0; i < array.length; i++) { - const item = "\"" + array[i] + ((i !== array.length - 1) ? "\\0\"" : "\";"); - const newl = line + (line ? " " : indent) + item; - - if (newl.length <= justify) { - line = newl; - continue; - } - else { - s += line + "\n"; - line = indent + item; - } - } - - return s + line; - } - - getSize() { - if (this.size === -1) - throw new Error(`IndexedString.getSize(): Not indexed yet, call index()`); - return this.size; - } - - getIndex(k) { - if (this.size === -1) - throw new Error(`IndexedString.getIndex(): Not indexed yet, call index()`); - - if (!hasOwn.call(this.map, k)) - throw new Error(`IndexedString.getIndex(): Key '${k}' not found.`); - - return this.map[k]; - } -} +// var fs = require("fs"); +// fs.writeFileSync("X86.JSON", JSON.stringify(isa.instructionMap, null, 2)); // ---------------------------------------------------------------------------- // [GenUtils] // ---------------------------------------------------------------------------- +const RemappedInsts = { + __proto__: null, + + "cmpsd": { names: ["cmpsd"] , rep: false }, + "movsd": { names: ["movsd"] , rep: false }, + "cmps" : { names: ["cmpsb", "cmpsw", "cmpsd", "cmpsq"], rep: true }, + "movs" : { names: ["movsb", "movsw", "movsd", "movsq"], rep: true }, + "lods" : { names: ["lodsb", "lodsw", "lodsd", "lodsq"], rep: null }, + "scas" : { names: ["scasb", "scasw", "scasd", "scasq"], rep: null }, + "stos" : { names: ["stosb", "stosw", "stosd", "stosq"], rep: null }, + "ins" : { names: ["insb" , "insw" , "insd" ] , rep: null }, + "outs" : { names: ["outsb", "outsw", "outsd"] , rep: null } +}; + class GenUtils { // Get group of instructions having the same name as understood by AsmJit. static groupOf(name) { - var rep = null; - var names = null; + const remapped = RemappedInsts[name]; + if (!remapped) return isa.query(name); - switch (name) { - // Remap / filter these instructions. - case "cmpsd": names = ["cmpsd"]; rep = false; break; - case "movsd": names = ["movsd"]; rep = false; break; - case "cmps" : names = ["cmpsb", "cmpsw", "cmpsd", "cmpsq"]; rep = true; break; - case "movs" : names = ["movsb", "movsw", "movsd", "movsq"]; rep = true; break; - case "lods" : names = ["lodsb", "lodsw", "lodsd", "lodsq"]; break; - case "scas" : names = ["scasb", "scasw", "scasd", "scasq"]; break; - case "stos" : names = ["stosb", "stosw", "stosd", "stosq"]; break; - case "ins" : names = ["insb" , "insw" , "insd" ]; break; - case "outs" : names = ["outsb", "outsw", "outsd"]; break; + const insts = isa.query(remapped.names); + const rep = remapped.rep; + if (rep === null) return insts; - default: - return x86db.getGroup(name); + return insts.filter(function(inst) { + return rep === !!(inst.attributes.REP || inst.attributes.REPZ || inst.attributes.REPNZ); + }); + } + + static archOf(group) { + var anyArch = false; + var x86Arch = false; + var x64Arch = false; + + for (var i = 0; i < group.length; i++) { + const inst = group[i]; + if (inst.arch === "ANY") anyArch = true; + if (inst.arch === "X86") x86Arch = true; + if (inst.arch === "X64") x64Arch = true; } - const insts = []; - for (var i = 0; i < names.length; i++) { - insts.push.apply(insts, x86db.getGroup(names[i])); - } - - if (rep === null) - return insts; - - // Filter, if needed. - const output = []; - for (var i = 0; i < insts.length; i++) { - const inst = insts[i]; - if (rep === !!(inst.rep || inst.repz || inst.repnz)) - output.push(inst); - } - return output; + return anyArch || (x86Arch && x64Arch) ? "[ANY]" : x86Arch ? "[X86]" : "[X64]"; } // Calculate a family of a group of instructions. - static familyOf(insts) { + static familyOf(group) { var i, j; var nSSE = 0; var nAVX = 0; - - for (i = 0; i < insts.length; i++) { - const inst = insts[i]; + + for (i = 0; i < group.length; i++) { + const inst = group[i]; const ops = inst.operands; if (/^(VEX|XOP|EVEX)$/.test(inst.prefix)) { @@ -322,24 +114,24 @@ class GenUtils { } } - if (nSSE === insts.length) return "Sse"; - if (nAVX === insts.length) return "Avx"; - + if (nSSE === group.length) return "Sse"; + if (nAVX === group.length) return "Avx"; + return "General"; } - static featuresOf(insts) { + static featuresOf(group) { const features = Object.create(null); - for (var i = 0; i < insts.length; i++) - for (var feature in insts[i].cpu) + for (var i = 0; i < group.length; i++) + for (var feature in group[i].extensions) features[feature] = true; const result = Object.getOwnPropertyNames(features); result.sort(); return result; } - + static eqOps(aOps, aFrom, bOps, bFrom) { var x = 0; for (;;) { @@ -361,7 +153,92 @@ class GenUtils { x++; } } -}; + + static singleRegCase(name) { + switch (name) { + case "xchg" : + + case "and" : + case "pand" : case "vpand" : case "vpandd" : case "vpandq" : + case "andpd" : case "vandpd" : + case "andps" : case "vandps" : + + case "or" : + case "por" : case "vpor" : case "vpord" : case "vporq" : + case "orpd" : case "vorpd" : + case "orps" : case "vorps" : + + case "pminsb" : case "vpminsb" : case "pmaxsb" : case "vpmaxsb" : + case "pminsw" : case "vpminsw" : case "pmaxsw" : case "vpmaxsw" : + case "pminsd" : case "vpminsd" : case "pmaxsd" : case "vpmaxsd" : + case "pminub" : case "vpminub" : case "pmaxub" : case "vpmaxub" : + case "pminuw" : case "vpminuw" : case "pmaxuw" : case "vpmaxuw" : + case "pminud" : case "vpminud" : case "pmaxud" : case "vpmaxud" : + return "RO"; + + case "pandn" : case "vpandn" : case "vpandnd" : case "vpandnq" : + + case "xor" : + case "pxor" : case "vpxor" : case "vpxord" : case "vpxorq" : + case "xorpd" : case "vxorpd" : + case "xorps" : case "vxorps" : + + case "sub" : + case "psubb" : case "vpsubb" : + case "psubw" : case "vpsubw" : + case "psubd" : case "vpsubd" : + case "psubq" : case "vpsubq" : + case "psubsb" : case "vpsubsb" : case "psubusb" : case "vpsubusb" : + case "psubsw" : case "vpsubsw" : case "psubusw" : case "vpsubusw" : + + case "vpcmpeqb": case "pcmpeqb" : case "vpcmpgtb": case "pcmpgtb" : + case "vpcmpeqw": case "pcmpeqw" : case "vpcmpgtw": case "pcmpgtw" : + case "vpcmpeqd": case "pcmpeqd" : case "vpcmpgtd": case "pcmpgtd" : + case "vpcmpeqq": case "pcmpeqq" : case "vpcmpgtq": case "pcmpgtq" : + + case "vpcmpb" : case "vpcmpub" : + case "vpcmpd" : case "vpcmpud" : + case "vpcmpw" : case "vpcmpuw" : + case "vpcmpq" : case "vpcmpuq" : + return "WO"; + + default: + return "None"; + } + } + + static jumpType(name) { + switch (name) { + case "jo" : + case "jno": + case "jb" : case "jnae": + case "jae": case "jnb" : + case "je" : case "jz" : + case "jne": case "jnz" : + case "jbe": case "jna" : + case "js" : + case "jns": + case "jp" : case "jpe" : + case "jnp": case "jpo" : + case "jl" : case "jnge": + case "jge": case "jnl" : + case "jle": case "jng" : + case "jg" : case "jnle": + case "jecxz": + case "loop": + case "loope": + case "loopne": + return "Conditional"; + + case "jmp" : return "Direct"; + case "call": return "Call"; + case "ret" : return "Return"; + + default: + return "None"; + } + } +} // ---------------------------------------------------------------------------- // [Generate] @@ -458,8 +335,8 @@ const OpToAsmJitOp = { "xmm" : "FLAG(Xmm)", "ymm" : "FLAG(Ymm)", "zmm" : "FLAG(Zmm)", - "sreg" : "FLAG(Seg)", "bnd" : "FLAG(Bnd)", + "sreg" : "FLAG(Seg)", "creg" : "FLAG(Cr)", "dreg" : "FLAG(Dr)", @@ -554,8 +431,8 @@ class OSignature { var hasReg = false; for (k in af) { - const index = asmdb.x86util.misc.regIndexOf(k); - const kind = asmdb.x86util.misc.regKindOf(k); + const index = x86.Utils.regIndexOf(k); + const kind = x86.Utils.regKindOf(k); if (kind) hasReg = true; @@ -566,9 +443,9 @@ class OSignature { if (hasReg) { for (k in bf) { - const index = asmdb.x86util.misc.regIndexOf(k); + const index = x86.Utils.regIndexOf(k); if (index !== null && index !== -1) { - const kind = asmdb.x86util.misc.regKindOf(k); + const kind = x86.Utils.regKindOf(k); if (indexKind !== kind) return false; } } @@ -628,7 +505,6 @@ class OSignature { } toAsmJitOpData() { - var s = ""; var oFlags = this.flags; var mFlags = Object.create(null); @@ -751,7 +627,7 @@ class OSignature { const sMemFlags = StringifyArray(SortOpArray(Object.getOwnPropertyNames(mMemFlags)), OpToAsmJitOp); const sExtFlags = StringifyArray(SortOpArray(Object.getOwnPropertyNames(mExtFlags)), OpToAsmJitOp); - return `OSIGNATURE(${sFlags || 0}, ${sMemFlags || 0}, ${sExtFlags || 0}, ${Utils.decToHex(sRegMask, 2)})`; + return `OSIGNATURE(${sFlags || 0}, ${sMemFlags || 0}, ${sExtFlags || 0}, ${StringUtils.decToHex(sRegMask, 2)})`; } } @@ -807,7 +683,7 @@ class ISignature extends Array { return false; } - // Bail if mergeWidth and operand-level failed. + // Bail if mergeWidth at operand-level failed. if (xorIndex !== -1 && !this[xorIndex].mergeWith(other[xorIndex])) return false; @@ -817,7 +693,7 @@ class ISignature extends Array { return true; } - toString(ops) { + toString() { return "{" + this.join(", ") + "}"; } } @@ -842,7 +718,7 @@ class SignatureArray extends Array { this[i].simplify(); } - toString(ops) { + toString() { return "[" + this.join(", ") + "]"; } } @@ -851,10 +727,9 @@ class SignatureArray extends Array { // [X86Generator] // ---------------------------------------------------------------------------- -class X86Generator { +class X86Generator extends base.BaseGenerator { constructor() { - this.instMap = Object.create(null); - this.instArray = []; + super("X86"); this.opCombinations = Object.create(null); this.maxOpRows = 0; @@ -866,7 +741,10 @@ class X86Generator { "moff64": true }; - this.sizeStats = Object.create(null); + this.load([ + "src/asmjit/x86/x86inst.cpp", + "src/asmjit/x86/x86inst.h" + ]); } signaturesFromInsts(insts) { @@ -955,165 +833,97 @@ class X86Generator { // [Parse] // -------------------------------------------------------------------------- - parse(data) { - // Create database. + parse() { + const data = this.dataOf("src/asmjit/x86/x86inst.cpp"); const re = new RegExp( - "INST\\(([A-Za-z0-9_]+)\\s*," + // [01] Id. - "\\s*\\\"([A-Za-z0-9_ ]*)\\\"\\s*," + // [02] Name. - "([^,]+)," + // [03] Encoding. - "(.{26}[^,]*)," + // [04] Opcode[0]. - "(.{26}[^,]*)," + // [05] Opcode[1]. - "(.{38}[^,]*)," + // [06] IFLAGS. - "\\s*EF\\(([A-Z_]+)\\)\\s*," + // [07] EFLAGS. - "([^,]+)," + // [08] Write-Index. - "([^,]+)," + // [09] Write-Size. - // --- autogenerated --- - "([^\\)]+)," + // [10] FamilyType. - "([^\\)]+)," + // [11] FamilyIndex. - "([^\\)]+)," + // [12] NameIndex. - "([^\\)]+)\\)", // [13] ExtIndex. + "INST\\(" + + "([A-Za-z0-9_]+)\\s*" + "," + // [01] Instruction. + "([^,]+)" + "," + // [02] Encoding. + "(.{26}[^,]*)" + "," + // [03] Opcode[0]. + "(.{26}[^,]*)" + "," + // [04] Opcode[1]. + "(.{38}[^,]*)" + "," + // [05] IFLAGS. + "\\s*EF\\(([A-Z_]+)\\)\\s*" + "," + // [06] EFLAGS. + "([^,]+)" + "," + // [07] Write-Index. + "([^,]+)" + "," + // [08] Write-Size. + // --- autogenerated fields --- + "([^\\)]+)" + "," + // [09] FamilyType. + "([^\\)]+)" + "," + // [10] FamilyIndex. + "([^\\)]+)" + "," + // [11] NameIndex. + "([^\\)]+)" + "\\)",// [12] ExtIndex. "g"); - var id = 0; var m; - - while (m = re.exec(data)) { - var enum_ = kX86InstPrefix + m[1]; - var name = m[2]; - var encoding = m[3].trim(); - var opcode0 = m[4].trim(); - var opcode1 = m[5].trim(); - var iflags = m[6].trim(); - var eflags = m[7]; - var writeIndex = Utils.trimLeft(m[8]); - var writeSize = Utils.trimLeft(m[9]); + while ((m = re.exec(data)) !== null) { + var enum_ = m[1]; + var name = enum_ === "None" ? "" : enum_.toLowerCase(); + var encoding = m[2].trim(); + var opcode0 = m[3].trim(); + var opcode1 = m[4].trim(); + var iflags = m[5].trim(); + var eflags = m[6]; + var writeIndex = StringUtils.trimLeft(m[7]); + var writeSize = StringUtils.trimLeft(m[8]); const insts = GenUtils.groupOf(name); - if (!insts) + if (!insts.length) console.log(`INSTRUCTION '${name}' not found in asmdb`); - const signatures = insts ? this.signaturesFromInsts(insts) : new SignatureArray(); - const inst = { - id : id, // Instruction id. - name : name, // Instruction name. - enum : enum_, // Instruction enum-string (kX86InstId...). - encoding : encoding, // Instruction encoding. - opcode0 : opcode0, // Primary opcode. - opcode1 : opcode1, // Secondary opcode. + const signatures = this.signaturesFromInsts(insts); + const singleRegCase = GenUtils.singleRegCase(name); + const jumpType = GenUtils.jumpType(name); + + this.addInst({ + id : 0, // Instruction id (numeric value). + name : name, // Instruction name. + enum : enum_, // Instruction enum without `kId` prefix. + encoding : encoding, // Instruction encoding. + opcode0 : opcode0, // Primary opcode. + opcode1 : opcode1, // Secondary opcode. iflags : iflags, eflags : eflags, writeIndex : writeIndex, writeSize : writeSize, - signatures : signatures, // Rows containing instruction signatures. + signatures : signatures, // Rows containing instruction signatures. + singleRegCase : singleRegCase, + jumpType : jumpType, - familyType : "kFamilyNone",// Family type. - familyIndex : 0, // Index to a family-specific data. + familyType : "kFamilyNone", // Family type. + familyIndex : 0, // Index to a family-specific data. - nameIndex : -1, // Instruction name-index. - altOpCodeIndex: -1, // Index to X86InstDB::altOpCodeTable. + nameIndex : -1, // Instruction name-index. + altOpCodeIndex: -1, // Index to X86InstDB::altOpCodeTable. commonIndex : -1, signatureIndex: -1, signatureCount: -1 - } - - this.instMap[name] = inst; - this.instArray.push(inst); + }); this.maxOpRows = Math.max(this.maxOpRows, signatures.length); - - id++; } + if (this.instArray.length === 0) + throw new Error("X86Generator.parse(): Invalid parsing regexp (no data parsed)"); + console.log("Number of Instructions: " + this.instArray.length); } // -------------------------------------------------------------------------- - // [Generate - All] + // [Generate] // -------------------------------------------------------------------------- - generate(oldData) { - var data = oldData; - - function myInject(key, str) { - data = Utils.inject(data, - "// ${" + key + ":Begin}\n", - "// ${" + key + ":End}\n", str); - } - + generate() { // Order doesn't matter here. - myInject("nameData" , this.generateNameData()); - myInject("fpuData" , this.generateFpuData()); - myInject("sseData" , this.generateSseData()); - myInject("avxData" , this.generateAvxData()); - myInject("altOpCodeData" , this.generateAltOpCodeData()); - myInject("signatureData" , this.generateSignatureData()); - // These must be last. - myInject("commonData" , this.generateCommonData()); - myInject("instData" , this.generateInstData()); + this.generateIdData(); + this.generateNameData(); + this.generateFpuData(); + this.generateSseData(); + this.generateAvxData(); + this.generateAltOpCodeData(); + this.generateSignatureData(); - return data; - } + // These must be last, and order matters. + this.generateCommonData(); + this.generateInstData(); - // -------------------------------------------------------------------------- - // [Generate - NameData] - // -------------------------------------------------------------------------- - - generateNameData() { - const instArray = this.instArray; - - const instNames = new IndexedString(); - const instAlpha = new Array(26); - - var maxLength = 0; - - for (var i = 0; i < instArray.length; i++) { - const inst = instArray[i]; - instNames.add(inst.name); - maxLength = Math.max(maxLength, inst.name.length); - } - instNames.index(); - - for (var i = 0; i < instArray.length; i++) { - const inst = instArray[i]; - const name = inst.name; - const nameIndex = instNames.getIndex(name); - - const aIndex = name.charCodeAt(0) - 'a'.charCodeAt(0); - if (aIndex < 0 || aIndex >= 26) - throw new Error("Alphabetical index error"); - - inst.nameIndex = nameIndex; - if (instAlpha[aIndex] === undefined) - instAlpha[aIndex] = inst.enum; - } - - var s = ""; - s += kDisclaimerStart; - s += `const char X86InstDB::nameData[] =\n${instNames.format(kIndent, kJustify)}\n`; - s += `\n`; - s += `enum {\n`; - s += ` kX86InstMaxLength = ${maxLength}\n`; - s += `};\n`; - s += `\n`; - s += `enum X86InstAlphaIndex {\n`; - s += ` kX86InstAlphaIndexFirst = 'a',\n`; - s += ` kX86InstAlphaIndexLast = 'z',\n`; - s += ` kX86InstAlphaIndexInvalid = 0xFFFF\n`; - s += `};\n`; - s += `\n`; - - s += `static const uint16_t _x86InstAlphaIndex[26] = {\n`; - for (var i = 0; i < instAlpha.length; i++) { - const id = instAlpha[i]; - s += kIndent + (id === undefined ? "0xFFFF" : id); - if (i !== instAlpha.length - 1) - s += `,`; - s += `\n`; - } - s += `};\n`; - s += kDisclaimerEnd; - - this.sizeStats.NameData = instNames.getSize() + instAlpha.length * 2; - return s; + return this; } // -------------------------------------------------------------------------- @@ -1121,16 +931,14 @@ class X86Generator { // -------------------------------------------------------------------------- generateAltOpCodeData() { - const table = new IndexedArray(); + const table = new base.IndexedArray(); for (var i = 0; i < this.instArray.length; i++) { const inst = this.instArray[i]; - inst.altOpCodeIndex = table.addIndexed(Utils.padLeft(inst.opcode1, 26)); + inst.altOpCodeIndex = table.addIndexed(StringUtils.padLeft(inst.opcode1, 26)); } - this.sizeStats.AltOpCodeData = table.length * 4; - return kDisclaimerStart + - `const uint32_t X86InstDB::altOpCodeData[] = {\n${Utils.format(table, kIndent, true)}\n};\n` + - kDisclaimerEnd; + var s = `const uint32_t X86InstDB::altOpCodeData[] = {\n${StringUtils.format(table, kIndent, true)}\n};\n`; + return this.inject("altOpCodeData", StringUtils.disclaimer(s), table.length * 4); } // -------------------------------------------------------------------------- @@ -1138,7 +946,7 @@ class X86Generator { // -------------------------------------------------------------------------- generateFpuData() { - return ""; + return this; } // -------------------------------------------------------------------------- @@ -1150,7 +958,7 @@ class X86Generator { const instMap = this.instMap; const prefix = "X86Inst::SseData::"; - const table = new IndexedArray(); + const table = new base.IndexedArray(); function getSseToAvxInsts(insts) { const combinations = []; @@ -1188,7 +996,7 @@ class X86Generator { const avxName = "v" + sseName; const avxInsts = GenUtils.groupOf(avxName); - if (!avxInsts) { + if (!avxInsts.length) { console.log(`SseToAvx: Instruction '${sseName}' has no AVX counterpart`); return null; } @@ -1229,7 +1037,7 @@ class X86Generator { } out.avxConvMode = (map.raw && !map.nds) ? "Move" : - (map.raw && map.nds) ? "MoveIfMem" : "NonDestructive"; + (map.raw && map.nds) ? "MoveIfMem" : "Extend"; } out.avxConvDelta = instMap[avxName].id - instMap[sseName].id; } @@ -1237,7 +1045,9 @@ class X86Generator { for (var i = 0; i < instArray.length; i++) { const inst = instArray[i]; const insts = GenUtils.groupOf(inst.name); - if (!insts) continue; + + if (!insts.length) + continue; if (GenUtils.familyOf(insts) === "Sse") { const data = { @@ -1246,26 +1056,24 @@ class X86Generator { }; calcSseToAvxData(insts, data); - var features = GenUtils.featuresOf(insts).map(function(f) { return Utils.padLeft(`FEATURE(${f})`, 19); }).join(`|\n${kIndent} `); - if (!features) features = Utils.padLeft("0", 19); - + var features = GenUtils.featuresOf(insts).map(function(f) { return StringUtils.padLeft(`FEATURE(${f})`, 19); }).join(`|\n${kIndent} `); + if (!features) features = StringUtils.padLeft("0", 19); + inst.familyType = "kFamilySse"; inst.familyIndex = table.addIndexed( "{ " + features + ", " + - Utils.padLeft(`CONV_MODE(${data.avxConvMode})`, 26) + ", " + - Utils.padLeft(data.avxConvDelta , 4) + " }" + StringUtils.padLeft(`AVX_CONV(${data.avxConvMode})`, 20) + ", " + + StringUtils.padLeft(data.avxConvDelta , 4) + " }" ); } } - this.sizeStats.SseData = table.length * 4; - return kDisclaimerStart + - `#define FEATURE(F) ${prefix}kFeature##F\n` + - `#define CONV_MODE(MODE) ${prefix}kAvxConv##MODE\n` + - `const X86Inst::SseData X86InstDB::sseData[] = {\n${Utils.format(table, kIndent, true)}\n};\n` + - `#undef CONV_MODE\n` + - `#undef FEATURE\n` + - kDisclaimerEnd; + var s = `#define FEATURE(F) ${prefix}kFeature##F\n` + + `#define AVX_CONV(MODE) ${prefix}kAvxConv##MODE\n` + + `const X86Inst::SseData X86InstDB::sseData[] = {\n${StringUtils.format(table, kIndent, true)}\n};\n` + + `#undef AVX_CONV\n` + + `#undef FEATURE\n`; + return this.inject("sseData", StringUtils.disclaimer(s), table.length * 4); } // -------------------------------------------------------------------------- @@ -1276,13 +1084,9 @@ class X86Generator { const instArray = this.instArray; const prefix = "X86Inst::AvxData::"; - const table = new IndexedArray(); + const table = new base.IndexedArray(); function fillFlags(insts, out) { - var broadcast = "0"; - var masking = "0"; - var er_sae = "0" - for (var i = 0; i < insts.length; i++) { const inst = insts[i]; if (inst.prefix === "EVEX") { @@ -1298,11 +1102,13 @@ class X86Generator { for (var i = 0; i < instArray.length; i++) { const inst = instArray[i]; const insts = GenUtils.groupOf(inst.name); - if (!insts) continue; + + if (!insts.length) + continue; if (GenUtils.familyOf(insts) === "Avx") { - var features = GenUtils.featuresOf(insts).map(function(f) { return Utils.padLeft(`FEATURE(${f})`, 19); }).join(`|\n${kIndent} `); - if (!features) features = Utils.padLeft("0", 19); + var features = GenUtils.featuresOf(insts).map(function(f) { return StringUtils.padLeft(`FEATURE(${f})`, 19); }).join(`|\n${kIndent} `); + if (!features) features = StringUtils.padLeft("0", 19); const flagsMap = {}; fillFlags(insts, flagsMap); @@ -1317,16 +1123,13 @@ class X86Generator { inst.familyIndex = table.addIndexed("{ " + features + ", " + flags + " }"); } } - this.sizeStats.AvxData = table.length * 8; - return kDisclaimerStart + - `#define FEATURE(F) ${prefix}kFeature##F\n` + - `#define FLAG(F) ${prefix}kFlag##F\n` + - `const X86Inst::AvxData X86InstDB::avxData[] = {\n${Utils.format(table, kIndent, true)}\n};\n` + - `#undef FLAG\n` + - `#undef FEATURE\n` + - kDisclaimerEnd; - return ""; + var s = `#define FEATURE(F) ${prefix}kFeature##F\n` + + `#define FLAG(F) ${prefix}kFlag##F\n` + + `const X86Inst::AvxData X86InstDB::avxData[] = {\n${StringUtils.format(table, kIndent, true)}\n};\n` + + `#undef FLAG\n` + + `#undef FEATURE\n`; + return this.inject("avxData", StringUtils.disclaimer(s), table.length * 8); } // -------------------------------------------------------------------------- @@ -1346,21 +1149,6 @@ class X86Generator { opMap[noOperand] = [0]; opArr.push(noOperand); - function makeCxxArray(array, code) { - return `${code} = {\n` + - kIndent + array.join(`,\n${kIndent}`) + "\n" + - `};\n`; - } - - function makeCxxArrayWithComment(array, code) { - var s = ""; - for (var i = 0; i < array.length; i++) { - const last = i === array.length - 1; - s += kIndent + array[i].data + (last ? " // " : ", // ") + Utils.padLeft(array[i].refs ? "#" + String(i) : "", 5) + array[i].comment + "\n"; - } - return `${code} = {\n${s}};\n`; - } - function findSignaturesIndex(rows) { const len = rows.length; if (!len) return 0; @@ -1430,12 +1218,12 @@ class X86Generator { index = opMap[h]; } - signatureEntry += `, ${Utils.padLeft(index, 3)}`; + signatureEntry += `, ${StringUtils.padLeft(index, 3)}`; x++; } while (x < 6) { - signatureEntry += `, ${Utils.padLeft(0, 3)}`; + signatureEntry += `, ${StringUtils.padLeft(0, 3)}`; x++; } @@ -1455,31 +1243,25 @@ class X86Generator { } } - var s = ""; - - s += kDisclaimerStart; - s += "#define ISIGNATURE(count, x86, x64, implicit, o0, o1, o2, o3, o4, o5) \\\n"; - s += " { count, (x86 ? uint8_t(X86Inst::kArchMaskX86) : uint8_t(0)) | \\\n"; - s += " (x64 ? uint8_t(X86Inst::kArchMaskX64) : uint8_t(0)) , \\\n"; - s += " implicit, \\\n"; - s += " 0, \\\n"; - s += " o0, o1, o2, o3, o4, o5 \\\n"; - s += " }\n"; - s += makeCxxArrayWithComment(signatureArr, "static const X86Inst::ISignature _x86InstISignatureData[]"); - s += "#undef ISIGNATURE\n"; - s += "\n"; - s += "#define FLAG(flag) X86Inst::kOp##flag\n"; - s += "#define MEM(mem) X86Inst::kMemOp##mem\n"; - s += "#define OSIGNATURE(flags, memFlags, extFlags, regId) \\\n"; - s += " { uint32_t(flags), uint16_t(memFlags), uint8_t(extFlags), uint8_t(regId) }\n"; - s += makeCxxArray(opArr, "static const X86Inst::OSignature _x86InstOSignatureData[]"); - s += "#undef OSIGNATURE\n"; - s += "#undef MEM\n"; - s += "#undef FLAG\n"; - s += kDisclaimerEnd; - - this.sizeStats.SignatureData = opArr.length * 8 + signatureArr.length * 8; - return s; + var s = "#define ISIGNATURE(count, x86, x64, implicit, o0, o1, o2, o3, o4, o5) \\\n" + + " { count, (x86 ? uint8_t(X86Inst::kArchMaskX86) : uint8_t(0)) | \\\n" + + " (x64 ? uint8_t(X86Inst::kArchMaskX64) : uint8_t(0)) , \\\n" + + " implicit, \\\n" + + " 0, \\\n" + + " { o0, o1, o2, o3, o4, o5 } \\\n" + + " }\n" + + StringUtils.makeCxxArrayWithComment(signatureArr, "static const X86Inst::ISignature _x86InstISignatureData[]") + + "#undef ISIGNATURE\n" + + "\n" + + "#define FLAG(flag) X86Inst::kOp##flag\n" + + "#define MEM(mem) X86Inst::kMemOp##mem\n" + + "#define OSIGNATURE(flags, memFlags, extFlags, regId) \\\n" + + " { uint32_t(flags), uint16_t(memFlags), uint8_t(extFlags), uint8_t(regId) }\n" + + StringUtils.makeCxxArray(opArr, "static const X86Inst::OSignature _x86InstOSignatureData[]") + + "#undef OSIGNATURE\n" + + "#undef MEM\n" + + "#undef FLAG\n"; + return this.inject("signatureData", StringUtils.disclaimer(s), opArr.length * 8 + signatureArr.length * 8); } // -------------------------------------------------------------------------- @@ -1487,28 +1269,34 @@ class X86Generator { // -------------------------------------------------------------------------- generateCommonData() { - const table = new IndexedArray(); + const table = new base.IndexedArray(); for (var i = 0; i < this.instArray.length; i++) { const inst = this.instArray[i]; - const eflagsIn = Utils.decToHex(getEFlagsMask(inst.eflags, "RX" ), 2); - const eflagsOut = Utils.decToHex(getEFlagsMask(inst.eflags, "WXU"), 2); + const eflagsIn = StringUtils.decToHex(getEFlagsMask(inst.eflags, "RX" ), 2); + const eflagsOut = StringUtils.decToHex(getEFlagsMask(inst.eflags, "WXU"), 2); + const singleRegCase = `SINGLE_REG(${inst.singleRegCase})`; + const jumpType = `JUMP_TYPE(${inst.jumpType})`; - const item = "{ " + Utils.padLeft(inst.iflags , 38) + ", " + - Utils.padLeft(inst.writeIndex , 3) + ", " + - Utils.padLeft(inst.writeSize , 3) + ", " + - eflagsIn + ", " + - eflagsOut + ", " + - Utils.padLeft(inst.altOpCodeIndex, 3) + ", " + - Utils.padLeft(inst.signatureIndex, 3) + ", " + - Utils.padLeft(inst.signatureCount, 2) + ", 0 }"; + const item = "{ " + StringUtils.padLeft(inst.iflags , 38) + ", " + + StringUtils.padLeft(inst.writeIndex , 3) + ", " + + StringUtils.padLeft(inst.writeSize , 3) + ", " + + eflagsIn + ", " + + eflagsOut + ", " + + StringUtils.padLeft(inst.altOpCodeIndex, 3) + ", " + + StringUtils.padLeft(inst.signatureIndex, 3) + ", " + + StringUtils.padLeft(inst.signatureCount, 2) + ", " + + StringUtils.padLeft(jumpType , 22) + ", " + + StringUtils.padLeft(singleRegCase , 16) + ", " + "0 }"; inst.commonIndex = table.addIndexed(item); } - this.sizeStats.CommonData = table.length * 12; - return kDisclaimerStart + - `const X86Inst::CommonData X86InstDB::commonData[] = {\n${Utils.format(table, kIndent, true)}\n};\n` + - kDisclaimerEnd; + var s = `#define JUMP_TYPE(VAL) AnyInst::kJumpType##VAL\n` + + `#define SINGLE_REG(VAL) X86Inst::kSingleReg##VAL\n` + + `const X86Inst::CommonData X86InstDB::commonData[] = {\n${StringUtils.format(table, kIndent, true)}\n};\n` + + `#undef SINGLE_REG\n` + + `#undef JUMP_TYPE\n`; + return this.inject("commonData", StringUtils.disclaimer(s), table.length * 12); } // -------------------------------------------------------------------------- @@ -1516,24 +1304,47 @@ class X86Generator { // -------------------------------------------------------------------------- generateInstData() { - this.sizeStats.InstData = this.instArray.length * 12; - - return Utils.format(this.instArray, kIndent, false, function(inst) { + var s = StringUtils.format(this.instArray, "", false, function(inst) { return "INST(" + - Utils.padLeft(inst.enum.substr(kX86InstPrefix.length), 16) + ", " + - Utils.padLeft(`"${inst.name}"` , 18) + ", " + - Utils.padLeft(inst.encoding , 23) + ", " + - Utils.padLeft(inst.opcode0 , 26) + ", " + - Utils.padLeft(inst.opcode1 , 26) + ", " + - Utils.padLeft(inst.iflags , 38) + ", " + + StringUtils.padLeft(inst.enum , 16) + ", " + + StringUtils.padLeft(inst.encoding , 19) + ", " + + StringUtils.padLeft(inst.opcode0 , 26) + ", " + + StringUtils.padLeft(inst.opcode1 , 26) + ", " + + StringUtils.padLeft(inst.iflags , 38) + ", " + "EF(" + inst.eflags + "), " + - Utils.padLeft(inst.writeIndex , 1) + ", " + - Utils.padLeft(inst.writeSize , 1) + ", " + - Utils.padLeft(inst.familyType , 11) + ", " + - Utils.padLeft(inst.familyIndex , 3) + ", " + - Utils.padLeft(inst.nameIndex , 4) + ", " + - Utils.padLeft(inst.commonIndex , 3) + ")"; - }) + "\n "; + StringUtils.padLeft(inst.writeIndex , 1) + ", " + + StringUtils.padLeft(inst.writeSize , 1) + ", " + + StringUtils.padLeft(inst.familyType , 11) + ", " + + StringUtils.padLeft(inst.familyIndex, 3) + ", " + + StringUtils.padLeft(inst.nameIndex , 4) + ", " + + StringUtils.padLeft(inst.commonIndex, 3) + ")"; + }) + "\n"; + return this.inject("instData", s, this.instArray.length * 12); + } + + // -------------------------------------------------------------------------- + // [Reimplement] + // -------------------------------------------------------------------------- + + getCommentOf(name) { + var insts = GenUtils.groupOf(name); + if (!insts.length) return ""; + + var features = GenUtils.featuresOf(insts); + var comment = GenUtils.archOf(insts); + + if (features.length) { + comment += " {"; + + const vl = features.indexOf("AVX512_VL"); + if (vl !== -1) features.splice(vl, 1); + comment += features.join("|"); + if (vl !== -1) comment += " (VL)"; + + comment += "}"; + } + + return comment; } // -------------------------------------------------------------------------- @@ -1541,61 +1352,43 @@ class X86Generator { // -------------------------------------------------------------------------- printMissing() { - const instArray = this.instArray; - var out = ""; function CPUFlags(insts) { var flags = {}; for (var i = 0; i < insts.length; i++) { var inst = insts[i]; - for (var k in inst.cpu) + for (var k in inst.extensions) flags[k] = true; } return Object.getOwnPropertyNames(flags).join("|"); } - x86db.getInstructionNames().forEach(function(name) { - var insts = x86db.getGroup(name); + isa.instructionNames.forEach(function(name) { + var insts = isa.query(name); if (!this.instMap[name]) { console.log(`MISSING INSTRUCTION '${name}'`); var inst = this.newInstFromInsts(insts); if (inst) { out += " INST(" + - Utils.padLeft(inst.enum.substr(kX86InstPrefix.length), 16) + ", " + - Utils.padLeft(`"${inst.name}"` , 18) + ", " + - Utils.padLeft(inst.encoding , 23) + ", " + - Utils.padLeft(inst.opcode0 , 26) + ", " + - Utils.padLeft(inst.opcode1 , 26) + ", " + - Utils.padLeft(inst.iflags , 38) + ", " + + StringUtils.padLeft(inst.enum , 16) + ", " + + StringUtils.padLeft(inst.encoding , 23) + ", " + + StringUtils.padLeft(inst.opcode0 , 26) + ", " + + StringUtils.padLeft(inst.opcode1 , 26) + ", " + + StringUtils.padLeft(inst.iflags , 38) + ", " + "EF(" + inst.eflags + "), " + - Utils.padLeft(inst.writeIndex , 2) + ", " + - Utils.padLeft(inst.writeSize , 2) + ", " + - Utils.padLeft(inst.signatureIndex, 3) + ", " + - Utils.padLeft(inst.signatureCount, 2) + ", " + - Utils.padLeft("0", 3) + ", " + - Utils.padLeft("0", 3) + ", " + - Utils.padLeft("0", 3) + "),\n"; + StringUtils.padLeft(inst.writeIndex , 2) + ", " + + StringUtils.padLeft(inst.writeSize , 2) + ", " + + StringUtils.padLeft(inst.signatureIndex, 3) + ", " + + StringUtils.padLeft(inst.signatureCount, 2) + ", " + + StringUtils.padLeft("0", 3) + ", " + + StringUtils.padLeft("0", 3) + ", " + + StringUtils.padLeft("0", 3) + "),\n"; } } }, this); console.log(out); } - - printStats() { - const stats = this.sizeStats; - - var pad = 24; - var total = 0; - - for (var k in stats) { - const size = stats[k]; - total += size; - console.log(Utils.padLeft('Size of ' + k, pad) + ": " + size); - } - - console.log(Utils.padLeft('Size of all tables', pad) + ": " + total); - } } // ---------------------------------------------------------------------------- @@ -1603,19 +1396,13 @@ class X86Generator { // ---------------------------------------------------------------------------- function main() { - var g = new X86Generator(); - var data = fs.readFileSync(kFileName, "utf8").replace(/\r\n/g, "\n"); + const gen = new X86Generator(); - g.parse(data); - // g.printMissing(); - var newData = g.generate(data); - g.printStats(); - - // Save only if modified. - if (newData !== data) { - fs.writeFileSync(kFileName + ".backup", data, "utf8"); - fs.writeFileSync(kFileName, newData, "utf8"); - } + gen.parse(); + gen.generate(); + // gen.printMissing(); + gen.dumpTableSizes(); + gen.save(); } main(); @@ -1662,7 +1449,7 @@ main(); var id = this.instArray.length; var name = inst.name; - var enum_ = kX86InstPrefix + name[0].toUpperCase() + name.substr(1); + var enum_ = kX86InstId + name[0].toUpperCase() + name.substr(1); var opcode = inst.opcode; var rm = inst.rm; @@ -1716,8 +1503,8 @@ main(); evexW = obj.evexW; } - var ppmm = Utils.padLeft(pp, 2).replace(/ /g, "0") + - Utils.padLeft(mm, 4).replace(/ /g, "0") ; + var ppmm = StringUtils.padLeft(pp, 2).replace(/ /g, "0") + + StringUtils.padLeft(mm, 4).replace(/ /g, "0") ; var composed = composeOpCode({ type : prefix === "VEX" || prefix === "EVEX" ? "V" : "O", @@ -1742,7 +1529,7 @@ main(); id : id, name : name, enum : enum_, - encoding : "Enc(?" + encoding + "?)", + encoding : encoding, opcode0 : composed, opcode1 : "0", iflags : iflags.join(""), @@ -1757,12 +1544,12 @@ main(); function genAPI() { var asm = fs.readFileSync("../src/asmjit/x86/x86assembler.h", "utf8"); - var list = ["AVX512F", "AVX512DQ", "AVX512BW", "AVX512CD", "AVX512ER", "AVX512PF", "AVX512IFMA", "AVX512VBMI"]; + var list = ["AVX512_F", "AVX512_DQ", "AVX512_BW", "AVX512_CD", "AVX512_ER", "AVX512_PF", "AVX512_IFMA", "AVX512_VBMI"]; function getAVX512Flag(inst) { - for (var cpu in inst.cpu) { + for (var cpu in inst.extensions) { if (list.indexOf(cpu) !== -1) { - return inst.cpu["AVX512VL"] ? cpu + "-VL" : cpu; + return inst.extensions["AVX512_VL"] ? cpu + "-VL" : cpu; } } return ""; @@ -1789,8 +1576,8 @@ main(); "xmm0": "XMM0" } - x86db.forEach(function(name, inst) { - if (inst.cpu.AVX || inst.cpu.AVX2 || getAVX512Flag(inst)) { + isa.forEach(function(name, inst) { + if (inst.extensions.AVX || inst.extensions.AVX2 || getAVX512Flag(inst)) { var operands = inst.operands; var iops = []; var hasImm = -1; @@ -1823,10 +1610,10 @@ main(); else flags = flags + (avx512Flags.length ? "{" + avx512Flags.join("|") + "}" : ""); } - else if (inst.cpu.AVX2) { + else if (inst.extensions.AVX2) { flags = "AVX2"; } - else if (inst.cpu.AVX) { + else if (inst.extensions.AVX) { flags = "AVX"; } else { @@ -1905,11 +1692,11 @@ main(); if (flags.length) { if (!fstr) fstr = " "; - fstr = Utils.padLeft(fstr, 5); + fstr = StringUtils.padLeft(fstr, 5); fstr += flags.join(" "); } - line = Utils.padLeft(line, 72); + line = StringUtils.padLeft(line, 72); line += "// " + fstr; } @@ -1922,12 +1709,12 @@ main(); function genOpcodeH() { var asm = fs.readFileSync("../src/asmjit/x86/x86assembler.h", "utf8"); - var list = ["AVX512F", "AVX512DQ", "AVX512BW", "AVX512CD", "AVX512ER", "AVX512PF", "AVX512IFMA", "AVX512VBMI"]; + var list = ["AVX512_F", "AVX512_DQ", "AVX512_BW", "AVX512_CD", "AVX512_ER", "AVX512_PF", "AVX512_IFMA", "AVX512_VBMI"]; function getAVX512Flag(inst) { - for (var cpu in inst.cpu) { + for (var cpu in inst.extensions) { if (list.indexOf(cpu) !== -1) { - return inst.cpu["AVX512VL"] ? cpu + "-VL" : cpu; + return inst.extensions["AVX512_VL"] ? cpu + "-VL" : cpu; } } return ""; @@ -1981,7 +1768,7 @@ main(); "vm32z3": "vz_ptr" }; - x86db.forEach(function(name, inst) { + isa.forEach(function(name, inst) { if (getAVX512Flag(inst)) { var operands = inst.operands; var iops = []; @@ -2012,10 +1799,10 @@ main(); else flags = flags + (avx512Flags.length ? "{" + avx512Flags.join("|") + "}" : ""); } - else if (inst.cpu.AVX2) { + else if (inst.extensions.AVX2) { flags = "AVX2"; } - else if (inst.cpu.AVX) { + else if (inst.extensions.AVX) { flags = "AVX"; } else {