github.com/rohankumardubey/syslog-redirector-golang@v0.0.0-20140320174030-4859f03d829a/src/cmd/6l/optab.c (about)

     1  // Inferno utils/6l/optab.c
     2  // http://code.google.com/p/inferno-os/source/browse/utils/6l/optab.c
     3  //
     4  //	Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
     5  //	Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
     6  //	Portions Copyright © 1997-1999 Vita Nuova Limited
     7  //	Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
     8  //	Portions Copyright © 2004,2006 Bruce Ellis
     9  //	Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
    10  //	Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
    11  //	Portions Copyright © 2009 The Go Authors.  All rights reserved.
    12  //
    13  // Permission is hereby granted, free of charge, to any person obtaining a copy
    14  // of this software and associated documentation files (the "Software"), to deal
    15  // in the Software without restriction, including without limitation the rights
    16  // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    17  // copies of the Software, and to permit persons to whom the Software is
    18  // furnished to do so, subject to the following conditions:
    19  //
    20  // The above copyright notice and this permission notice shall be included in
    21  // all copies or substantial portions of the Software.
    22  //
    23  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    24  // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    25  // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    26  // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    27  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    28  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    29  // THE SOFTWARE.
    30  
    31  #include	"l.h"
    32  
    33  uchar	ynone[] =
    34  {
    35  	Ynone,	Ynone,	Zlit,	1,
    36  	0
    37  };
    38  uchar	ytext[] =
    39  {
    40  	Ymb,	Yi64,	Zpseudo,1,
    41  	0
    42  };
    43  uchar	ynop[] =
    44  {
    45  	Ynone,	Ynone,	Zpseudo,0,
    46  	Ynone,	Yiauto,	Zpseudo,0,
    47  	Ynone,	Yml,	Zpseudo,0,
    48  	Ynone,	Yrf,	Zpseudo,0,
    49  	Ynone,	Yxr,	Zpseudo,0,
    50  	Yiauto,	Ynone,	Zpseudo,0,
    51  	Yml,	Ynone,	Zpseudo,0,
    52  	Yrf,	Ynone,	Zpseudo,0,
    53  	Yxr,	Ynone,	Zpseudo,1,
    54  	0
    55  };
    56  uchar	yfuncdata[] =
    57  {
    58  	Yi32,	Ym,	Zpseudo,	0,
    59  	0
    60  };
    61  uchar	ypcdata[] = 
    62  {
    63  	Yi32,	Yi32,	Zpseudo,	0,
    64  	0
    65  };
    66  uchar	yxorb[] =
    67  {
    68  	Yi32,	Yal,	Zib_,	1,
    69  	Yi32,	Ymb,	Zibo_m,	2,
    70  	Yrb,	Ymb,	Zr_m,	1,
    71  	Ymb,	Yrb,	Zm_r,	1,
    72  	0
    73  };
    74  uchar	yxorl[] =
    75  {
    76  	Yi8,	Yml,	Zibo_m,	2,
    77  	Yi32,	Yax,	Zil_,	1,
    78  	Yi32,	Yml,	Zilo_m,	2,
    79  	Yrl,	Yml,	Zr_m,	1,
    80  	Yml,	Yrl,	Zm_r,	1,
    81  	0
    82  };
    83  uchar	yaddl[] =
    84  {
    85  	Yi8,	Yml,	Zibo_m,	2,
    86  	Yi32,	Yax,	Zil_,	1,
    87  	Yi32,	Yml,	Zilo_m,	2,
    88  	Yrl,	Yml,	Zr_m,	1,
    89  	Yml,	Yrl,	Zm_r,	1,
    90  	0
    91  };
    92  uchar	yincb[] =
    93  {
    94  	Ynone,	Ymb,	Zo_m,	2,
    95  	0
    96  };
    97  uchar	yincw[] =
    98  {
    99  	Ynone,	Yml,	Zo_m,	2,
   100  	0
   101  };
   102  uchar	yincl[] =
   103  {
   104  	Ynone,	Yml,	Zo_m,	2,
   105  	0
   106  };
   107  uchar	ycmpb[] =
   108  {
   109  	Yal,	Yi32,	Z_ib,	1,
   110  	Ymb,	Yi32,	Zm_ibo,	2,
   111  	Ymb,	Yrb,	Zm_r,	1,
   112  	Yrb,	Ymb,	Zr_m,	1,
   113  	0
   114  };
   115  uchar	ycmpl[] =
   116  {
   117  	Yml,	Yi8,	Zm_ibo,	2,
   118  	Yax,	Yi32,	Z_il,	1,
   119  	Yml,	Yi32,	Zm_ilo,	2,
   120  	Yml,	Yrl,	Zm_r,	1,
   121  	Yrl,	Yml,	Zr_m,	1,
   122  	0
   123  };
   124  uchar	yshb[] =
   125  {
   126  	Yi1,	Ymb,	Zo_m,	2,
   127  	Yi32,	Ymb,	Zibo_m,	2,
   128  	Ycx,	Ymb,	Zo_m,	2,
   129  	0
   130  };
   131  uchar	yshl[] =
   132  {
   133  	Yi1,	Yml,	Zo_m,	2,
   134  	Yi32,	Yml,	Zibo_m,	2,
   135  	Ycl,	Yml,	Zo_m,	2,
   136  	Ycx,	Yml,	Zo_m,	2,
   137  	0
   138  };
   139  uchar	ytestb[] =
   140  {
   141  	Yi32,	Yal,	Zib_,	1,
   142  	Yi32,	Ymb,	Zibo_m,	2,
   143  	Yrb,	Ymb,	Zr_m,	1,
   144  	Ymb,	Yrb,	Zm_r,	1,
   145  	0
   146  };
   147  uchar	ytestl[] =
   148  {
   149  	Yi32,	Yax,	Zil_,	1,
   150  	Yi32,	Yml,	Zilo_m,	2,
   151  	Yrl,	Yml,	Zr_m,	1,
   152  	Yml,	Yrl,	Zm_r,	1,
   153  	0
   154  };
   155  uchar	ymovb[] =
   156  {
   157  	Yrb,	Ymb,	Zr_m,	1,
   158  	Ymb,	Yrb,	Zm_r,	1,
   159  	Yi32,	Yrb,	Zib_rp,	1,
   160  	Yi32,	Ymb,	Zibo_m,	2,
   161  	0
   162  };
   163  uchar	ymbs[] =
   164  {
   165  	Ymb,	Ynone,	Zm_o,	2,
   166  	0
   167  };
   168  uchar	ybtl[] =
   169  {
   170  	Yi8,	Yml,	Zibo_m,	2,
   171  	Yrl,	Yml,	Zr_m,	1,
   172  	0
   173  };
   174  uchar	ymovw[] =
   175  {
   176  	Yrl,	Yml,	Zr_m,	1,
   177  	Yml,	Yrl,	Zm_r,	1,
   178  	Yi0,	Yrl,	Zclr,	1,
   179  	Yi32,	Yrl,	Zil_rp,	1,
   180  	Yi32,	Yml,	Zilo_m,	2,
   181  	Yiauto,	Yrl,	Zaut_r,	2,
   182  	0
   183  };
   184  uchar	ymovl[] =
   185  {
   186  	Yrl,	Yml,	Zr_m,	1,
   187  	Yml,	Yrl,	Zm_r,	1,
   188  	Yi0,	Yrl,	Zclr,	1,
   189  	Yi32,	Yrl,	Zil_rp,	1,
   190  	Yi32,	Yml,	Zilo_m,	2,
   191  	Yml,	Ymr,	Zm_r_xm,	1,	// MMX MOVD
   192  	Ymr,	Yml,	Zr_m_xm,	1,	// MMX MOVD
   193  	Yml,	Yxr,	Zm_r_xm,	2,	// XMM MOVD (32 bit)
   194  	Yxr,	Yml,	Zr_m_xm,	2,	// XMM MOVD (32 bit)
   195  	Yiauto,	Yrl,	Zaut_r,	2,
   196  	0
   197  };
   198  uchar	yret[] =
   199  {
   200  	Ynone,	Ynone,	Zo_iw,	1,
   201  	Yi32,	Ynone,	Zo_iw,	1,
   202  	0
   203  };
   204  uchar	ymovq[] =
   205  {
   206  	Yrl,	Yml,	Zr_m,	1,	// 0x89
   207  	Yml,	Yrl,	Zm_r,	1,	// 0x8b
   208  	Yi0,	Yrl,	Zclr,	1,	// 0x31
   209  	Ys32,	Yrl,	Zilo_m,	2,	// 32 bit signed 0xc7,(0)
   210  	Yi64,	Yrl,	Ziq_rp,	1,	// 0xb8 -- 32/64 bit immediate
   211  	Yi32,	Yml,	Zilo_m,	2,	// 0xc7,(0)
   212  	Ym,	Ymr,	Zm_r_xm_nr,	1,	// MMX MOVQ (shorter encoding)
   213  	Ymr,	Ym,	Zr_m_xm_nr,	1,	// MMX MOVQ
   214  	Ymm,	Ymr,	Zm_r_xm,	1,	// MMX MOVD
   215  	Ymr,	Ymm,	Zr_m_xm,	1,	// MMX MOVD
   216  	Yxr,	Ymr,	Zm_r_xm_nr,	2,	// MOVDQ2Q
   217  	Yxm,	Yxr,	Zm_r_xm_nr,	2, // MOVQ xmm1/m64 -> xmm2
   218  	Yxr,	Yxm,	Zr_m_xm_nr,	2, // MOVQ xmm1 -> xmm2/m64
   219  	Yml,	Yxr,	Zm_r_xm,	2,	// MOVD xmm load
   220  	Yxr,	Yml,	Zr_m_xm,	2,	// MOVD xmm store
   221  	Yiauto,	Yrl,	Zaut_r,	2,	// built-in LEAQ
   222  	0
   223  };
   224  uchar	ym_rl[] =
   225  {
   226  	Ym,	Yrl,	Zm_r,	1,
   227  	0
   228  };
   229  uchar	yrl_m[] =
   230  {
   231  	Yrl,	Ym,	Zr_m,	1,
   232  	0
   233  };
   234  uchar	ymb_rl[] =
   235  {
   236  	Ymb,	Yrl,	Zmb_r,	1,
   237  	0
   238  };
   239  uchar	yml_rl[] =
   240  {
   241  	Yml,	Yrl,	Zm_r,	1,
   242  	0
   243  };
   244  uchar	yrl_ml[] =
   245  {
   246  	Yrl,	Yml,	Zr_m,	1,
   247  	0
   248  };
   249  uchar	yml_mb[] =
   250  {
   251  	Yrb,	Ymb,	Zr_m,	1,
   252  	Ymb,	Yrb,	Zm_r,	1,
   253  	0
   254  };
   255  uchar	yrb_mb[] =
   256  {
   257  	Yrb,	Ymb,	Zr_m,	1,
   258  	0
   259  };
   260  uchar	yxchg[] =
   261  {
   262  	Yax,	Yrl,	Z_rp,	1,
   263  	Yrl,	Yax,	Zrp_,	1,
   264  	Yrl,	Yml,	Zr_m,	1,
   265  	Yml,	Yrl,	Zm_r,	1,
   266  	0
   267  };
   268  uchar	ydivl[] =
   269  {
   270  	Yml,	Ynone,	Zm_o,	2,
   271  	0
   272  };
   273  uchar	ydivb[] =
   274  {
   275  	Ymb,	Ynone,	Zm_o,	2,
   276  	0
   277  };
   278  uchar	yimul[] =
   279  {
   280  	Yml,	Ynone,	Zm_o,	2,
   281  	Yi8,	Yrl,	Zib_rr,	1,
   282  	Yi32,	Yrl,	Zil_rr,	1,
   283  	Yml,	Yrl,	Zm_r,	2,
   284  	0
   285  };
   286  uchar	yimul3[] =
   287  {
   288  	Yml,	Yrl,	Zibm_r,	2,
   289  	0
   290  };
   291  uchar	ybyte[] =
   292  {
   293  	Yi64,	Ynone,	Zbyte,	1,
   294  	0
   295  };
   296  uchar	yin[] =
   297  {
   298  	Yi32,	Ynone,	Zib_,	1,
   299  	Ynone,	Ynone,	Zlit,	1,
   300  	0
   301  };
   302  uchar	yint[] =
   303  {
   304  	Yi32,	Ynone,	Zib_,	1,
   305  	0
   306  };
   307  uchar	ypushl[] =
   308  {
   309  	Yrl,	Ynone,	Zrp_,	1,
   310  	Ym,	Ynone,	Zm_o,	2,
   311  	Yi8,	Ynone,	Zib_,	1,
   312  	Yi32,	Ynone,	Zil_,	1,
   313  	0
   314  };
   315  uchar	ypopl[] =
   316  {
   317  	Ynone,	Yrl,	Z_rp,	1,
   318  	Ynone,	Ym,	Zo_m,	2,
   319  	0
   320  };
   321  uchar	ybswap[] =
   322  {
   323  	Ynone,	Yrl,	Z_rp,	2,
   324  	0,
   325  };
   326  uchar	yscond[] =
   327  {
   328  	Ynone,	Ymb,	Zo_m,	2,
   329  	0
   330  };
   331  uchar	yjcond[] =
   332  {
   333  	Ynone,	Ybr,	Zbr,	0,
   334  	Yi0,	Ybr,	Zbr,	0,
   335  	Yi1,	Ybr,	Zbr,	1,
   336  	0
   337  };
   338  uchar	yloop[] =
   339  {
   340  	Ynone,	Ybr,	Zloop,	1,
   341  	0
   342  };
   343  uchar	ycall[] =
   344  {
   345  	Ynone,	Yml,	Zo_m64,	0,
   346  	Yrx,	Yrx,	Zo_m64,	2,
   347  	Ynone,	Ybr,	Zcall,	1,
   348  	0
   349  };
   350  uchar	yjmp[] =
   351  {
   352  	Ynone,	Yml,	Zo_m64,	2,
   353  	Ynone,	Ybr,	Zjmp,	1,
   354  	0
   355  };
   356  
   357  uchar	yfmvd[] =
   358  {
   359  	Ym,	Yf0,	Zm_o,	2,
   360  	Yf0,	Ym,	Zo_m,	2,
   361  	Yrf,	Yf0,	Zm_o,	2,
   362  	Yf0,	Yrf,	Zo_m,	2,
   363  	0
   364  };
   365  uchar	yfmvdp[] =
   366  {
   367  	Yf0,	Ym,	Zo_m,	2,
   368  	Yf0,	Yrf,	Zo_m,	2,
   369  	0
   370  };
   371  uchar	yfmvf[] =
   372  {
   373  	Ym,	Yf0,	Zm_o,	2,
   374  	Yf0,	Ym,	Zo_m,	2,
   375  	0
   376  };
   377  uchar	yfmvx[] =
   378  {
   379  	Ym,	Yf0,	Zm_o,	2,
   380  	0
   381  };
   382  uchar	yfmvp[] =
   383  {
   384  	Yf0,	Ym,	Zo_m,	2,
   385  	0
   386  };
   387  uchar	yfadd[] =
   388  {
   389  	Ym,	Yf0,	Zm_o,	2,
   390  	Yrf,	Yf0,	Zm_o,	2,
   391  	Yf0,	Yrf,	Zo_m,	2,
   392  	0
   393  };
   394  uchar	yfaddp[] =
   395  {
   396  	Yf0,	Yrf,	Zo_m,	2,
   397  	0
   398  };
   399  uchar	yfxch[] =
   400  {
   401  	Yf0,	Yrf,	Zo_m,	2,
   402  	Yrf,	Yf0,	Zm_o,	2,
   403  	0
   404  };
   405  uchar	ycompp[] =
   406  {
   407  	Yf0,	Yrf,	Zo_m,	2,	/* botch is really f0,f1 */
   408  	0
   409  };
   410  uchar	ystsw[] =
   411  {
   412  	Ynone,	Ym,	Zo_m,	2,
   413  	Ynone,	Yax,	Zlit,	1,
   414  	0
   415  };
   416  uchar	ystcw[] =
   417  {
   418  	Ynone,	Ym,	Zo_m,	2,
   419  	Ym,	Ynone,	Zm_o,	2,
   420  	0
   421  };
   422  uchar	ysvrs[] =
   423  {
   424  	Ynone,	Ym,	Zo_m,	2,
   425  	Ym,	Ynone,	Zm_o,	2,
   426  	0
   427  };
   428  uchar	ymm[] = 
   429  {
   430  	Ymm,	Ymr,	Zm_r_xm,	1,
   431  	Yxm,	Yxr,	Zm_r_xm,	2,
   432  	0
   433  };
   434  uchar	yxm[] = 
   435  {
   436  	Yxm,	Yxr,	Zm_r_xm,	1,
   437  	0
   438  };
   439  uchar	yxcvm1[] = 
   440  {
   441  	Yxm,	Yxr,	Zm_r_xm,	2,
   442  	Yxm,	Ymr,	Zm_r_xm,	2,
   443  	0
   444  };
   445  uchar	yxcvm2[] =
   446  {
   447  	Yxm,	Yxr,	Zm_r_xm,	2,
   448  	Ymm,	Yxr,	Zm_r_xm,	2,
   449  	0
   450  };
   451  uchar	yxmq[] = 
   452  {
   453  	Yxm,	Yxr,	Zm_r_xm,	2,
   454  	0
   455  };
   456  uchar	yxr[] = 
   457  {
   458  	Yxr,	Yxr,	Zm_r_xm,	1,
   459  	0
   460  };
   461  uchar	yxr_ml[] =
   462  {
   463  	Yxr,	Yml,	Zr_m_xm,	1,
   464  	0
   465  };
   466  uchar	ymr[] =
   467  {
   468  	Ymr,	Ymr,	Zm_r,	1,
   469  	0
   470  };
   471  uchar	ymr_ml[] =
   472  {
   473  	Ymr,	Yml,	Zr_m_xm,	1,
   474  	0
   475  };
   476  uchar	yxcmp[] =
   477  {
   478  	Yxm,	Yxr, Zm_r_xm,	1,
   479  	0
   480  };
   481  uchar	yxcmpi[] =
   482  {
   483  	Yxm,	Yxr, Zm_r_i_xm,	2,
   484  	0
   485  };
   486  uchar	yxmov[] =
   487  {
   488  	Yxm,	Yxr,	Zm_r_xm,	1,
   489  	Yxr,	Yxm,	Zr_m_xm,	1,
   490  	0
   491  };
   492  uchar	yxcvfl[] = 
   493  {
   494  	Yxm,	Yrl,	Zm_r_xm,	1,
   495  	0
   496  };
   497  uchar	yxcvlf[] =
   498  {
   499  	Yml,	Yxr,	Zm_r_xm,	1,
   500  	0
   501  };
   502  uchar	yxcvfq[] = 
   503  {
   504  	Yxm,	Yrl,	Zm_r_xm,	2,
   505  	0
   506  };
   507  uchar	yxcvqf[] =
   508  {
   509  	Yml,	Yxr,	Zm_r_xm,	2,
   510  	0
   511  };
   512  uchar	yps[] = 
   513  {
   514  	Ymm,	Ymr,	Zm_r_xm,	1,
   515  	Yi8,	Ymr,	Zibo_m_xm,	2,
   516  	Yxm,	Yxr,	Zm_r_xm,	2,
   517  	Yi8,	Yxr,	Zibo_m_xm,	3,
   518  	0
   519  };
   520  uchar	yxrrl[] =
   521  {
   522  	Yxr,	Yrl,	Zm_r,	1,
   523  	0
   524  };
   525  uchar	ymfp[] =
   526  {
   527  	Ymm,	Ymr,	Zm_r_3d,	1,
   528  	0,
   529  };
   530  uchar	ymrxr[] =
   531  {
   532  	Ymr,	Yxr,	Zm_r,	1,
   533  	Yxm,	Yxr,	Zm_r_xm,	1,
   534  	0
   535  };
   536  uchar	ymshuf[] =
   537  {
   538  	Ymm,	Ymr,	Zibm_r,	2,
   539  	0
   540  };
   541  uchar	ymshufb[] =
   542  {
   543  	Yxm,	Yxr,	Zm2_r,	2,
   544  	0
   545  };
   546  uchar	yxshuf[] =
   547  {
   548  	Yxm,	Yxr,	Zibm_r,	2,
   549  	0
   550  };
   551  uchar	yextrw[] =
   552  {
   553  	Yxr,	Yrl,	Zibm_r,	2,
   554  	0
   555  };
   556  uchar	yinsrw[] =
   557  {
   558  	Yml,	Yxr,	Zibm_r,	2,
   559  	0
   560  };
   561  uchar	yinsr[] =
   562  {
   563  	Ymm,	Yxr,	Zibm_r,	3,
   564  	0
   565  };
   566  uchar	ypsdq[] =
   567  {
   568  	Yi8,	Yxr,	Zibo_m,	2,
   569  	0
   570  };
   571  uchar	ymskb[] =
   572  {
   573  	Yxr,	Yrl,	Zm_r_xm,	2,
   574  	Ymr,	Yrl,	Zm_r_xm,	1,
   575  	0
   576  };
   577  uchar	ycrc32l[] =
   578  {
   579  	Yml,	Yrl,	Zlitm_r,	0,
   580  };
   581  uchar	yprefetch[] =
   582  {
   583  	Ym,	Ynone,	Zm_o,	2,
   584  	0,
   585  };
   586  uchar	yaes[] =
   587  {
   588  	Yxm,	Yxr,	Zlitm_r,	2,
   589  	0
   590  };
   591  uchar	yaes2[] =
   592  {
   593  	Yxm,	Yxr,	Zibm_r,	2,
   594  	0
   595  };
   596  
   597  /*
   598   * You are doasm, holding in your hand a Prog* with p->as set to, say, ACRC32,
   599   * and p->from and p->to as operands (Adr*).  The linker scans optab to find
   600   * the entry with the given p->as and then looks through the ytable for that
   601   * instruction (the second field in the optab struct) for a line whose first
   602   * two values match the Ytypes of the p->from and p->to operands.  The function
   603   * oclass in span.c computes the specific Ytype of an operand and then the set
   604   * of more general Ytypes that it satisfies is implied by the ycover table, set
   605   * up in instinit.  For example, oclass distinguishes the constants 0 and 1
   606   * from the more general 8-bit constants, but instinit says
   607   *
   608   *        ycover[Yi0*Ymax + Ys32] = 1;
   609   *        ycover[Yi1*Ymax + Ys32] = 1;
   610   *        ycover[Yi8*Ymax + Ys32] = 1;
   611   *
   612   * which means that Yi0, Yi1, and Yi8 all count as Ys32 (signed 32)
   613   * if that's what an instruction can handle.
   614   *
   615   * In parallel with the scan through the ytable for the appropriate line, there
   616   * is a z pointer that starts out pointing at the strange magic byte list in
   617   * the Optab struct.  With each step past a non-matching ytable line, z
   618   * advances by the 4th entry in the line.  When a matching line is found, that
   619   * z pointer has the extra data to use in laying down the instruction bytes.
   620   * The actual bytes laid down are a function of the 3rd entry in the line (that
   621   * is, the Ztype) and the z bytes.
   622   *
   623   * For example, let's look at AADDL.  The optab line says:
   624   *        { AADDL,        yaddl,  Px, 0x83,(00),0x05,0x81,(00),0x01,0x03 },
   625   *
   626   * and yaddl says
   627   *        uchar   yaddl[] =
   628   *        {
   629   *                Yi8,    Yml,    Zibo_m, 2,
   630   *                Yi32,   Yax,    Zil_,   1,
   631   *                Yi32,   Yml,    Zilo_m, 2,
   632   *                Yrl,    Yml,    Zr_m,   1,
   633   *                Yml,    Yrl,    Zm_r,   1,
   634   *                0
   635   *        };
   636   *
   637   * so there are 5 possible types of ADDL instruction that can be laid down, and
   638   * possible states used to lay them down (Ztype and z pointer, assuming z
   639   * points at {0x83,(00),0x05,0x81,(00),0x01,0x03}) are:
   640   *
   641   *        Yi8, Yml -> Zibo_m, z (0x83, 00)
   642   *        Yi32, Yax -> Zil_, z+2 (0x05)
   643   *        Yi32, Yml -> Zilo_m, z+2+1 (0x81, 0x00)
   644   *        Yrl, Yml -> Zr_m, z+2+1+2 (0x01)
   645   *        Yml, Yrl -> Zm_r, z+2+1+2+1 (0x03)
   646   *
   647   * The Pconstant in the optab line controls the prefix bytes to emit.  That's
   648   * relatively straightforward as this program goes.
   649   *
   650   * The switch on t[2] in doasm implements the various Z cases.  Zibo_m, for
   651   * example, is an opcode byte (z[0]) then an asmando (which is some kind of
   652   * encoded addressing mode for the Yml arg), and then a single immediate byte.
   653   * Zilo_m is the same but a long (32-bit) immediate.
   654   */
   655  Optab optab[] =
   656  /*	as, ytab, andproto, opcode */
   657  {
   658  	{ AXXX },
   659  	{ AAAA,		ynone,	P32, 0x37 },
   660  	{ AAAD,		ynone,	P32, 0xd5,0x0a },
   661  	{ AAAM,		ynone,	P32, 0xd4,0x0a },
   662  	{ AAAS,		ynone,	P32, 0x3f },
   663  	{ AADCB,	yxorb,	Pb, 0x14,0x80,(02),0x10,0x10 },
   664  	{ AADCL,	yxorl,	Px, 0x83,(02),0x15,0x81,(02),0x11,0x13 },
   665  	{ AADCQ,	yxorl,	Pw, 0x83,(02),0x15,0x81,(02),0x11,0x13 },
   666  	{ AADCW,	yxorl,	Pe, 0x83,(02),0x15,0x81,(02),0x11,0x13 },
   667  	{ AADDB,	yxorb,	Pb, 0x04,0x80,(00),0x00,0x02 },
   668  	{ AADDL,	yaddl,	Px, 0x83,(00),0x05,0x81,(00),0x01,0x03 },
   669  	{ AADDPD,	yxm,	Pq, 0x58 },
   670  	{ AADDPS,	yxm,	Pm, 0x58 },
   671  	{ AADDQ,	yaddl,	Pw, 0x83,(00),0x05,0x81,(00),0x01,0x03 },
   672  	{ AADDSD,	yxm,	Pf2, 0x58 },
   673  	{ AADDSS,	yxm,	Pf3, 0x58 },
   674  	{ AADDW,	yaddl,	Pe, 0x83,(00),0x05,0x81,(00),0x01,0x03 },
   675  	{ AADJSP },
   676  	{ AANDB,	yxorb,	Pb, 0x24,0x80,(04),0x20,0x22 },
   677  	{ AANDL,	yxorl,	Px, 0x83,(04),0x25,0x81,(04),0x21,0x23 },
   678  	{ AANDNPD,	yxm,	Pq, 0x55 },
   679  	{ AANDNPS,	yxm,	Pm, 0x55 },
   680  	{ AANDPD,	yxm,	Pq, 0x54 },
   681  	{ AANDPS,	yxm,	Pq, 0x54 },
   682  	{ AANDQ,	yxorl,	Pw, 0x83,(04),0x25,0x81,(04),0x21,0x23 },
   683  	{ AANDW,	yxorl,	Pe, 0x83,(04),0x25,0x81,(04),0x21,0x23 },
   684  	{ AARPL,	yrl_ml,	P32, 0x63 },
   685  	{ ABOUNDL,	yrl_m,	P32, 0x62 },
   686  	{ ABOUNDW,	yrl_m,	Pe, 0x62 },
   687  	{ ABSFL,	yml_rl,	Pm, 0xbc },
   688  	{ ABSFQ,	yml_rl,	Pw, 0x0f,0xbc },
   689  	{ ABSFW,	yml_rl,	Pq, 0xbc },
   690  	{ ABSRL,	yml_rl,	Pm, 0xbd },
   691  	{ ABSRQ,	yml_rl,	Pw, 0x0f,0xbd },
   692  	{ ABSRW,	yml_rl,	Pq, 0xbd },
   693  	{ ABSWAPL,	ybswap,	Px, 0x0f,0xc8 },
   694  	{ ABSWAPQ,	ybswap,	Pw, 0x0f,0xc8 },
   695  	{ ABTCL,	ybtl,	Pm, 0xba,(07),0xbb },
   696  	{ ABTCQ,	ybtl,	Pw, 0x0f,0xba,(07),0x0f,0xbb },
   697  	{ ABTCW,	ybtl,	Pq, 0xba,(07),0xbb },
   698  	{ ABTL,		ybtl,	Pm, 0xba,(04),0xa3 },
   699  	{ ABTQ,		ybtl,	Pw, 0x0f,0xba,(04),0x0f,0xa3},
   700  	{ ABTRL,	ybtl,	Pm, 0xba,(06),0xb3 },
   701  	{ ABTRQ,	ybtl,	Pw, 0x0f,0xba,(06),0x0f,0xb3 },
   702  	{ ABTRW,	ybtl,	Pq, 0xba,(06),0xb3 },
   703  	{ ABTSL,	ybtl,	Pm, 0xba,(05),0xab  },
   704  	{ ABTSQ,	ybtl,	Pw, 0x0f,0xba,(05),0x0f,0xab },
   705  	{ ABTSW,	ybtl,	Pq, 0xba,(05),0xab  },
   706  	{ ABTW,		ybtl,	Pq, 0xba,(04),0xa3 },
   707  	{ ABYTE,	ybyte,	Px, 1 },
   708  	{ ACALL,	ycall,	Px, 0xff,(02),0xe8 },
   709  	{ ACDQ,		ynone,	Px, 0x99 },
   710  	{ ACLC,		ynone,	Px, 0xf8 },
   711  	{ ACLD,		ynone,	Px, 0xfc },
   712  	{ ACLI,		ynone,	Px, 0xfa },
   713  	{ ACLTS,	ynone,	Pm, 0x06 },
   714  	{ ACMC,		ynone,	Px, 0xf5 },
   715  	{ ACMOVLCC,	yml_rl,	Pm, 0x43 },
   716  	{ ACMOVLCS,	yml_rl,	Pm, 0x42 },
   717  	{ ACMOVLEQ,	yml_rl,	Pm, 0x44 },
   718  	{ ACMOVLGE,	yml_rl,	Pm, 0x4d },
   719  	{ ACMOVLGT,	yml_rl,	Pm, 0x4f },
   720  	{ ACMOVLHI,	yml_rl,	Pm, 0x47 },
   721  	{ ACMOVLLE,	yml_rl,	Pm, 0x4e },
   722  	{ ACMOVLLS,	yml_rl,	Pm, 0x46 },
   723  	{ ACMOVLLT,	yml_rl,	Pm, 0x4c },
   724  	{ ACMOVLMI,	yml_rl,	Pm, 0x48 },
   725  	{ ACMOVLNE,	yml_rl,	Pm, 0x45 },
   726  	{ ACMOVLOC,	yml_rl,	Pm, 0x41 },
   727  	{ ACMOVLOS,	yml_rl,	Pm, 0x40 },
   728  	{ ACMOVLPC,	yml_rl,	Pm, 0x4b },
   729  	{ ACMOVLPL,	yml_rl,	Pm, 0x49 },
   730  	{ ACMOVLPS,	yml_rl,	Pm, 0x4a },
   731  	{ ACMOVQCC,	yml_rl,	Pw, 0x0f,0x43 },
   732  	{ ACMOVQCS,	yml_rl,	Pw, 0x0f,0x42 },
   733  	{ ACMOVQEQ,	yml_rl,	Pw, 0x0f,0x44 },
   734  	{ ACMOVQGE,	yml_rl,	Pw, 0x0f,0x4d },
   735  	{ ACMOVQGT,	yml_rl,	Pw, 0x0f,0x4f },
   736  	{ ACMOVQHI,	yml_rl,	Pw, 0x0f,0x47 },
   737  	{ ACMOVQLE,	yml_rl,	Pw, 0x0f,0x4e },
   738  	{ ACMOVQLS,	yml_rl,	Pw, 0x0f,0x46 },
   739  	{ ACMOVQLT,	yml_rl,	Pw, 0x0f,0x4c },
   740  	{ ACMOVQMI,	yml_rl,	Pw, 0x0f,0x48 },
   741  	{ ACMOVQNE,	yml_rl,	Pw, 0x0f,0x45 },
   742  	{ ACMOVQOC,	yml_rl,	Pw, 0x0f,0x41 },
   743  	{ ACMOVQOS,	yml_rl,	Pw, 0x0f,0x40 },
   744  	{ ACMOVQPC,	yml_rl,	Pw, 0x0f,0x4b },
   745  	{ ACMOVQPL,	yml_rl,	Pw, 0x0f,0x49 },
   746  	{ ACMOVQPS,	yml_rl,	Pw, 0x0f,0x4a },
   747  	{ ACMOVWCC,	yml_rl,	Pq, 0x43 },
   748  	{ ACMOVWCS,	yml_rl,	Pq, 0x42 },
   749  	{ ACMOVWEQ,	yml_rl,	Pq, 0x44 },
   750  	{ ACMOVWGE,	yml_rl,	Pq, 0x4d },
   751  	{ ACMOVWGT,	yml_rl,	Pq, 0x4f },
   752  	{ ACMOVWHI,	yml_rl,	Pq, 0x47 },
   753  	{ ACMOVWLE,	yml_rl,	Pq, 0x4e },
   754  	{ ACMOVWLS,	yml_rl,	Pq, 0x46 },
   755  	{ ACMOVWLT,	yml_rl,	Pq, 0x4c },
   756  	{ ACMOVWMI,	yml_rl,	Pq, 0x48 },
   757  	{ ACMOVWNE,	yml_rl,	Pq, 0x45 },
   758  	{ ACMOVWOC,	yml_rl,	Pq, 0x41 },
   759  	{ ACMOVWOS,	yml_rl,	Pq, 0x40 },
   760  	{ ACMOVWPC,	yml_rl,	Pq, 0x4b },
   761  	{ ACMOVWPL,	yml_rl,	Pq, 0x49 },
   762  	{ ACMOVWPS,	yml_rl,	Pq, 0x4a },
   763  	{ ACMPB,	ycmpb,	Pb, 0x3c,0x80,(07),0x38,0x3a },
   764  	{ ACMPL,	ycmpl,	Px, 0x83,(07),0x3d,0x81,(07),0x39,0x3b },
   765  	{ ACMPPD,	yxcmpi,	Px, Pe,0xc2 },
   766  	{ ACMPPS,	yxcmpi,	Pm, 0xc2,0 },
   767  	{ ACMPQ,	ycmpl,	Pw, 0x83,(07),0x3d,0x81,(07),0x39,0x3b },
   768  	{ ACMPSB,	ynone,	Pb, 0xa6 },
   769  	{ ACMPSD,	yxcmpi,	Px, Pf2,0xc2 },
   770  	{ ACMPSL,	ynone,	Px, 0xa7 },
   771  	{ ACMPSQ,	ynone,	Pw, 0xa7 },
   772  	{ ACMPSS,	yxcmpi,	Px, Pf3,0xc2 },
   773  	{ ACMPSW,	ynone,	Pe, 0xa7 },
   774  	{ ACMPW,	ycmpl,	Pe, 0x83,(07),0x3d,0x81,(07),0x39,0x3b },
   775  	{ ACOMISD,	yxcmp,	Pe, 0x2f },
   776  	{ ACOMISS,	yxcmp,	Pm, 0x2f },
   777  	{ ACPUID,	ynone,	Pm, 0xa2 },
   778  	{ ACVTPL2PD,	yxcvm2,	Px, Pf3,0xe6,Pe,0x2a },
   779  	{ ACVTPL2PS,	yxcvm2,	Pm, 0x5b,0,0x2a,0, },
   780  	{ ACVTPD2PL,	yxcvm1,	Px, Pf2,0xe6,Pe,0x2d },
   781  	{ ACVTPD2PS,	yxm,	Pe, 0x5a },
   782  	{ ACVTPS2PL,	yxcvm1, Px, Pe,0x5b,Pm,0x2d },
   783  	{ ACVTPS2PD,	yxm,	Pm, 0x5a },
   784  	{ API2FW,	ymfp,	Px, 0x0c },
   785  	{ ACVTSD2SL,	yxcvfl, Pf2, 0x2d },
   786  	{ ACVTSD2SQ,	yxcvfq, Pw, Pf2,0x2d },
   787  	{ ACVTSD2SS,	yxm,	Pf2, 0x5a },
   788  	{ ACVTSL2SD,	yxcvlf, Pf2, 0x2a },
   789  	{ ACVTSQ2SD,	yxcvqf, Pw, Pf2,0x2a },
   790  	{ ACVTSL2SS,	yxcvlf, Pf3, 0x2a },
   791  	{ ACVTSQ2SS,	yxcvqf, Pw, Pf3,0x2a },
   792  	{ ACVTSS2SD,	yxm,	Pf3, 0x5a },
   793  	{ ACVTSS2SL,	yxcvfl, Pf3, 0x2d },
   794  	{ ACVTSS2SQ,	yxcvfq, Pw, Pf3,0x2d },
   795  	{ ACVTTPD2PL,	yxcvm1,	Px, Pe,0xe6,Pe,0x2c },
   796  	{ ACVTTPS2PL,	yxcvm1,	Px, Pf3,0x5b,Pm,0x2c },
   797  	{ ACVTTSD2SL,	yxcvfl, Pf2, 0x2c },
   798  	{ ACVTTSD2SQ,	yxcvfq, Pw, Pf2,0x2c },
   799  	{ ACVTTSS2SL,	yxcvfl,	Pf3, 0x2c },
   800  	{ ACVTTSS2SQ,	yxcvfq, Pw, Pf3,0x2c },
   801  	{ ACWD,		ynone,	Pe, 0x99 },
   802  	{ ACQO,		ynone,	Pw, 0x99 },
   803  	{ ADAA,		ynone,	P32, 0x27 },
   804  	{ ADAS,		ynone,	P32, 0x2f },
   805  	{ ADATA },
   806  	{ ADECB,	yincb,	Pb, 0xfe,(01) },
   807  	{ ADECL,	yincl,	Px, 0xff,(01) },
   808  	{ ADECQ,	yincl,	Pw, 0xff,(01) },
   809  	{ ADECW,	yincw,	Pe, 0xff,(01) },
   810  	{ ADIVB,	ydivb,	Pb, 0xf6,(06) },
   811  	{ ADIVL,	ydivl,	Px, 0xf7,(06) },
   812  	{ ADIVPD,	yxm,	Pe, 0x5e },
   813  	{ ADIVPS,	yxm,	Pm, 0x5e },
   814  	{ ADIVQ,	ydivl,	Pw, 0xf7,(06) },
   815  	{ ADIVSD,	yxm,	Pf2, 0x5e },
   816  	{ ADIVSS,	yxm,	Pf3, 0x5e },
   817  	{ ADIVW,	ydivl,	Pe, 0xf7,(06) },
   818  	{ AEMMS,	ynone,	Pm, 0x77 },
   819  	{ AENTER },				/* botch */
   820  	{ AFXRSTOR,	ysvrs,	Pm, 0xae,(01),0xae,(01) },
   821  	{ AFXSAVE,	ysvrs,	Pm, 0xae,(00),0xae,(00) },
   822  	{ AFXRSTOR64,	ysvrs,	Pw, 0x0f,0xae,(01),0x0f,0xae,(01) },
   823  	{ AFXSAVE64,	ysvrs,	Pw, 0x0f,0xae,(00),0x0f,0xae,(00) },
   824  	{ AGLOBL },
   825  	{ AGOK },
   826  	{ AHISTORY },
   827  	{ AHLT,		ynone,	Px, 0xf4 },
   828  	{ AIDIVB,	ydivb,	Pb, 0xf6,(07) },
   829  	{ AIDIVL,	ydivl,	Px, 0xf7,(07) },
   830  	{ AIDIVQ,	ydivl,	Pw, 0xf7,(07) },
   831  	{ AIDIVW,	ydivl,	Pe, 0xf7,(07) },
   832  	{ AIMULB,	ydivb,	Pb, 0xf6,(05) },
   833  	{ AIMULL,	yimul,	Px, 0xf7,(05),0x6b,0x69,Pm,0xaf },
   834  	{ AIMULQ,	yimul,	Pw, 0xf7,(05),0x6b,0x69,Pm,0xaf },
   835  	{ AIMULW,	yimul,	Pe, 0xf7,(05),0x6b,0x69,Pm,0xaf },
   836  	{ AIMUL3Q,	yimul3,	Pw, 0x6b,(00) },
   837  	{ AINB,		yin,	Pb, 0xe4,0xec },
   838  	{ AINCB,	yincb,	Pb, 0xfe,(00) },
   839  	{ AINCL,	yincl,	Px, 0xff,(00) },
   840  	{ AINCQ,	yincl,	Pw, 0xff,(00) },
   841  	{ AINCW,	yincw,	Pe, 0xff,(00) },
   842  	{ AINL,		yin,	Px, 0xe5,0xed },
   843  	{ AINSB,	ynone,	Pb, 0x6c },
   844  	{ AINSL,	ynone,	Px, 0x6d },
   845  	{ AINSW,	ynone,	Pe, 0x6d },
   846  	{ AINT,		yint,	Px, 0xcd },
   847  	{ AINTO,	ynone,	P32, 0xce },
   848  	{ AINW,		yin,	Pe, 0xe5,0xed },
   849  	{ AIRETL,	ynone,	Px, 0xcf },
   850  	{ AIRETQ,	ynone,	Pw, 0xcf },
   851  	{ AIRETW,	ynone,	Pe, 0xcf },
   852  	{ AJCC,		yjcond,	Px, 0x73,0x83,(00) },
   853  	{ AJCS,		yjcond,	Px, 0x72,0x82 },
   854  	{ AJCXZL,	yloop,	Px, 0xe3 },
   855  	{ AJCXZQ,	yloop,	Px, 0xe3 },
   856  	{ AJEQ,		yjcond,	Px, 0x74,0x84 },
   857  	{ AJGE,		yjcond,	Px, 0x7d,0x8d },
   858  	{ AJGT,		yjcond,	Px, 0x7f,0x8f },
   859  	{ AJHI,		yjcond,	Px, 0x77,0x87 },
   860  	{ AJLE,		yjcond,	Px, 0x7e,0x8e },
   861  	{ AJLS,		yjcond,	Px, 0x76,0x86 },
   862  	{ AJLT,		yjcond,	Px, 0x7c,0x8c },
   863  	{ AJMI,		yjcond,	Px, 0x78,0x88 },
   864  	{ AJMP,		yjmp,	Px, 0xff,(04),0xeb,0xe9 },
   865  	{ AJNE,		yjcond,	Px, 0x75,0x85 },
   866  	{ AJOC,		yjcond,	Px, 0x71,0x81,(00) },
   867  	{ AJOS,		yjcond,	Px, 0x70,0x80,(00) },
   868  	{ AJPC,		yjcond,	Px, 0x7b,0x8b },
   869  	{ AJPL,		yjcond,	Px, 0x79,0x89 },
   870  	{ AJPS,		yjcond,	Px, 0x7a,0x8a },
   871  	{ ALAHF,	ynone,	Px, 0x9f },
   872  	{ ALARL,	yml_rl,	Pm, 0x02 },
   873  	{ ALARW,	yml_rl,	Pq, 0x02 },
   874  	{ ALDMXCSR,	ysvrs,	Pm, 0xae,(02),0xae,(02) },
   875  	{ ALEAL,	ym_rl,	Px, 0x8d },
   876  	{ ALEAQ,	ym_rl,	Pw, 0x8d },
   877  	{ ALEAVEL,	ynone,	P32, 0xc9 },
   878  	{ ALEAVEQ,	ynone,	Py, 0xc9 },
   879  	{ ALEAVEW,	ynone,	Pe, 0xc9 },
   880  	{ ALEAW,	ym_rl,	Pe, 0x8d },
   881  	{ ALOCK,	ynone,	Px, 0xf0 },
   882  	{ ALODSB,	ynone,	Pb, 0xac },
   883  	{ ALODSL,	ynone,	Px, 0xad },
   884  	{ ALODSQ,	ynone,	Pw, 0xad },
   885  	{ ALODSW,	ynone,	Pe, 0xad },
   886  	{ ALONG,	ybyte,	Px, 4 },
   887  	{ ALOOP,	yloop,	Px, 0xe2 },
   888  	{ ALOOPEQ,	yloop,	Px, 0xe1 },
   889  	{ ALOOPNE,	yloop,	Px, 0xe0 },
   890  	{ ALSLL,	yml_rl,	Pm, 0x03  },
   891  	{ ALSLW,	yml_rl,	Pq, 0x03  },
   892  	{ AMASKMOVOU,	yxr,	Pe, 0xf7 },
   893  	{ AMASKMOVQ,	ymr,	Pm, 0xf7 },
   894  	{ AMAXPD,	yxm,	Pe, 0x5f },
   895  	{ AMAXPS,	yxm,	Pm, 0x5f },
   896  	{ AMAXSD,	yxm,	Pf2, 0x5f },
   897  	{ AMAXSS,	yxm,	Pf3, 0x5f },
   898  	{ AMINPD,	yxm,	Pe, 0x5d },
   899  	{ AMINPS,	yxm,	Pm, 0x5d },
   900  	{ AMINSD,	yxm,	Pf2, 0x5d },
   901  	{ AMINSS,	yxm,	Pf3, 0x5d },
   902  	{ AMOVAPD,	yxmov,	Pe, 0x28,0x29 },
   903  	{ AMOVAPS,	yxmov,	Pm, 0x28,0x29 },
   904  	{ AMOVB,	ymovb,	Pb, 0x88,0x8a,0xb0,0xc6,(00) },
   905  	{ AMOVBLSX,	ymb_rl,	Pm, 0xbe },
   906  	{ AMOVBLZX,	ymb_rl,	Pm, 0xb6 },
   907  	{ AMOVBQSX,	ymb_rl,	Pw, 0x0f,0xbe },
   908  	{ AMOVBQZX,	ymb_rl,	Pw, 0x0f,0xb6 },
   909  	{ AMOVBWSX,	ymb_rl,	Pq, 0xbe },
   910  	{ AMOVBWZX,	ymb_rl,	Pq, 0xb6 },
   911  	{ AMOVO,	yxmov,	Pe, 0x6f,0x7f },
   912  	{ AMOVOU,	yxmov,	Pf3, 0x6f,0x7f },
   913  	{ AMOVHLPS,	yxr,	Pm, 0x12 },
   914  	{ AMOVHPD,	yxmov,	Pe, 0x16,0x17 },
   915  	{ AMOVHPS,	yxmov,	Pm, 0x16,0x17 },
   916  	{ AMOVL,	ymovl,	Px, 0x89,0x8b,0x31,0xb8,0xc7,(00),0x6e,0x7e,Pe,0x6e,Pe,0x7e,0 },
   917  	{ AMOVLHPS,	yxr,	Pm, 0x16 },
   918  	{ AMOVLPD,	yxmov,	Pe, 0x12,0x13 },
   919  	{ AMOVLPS,	yxmov,	Pm, 0x12,0x13 },
   920  	{ AMOVLQSX,	yml_rl,	Pw, 0x63 },
   921  	{ AMOVLQZX,	yml_rl,	Px, 0x8b },
   922  	{ AMOVMSKPD,	yxrrl,	Pq, 0x50 },
   923  	{ AMOVMSKPS,	yxrrl,	Pm, 0x50 },
   924  	{ AMOVNTO,	yxr_ml,	Pe, 0xe7 },
   925  	{ AMOVNTPD,	yxr_ml,	Pe, 0x2b },
   926  	{ AMOVNTPS,	yxr_ml,	Pm, 0x2b },
   927  	{ AMOVNTQ,	ymr_ml,	Pm, 0xe7 },
   928  	{ AMOVQ,	ymovq,	Pw, 0x89, 0x8b, 0x31, 0xc7,(00), 0xb8, 0xc7,(00), 0x6f, 0x7f, 0x6e, 0x7e, Pf2,0xd6, Pf3,0x7e, Pe,0xd6, Pe,0x6e, Pe,0x7e,0 },
   929  	{ AMOVQOZX,	ymrxr,	Pf3, 0xd6,0x7e },
   930  	{ AMOVSB,	ynone,	Pb, 0xa4 },
   931  	{ AMOVSD,	yxmov,	Pf2, 0x10,0x11 },
   932  	{ AMOVSL,	ynone,	Px, 0xa5 },
   933  	{ AMOVSQ,	ynone,	Pw, 0xa5 },
   934  	{ AMOVSS,	yxmov,	Pf3, 0x10,0x11 },
   935  	{ AMOVSW,	ynone,	Pe, 0xa5 },
   936  	{ AMOVUPD,	yxmov,	Pe, 0x10,0x11 },
   937  	{ AMOVUPS,	yxmov,	Pm, 0x10,0x11 },
   938  	{ AMOVW,	ymovw,	Pe, 0x89,0x8b,0x31,0xb8,0xc7,(00),0 },
   939  	{ AMOVWLSX,	yml_rl,	Pm, 0xbf },
   940  	{ AMOVWLZX,	yml_rl,	Pm, 0xb7 },
   941  	{ AMOVWQSX,	yml_rl,	Pw, 0x0f,0xbf },
   942  	{ AMOVWQZX,	yml_rl,	Pw, 0x0f,0xb7 },
   943  	{ AMULB,	ydivb,	Pb, 0xf6,(04) },
   944  	{ AMULL,	ydivl,	Px, 0xf7,(04) },
   945  	{ AMULPD,	yxm,	Pe, 0x59 },
   946  	{ AMULPS,	yxm,	Ym, 0x59 },
   947  	{ AMULQ,	ydivl,	Pw, 0xf7,(04) },
   948  	{ AMULSD,	yxm,	Pf2, 0x59 },
   949  	{ AMULSS,	yxm,	Pf3, 0x59 },
   950  	{ AMULW,	ydivl,	Pe, 0xf7,(04) },
   951  	{ ANAME },
   952  	{ ANEGB,	yscond,	Pb, 0xf6,(03) },
   953  	{ ANEGL,	yscond,	Px, 0xf7,(03) },
   954  	{ ANEGQ,	yscond,	Pw, 0xf7,(03) },
   955  	{ ANEGW,	yscond,	Pe, 0xf7,(03) },
   956  	{ ANOP,		ynop,	Px, 0,0 },
   957  	{ ANOTB,	yscond,	Pb, 0xf6,(02) },
   958  	{ ANOTL,	yscond,	Px, 0xf7,(02) },
   959  	{ ANOTQ,	yscond,	Pw, 0xf7,(02) },
   960  	{ ANOTW,	yscond,	Pe, 0xf7,(02) },
   961  	{ AORB,		yxorb,	Pb, 0x0c,0x80,(01),0x08,0x0a },
   962  	{ AORL,		yxorl,	Px, 0x83,(01),0x0d,0x81,(01),0x09,0x0b },
   963  	{ AORPD,	yxm,	Pq, 0x56 },
   964  	{ AORPS,	yxm,	Pm, 0x56 },
   965  	{ AORQ,		yxorl,	Pw, 0x83,(01),0x0d,0x81,(01),0x09,0x0b },
   966  	{ AORW,		yxorl,	Pe, 0x83,(01),0x0d,0x81,(01),0x09,0x0b },
   967  	{ AOUTB,	yin,	Pb, 0xe6,0xee },
   968  	{ AOUTL,	yin,	Px, 0xe7,0xef },
   969  	{ AOUTSB,	ynone,	Pb, 0x6e },
   970  	{ AOUTSL,	ynone,	Px, 0x6f },
   971  	{ AOUTSW,	ynone,	Pe, 0x6f },
   972  	{ AOUTW,	yin,	Pe, 0xe7,0xef },
   973  	{ APACKSSLW,	ymm,	Py, 0x6b,Pe,0x6b },
   974  	{ APACKSSWB,	ymm,	Py, 0x63,Pe,0x63 },
   975  	{ APACKUSWB,	ymm,	Py, 0x67,Pe,0x67 },
   976  	{ APADDB,	ymm,	Py, 0xfc,Pe,0xfc },
   977  	{ APADDL,	ymm,	Py, 0xfe,Pe,0xfe },
   978  	{ APADDQ,	yxm,	Pe, 0xd4 },
   979  	{ APADDSB,	ymm,	Py, 0xec,Pe,0xec },
   980  	{ APADDSW,	ymm,	Py, 0xed,Pe,0xed },
   981  	{ APADDUSB,	ymm,	Py, 0xdc,Pe,0xdc },
   982  	{ APADDUSW,	ymm,	Py, 0xdd,Pe,0xdd },
   983  	{ APADDW,	ymm,	Py, 0xfd,Pe,0xfd },
   984  	{ APAND,	ymm,	Py, 0xdb,Pe,0xdb },
   985  	{ APANDN,	ymm,	Py, 0xdf,Pe,0xdf },
   986  	{ APAUSE,	ynone,	Px, 0xf3,0x90 },
   987  	{ APAVGB,	ymm,	Py, 0xe0,Pe,0xe0 },
   988  	{ APAVGW,	ymm,	Py, 0xe3,Pe,0xe3 },
   989  	{ APCMPEQB,	ymm,	Py, 0x74,Pe,0x74 },
   990  	{ APCMPEQL,	ymm,	Py, 0x76,Pe,0x76 },
   991  	{ APCMPEQW,	ymm,	Py, 0x75,Pe,0x75 },
   992  	{ APCMPGTB,	ymm,	Py, 0x64,Pe,0x64 },
   993  	{ APCMPGTL,	ymm,	Py, 0x66,Pe,0x66 },
   994  	{ APCMPGTW,	ymm,	Py, 0x65,Pe,0x65 },
   995  	{ APEXTRW,	yextrw,	Pq, 0xc5,(00) },
   996  	{ APF2IL,	ymfp,	Px, 0x1d },
   997  	{ APF2IW,	ymfp,	Px, 0x1c },
   998  	{ API2FL,	ymfp,	Px, 0x0d },
   999  	{ APFACC,	ymfp,	Px, 0xae },
  1000  	{ APFADD,	ymfp,	Px, 0x9e },
  1001  	{ APFCMPEQ,	ymfp,	Px, 0xb0 },
  1002  	{ APFCMPGE,	ymfp,	Px, 0x90 },
  1003  	{ APFCMPGT,	ymfp,	Px, 0xa0 },
  1004  	{ APFMAX,	ymfp,	Px, 0xa4 },
  1005  	{ APFMIN,	ymfp,	Px, 0x94 },
  1006  	{ APFMUL,	ymfp,	Px, 0xb4 },
  1007  	{ APFNACC,	ymfp,	Px, 0x8a },
  1008  	{ APFPNACC,	ymfp,	Px, 0x8e },
  1009  	{ APFRCP,	ymfp,	Px, 0x96 },
  1010  	{ APFRCPIT1,	ymfp,	Px, 0xa6 },
  1011  	{ APFRCPI2T,	ymfp,	Px, 0xb6 },
  1012  	{ APFRSQIT1,	ymfp,	Px, 0xa7 },
  1013  	{ APFRSQRT,	ymfp,	Px, 0x97 },
  1014  	{ APFSUB,	ymfp,	Px, 0x9a },
  1015  	{ APFSUBR,	ymfp,	Px, 0xaa },
  1016  	{ APINSRW,	yinsrw,	Pq, 0xc4,(00) },
  1017  	{ APINSRD,	yinsr,	Pq, 0x3a, 0x22, (00) },
  1018  	{ APINSRQ,	yinsr,	Pq3, 0x3a, 0x22, (00) },
  1019  	{ APMADDWL,	ymm,	Py, 0xf5,Pe,0xf5 },
  1020  	{ APMAXSW,	yxm,	Pe, 0xee },
  1021  	{ APMAXUB,	yxm,	Pe, 0xde },
  1022  	{ APMINSW,	yxm,	Pe, 0xea },
  1023  	{ APMINUB,	yxm,	Pe, 0xda },
  1024  	{ APMOVMSKB,	ymskb,	Px, Pe,0xd7,0xd7 },
  1025  	{ APMULHRW,	ymfp,	Px, 0xb7 },
  1026  	{ APMULHUW,	ymm,	Py, 0xe4,Pe,0xe4 },
  1027  	{ APMULHW,	ymm,	Py, 0xe5,Pe,0xe5 },
  1028  	{ APMULLW,	ymm,	Py, 0xd5,Pe,0xd5 },
  1029  	{ APMULULQ,	ymm,	Py, 0xf4,Pe,0xf4 },
  1030  	{ APOPAL,	ynone,	P32, 0x61 },
  1031  	{ APOPAW,	ynone,	Pe, 0x61 },
  1032  	{ APOPFL,	ynone,	P32, 0x9d },
  1033  	{ APOPFQ,	ynone,	Py, 0x9d },
  1034  	{ APOPFW,	ynone,	Pe, 0x9d },
  1035  	{ APOPL,	ypopl,	P32, 0x58,0x8f,(00) },
  1036  	{ APOPQ,	ypopl,	Py, 0x58,0x8f,(00) },
  1037  	{ APOPW,	ypopl,	Pe, 0x58,0x8f,(00) },
  1038  	{ APOR,		ymm,	Py, 0xeb,Pe,0xeb },
  1039  	{ APSADBW,	yxm,	Pq, 0xf6 },
  1040  	{ APSHUFHW,	yxshuf,	Pf3, 0x70,(00) },
  1041  	{ APSHUFL,	yxshuf,	Pq, 0x70,(00) },
  1042  	{ APSHUFLW,	yxshuf,	Pf2, 0x70,(00) },
  1043  	{ APSHUFW,	ymshuf,	Pm, 0x70,(00) },
  1044  	{ APSHUFB,	ymshufb,Pq, 0x38, 0x00 },
  1045  	{ APSLLO,	ypsdq,	Pq, 0x73,(07) },
  1046  	{ APSLLL,	yps,	Py, 0xf2, 0x72,(06), Pe,0xf2, Pe,0x72,(06) },
  1047  	{ APSLLQ,	yps,	Py, 0xf3, 0x73,(06), Pe,0xf3, Pe,0x73,(06) },
  1048  	{ APSLLW,	yps,	Py, 0xf1, 0x71,(06), Pe,0xf1, Pe,0x71,(06) },
  1049  	{ APSRAL,	yps,	Py, 0xe2, 0x72,(04), Pe,0xe2, Pe,0x72,(04) },
  1050  	{ APSRAW,	yps,	Py, 0xe1, 0x71,(04), Pe,0xe1, Pe,0x71,(04) },
  1051  	{ APSRLO,	ypsdq,	Pq, 0x73,(03) },
  1052  	{ APSRLL,	yps,	Py, 0xd2, 0x72,(02), Pe,0xd2, Pe,0x72,(02) },
  1053  	{ APSRLQ,	yps,	Py, 0xd3, 0x73,(02), Pe,0xd3, Pe,0x73,(02) },
  1054  	{ APSRLW,	yps,	Py, 0xd1, 0x71,(02), Pe,0xe1, Pe,0x71,(02) },
  1055  	{ APSUBB,	yxm,	Pe, 0xf8 },
  1056  	{ APSUBL,	yxm,	Pe, 0xfa },
  1057  	{ APSUBQ,	yxm,	Pe, 0xfb },
  1058  	{ APSUBSB,	yxm,	Pe, 0xe8 },
  1059  	{ APSUBSW,	yxm,	Pe, 0xe9 },
  1060  	{ APSUBUSB,	yxm,	Pe, 0xd8 },
  1061  	{ APSUBUSW,	yxm,	Pe, 0xd9 },
  1062  	{ APSUBW,	yxm,	Pe, 0xf9 },
  1063  	{ APSWAPL,	ymfp,	Px, 0xbb },
  1064  	{ APUNPCKHBW,	ymm,	Py, 0x68,Pe,0x68 },
  1065  	{ APUNPCKHLQ,	ymm,	Py, 0x6a,Pe,0x6a },
  1066  	{ APUNPCKHQDQ,	yxm,	Pe, 0x6d },
  1067  	{ APUNPCKHWL,	ymm,	Py, 0x69,Pe,0x69 },
  1068  	{ APUNPCKLBW,	ymm,	Py, 0x60,Pe,0x60 },
  1069  	{ APUNPCKLLQ,	ymm,	Py, 0x62,Pe,0x62 },
  1070  	{ APUNPCKLQDQ,	yxm,	Pe, 0x6c },
  1071  	{ APUNPCKLWL,	ymm,	Py, 0x61,Pe,0x61 },
  1072  	{ APUSHAL,	ynone,	P32, 0x60 },
  1073  	{ APUSHAW,	ynone,	Pe, 0x60 },
  1074  	{ APUSHFL,	ynone,	P32, 0x9c },
  1075  	{ APUSHFQ,	ynone,	Py, 0x9c },
  1076  	{ APUSHFW,	ynone,	Pe, 0x9c },
  1077  	{ APUSHL,	ypushl,	P32, 0x50,0xff,(06),0x6a,0x68 },
  1078  	{ APUSHQ,	ypushl,	Py, 0x50,0xff,(06),0x6a,0x68 },
  1079  	{ APUSHW,	ypushl,	Pe, 0x50,0xff,(06),0x6a,0x68 },
  1080  	{ APXOR,	ymm,	Py, 0xef,Pe,0xef },
  1081  	{ AQUAD,	ybyte,	Px, 8 },
  1082  	{ ARCLB,	yshb,	Pb, 0xd0,(02),0xc0,(02),0xd2,(02) },
  1083  	{ ARCLL,	yshl,	Px, 0xd1,(02),0xc1,(02),0xd3,(02),0xd3,(02) },
  1084  	{ ARCLQ,	yshl,	Pw, 0xd1,(02),0xc1,(02),0xd3,(02),0xd3,(02) },
  1085  	{ ARCLW,	yshl,	Pe, 0xd1,(02),0xc1,(02),0xd3,(02),0xd3,(02) },
  1086  	{ ARCPPS,	yxm,	Pm, 0x53 },
  1087  	{ ARCPSS,	yxm,	Pf3, 0x53 },
  1088  	{ ARCRB,	yshb,	Pb, 0xd0,(03),0xc0,(03),0xd2,(03) },
  1089  	{ ARCRL,	yshl,	Px, 0xd1,(03),0xc1,(03),0xd3,(03),0xd3,(03) },
  1090  	{ ARCRQ,	yshl,	Pw, 0xd1,(03),0xc1,(03),0xd3,(03),0xd3,(03) },
  1091  	{ ARCRW,	yshl,	Pe, 0xd1,(03),0xc1,(03),0xd3,(03),0xd3,(03) },
  1092  	{ AREP,		ynone,	Px, 0xf3 },
  1093  	{ AREPN,	ynone,	Px, 0xf2 },
  1094  	{ ARET,		ynone,	Px, 0xc3 },
  1095  	{ ARETFW,	yret,	Pe, 0xcb,0xca },
  1096  	{ ARETFL,	yret,	Px, 0xcb,0xca },
  1097  	{ ARETFQ,	yret,	Pw, 0xcb,0xca },
  1098  	{ AROLB,	yshb,	Pb, 0xd0,(00),0xc0,(00),0xd2,(00) },
  1099  	{ AROLL,	yshl,	Px, 0xd1,(00),0xc1,(00),0xd3,(00),0xd3,(00) },
  1100  	{ AROLQ,	yshl,	Pw, 0xd1,(00),0xc1,(00),0xd3,(00),0xd3,(00) },
  1101  	{ AROLW,	yshl,	Pe, 0xd1,(00),0xc1,(00),0xd3,(00),0xd3,(00) },
  1102  	{ ARORB,	yshb,	Pb, 0xd0,(01),0xc0,(01),0xd2,(01) },
  1103  	{ ARORL,	yshl,	Px, 0xd1,(01),0xc1,(01),0xd3,(01),0xd3,(01) },
  1104  	{ ARORQ,	yshl,	Pw, 0xd1,(01),0xc1,(01),0xd3,(01),0xd3,(01) },
  1105  	{ ARORW,	yshl,	Pe, 0xd1,(01),0xc1,(01),0xd3,(01),0xd3,(01) },
  1106  	{ ARSQRTPS,	yxm,	Pm, 0x52 },
  1107  	{ ARSQRTSS,	yxm,	Pf3, 0x52 },
  1108  	{ ASAHF,	ynone,	Px, 0x86,0xe0,0x50,0x9d },	/* XCHGB AH,AL; PUSH AX; POPFL */
  1109  	{ ASALB,	yshb,	Pb, 0xd0,(04),0xc0,(04),0xd2,(04) },
  1110  	{ ASALL,	yshl,	Px, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) },
  1111  	{ ASALQ,	yshl,	Pw, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) },
  1112  	{ ASALW,	yshl,	Pe, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) },
  1113  	{ ASARB,	yshb,	Pb, 0xd0,(07),0xc0,(07),0xd2,(07) },
  1114  	{ ASARL,	yshl,	Px, 0xd1,(07),0xc1,(07),0xd3,(07),0xd3,(07) },
  1115  	{ ASARQ,	yshl,	Pw, 0xd1,(07),0xc1,(07),0xd3,(07),0xd3,(07) },
  1116  	{ ASARW,	yshl,	Pe, 0xd1,(07),0xc1,(07),0xd3,(07),0xd3,(07) },
  1117  	{ ASBBB,	yxorb,	Pb, 0x1c,0x80,(03),0x18,0x1a },
  1118  	{ ASBBL,	yxorl,	Px, 0x83,(03),0x1d,0x81,(03),0x19,0x1b },
  1119  	{ ASBBQ,	yxorl,	Pw, 0x83,(03),0x1d,0x81,(03),0x19,0x1b },
  1120  	{ ASBBW,	yxorl,	Pe, 0x83,(03),0x1d,0x81,(03),0x19,0x1b },
  1121  	{ ASCASB,	ynone,	Pb, 0xae },
  1122  	{ ASCASL,	ynone,	Px, 0xaf },
  1123  	{ ASCASQ,	ynone,	Pw, 0xaf },
  1124  	{ ASCASW,	ynone,	Pe, 0xaf },
  1125  	{ ASETCC,	yscond,	Pm, 0x93,(00) },
  1126  	{ ASETCS,	yscond,	Pm, 0x92,(00) },
  1127  	{ ASETEQ,	yscond,	Pm, 0x94,(00) },
  1128  	{ ASETGE,	yscond,	Pm, 0x9d,(00) },
  1129  	{ ASETGT,	yscond,	Pm, 0x9f,(00) },
  1130  	{ ASETHI,	yscond,	Pm, 0x97,(00) },
  1131  	{ ASETLE,	yscond,	Pm, 0x9e,(00) },
  1132  	{ ASETLS,	yscond,	Pm, 0x96,(00) },
  1133  	{ ASETLT,	yscond,	Pm, 0x9c,(00) },
  1134  	{ ASETMI,	yscond,	Pm, 0x98,(00) },
  1135  	{ ASETNE,	yscond,	Pm, 0x95,(00) },
  1136  	{ ASETOC,	yscond,	Pm, 0x91,(00) },
  1137  	{ ASETOS,	yscond,	Pm, 0x90,(00) },
  1138  	{ ASETPC,	yscond,	Pm, 0x96,(00) },
  1139  	{ ASETPL,	yscond,	Pm, 0x99,(00) },
  1140  	{ ASETPS,	yscond,	Pm, 0x9a,(00) },
  1141  	{ ASHLB,	yshb,	Pb, 0xd0,(04),0xc0,(04),0xd2,(04) },
  1142  	{ ASHLL,	yshl,	Px, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) },
  1143  	{ ASHLQ,	yshl,	Pw, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) },
  1144  	{ ASHLW,	yshl,	Pe, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) },
  1145  	{ ASHRB,	yshb,	Pb, 0xd0,(05),0xc0,(05),0xd2,(05) },
  1146  	{ ASHRL,	yshl,	Px, 0xd1,(05),0xc1,(05),0xd3,(05),0xd3,(05) },
  1147  	{ ASHRQ,	yshl,	Pw, 0xd1,(05),0xc1,(05),0xd3,(05),0xd3,(05) },
  1148  	{ ASHRW,	yshl,	Pe, 0xd1,(05),0xc1,(05),0xd3,(05),0xd3,(05) },
  1149  	{ ASHUFPD,	yxshuf,	Pq, 0xc6,(00) },
  1150  	{ ASHUFPS,	yxshuf,	Pm, 0xc6,(00) },
  1151  	{ ASQRTPD,	yxm,	Pe, 0x51 },
  1152  	{ ASQRTPS,	yxm,	Pm, 0x51 },
  1153  	{ ASQRTSD,	yxm,	Pf2, 0x51 },
  1154  	{ ASQRTSS,	yxm,	Pf3, 0x51 },
  1155  	{ ASTC,		ynone,	Px, 0xf9 },
  1156  	{ ASTD,		ynone,	Px, 0xfd },
  1157  	{ ASTI,		ynone,	Px, 0xfb },
  1158  	{ ASTMXCSR,	ysvrs,	Pm, 0xae,(03),0xae,(03) },
  1159  	{ ASTOSB,	ynone,	Pb, 0xaa },
  1160  	{ ASTOSL,	ynone,	Px, 0xab },
  1161  	{ ASTOSQ,	ynone,	Pw, 0xab },
  1162  	{ ASTOSW,	ynone,	Pe, 0xab },
  1163  	{ ASUBB,	yxorb,	Pb, 0x2c,0x80,(05),0x28,0x2a },
  1164  	{ ASUBL,	yaddl,	Px, 0x83,(05),0x2d,0x81,(05),0x29,0x2b },
  1165  	{ ASUBPD,	yxm,	Pe, 0x5c },
  1166  	{ ASUBPS,	yxm,	Pm, 0x5c },
  1167  	{ ASUBQ,	yaddl,	Pw, 0x83,(05),0x2d,0x81,(05),0x29,0x2b },
  1168  	{ ASUBSD,	yxm,	Pf2, 0x5c },
  1169  	{ ASUBSS,	yxm,	Pf3, 0x5c },
  1170  	{ ASUBW,	yaddl,	Pe, 0x83,(05),0x2d,0x81,(05),0x29,0x2b },
  1171  	{ ASWAPGS,	ynone,	Pm, 0x01,0xf8 },
  1172  	{ ASYSCALL,	ynone,	Px, 0x0f,0x05 },	/* fast syscall */
  1173  	{ ATESTB,	ytestb,	Pb, 0xa8,0xf6,(00),0x84,0x84 },
  1174  	{ ATESTL,	ytestl,	Px, 0xa9,0xf7,(00),0x85,0x85 },
  1175  	{ ATESTQ,	ytestl,	Pw, 0xa9,0xf7,(00),0x85,0x85 },
  1176  	{ ATESTW,	ytestl,	Pe, 0xa9,0xf7,(00),0x85,0x85 },
  1177  	{ ATEXT,	ytext,	Px },
  1178  	{ AUCOMISD,	yxcmp,	Pe, 0x2e },
  1179  	{ AUCOMISS,	yxcmp,	Pm, 0x2e },
  1180  	{ AUNPCKHPD,	yxm,	Pe, 0x15 },
  1181  	{ AUNPCKHPS,	yxm,	Pm, 0x15 },
  1182  	{ AUNPCKLPD,	yxm,	Pe, 0x14 },
  1183  	{ AUNPCKLPS,	yxm,	Pm, 0x14 },
  1184  	{ AVERR,	ydivl,	Pm, 0x00,(04) },
  1185  	{ AVERW,	ydivl,	Pm, 0x00,(05) },
  1186  	{ AWAIT,	ynone,	Px, 0x9b },
  1187  	{ AWORD,	ybyte,	Px, 2 },
  1188  	{ AXCHGB,	yml_mb,	Pb, 0x86,0x86 },
  1189  	{ AXCHGL,	yxchg,	Px, 0x90,0x90,0x87,0x87 },
  1190  	{ AXCHGQ,	yxchg,	Pw, 0x90,0x90,0x87,0x87 },
  1191  	{ AXCHGW,	yxchg,	Pe, 0x90,0x90,0x87,0x87 },
  1192  	{ AXLAT,	ynone,	Px, 0xd7 },
  1193  	{ AXORB,	yxorb,	Pb, 0x34,0x80,(06),0x30,0x32 },
  1194  	{ AXORL,	yxorl,	Px, 0x83,(06),0x35,0x81,(06),0x31,0x33 },
  1195  	{ AXORPD,	yxm,	Pe, 0x57 },
  1196  	{ AXORPS,	yxm,	Pm, 0x57 },
  1197  	{ AXORQ,	yxorl,	Pw, 0x83,(06),0x35,0x81,(06),0x31,0x33 },
  1198  	{ AXORW,	yxorl,	Pe, 0x83,(06),0x35,0x81,(06),0x31,0x33 },
  1199  
  1200  	{ AFMOVB,	yfmvx,	Px, 0xdf,(04) },
  1201  	{ AFMOVBP,	yfmvp,	Px, 0xdf,(06) },
  1202  	{ AFMOVD,	yfmvd,	Px, 0xdd,(00),0xdd,(02),0xd9,(00),0xdd,(02) },
  1203  	{ AFMOVDP,	yfmvdp,	Px, 0xdd,(03),0xdd,(03) },
  1204  	{ AFMOVF,	yfmvf,	Px, 0xd9,(00),0xd9,(02) },
  1205  	{ AFMOVFP,	yfmvp,	Px, 0xd9,(03) },
  1206  	{ AFMOVL,	yfmvf,	Px, 0xdb,(00),0xdb,(02) },
  1207  	{ AFMOVLP,	yfmvp,	Px, 0xdb,(03) },
  1208  	{ AFMOVV,	yfmvx,	Px, 0xdf,(05) },
  1209  	{ AFMOVVP,	yfmvp,	Px, 0xdf,(07) },
  1210  	{ AFMOVW,	yfmvf,	Px, 0xdf,(00),0xdf,(02) },
  1211  	{ AFMOVWP,	yfmvp,	Px, 0xdf,(03) },
  1212  	{ AFMOVX,	yfmvx,	Px, 0xdb,(05) },
  1213  	{ AFMOVXP,	yfmvp,	Px, 0xdb,(07) },
  1214  
  1215  	{ AFCOMB },
  1216  	{ AFCOMBP },
  1217  	{ AFCOMD,	yfadd,	Px, 0xdc,(02),0xd8,(02),0xdc,(02) },	/* botch */
  1218  	{ AFCOMDP,	yfadd,	Px, 0xdc,(03),0xd8,(03),0xdc,(03) },	/* botch */
  1219  	{ AFCOMDPP,	ycompp,	Px, 0xde,(03) },
  1220  	{ AFCOMF,	yfmvx,	Px, 0xd8,(02) },
  1221  	{ AFCOMFP,	yfmvx,	Px, 0xd8,(03) },
  1222  	{ AFCOML,	yfmvx,	Px, 0xda,(02) },
  1223  	{ AFCOMLP,	yfmvx,	Px, 0xda,(03) },
  1224  	{ AFCOMW,	yfmvx,	Px, 0xde,(02) },
  1225  	{ AFCOMWP,	yfmvx,	Px, 0xde,(03) },
  1226  
  1227  	{ AFUCOM,	ycompp,	Px, 0xdd,(04) },
  1228  	{ AFUCOMP,	ycompp, Px, 0xdd,(05) },
  1229  	{ AFUCOMPP,	ycompp,	Px, 0xda,(13) },
  1230  
  1231  	{ AFADDDP,	yfaddp,	Px, 0xde,(00) },
  1232  	{ AFADDW,	yfmvx,	Px, 0xde,(00) },
  1233  	{ AFADDL,	yfmvx,	Px, 0xda,(00) },
  1234  	{ AFADDF,	yfmvx,	Px, 0xd8,(00) },
  1235  	{ AFADDD,	yfadd,	Px, 0xdc,(00),0xd8,(00),0xdc,(00) },
  1236  
  1237  	{ AFMULDP,	yfaddp,	Px, 0xde,(01) },
  1238  	{ AFMULW,	yfmvx,	Px, 0xde,(01) },
  1239  	{ AFMULL,	yfmvx,	Px, 0xda,(01) },
  1240  	{ AFMULF,	yfmvx,	Px, 0xd8,(01) },
  1241  	{ AFMULD,	yfadd,	Px, 0xdc,(01),0xd8,(01),0xdc,(01) },
  1242  
  1243  	{ AFSUBDP,	yfaddp,	Px, 0xde,(05) },
  1244  	{ AFSUBW,	yfmvx,	Px, 0xde,(04) },
  1245  	{ AFSUBL,	yfmvx,	Px, 0xda,(04) },
  1246  	{ AFSUBF,	yfmvx,	Px, 0xd8,(04) },
  1247  	{ AFSUBD,	yfadd,	Px, 0xdc,(04),0xd8,(04),0xdc,(05) },
  1248  
  1249  	{ AFSUBRDP,	yfaddp,	Px, 0xde,(04) },
  1250  	{ AFSUBRW,	yfmvx,	Px, 0xde,(05) },
  1251  	{ AFSUBRL,	yfmvx,	Px, 0xda,(05) },
  1252  	{ AFSUBRF,	yfmvx,	Px, 0xd8,(05) },
  1253  	{ AFSUBRD,	yfadd,	Px, 0xdc,(05),0xd8,(05),0xdc,(04) },
  1254  
  1255  	{ AFDIVDP,	yfaddp,	Px, 0xde,(07) },
  1256  	{ AFDIVW,	yfmvx,	Px, 0xde,(06) },
  1257  	{ AFDIVL,	yfmvx,	Px, 0xda,(06) },
  1258  	{ AFDIVF,	yfmvx,	Px, 0xd8,(06) },
  1259  	{ AFDIVD,	yfadd,	Px, 0xdc,(06),0xd8,(06),0xdc,(07) },
  1260  
  1261  	{ AFDIVRDP,	yfaddp,	Px, 0xde,(06) },
  1262  	{ AFDIVRW,	yfmvx,	Px, 0xde,(07) },
  1263  	{ AFDIVRL,	yfmvx,	Px, 0xda,(07) },
  1264  	{ AFDIVRF,	yfmvx,	Px, 0xd8,(07) },
  1265  	{ AFDIVRD,	yfadd,	Px, 0xdc,(07),0xd8,(07),0xdc,(06) },
  1266  
  1267  	{ AFXCHD,	yfxch,	Px, 0xd9,(01),0xd9,(01) },
  1268  	{ AFFREE },
  1269  	{ AFLDCW,	ystcw,	Px, 0xd9,(05),0xd9,(05) },
  1270  	{ AFLDENV,	ystcw,	Px, 0xd9,(04),0xd9,(04) },
  1271  	{ AFRSTOR,	ysvrs,	Px, 0xdd,(04),0xdd,(04) },
  1272  	{ AFSAVE,	ysvrs,	Px, 0xdd,(06),0xdd,(06) },
  1273  	{ AFSTCW,	ystcw,	Px, 0xd9,(07),0xd9,(07) },
  1274  	{ AFSTENV,	ystcw,	Px, 0xd9,(06),0xd9,(06) },
  1275  	{ AFSTSW,	ystsw,	Px, 0xdd,(07),0xdf,0xe0 },
  1276  	{ AF2XM1,	ynone,	Px, 0xd9, 0xf0 },
  1277  	{ AFABS,	ynone,	Px, 0xd9, 0xe1 },
  1278  	{ AFCHS,	ynone,	Px, 0xd9, 0xe0 },
  1279  	{ AFCLEX,	ynone,	Px, 0xdb, 0xe2 },
  1280  	{ AFCOS,	ynone,	Px, 0xd9, 0xff },
  1281  	{ AFDECSTP,	ynone,	Px, 0xd9, 0xf6 },
  1282  	{ AFINCSTP,	ynone,	Px, 0xd9, 0xf7 },
  1283  	{ AFINIT,	ynone,	Px, 0xdb, 0xe3 },
  1284  	{ AFLD1,	ynone,	Px, 0xd9, 0xe8 },
  1285  	{ AFLDL2E,	ynone,	Px, 0xd9, 0xea },
  1286  	{ AFLDL2T,	ynone,	Px, 0xd9, 0xe9 },
  1287  	{ AFLDLG2,	ynone,	Px, 0xd9, 0xec },
  1288  	{ AFLDLN2,	ynone,	Px, 0xd9, 0xed },
  1289  	{ AFLDPI,	ynone,	Px, 0xd9, 0xeb },
  1290  	{ AFLDZ,	ynone,	Px, 0xd9, 0xee },
  1291  	{ AFNOP,	ynone,	Px, 0xd9, 0xd0 },
  1292  	{ AFPATAN,	ynone,	Px, 0xd9, 0xf3 },
  1293  	{ AFPREM,	ynone,	Px, 0xd9, 0xf8 },
  1294  	{ AFPREM1,	ynone,	Px, 0xd9, 0xf5 },
  1295  	{ AFPTAN,	ynone,	Px, 0xd9, 0xf2 },
  1296  	{ AFRNDINT,	ynone,	Px, 0xd9, 0xfc },
  1297  	{ AFSCALE,	ynone,	Px, 0xd9, 0xfd },
  1298  	{ AFSIN,	ynone,	Px, 0xd9, 0xfe },
  1299  	{ AFSINCOS,	ynone,	Px, 0xd9, 0xfb },
  1300  	{ AFSQRT,	ynone,	Px, 0xd9, 0xfa },
  1301  	{ AFTST,	ynone,	Px, 0xd9, 0xe4 },
  1302  	{ AFXAM,	ynone,	Px, 0xd9, 0xe5 },
  1303  	{ AFXTRACT,	ynone,	Px, 0xd9, 0xf4 },
  1304  	{ AFYL2X,	ynone,	Px, 0xd9, 0xf1 },
  1305  	{ AFYL2XP1,	ynone,	Px, 0xd9, 0xf9 },
  1306  
  1307  	{ ACMPXCHGB,	yrb_mb,	Pb, 0x0f,0xb0 },
  1308  	{ ACMPXCHGL,	yrl_ml,	Px, 0x0f,0xb1 },
  1309  	{ ACMPXCHGW,	yrl_ml,	Pe, 0x0f,0xb1 },
  1310  	{ ACMPXCHGQ,	yrl_ml,	Pw, 0x0f,0xb1 },
  1311  	{ ACMPXCHG8B,	yscond,	Pm, 0xc7,(01) },
  1312  	{ AINVD,	ynone,	Pm, 0x08 },
  1313  	{ AINVLPG,	ymbs,	Pm, 0x01,(07) },
  1314  	{ ALFENCE,	ynone,	Pm, 0xae,0xe8 },
  1315  	{ AMFENCE,	ynone,	Pm, 0xae,0xf0 },
  1316  	{ AMOVNTIL,	yrl_ml,	Pm, 0xc3 },
  1317  	{ AMOVNTIQ,	yrl_ml, Pw, 0x0f,0xc3 },
  1318  	{ ARDMSR,	ynone,	Pm, 0x32 },
  1319  	{ ARDPMC,	ynone,	Pm, 0x33 },
  1320  	{ ARDTSC,	ynone,	Pm, 0x31 },
  1321  	{ ARSM,		ynone,	Pm, 0xaa },
  1322  	{ ASFENCE,	ynone,	Pm, 0xae,0xf8 },
  1323  	{ ASYSRET,	ynone,	Pm, 0x07 },
  1324  	{ AWBINVD,	ynone,	Pm, 0x09 },
  1325  	{ AWRMSR,	ynone,	Pm, 0x30 },
  1326  
  1327  	{ AXADDB,	yrb_mb,	Pb, 0x0f,0xc0 },
  1328  	{ AXADDL,	yrl_ml,	Px, 0x0f,0xc1 },
  1329  	{ AXADDQ,	yrl_ml,	Pw, 0x0f,0xc1 },
  1330  	{ AXADDW,	yrl_ml,	Pe, 0x0f,0xc1 },
  1331  
  1332  	{ ACRC32B,       ycrc32l,Px, 0xf2,0x0f,0x38,0xf0,0 },
  1333  	{ ACRC32Q,       ycrc32l,Pw, 0xf2,0x0f,0x38,0xf1,0 },
  1334  	
  1335  	{ APREFETCHT0,	yprefetch,	Pm,	0x18,(01) },
  1336  	{ APREFETCHT1,	yprefetch,	Pm,	0x18,(02) },
  1337  	{ APREFETCHT2,	yprefetch,	Pm,	0x18,(03) },
  1338  	{ APREFETCHNTA,	yprefetch,	Pm,	0x18,(00) },
  1339  	
  1340  	{ AMOVQL,	yrl_ml,	Px, 0x89 },
  1341  
  1342  	{ AUNDEF,		ynone,	Px, 0x0f, 0x0b },
  1343  
  1344  	{ AAESENC,	yaes,	Pq, 0x38,0xdc,(0) },
  1345  	{ AAESENCLAST,	yaes,	Pq, 0x38,0xdd,(0) },
  1346  	{ AAESDEC,	yaes,	Pq, 0x38,0xde,(0) },
  1347  	{ AAESDECLAST,	yaes,	Pq, 0x38,0xdf,(0) },
  1348  	{ AAESIMC,	yaes,	Pq, 0x38,0xdb,(0) },
  1349  	{ AAESKEYGENASSIST,	yaes2,	Pq, 0x3a,0xdf,(0) },
  1350  
  1351  	{ APSHUFD,	yaes2,	Pq,	0x70,(0) },
  1352  	{ APCLMULQDQ,	yxshuf,	Pq, 0x3a,0x44,0 },
  1353  
  1354  	{ AUSEFIELD,	ynop,	Px, 0,0 },
  1355  	{ AFUNCDATA,	yfuncdata,	Px, 0,0 },
  1356  	{ APCDATA,	ypcdata,	Px, 0,0 },
  1357  
  1358  	{ AEND },
  1359  	0
  1360  };
  1361  
  1362  Optab*	opindex[ALAST+1];
  1363  
  1364  /*
  1365  AMOVD	0f 6e/r	mmx,reg/mem32[mem64-rex?]
  1366  AMOVD	0f 7e/r	reg/mem32[64],mmx	STORE
  1367  AMOVQ	0f 6f/r	mmx1,mmx2/mem64
  1368  AMOVQ	0f 7f/r	mmx1/mem64,mmx2
  1369  */