github.com/ader1990/go@v0.0.0-20140630135419-8c24447fa791/src/cmd/6a/lex.c (about)

     1  // Inferno utils/6a/lex.c
     2  // http://code.google.com/p/inferno-os/source/browse/utils/6a/lex.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  #define	EXTERN
    32  #include <u.h>
    33  #include <libc.h>
    34  #include "a.h"
    35  #include "y.tab.h"
    36  
    37  enum
    38  {
    39  	Plan9	= 1<<0,
    40  	Unix	= 1<<1,
    41  	Windows	= 1<<2,
    42  };
    43  
    44  int
    45  systemtype(int sys)
    46  {
    47  #ifdef _WIN32
    48  	return sys&Windows;
    49  #else
    50  	return sys&Plan9;
    51  #endif
    52  }
    53  
    54  int
    55  pathchar(void)
    56  {
    57  	return '/';
    58  }
    59  
    60  int
    61  Lconv(Fmt *fp)
    62  {
    63  	return linklinefmt(ctxt, fp);
    64  }
    65  
    66  void
    67  dodef(char *p)
    68  {
    69  	if(nDlist%8 == 0)
    70  		Dlist = allocn(Dlist, nDlist*sizeof(char *),
    71  			8*sizeof(char *));
    72  	Dlist[nDlist++] = p;
    73  }
    74  
    75  LinkArch*       thelinkarch = &linkamd64;
    76  
    77  void
    78  usage(void)
    79  {
    80  	print("usage: %ca [options] file.c...\n", thechar);
    81  	flagprint(1);
    82  	errorexit();
    83  }
    84  
    85  void
    86  main(int argc, char *argv[])
    87  {
    88  	char *p;
    89  
    90  	thechar = '6';
    91  	thestring = "amd64";
    92  
    93  	// Allow GOARCH=thestring or GOARCH=thestringsuffix,
    94  	// but not other values.	
    95  	p = getgoarch();
    96  	if(strncmp(p, thestring, strlen(thestring)) != 0)
    97  		sysfatal("cannot use %cc with GOARCH=%s", thechar, p);
    98  	if(strcmp(p, "amd64p32") == 0)
    99  		thelinkarch = &linkamd64p32;
   100  
   101  	ctxt = linknew(thelinkarch);
   102  	ctxt->diag = yyerror;
   103  	ctxt->bso = &bstdout;
   104  	Binit(&bstdout, 1, OWRITE);
   105  	listinit6();
   106  	fmtinstall('L', Lconv);
   107  
   108  	ensuresymb(NSYMB);
   109  	memset(debug, 0, sizeof(debug));
   110  	cinit();
   111  	outfile = 0;
   112  	setinclude(".");
   113  	
   114  	flagfn1("D", "name[=value]: add #define", dodef);
   115  	flagfn1("I", "dir: add dir to include path", setinclude);
   116  	flagcount("S", "print assembly and machine code", &debug['S']);
   117  	flagcount("m", "debug preprocessor macros", &debug['m']);
   118  	flagstr("o", "file: set output file", &outfile);
   119  	flagstr("trimpath", "prefix: remove prefix from recorded source file paths", &ctxt->trimpath);
   120  
   121  	flagparse(&argc, &argv, usage);
   122  	ctxt->debugasm = debug['S'];
   123  
   124  	if(argc < 1)
   125  		usage();
   126  	if(argc > 1){
   127  		print("can't assemble multiple files\n");
   128  		errorexit();
   129  	}
   130  
   131  	if(assemble(argv[0]))
   132  		errorexit();
   133  	Bflush(&bstdout);
   134  	exits(0);
   135  }
   136  
   137  int
   138  assemble(char *file)
   139  {
   140  	char *ofile, *p;
   141  	int i, of;
   142  
   143  	ofile = alloc(strlen(file)+3); // +3 for .x\0 (x=thechar)
   144  	strcpy(ofile, file);
   145  	p = utfrrune(ofile, pathchar());
   146  	if(p) {
   147  		include[0] = ofile;
   148  		*p++ = 0;
   149  	} else
   150  		p = ofile;
   151  	if(outfile == 0) {
   152  		outfile = p;
   153  		if(outfile){
   154  			p = utfrrune(outfile, '.');
   155  			if(p)
   156  				if(p[1] == 's' && p[2] == 0)
   157  					p[0] = 0;
   158  			p = utfrune(outfile, 0);
   159  			p[0] = '.';
   160  			p[1] = thechar;
   161  			p[2] = 0;
   162  		} else
   163  			outfile = "/dev/null";
   164  	}
   165  
   166  	of = create(outfile, OWRITE, 0664);
   167  	if(of < 0) {
   168  		yyerror("%ca: cannot create %s", thechar, outfile);
   169  		errorexit();
   170  	}
   171  	Binit(&obuf, of, OWRITE);
   172  	Bprint(&obuf, "go object %s %s %s\n", getgoos(), getgoarch(), getgoversion());
   173  	Bprint(&obuf, "!\n");
   174  
   175  	for(pass = 1; pass <= 2; pass++) {
   176  		pinit(file);
   177  		for(i=0; i<nDlist; i++)
   178  			dodefine(Dlist[i]);
   179  		yyparse();
   180  		cclean();
   181  		if(nerrors)
   182  			return nerrors;
   183  	}
   184  
   185  	writeobj(ctxt, &obuf);
   186  	Bflush(&obuf);
   187  	return 0;
   188  }
   189  
   190  struct
   191  {
   192  	char	*name;
   193  	/*
   194  	 * type is the lexical type to return.  It dictates what kind of
   195  	 * operands 6a allows to follow it (in a.y) as the possible operand
   196  	 * types are handled by a grammar.  How do you know which LTYPE?
   197  	 * Either read a.y or think of an instruction that has the same
   198  	 * possible operands and look up what it takes.
   199  	 */
   200  	ushort	type;
   201  	ushort	value;
   202  } itab[] =
   203  {
   204  	"SP",		LSP,	D_AUTO,
   205  	"SB",		LSB,	D_EXTERN,
   206  	"FP",		LFP,	D_PARAM,
   207  	"PC",		LPC,	D_BRANCH,
   208  
   209  	"AL",		LBREG,	D_AL,
   210  	"CL",		LBREG,	D_CL,
   211  	"DL",		LBREG,	D_DL,
   212  	"BL",		LBREG,	D_BL,
   213  /*	"SPB",		LBREG,	D_SPB,	*/
   214  	"SIB",		LBREG,	D_SIB,
   215  	"DIB",		LBREG,	D_DIB,
   216  	"BPB",		LBREG,	D_BPB,
   217  	"R8B",		LBREG,	D_R8B,
   218  	"R9B",		LBREG,	D_R9B,
   219  	"R10B",		LBREG,	D_R10B,
   220  	"R11B",		LBREG,	D_R11B,
   221  	"R12B",		LBREG,	D_R12B,
   222  	"R13B",		LBREG,	D_R13B,
   223  	"R14B",		LBREG,	D_R14B,
   224  	"R15B",		LBREG,	D_R15B,
   225  
   226  	"AH",		LBREG,	D_AH,
   227  	"CH",		LBREG,	D_CH,
   228  	"DH",		LBREG,	D_DH,
   229  	"BH",		LBREG,	D_BH,
   230  
   231  	"AX",		LLREG,	D_AX,
   232  	"CX",		LLREG,	D_CX,
   233  	"DX",		LLREG,	D_DX,
   234  	"BX",		LLREG,	D_BX,
   235  /*	"SP",		LLREG,	D_SP,	*/
   236  	"BP",		LLREG,	D_BP,
   237  	"SI",		LLREG,	D_SI,
   238  	"DI",		LLREG,	D_DI,
   239  	"R8",		LLREG,	D_R8,
   240  	"R9",		LLREG,	D_R9,
   241  	"R10",		LLREG,	D_R10,
   242  	"R11",		LLREG,	D_R11,
   243  	"R12",		LLREG,	D_R12,
   244  	"R13",		LLREG,	D_R13,
   245  	"R14",		LLREG,	D_R14,
   246  	"R15",		LLREG,	D_R15,
   247  
   248  	"RARG",		LLREG,	REGARG,
   249  
   250  	"F0",		LFREG,	D_F0+0,
   251  	"F1",		LFREG,	D_F0+1,
   252  	"F2",		LFREG,	D_F0+2,
   253  	"F3",		LFREG,	D_F0+3,
   254  	"F4",		LFREG,	D_F0+4,
   255  	"F5",		LFREG,	D_F0+5,
   256  	"F6",		LFREG,	D_F0+6,
   257  	"F7",		LFREG,	D_F0+7,
   258  
   259  	"M0",		LMREG,	D_M0+0,
   260  	"M1",		LMREG,	D_M0+1,
   261  	"M2",		LMREG,	D_M0+2,
   262  	"M3",		LMREG,	D_M0+3,
   263  	"M4",		LMREG,	D_M0+4,
   264  	"M5",		LMREG,	D_M0+5,
   265  	"M6",		LMREG,	D_M0+6,
   266  	"M7",		LMREG,	D_M0+7,
   267  
   268  	"X0",		LXREG,	D_X0+0,
   269  	"X1",		LXREG,	D_X0+1,
   270  	"X2",		LXREG,	D_X0+2,
   271  	"X3",		LXREG,	D_X0+3,
   272  	"X4",		LXREG,	D_X0+4,
   273  	"X5",		LXREG,	D_X0+5,
   274  	"X6",		LXREG,	D_X0+6,
   275  	"X7",		LXREG,	D_X0+7,
   276  	"X8",		LXREG,	D_X0+8,
   277  	"X9",		LXREG,	D_X0+9,
   278  	"X10",		LXREG,	D_X0+10,
   279  	"X11",		LXREG,	D_X0+11,
   280  	"X12",		LXREG,	D_X0+12,
   281  	"X13",		LXREG,	D_X0+13,
   282  	"X14",		LXREG,	D_X0+14,
   283  	"X15",		LXREG,	D_X0+15,
   284  
   285  	"CS",		LSREG,	D_CS,
   286  	"SS",		LSREG,	D_SS,
   287  	"DS",		LSREG,	D_DS,
   288  	"ES",		LSREG,	D_ES,
   289  	"FS",		LSREG,	D_FS,
   290  	"GS",		LSREG,	D_GS,
   291  
   292  	"GDTR",		LBREG,	D_GDTR,
   293  	"IDTR",		LBREG,	D_IDTR,
   294  	"LDTR",		LBREG,	D_LDTR,
   295  	"MSW",		LBREG,	D_MSW,
   296  	"TASK",		LBREG,	D_TASK,
   297  
   298  	"CR0",		LBREG,	D_CR+0,
   299  	"CR1",		LBREG,	D_CR+1,
   300  	"CR2",		LBREG,	D_CR+2,
   301  	"CR3",		LBREG,	D_CR+3,
   302  	"CR4",		LBREG,	D_CR+4,
   303  	"CR5",		LBREG,	D_CR+5,
   304  	"CR6",		LBREG,	D_CR+6,
   305  	"CR7",		LBREG,	D_CR+7,
   306  	"CR8",		LBREG,	D_CR+8,
   307  	"CR9",		LBREG,	D_CR+9,
   308  	"CR10",		LBREG,	D_CR+10,
   309  	"CR11",		LBREG,	D_CR+11,
   310  	"CR12",		LBREG,	D_CR+12,
   311  	"CR13",		LBREG,	D_CR+13,
   312  	"CR14",		LBREG,	D_CR+14,
   313  	"CR15",		LBREG,	D_CR+15,
   314  
   315  	"DR0",		LBREG,	D_DR+0,
   316  	"DR1",		LBREG,	D_DR+1,
   317  	"DR2",		LBREG,	D_DR+2,
   318  	"DR3",		LBREG,	D_DR+3,
   319  	"DR4",		LBREG,	D_DR+4,
   320  	"DR5",		LBREG,	D_DR+5,
   321  	"DR6",		LBREG,	D_DR+6,
   322  	"DR7",		LBREG,	D_DR+7,
   323  
   324  	"TR0",		LBREG,	D_TR+0,
   325  	"TR1",		LBREG,	D_TR+1,
   326  	"TR2",		LBREG,	D_TR+2,
   327  	"TR3",		LBREG,	D_TR+3,
   328  	"TR4",		LBREG,	D_TR+4,
   329  	"TR5",		LBREG,	D_TR+5,
   330  	"TR6",		LBREG,	D_TR+6,
   331  	"TR7",		LBREG,	D_TR+7,
   332  	"TLS",		LSREG,	D_TLS,
   333  
   334  	"AAA",		LTYPE0,	AAAA,
   335  	"AAD",		LTYPE0,	AAAD,
   336  	"AAM",		LTYPE0,	AAAM,
   337  	"AAS",		LTYPE0,	AAAS,
   338  	"ADCB",		LTYPE3,	AADCB,
   339  	"ADCL",		LTYPE3,	AADCL,
   340  	"ADCQ",		LTYPE3,	AADCQ,
   341  	"ADCW",		LTYPE3,	AADCW,
   342  	"ADDB",		LTYPE3,	AADDB,
   343  	"ADDL",		LTYPE3,	AADDL,
   344  	"ADDQ",		LTYPE3,	AADDQ,
   345  	"ADDW",		LTYPE3,	AADDW,
   346  	"ADJSP",	LTYPE2,	AADJSP,
   347  	"ANDB",		LTYPE3,	AANDB,
   348  	"ANDL",		LTYPE3,	AANDL,
   349  	"ANDQ",		LTYPE3,	AANDQ,
   350  	"ANDW",		LTYPE3,	AANDW,
   351  	"ARPL",		LTYPE3,	AARPL,
   352  	"BOUNDL",	LTYPE3,	ABOUNDL,
   353  	"BOUNDW",	LTYPE3,	ABOUNDW,
   354  	"BSFL",		LTYPE3,	ABSFL,
   355  	"BSFQ",		LTYPE3,	ABSFQ,
   356  	"BSFW",		LTYPE3,	ABSFW,
   357  	"BSRL",		LTYPE3,	ABSRL,
   358  	"BSRQ",		LTYPE3,	ABSRQ,
   359  	"BSRW",		LTYPE3,	ABSRW,
   360  	"BSWAPL",	LTYPE1,	ABSWAPL,
   361  	"BSWAPQ",	LTYPE1,	ABSWAPQ,
   362  	"BTCL",		LTYPE3,	ABTCL,
   363  	"BTCQ",		LTYPE3,	ABTCQ,
   364  	"BTCW",		LTYPE3,	ABTCW,
   365  	"BTL",		LTYPE3,	ABTL,
   366  	"BTQ",		LTYPE3,	ABTQ,
   367  	"BTRL",		LTYPE3,	ABTRL,
   368  	"BTRQ",		LTYPE3,	ABTRQ,
   369  	"BTRW",		LTYPE3,	ABTRW,
   370  	"BTSL",		LTYPE3,	ABTSL,
   371  	"BTSQ",		LTYPE3,	ABTSQ,
   372  	"BTSW",		LTYPE3,	ABTSW,
   373  	"BTW",		LTYPE3,	ABTW,
   374  	"BYTE",		LTYPE2,	ABYTE,
   375  	"CALL",		LTYPEC,	ACALL,
   376  	"CLC",		LTYPE0,	ACLC,
   377  	"CLD",		LTYPE0,	ACLD,
   378  	"CLI",		LTYPE0,	ACLI,
   379  	"CLTS",		LTYPE0,	ACLTS,
   380  	"CMC",		LTYPE0,	ACMC,
   381  	"CMPB",		LTYPE4,	ACMPB,
   382  	"CMPL",		LTYPE4,	ACMPL,
   383  	"CMPQ",		LTYPE4,	ACMPQ,
   384  	"CMPW",		LTYPE4,	ACMPW,
   385  	"CMPSB",	LTYPE0,	ACMPSB,
   386  	"CMPSL",	LTYPE0,	ACMPSL,
   387  	"CMPSQ",	LTYPE0,	ACMPSQ,
   388  	"CMPSW",	LTYPE0,	ACMPSW,
   389  	"CMPXCHG8B",	LTYPE1,	ACMPXCHG8B,
   390  	"CMPXCHGB",	LTYPE3,	ACMPXCHGB,	/* LTYPE3? */
   391  	"CMPXCHGL",	LTYPE3,	ACMPXCHGL,
   392  	"CMPXCHGQ",	LTYPE3,	ACMPXCHGQ,
   393  	"CMPXCHGW",	LTYPE3,	ACMPXCHGW,
   394  	"CPUID",	LTYPE0,	ACPUID,
   395  	"DAA",		LTYPE0,	ADAA,
   396  	"DAS",		LTYPE0,	ADAS,
   397  	"DATA",		LTYPED,	ADATA,
   398  	"DECB",		LTYPE1,	ADECB,
   399  	"DECL",		LTYPE1,	ADECL,
   400  	"DECQ",		LTYPE1,	ADECQ,
   401  	"DECW",		LTYPE1,	ADECW,
   402  	"DIVB",		LTYPE2,	ADIVB,
   403  	"DIVL",		LTYPE2,	ADIVL,
   404  	"DIVQ",		LTYPE2,	ADIVQ,
   405  	"DIVW",		LTYPE2,	ADIVW,
   406  	"EMMS",		LTYPE0,	AEMMS,
   407  	"END",		LTYPE0,	AEND,
   408  	"ENTER",	LTYPE2,	AENTER,
   409  	"GLOBL",	LTYPEG,	AGLOBL,
   410  	"HLT",		LTYPE0,	AHLT,
   411  	"IDIVB",	LTYPE2,	AIDIVB,
   412  	"IDIVL",	LTYPE2,	AIDIVL,
   413  	"IDIVQ",	LTYPE2,	AIDIVQ,
   414  	"IDIVW",	LTYPE2,	AIDIVW,
   415  	"IMULB",	LTYPEI,	AIMULB,
   416  	"IMULL",	LTYPEI,	AIMULL,
   417  	"IMULQ",	LTYPEI,	AIMULQ,
   418  	"IMUL3Q",	LTYPEX,	AIMUL3Q,
   419  	"IMULW",	LTYPEI,	AIMULW,
   420  	"INB",		LTYPE0,	AINB,
   421  	"INL",		LTYPE0,	AINL,
   422  	"INW",		LTYPE0,	AINW,
   423  	"INCB",		LTYPE1,	AINCB,
   424  	"INCL",		LTYPE1,	AINCL,
   425  	"INCQ",		LTYPE1,	AINCQ,
   426  	"INCW",		LTYPE1,	AINCW,
   427  	"INSB",		LTYPE0,	AINSB,
   428  	"INSL",		LTYPE0,	AINSL,
   429  	"INSW",		LTYPE0,	AINSW,
   430  	"INT",		LTYPE2,	AINT,
   431  	"INTO",		LTYPE0,	AINTO,
   432  	"INVD",		LTYPE0,	AINVD,
   433  	"INVLPG",	LTYPE2,	AINVLPG,
   434  	"IRETL",	LTYPE0,	AIRETL,
   435  	"IRETQ",	LTYPE0,	AIRETQ,
   436  	"IRETW",	LTYPE0,	AIRETW,
   437  
   438  	"JOS",		LTYPER,	AJOS,
   439  	"JO",		LTYPER,	AJOS,	/* alternate */
   440  	"JOC",		LTYPER,	AJOC,
   441  	"JNO",		LTYPER,	AJOC,	/* alternate */
   442  	"JCS",		LTYPER,	AJCS,
   443  	"JB",		LTYPER,	AJCS,	/* alternate */
   444  	"JC",		LTYPER,	AJCS,	/* alternate */
   445  	"JNAE",		LTYPER,	AJCS,	/* alternate */
   446  	"JLO",		LTYPER,	AJCS,	/* alternate */
   447  	"JCC",		LTYPER,	AJCC,
   448  	"JAE",		LTYPER,	AJCC,	/* alternate */
   449  	"JNB",		LTYPER,	AJCC,	/* alternate */
   450  	"JNC",		LTYPER,	AJCC,	/* alternate */
   451  	"JHS",		LTYPER,	AJCC,	/* alternate */
   452  	"JEQ",		LTYPER,	AJEQ,
   453  	"JE",		LTYPER,	AJEQ,	/* alternate */
   454  	"JZ",		LTYPER,	AJEQ,	/* alternate */
   455  	"JNE",		LTYPER,	AJNE,
   456  	"JNZ",		LTYPER,	AJNE,	/* alternate */
   457  	"JLS",		LTYPER,	AJLS,
   458  	"JBE",		LTYPER,	AJLS,	/* alternate */
   459  	"JNA",		LTYPER,	AJLS,	/* alternate */
   460  	"JHI",		LTYPER,	AJHI,
   461  	"JA",		LTYPER,	AJHI,	/* alternate */
   462  	"JNBE",		LTYPER,	AJHI,	/* alternate */
   463  	"JMI",		LTYPER,	AJMI,
   464  	"JS",		LTYPER,	AJMI,	/* alternate */
   465  	"JPL",		LTYPER,	AJPL,
   466  	"JNS",		LTYPER,	AJPL,	/* alternate */
   467  	"JPS",		LTYPER,	AJPS,
   468  	"JP",		LTYPER,	AJPS,	/* alternate */
   469  	"JPE",		LTYPER,	AJPS,	/* alternate */
   470  	"JPC",		LTYPER,	AJPC,
   471  	"JNP",		LTYPER,	AJPC,	/* alternate */
   472  	"JPO",		LTYPER,	AJPC,	/* alternate */
   473  	"JLT",		LTYPER,	AJLT,
   474  	"JL",		LTYPER,	AJLT,	/* alternate */
   475  	"JNGE",		LTYPER,	AJLT,	/* alternate */
   476  	"JGE",		LTYPER,	AJGE,
   477  	"JNL",		LTYPER,	AJGE,	/* alternate */
   478  	"JLE",		LTYPER,	AJLE,
   479  	"JNG",		LTYPER,	AJLE,	/* alternate */
   480  	"JGT",		LTYPER,	AJGT,
   481  	"JG",		LTYPER,	AJGT,	/* alternate */
   482  	"JNLE",		LTYPER,	AJGT,	/* alternate */
   483  	"JCXZL",	LTYPER,	AJCXZL,
   484  	"JCXZQ",	LTYPER,	AJCXZQ,
   485  	"JMP",		LTYPEC,	AJMP,
   486  	"LAHF",		LTYPE0,	ALAHF,
   487  	"LARL",		LTYPE3,	ALARL,
   488  	"LARW",		LTYPE3,	ALARW,
   489  	"LEAL",		LTYPE3,	ALEAL,
   490  	"LEAQ",		LTYPE3,	ALEAQ,
   491  	"LEAW",		LTYPE3,	ALEAW,
   492  	"LEAVEL",	LTYPE0,	ALEAVEL,
   493  	"LEAVEQ",	LTYPE0,	ALEAVEQ,
   494  	"LEAVEW",	LTYPE0,	ALEAVEW,
   495  	"LFENCE",	LTYPE0,	ALFENCE,
   496  	"LOCK",		LTYPE0,	ALOCK,
   497  	"LODSB",	LTYPE0,	ALODSB,
   498  	"LODSL",	LTYPE0,	ALODSL,
   499  	"LODSQ",	LTYPE0,	ALODSQ,
   500  	"LODSW",	LTYPE0,	ALODSW,
   501  	"LONG",		LTYPE2,	ALONG,
   502  	"LOOP",		LTYPER,	ALOOP,
   503  	"LOOPEQ",	LTYPER,	ALOOPEQ,
   504  	"LOOPNE",	LTYPER,	ALOOPNE,
   505  	"LSLL",		LTYPE3,	ALSLL,
   506  	"LSLW",		LTYPE3,	ALSLW,
   507  	"MFENCE",	LTYPE0,	AMFENCE,
   508  	"MODE",		LTYPE2,	AMODE,
   509  	"MOVB",		LTYPE3,	AMOVB,
   510  	"MOVL",		LTYPEM,	AMOVL,
   511  	"MOVQ",		LTYPEM,	AMOVQ,
   512  	"MOVW",		LTYPEM,	AMOVW,
   513  	"MOVBLSX",	LTYPE3, AMOVBLSX,
   514  	"MOVBLZX",	LTYPE3, AMOVBLZX,
   515  	"MOVBQSX",	LTYPE3,	AMOVBQSX,
   516  	"MOVBQZX",	LTYPE3,	AMOVBQZX,
   517  	"MOVBWSX",	LTYPE3, AMOVBWSX,
   518  	"MOVBWZX",	LTYPE3, AMOVBWZX,
   519  	"MOVLQSX",	LTYPE3, AMOVLQSX,
   520  	"MOVLQZX",	LTYPE3, AMOVLQZX,
   521  	"MOVNTIL",	LTYPE3,	AMOVNTIL,
   522  	"MOVNTIQ",	LTYPE3,	AMOVNTIQ,
   523  	"MOVQL",	LTYPE3, AMOVQL,
   524  	"MOVWLSX",	LTYPE3, AMOVWLSX,
   525  	"MOVWLZX",	LTYPE3, AMOVWLZX,
   526  	"MOVWQSX",	LTYPE3,	AMOVWQSX,
   527  	"MOVWQZX",	LTYPE3,	AMOVWQZX,
   528  	"MOVSB",	LTYPE0,	AMOVSB,
   529  	"MOVSL",	LTYPE0,	AMOVSL,
   530  	"MOVSQ",	LTYPE0,	AMOVSQ,
   531  	"MOVSW",	LTYPE0,	AMOVSW,
   532  	"MULB",		LTYPE2,	AMULB,
   533  	"MULL",		LTYPE2,	AMULL,
   534  	"MULQ",		LTYPE2,	AMULQ,
   535  	"MULW",		LTYPE2,	AMULW,
   536  	"NEGB",		LTYPE1,	ANEGB,
   537  	"NEGL",		LTYPE1,	ANEGL,
   538  	"NEGQ",		LTYPE1,	ANEGQ,
   539  	"NEGW",		LTYPE1,	ANEGW,
   540  	"NOP",		LTYPEN,	ANOP,
   541  	"NOTB",		LTYPE1,	ANOTB,
   542  	"NOTL",		LTYPE1,	ANOTL,
   543  	"NOTQ",		LTYPE1,	ANOTQ,
   544  	"NOTW",		LTYPE1,	ANOTW,
   545  	"ORB",		LTYPE3,	AORB,
   546  	"ORL",		LTYPE3,	AORL,
   547  	"ORQ",		LTYPE3,	AORQ,
   548  	"ORW",		LTYPE3,	AORW,
   549  	"OUTB",		LTYPE0,	AOUTB,
   550  	"OUTL",		LTYPE0,	AOUTL,
   551  	"OUTW",		LTYPE0,	AOUTW,
   552  	"OUTSB",	LTYPE0,	AOUTSB,
   553  	"OUTSL",	LTYPE0,	AOUTSL,
   554  	"OUTSW",	LTYPE0,	AOUTSW,
   555  	"PAUSE",	LTYPEN,	APAUSE,
   556  	"POPAL",	LTYPE0,	APOPAL,
   557  	"POPAW",	LTYPE0,	APOPAW,
   558  	"POPFL",	LTYPE0,	APOPFL,
   559  	"POPFQ",	LTYPE0,	APOPFQ,
   560  	"POPFW",	LTYPE0,	APOPFW,
   561  	"POPL",		LTYPE1,	APOPL,
   562  	"POPQ",		LTYPE1,	APOPQ,
   563  	"POPW",		LTYPE1,	APOPW,
   564  	"PUSHAL",	LTYPE0,	APUSHAL,
   565  	"PUSHAW",	LTYPE0,	APUSHAW,
   566  	"PUSHFL",	LTYPE0,	APUSHFL,
   567  	"PUSHFQ",	LTYPE0,	APUSHFQ,
   568  	"PUSHFW",	LTYPE0,	APUSHFW,
   569  	"PUSHL",	LTYPE2,	APUSHL,
   570  	"PUSHQ",	LTYPE2,	APUSHQ,
   571  	"PUSHW",	LTYPE2,	APUSHW,
   572  	"RCLB",		LTYPE3,	ARCLB,
   573  	"RCLL",		LTYPE3,	ARCLL,
   574  	"RCLQ",		LTYPE3,	ARCLQ,
   575  	"RCLW",		LTYPE3,	ARCLW,
   576  	"RCRB",		LTYPE3,	ARCRB,
   577  	"RCRL",		LTYPE3,	ARCRL,
   578  	"RCRQ",		LTYPE3,	ARCRQ,
   579  	"RCRW",		LTYPE3,	ARCRW,
   580  	"RDMSR",	LTYPE0,	ARDMSR,
   581  	"RDPMC",	LTYPE0,	ARDPMC,
   582  	"RDTSC",	LTYPE0,	ARDTSC,
   583  	"REP",		LTYPE0,	AREP,
   584  	"REPN",		LTYPE0,	AREPN,
   585  	"RET",		LTYPE0,	ARET,
   586  	"RETFL",	LTYPERT,ARETFL,
   587  	"RETFW",	LTYPERT,ARETFW,
   588  	"RETFQ",	LTYPERT,ARETFQ,
   589  	"ROLB",		LTYPE3,	AROLB,
   590  	"ROLL",		LTYPE3,	AROLL,
   591  	"ROLQ",		LTYPE3,	AROLQ,
   592  	"ROLW",		LTYPE3,	AROLW,
   593  	"RORB",		LTYPE3,	ARORB,
   594  	"RORL",		LTYPE3,	ARORL,
   595  	"RORQ",		LTYPE3,	ARORQ,
   596  	"RORW",		LTYPE3,	ARORW,
   597  	"RSM",		LTYPE0,	ARSM,
   598  	"SAHF",		LTYPE0,	ASAHF,
   599  	"SALB",		LTYPE3,	ASALB,
   600  	"SALL",		LTYPE3,	ASALL,
   601  	"SALQ",		LTYPE3,	ASALQ,
   602  	"SALW",		LTYPE3,	ASALW,
   603  	"SARB",		LTYPE3,	ASARB,
   604  	"SARL",		LTYPE3,	ASARL,
   605  	"SARQ",		LTYPE3,	ASARQ,
   606  	"SARW",		LTYPE3,	ASARW,
   607  	"SBBB",		LTYPE3,	ASBBB,
   608  	"SBBL",		LTYPE3,	ASBBL,
   609  	"SBBQ",		LTYPE3,	ASBBQ,
   610  	"SBBW",		LTYPE3,	ASBBW,
   611  	"SCASB",	LTYPE0,	ASCASB,
   612  	"SCASL",	LTYPE0,	ASCASL,
   613  	"SCASQ",	LTYPE0,	ASCASQ,
   614  	"SCASW",	LTYPE0,	ASCASW,
   615  	"SETCC",	LTYPE1,	ASETCC,
   616  	"SETCS",	LTYPE1,	ASETCS,
   617  	"SETEQ",	LTYPE1,	ASETEQ,
   618  	"SETGE",	LTYPE1,	ASETGE,
   619  	"SETGT",	LTYPE1,	ASETGT,
   620  	"SETHI",	LTYPE1,	ASETHI,
   621  	"SETLE",	LTYPE1,	ASETLE,
   622  	"SETLS",	LTYPE1,	ASETLS,
   623  	"SETLT",	LTYPE1,	ASETLT,
   624  	"SETMI",	LTYPE1,	ASETMI,
   625  	"SETNE",	LTYPE1,	ASETNE,
   626  	"SETOC",	LTYPE1,	ASETOC,
   627  	"SETOS",	LTYPE1,	ASETOS,
   628  	"SETPC",	LTYPE1,	ASETPC,
   629  	"SETPL",	LTYPE1,	ASETPL,
   630  	"SETPS",	LTYPE1,	ASETPS,
   631  	"SFENCE",	LTYPE0,	ASFENCE,
   632  	"CDQ",		LTYPE0,	ACDQ,
   633  	"CWD",		LTYPE0,	ACWD,
   634  	"CQO",		LTYPE0,	ACQO,
   635  	"SHLB",		LTYPE3,	ASHLB,
   636  	"SHLL",		LTYPES,	ASHLL,
   637  	"SHLQ",		LTYPES,	ASHLQ,
   638  	"SHLW",		LTYPES,	ASHLW,
   639  	"SHRB",		LTYPE3,	ASHRB,
   640  	"SHRL",		LTYPES,	ASHRL,
   641  	"SHRQ",		LTYPES,	ASHRQ,
   642  	"SHRW",		LTYPES,	ASHRW,
   643  	"STC",		LTYPE0,	ASTC,
   644  	"STD",		LTYPE0,	ASTD,
   645  	"STI",		LTYPE0,	ASTI,
   646  	"STOSB",	LTYPE0,	ASTOSB,
   647  	"STOSL",	LTYPE0,	ASTOSL,
   648  	"STOSQ",	LTYPE0,	ASTOSQ,
   649  	"STOSW",	LTYPE0,	ASTOSW,
   650  	"SUBB",		LTYPE3,	ASUBB,
   651  	"SUBL",		LTYPE3,	ASUBL,
   652  	"SUBQ",		LTYPE3,	ASUBQ,
   653  	"SUBW",		LTYPE3,	ASUBW,
   654  	"SYSCALL",	LTYPE0,	ASYSCALL,
   655  	"SYSRET",	LTYPE0,	ASYSRET,
   656  	"SWAPGS",	LTYPE0,	ASWAPGS,
   657  	"TESTB",	LTYPE3,	ATESTB,
   658  	"TESTL",	LTYPE3,	ATESTL,
   659  	"TESTQ",	LTYPE3,	ATESTQ,
   660  	"TESTW",	LTYPE3,	ATESTW,
   661  	"TEXT",		LTYPET,	ATEXT,
   662  	"VERR",		LTYPE2,	AVERR,
   663  	"VERW",		LTYPE2,	AVERW,
   664  	"QUAD",		LTYPE2,	AQUAD,
   665  	"WAIT",		LTYPE0,	AWAIT,
   666  	"WBINVD",	LTYPE0,	AWBINVD,
   667  	"WRMSR",	LTYPE0,	AWRMSR,
   668  	"WORD",		LTYPE2,	AWORD,
   669  	"XADDB",	LTYPE3,	AXADDB,
   670  	"XADDL",	LTYPE3,	AXADDL,
   671  	"XADDQ",	LTYPE3,	AXADDQ,
   672  	"XADDW",	LTYPE3,	AXADDW,
   673  	"XCHGB",	LTYPE3,	AXCHGB,
   674  	"XCHGL",	LTYPE3,	AXCHGL,
   675  	"XCHGQ",	LTYPE3,	AXCHGQ,
   676  	"XCHGW",	LTYPE3,	AXCHGW,
   677  	"XLAT",		LTYPE2,	AXLAT,
   678  	"XORB",		LTYPE3,	AXORB,
   679  	"XORL",		LTYPE3,	AXORL,
   680  	"XORQ",		LTYPE3,	AXORQ,
   681  	"XORW",		LTYPE3,	AXORW,
   682  
   683  	"CMOVLCC",	LTYPE3,	ACMOVLCC,
   684  	"CMOVLCS",	LTYPE3,	ACMOVLCS,
   685  	"CMOVLEQ",	LTYPE3,	ACMOVLEQ,
   686  	"CMOVLGE",	LTYPE3,	ACMOVLGE,
   687  	"CMOVLGT",	LTYPE3,	ACMOVLGT,
   688  	"CMOVLHI",	LTYPE3,	ACMOVLHI,
   689  	"CMOVLLE",	LTYPE3,	ACMOVLLE,
   690  	"CMOVLLS",	LTYPE3,	ACMOVLLS,
   691  	"CMOVLLT",	LTYPE3,	ACMOVLLT,
   692  	"CMOVLMI",	LTYPE3,	ACMOVLMI,
   693  	"CMOVLNE",	LTYPE3,	ACMOVLNE,
   694  	"CMOVLOC",	LTYPE3,	ACMOVLOC,
   695  	"CMOVLOS",	LTYPE3,	ACMOVLOS,
   696  	"CMOVLPC",	LTYPE3,	ACMOVLPC,
   697  	"CMOVLPL",	LTYPE3,	ACMOVLPL,
   698  	"CMOVLPS",	LTYPE3,	ACMOVLPS,
   699  	"CMOVQCC",	LTYPE3,	ACMOVQCC,
   700  	"CMOVQCS",	LTYPE3,	ACMOVQCS,
   701  	"CMOVQEQ",	LTYPE3,	ACMOVQEQ,
   702  	"CMOVQGE",	LTYPE3,	ACMOVQGE,
   703  	"CMOVQGT",	LTYPE3,	ACMOVQGT,
   704  	"CMOVQHI",	LTYPE3,	ACMOVQHI,
   705  	"CMOVQLE",	LTYPE3,	ACMOVQLE,
   706  	"CMOVQLS",	LTYPE3,	ACMOVQLS,
   707  	"CMOVQLT",	LTYPE3,	ACMOVQLT,
   708  	"CMOVQMI",	LTYPE3,	ACMOVQMI,
   709  	"CMOVQNE",	LTYPE3,	ACMOVQNE,
   710  	"CMOVQOC",	LTYPE3,	ACMOVQOC,
   711  	"CMOVQOS",	LTYPE3,	ACMOVQOS,
   712  	"CMOVQPC",	LTYPE3,	ACMOVQPC,
   713  	"CMOVQPL",	LTYPE3,	ACMOVQPL,
   714  	"CMOVQPS",	LTYPE3,	ACMOVQPS,
   715  	"CMOVWCC",	LTYPE3,	ACMOVWCC,
   716  	"CMOVWCS",	LTYPE3,	ACMOVWCS,
   717  	"CMOVWEQ",	LTYPE3,	ACMOVWEQ,
   718  	"CMOVWGE",	LTYPE3,	ACMOVWGE,
   719  	"CMOVWGT",	LTYPE3,	ACMOVWGT,
   720  	"CMOVWHI",	LTYPE3,	ACMOVWHI,
   721  	"CMOVWLE",	LTYPE3,	ACMOVWLE,
   722  	"CMOVWLS",	LTYPE3,	ACMOVWLS,
   723  	"CMOVWLT",	LTYPE3,	ACMOVWLT,
   724  	"CMOVWMI",	LTYPE3,	ACMOVWMI,
   725  	"CMOVWNE",	LTYPE3,	ACMOVWNE,
   726  	"CMOVWOC",	LTYPE3,	ACMOVWOC,
   727  	"CMOVWOS",	LTYPE3,	ACMOVWOS,
   728  	"CMOVWPC",	LTYPE3,	ACMOVWPC,
   729  	"CMOVWPL",	LTYPE3,	ACMOVWPL,
   730  	"CMOVWPS",	LTYPE3,	ACMOVWPS,
   731  
   732  	"FMOVB",	LTYPE3, AFMOVB,
   733  	"FMOVBP",	LTYPE3, AFMOVBP,
   734  	"FMOVD",	LTYPE3, AFMOVD,
   735  	"FMOVDP",	LTYPE3, AFMOVDP,
   736  	"FMOVF",	LTYPE3, AFMOVF,
   737  	"FMOVFP",	LTYPE3, AFMOVFP,
   738  	"FMOVL",	LTYPE3, AFMOVL,
   739  	"FMOVLP",	LTYPE3, AFMOVLP,
   740  	"FMOVV",	LTYPE3, AFMOVV,
   741  	"FMOVVP",	LTYPE3, AFMOVVP,
   742  	"FMOVW",	LTYPE3, AFMOVW,
   743  	"FMOVWP",	LTYPE3, AFMOVWP,
   744  	"FMOVX",	LTYPE3, AFMOVX,
   745  	"FMOVXP",	LTYPE3, AFMOVXP,
   746  	"FCOMB",	LTYPE3, AFCOMB,
   747  	"FCOMBP",	LTYPE3, AFCOMBP,
   748  	"FCOMD",	LTYPE3, AFCOMD,
   749  	"FCOMDP",	LTYPE3, AFCOMDP,
   750  	"FCOMDPP",	LTYPE3, AFCOMDPP,
   751  	"FCOMF",	LTYPE3, AFCOMF,
   752  	"FCOMFP",	LTYPE3, AFCOMFP,
   753  	"FCOML",	LTYPE3, AFCOML,
   754  	"FCOMLP",	LTYPE3, AFCOMLP,
   755  	"FCOMW",	LTYPE3, AFCOMW,
   756  	"FCOMWP",	LTYPE3, AFCOMWP,
   757  	"FUCOM",	LTYPE3, AFUCOM,
   758  	"FUCOMP",	LTYPE3, AFUCOMP,
   759  	"FUCOMPP",	LTYPE3, AFUCOMPP,
   760  	"FADDW",	LTYPE3, AFADDW,
   761  	"FADDL",	LTYPE3, AFADDL,
   762  	"FADDF",	LTYPE3, AFADDF,
   763  	"FADDD",	LTYPE3, AFADDD,
   764  	"FADDDP",	LTYPE3, AFADDDP,
   765  	"FSUBDP",	LTYPE3, AFSUBDP,
   766  	"FSUBW",	LTYPE3, AFSUBW,
   767  	"FSUBL",	LTYPE3, AFSUBL,
   768  	"FSUBF",	LTYPE3, AFSUBF,
   769  	"FSUBD",	LTYPE3, AFSUBD,
   770  	"FSUBRDP",	LTYPE3, AFSUBRDP,
   771  	"FSUBRW",	LTYPE3, AFSUBRW,
   772  	"FSUBRL",	LTYPE3, AFSUBRL,
   773  	"FSUBRF",	LTYPE3, AFSUBRF,
   774  	"FSUBRD",	LTYPE3, AFSUBRD,
   775  	"FMULDP",	LTYPE3, AFMULDP,
   776  	"FMULW",	LTYPE3, AFMULW,
   777  	"FMULL",	LTYPE3, AFMULL,
   778  	"FMULF",	LTYPE3, AFMULF,
   779  	"FMULD",	LTYPE3, AFMULD,
   780  	"FDIVDP",	LTYPE3, AFDIVDP,
   781  	"FDIVW",	LTYPE3, AFDIVW,
   782  	"FDIVL",	LTYPE3, AFDIVL,
   783  	"FDIVF",	LTYPE3, AFDIVF,
   784  	"FDIVD",	LTYPE3, AFDIVD,
   785  	"FDIVRDP",	LTYPE3, AFDIVRDP,
   786  	"FDIVRW",	LTYPE3, AFDIVRW,
   787  	"FDIVRL",	LTYPE3, AFDIVRL,
   788  	"FDIVRF",	LTYPE3, AFDIVRF,
   789  	"FDIVRD",	LTYPE3, AFDIVRD,
   790  	"FXCHD",	LTYPE3, AFXCHD,
   791  	"FFREE",	LTYPE1, AFFREE,
   792  	"FLDCW",	LTYPE2, AFLDCW,
   793  	"FLDENV",	LTYPE1, AFLDENV,
   794  	"FRSTOR",	LTYPE2, AFRSTOR,
   795  	"FSAVE",	LTYPE1, AFSAVE,
   796  	"FSTCW",	LTYPE1, AFSTCW,
   797  	"FSTENV",	LTYPE1, AFSTENV,
   798  	"FSTSW",	LTYPE1, AFSTSW,
   799  	"F2XM1",	LTYPE0, AF2XM1,
   800  	"FABS",		LTYPE0, AFABS,
   801  	"FCHS",		LTYPE0, AFCHS,
   802  	"FCLEX",	LTYPE0, AFCLEX,
   803  	"FCOS",		LTYPE0, AFCOS,
   804  	"FDECSTP",	LTYPE0, AFDECSTP,
   805  	"FINCSTP",	LTYPE0, AFINCSTP,
   806  	"FINIT",	LTYPE0, AFINIT,
   807  	"FLD1",		LTYPE0, AFLD1,
   808  	"FLDL2E",	LTYPE0, AFLDL2E,
   809  	"FLDL2T",	LTYPE0, AFLDL2T,
   810  	"FLDLG2",	LTYPE0, AFLDLG2,
   811  	"FLDLN2",	LTYPE0, AFLDLN2,
   812  	"FLDPI",	LTYPE0, AFLDPI,
   813  	"FLDZ",		LTYPE0, AFLDZ,
   814  	"FNOP",		LTYPE0, AFNOP,
   815  	"FPATAN",	LTYPE0, AFPATAN,
   816  	"FPREM",	LTYPE0, AFPREM,
   817  	"FPREM1",	LTYPE0, AFPREM1,
   818  	"FPTAN",	LTYPE0, AFPTAN,
   819  	"FRNDINT",	LTYPE0, AFRNDINT,
   820  	"FSCALE",	LTYPE0, AFSCALE,
   821  	"FSIN",		LTYPE0, AFSIN,
   822  	"FSINCOS",	LTYPE0, AFSINCOS,
   823  	"FSQRT",	LTYPE0, AFSQRT,
   824  	"FTST",		LTYPE0, AFTST,
   825  	"FXAM",		LTYPE0, AFXAM,
   826  	"FXTRACT",	LTYPE0, AFXTRACT,
   827  	"FYL2X",	LTYPE0, AFYL2X,
   828  	"FYL2XP1",	LTYPE0, AFYL2XP1,
   829  
   830  	"ADDPD",	LTYPE3,	AADDPD,
   831  	"ADDPS",	LTYPE3,	AADDPS,
   832  	"ADDSD",	LTYPE3,	AADDSD,
   833  	"ADDSS",	LTYPE3,	AADDSS,
   834  	"ANDNPD",	LTYPE3,	AANDNPD,
   835  	"ANDNPS",	LTYPE3,	AANDNPS,
   836  	"ANDPD",	LTYPE3,	AANDPD,
   837  	"ANDPS",	LTYPE3,	AANDPS,
   838  	"CMPPD",	LTYPEXC,ACMPPD,
   839  	"CMPPS",	LTYPEXC,ACMPPS,
   840  	"CMPSD",	LTYPEXC,ACMPSD,
   841  	"CMPSS",	LTYPEXC,ACMPSS,
   842  	"COMISD",	LTYPE3,	ACOMISD,
   843  	"COMISS",	LTYPE3,	ACOMISS,
   844  	"CVTPL2PD",	LTYPE3,	ACVTPL2PD,
   845  	"CVTPL2PS",	LTYPE3,	ACVTPL2PS,
   846  	"CVTPD2PL",	LTYPE3,	ACVTPD2PL,
   847  	"CVTPD2PS",	LTYPE3,	ACVTPD2PS,
   848  	"CVTPS2PL",	LTYPE3,	ACVTPS2PL,
   849  	"PF2IW",	LTYPE3,	APF2IW,
   850  	"PF2IL",	LTYPE3,	APF2IL,
   851  	"PF2ID",	LTYPE3,	APF2IL,	/* syn */
   852  	"PI2FL",	LTYPE3,	API2FL,
   853  	"PI2FD",	LTYPE3,	API2FL,	/* syn */
   854  	"PI2FW",	LTYPE3,	API2FW,
   855  	"CVTPS2PD",	LTYPE3,	ACVTPS2PD,
   856  	"CVTSD2SL",	LTYPE3,	ACVTSD2SL,
   857  	"CVTSD2SQ",	LTYPE3,	ACVTSD2SQ,
   858  	"CVTSD2SS",	LTYPE3,	ACVTSD2SS,
   859  	"CVTSL2SD",	LTYPE3,	ACVTSL2SD,
   860  	"CVTSQ2SD",	LTYPE3,	ACVTSQ2SD,
   861  	"CVTSL2SS",	LTYPE3,	ACVTSL2SS,
   862  	"CVTSQ2SS",	LTYPE3,	ACVTSQ2SS,
   863  	"CVTSS2SD",	LTYPE3,	ACVTSS2SD,
   864  	"CVTSS2SL",	LTYPE3,	ACVTSS2SL,
   865  	"CVTSS2SQ",	LTYPE3,	ACVTSS2SQ,
   866  	"CVTTPD2PL",	LTYPE3,	ACVTTPD2PL,
   867  	"CVTTPS2PL",	LTYPE3,	ACVTTPS2PL,
   868  	"CVTTSD2SL",	LTYPE3,	ACVTTSD2SL,
   869  	"CVTTSD2SQ",	LTYPE3,	ACVTTSD2SQ,
   870  	"CVTTSS2SL",	LTYPE3,	ACVTTSS2SL,
   871  	"CVTTSS2SQ",	LTYPE3,	ACVTTSS2SQ,
   872  	"DIVPD",	LTYPE3,	ADIVPD,
   873  	"DIVPS",	LTYPE3,	ADIVPS,
   874  	"DIVSD",	LTYPE3,	ADIVSD,
   875  	"DIVSS",	LTYPE3,	ADIVSS,
   876  	"FXRSTOR",	LTYPE2,	AFXRSTOR,
   877  	"FXRSTOR64",	LTYPE2,	AFXRSTOR64,
   878  	"FXSAVE",	LTYPE1,	AFXSAVE,
   879  	"FXSAVE64",	LTYPE1,	AFXSAVE64,
   880  	"LDMXCSR",	LTYPE2,	ALDMXCSR,
   881  	"MASKMOVOU",	LTYPE3,	AMASKMOVOU,
   882  	"MASKMOVDQU",	LTYPE3,	AMASKMOVOU,	/* syn */
   883  	"MASKMOVQ",	LTYPE3,	AMASKMOVQ,
   884  	"MAXPD",	LTYPE3,	AMAXPD,
   885  	"MAXPS",	LTYPE3,	AMAXPS,
   886  	"MAXSD",	LTYPE3,	AMAXSD,
   887  	"MAXSS",	LTYPE3,	AMAXSS,
   888  	"MINPD",	LTYPE3,	AMINPD,
   889  	"MINPS",	LTYPE3,	AMINPS,
   890  	"MINSD",	LTYPE3,	AMINSD,
   891  	"MINSS",	LTYPE3,	AMINSS,
   892  	"MOVAPD",	LTYPE3,	AMOVAPD,
   893  	"MOVAPS",	LTYPE3,	AMOVAPS,
   894  	"MOVD",		LTYPE3,	AMOVQ,	/* syn */
   895  	"MOVDQ2Q",	LTYPE3,	AMOVQ,	/* syn */
   896  	"MOVO",		LTYPE3,	AMOVO,
   897  	"MOVOA",	LTYPE3,	AMOVO,	/* syn */
   898  	"MOVOU",	LTYPE3,	AMOVOU,
   899  	"MOVHLPS",	LTYPE3,	AMOVHLPS,
   900  	"MOVHPD",	LTYPE3,	AMOVHPD,
   901  	"MOVHPS",	LTYPE3,	AMOVHPS,
   902  	"MOVLHPS",	LTYPE3,	AMOVLHPS,
   903  	"MOVLPD",	LTYPE3,	AMOVLPD,
   904  	"MOVLPS",	LTYPE3,	AMOVLPS,
   905  	"MOVMSKPD",	LTYPE3,	AMOVMSKPD,
   906  	"MOVMSKPS",	LTYPE3,	AMOVMSKPS,
   907  	"MOVNTO",	LTYPE3,	AMOVNTO,
   908  	"MOVNTDQ",	LTYPE3,	AMOVNTO,	/* syn */
   909  	"MOVNTPD",	LTYPE3,	AMOVNTPD,
   910  	"MOVNTPS",	LTYPE3,	AMOVNTPS,
   911  	"MOVNTQ",	LTYPE3,	AMOVNTQ,
   912  	"MOVQOZX",	LTYPE3,	AMOVQOZX,
   913  	"MOVSD",	LTYPE3,	AMOVSD,
   914  	"MOVSS",	LTYPE3,	AMOVSS,
   915  	"MOVUPD",	LTYPE3,	AMOVUPD,
   916  	"MOVUPS",	LTYPE3,	AMOVUPS,
   917  	"MULPD",	LTYPE3,	AMULPD,
   918  	"MULPS",	LTYPE3,	AMULPS,
   919  	"MULSD",	LTYPE3,	AMULSD,
   920  	"MULSS",	LTYPE3,	AMULSS,
   921  	"ORPD",		LTYPE3,	AORPD,
   922  	"ORPS",		LTYPE3,	AORPS,
   923  	"PACKSSLW",	LTYPE3,	APACKSSLW,
   924  	"PACKSSWB",	LTYPE3,	APACKSSWB,
   925  	"PACKUSWB",	LTYPE3,	APACKUSWB,
   926  	"PADDB",	LTYPE3,	APADDB,
   927  	"PADDL",	LTYPE3,	APADDL,
   928  	"PADDQ",	LTYPE3,	APADDQ,
   929  	"PADDSB",	LTYPE3,	APADDSB,
   930  	"PADDSW",	LTYPE3,	APADDSW,
   931  	"PADDUSB",	LTYPE3,	APADDUSB,
   932  	"PADDUSW",	LTYPE3,	APADDUSW,
   933  	"PADDW",	LTYPE3,	APADDW,
   934  	"PAND",		LTYPE3, APAND,
   935  	"PANDB",	LTYPE3,	APANDB,
   936  	"PANDL",	LTYPE3,	APANDL,
   937  	"PANDSB",	LTYPE3,	APANDSB,
   938  	"PANDSW",	LTYPE3,	APANDSW,
   939  	"PANDUSB",	LTYPE3,	APANDUSB,
   940  	"PANDUSW",	LTYPE3,	APANDUSW,
   941  	"PANDW",	LTYPE3,	APANDW,
   942  	"PANDN",	LTYPE3, APANDN,
   943  	"PAVGB",	LTYPE3,	APAVGB,
   944  	"PAVGW",	LTYPE3,	APAVGW,
   945  	"PCMPEQB",	LTYPE3,	APCMPEQB,
   946  	"PCMPEQL",	LTYPE3,	APCMPEQL,
   947  	"PCMPEQW",	LTYPE3,	APCMPEQW,
   948  	"PCMPGTB",	LTYPE3,	APCMPGTB,
   949  	"PCMPGTL",	LTYPE3,	APCMPGTL,	
   950  	"PCMPGTW",	LTYPE3,	APCMPGTW,
   951  	"PEXTRW",	LTYPEX,	APEXTRW,
   952  	"PINSRW",	LTYPEX,	APINSRW,
   953  	"PINSRD",	LTYPEX,	APINSRD,
   954  	"PINSRQ",	LTYPEX,	APINSRQ,
   955  	"PMADDWL",	LTYPE3,	APMADDWL,
   956  	"PMAXSW",	LTYPE3,	APMAXSW,
   957  	"PMAXUB",	LTYPE3,	APMAXUB,
   958  	"PMINSW",	LTYPE3,	APMINSW,
   959  	"PMINUB",	LTYPE3,	APMINUB,
   960  	"PMOVMSKB",	LTYPE3,	APMOVMSKB,
   961  	"PMULHRW",	LTYPE3,	APMULHRW,
   962  	"PMULHUW",	LTYPE3,	APMULHUW,
   963  	"PMULHW",	LTYPE3,	APMULHW,
   964  	"PMULLW",	LTYPE3,	APMULLW,
   965  	"PMULULQ",	LTYPE3,	APMULULQ,
   966  	"POR",		LTYPE3,	APOR,
   967  	"PSADBW",	LTYPE3,	APSADBW,
   968  	"PSHUFHW",	LTYPEX,	APSHUFHW,
   969  	"PSHUFL",	LTYPEX,	APSHUFL,
   970  	"PSHUFLW",	LTYPEX,	APSHUFLW,
   971  	"PSHUFW",	LTYPEX, APSHUFW,
   972  	"PSHUFB",	LTYPEM, APSHUFB,
   973  	"PSLLO",	LTYPE3,	APSLLO,
   974  	"PSLLDQ",	LTYPE3,	APSLLO,	/* syn */
   975  	"PSLLL",	LTYPE3,	APSLLL,
   976  	"PSLLQ",	LTYPE3,	APSLLQ,
   977  	"PSLLW",	LTYPE3,	APSLLW,
   978  	"PSRAL",	LTYPE3,	APSRAL,
   979  	"PSRAW",	LTYPE3,	APSRAW,
   980  	"PSRLO",	LTYPE3,	APSRLO,
   981  	"PSRLDQ",	LTYPE3,	APSRLO,	/* syn */
   982  	"PSRLL",	LTYPE3,	APSRLL,
   983  	"PSRLQ",	LTYPE3,	APSRLQ,
   984  	"PSRLW",	LTYPE3,	APSRLW,
   985  	"PSUBB",	LTYPE3,	APSUBB,
   986  	"PSUBL",	LTYPE3,	APSUBL,
   987  	"PSUBQ",	LTYPE3,	APSUBQ,
   988  	"PSUBSB",	LTYPE3,	APSUBSB,
   989  	"PSUBSW",	LTYPE3,	APSUBSW,
   990  	"PSUBUSB",	LTYPE3,	APSUBUSB,
   991  	"PSUBUSW",	LTYPE3,	APSUBUSW,
   992  	"PSUBW",	LTYPE3,	APSUBW,
   993  	"PUNPCKHBW",	LTYPE3,	APUNPCKHBW,
   994  	"PUNPCKHLQ",	LTYPE3,	APUNPCKHLQ,
   995  	"PUNPCKHQDQ",	LTYPE3,	APUNPCKHQDQ,
   996  	"PUNPCKHWL",	LTYPE3,	APUNPCKHWL,
   997  	"PUNPCKLBW",	LTYPE3,	APUNPCKLBW,
   998  	"PUNPCKLLQ",	LTYPE3,	APUNPCKLLQ,
   999  	"PUNPCKLQDQ",	LTYPE3,	APUNPCKLQDQ,
  1000  	"PUNPCKLWL",	LTYPE3,	APUNPCKLWL,
  1001  	"PXOR",		LTYPE3,	APXOR,
  1002  	"RCPPS",	LTYPE3,	ARCPPS,
  1003  	"RCPSS",	LTYPE3,	ARCPSS,
  1004  	"RSQRTPS",	LTYPE3,	ARSQRTPS,
  1005  	"RSQRTSS",	LTYPE3,	ARSQRTSS,
  1006  	"SHUFPD",	LTYPEX,	ASHUFPD,
  1007  	"SHUFPS",	LTYPEX,	ASHUFPS,
  1008  	"SQRTPD",	LTYPE3,	ASQRTPD,
  1009  	"SQRTPS",	LTYPE3,	ASQRTPS,
  1010  	"SQRTSD",	LTYPE3,	ASQRTSD,
  1011  	"SQRTSS",	LTYPE3,	ASQRTSS,
  1012  	"STMXCSR",	LTYPE1,	ASTMXCSR,
  1013  	"SUBPD",	LTYPE3,	ASUBPD,
  1014  	"SUBPS",	LTYPE3,	ASUBPS,
  1015  	"SUBSD",	LTYPE3,	ASUBSD,
  1016  	"SUBSS",	LTYPE3,	ASUBSS,
  1017  	"UCOMISD",	LTYPE3,	AUCOMISD,
  1018  	"UCOMISS",	LTYPE3,	AUCOMISS,
  1019  	"UNPCKHPD",	LTYPE3,	AUNPCKHPD,
  1020  	"UNPCKHPS",	LTYPE3,	AUNPCKHPS,
  1021  	"UNPCKLPD",	LTYPE3,	AUNPCKLPD,
  1022  	"UNPCKLPS",	LTYPE3,	AUNPCKLPS,
  1023  	"XORPD",	LTYPE3,	AXORPD,
  1024  	"XORPS",	LTYPE3,	AXORPS,
  1025  	"CRC32B",	LTYPE4, ACRC32B,
  1026  	"CRC32Q",	LTYPE4, ACRC32Q,
  1027  	"PREFETCHT0",		LTYPE2,	APREFETCHT0,
  1028  	"PREFETCHT1",		LTYPE2,	APREFETCHT1,
  1029  	"PREFETCHT2",		LTYPE2,	APREFETCHT2,
  1030  	"PREFETCHNTA",		LTYPE2,	APREFETCHNTA,
  1031  	"UNDEF",	LTYPE0,	AUNDEF,
  1032  	"AESENC",	LTYPE3,	AAESENC,
  1033  	"AESENCLAST",	LTYPE3, AAESENCLAST,
  1034  	"AESDEC",	LTYPE3, AAESDEC,
  1035  	"AESDECLAST",	LTYPE3, AAESDECLAST,
  1036  	"AESIMC",	LTYPE3, AAESIMC,
  1037  	"AESKEYGENASSIST", LTYPEX, AAESKEYGENASSIST,
  1038  	"PSHUFD",	LTYPEX, APSHUFD,
  1039  	"USEFIELD",	LTYPEN, AUSEFIELD,
  1040  	"PCLMULQDQ",	LTYPEX, APCLMULQDQ,
  1041  	"PCDATA",	LTYPEPC,	APCDATA,
  1042  	"FUNCDATA",	LTYPEF,	AFUNCDATA,
  1043  	0
  1044  };
  1045  
  1046  void
  1047  cinit(void)
  1048  {
  1049  	Sym *s;
  1050  	int i;
  1051  
  1052  	nullgen.type = D_NONE;
  1053  	nullgen.index = D_NONE;
  1054  
  1055  	nerrors = 0;
  1056  	iostack = I;
  1057  	iofree = I;
  1058  	peekc = IGN;
  1059  	nhunk = 0;
  1060  	for(i=0; i<NHASH; i++)
  1061  		hash[i] = S;
  1062  	for(i=0; itab[i].name; i++) {
  1063  		s = slookup(itab[i].name);
  1064  		if(s->type != LNAME)
  1065  			yyerror("double initialization %s", itab[i].name);
  1066  		s->type = itab[i].type;
  1067  		s->value = itab[i].value;
  1068  	}
  1069  }
  1070  
  1071  void
  1072  checkscale(int scale)
  1073  {
  1074  
  1075  	switch(scale) {
  1076  	case 1:
  1077  	case 2:
  1078  	case 4:
  1079  	case 8:
  1080  		return;
  1081  	}
  1082  	yyerror("scale must be 1248: %d", scale);
  1083  }
  1084  
  1085  void
  1086  syminit(Sym *s)
  1087  {
  1088  
  1089  	s->type = LNAME;
  1090  	s->value = 0;
  1091  }
  1092  
  1093  void
  1094  cclean(void)
  1095  {
  1096  	Addr2 g2;
  1097  
  1098  	g2.from = nullgen;
  1099  	g2.to = nullgen;
  1100  	outcode(AEND, &g2);
  1101  }
  1102  
  1103  static Prog *lastpc;
  1104  
  1105  void
  1106  outcode(int a, Addr2 *g2)
  1107  {
  1108  	Prog *p;
  1109  	Plist *pl;
  1110  	
  1111  	if(pass == 1)
  1112  		goto out;
  1113  
  1114  	p = malloc(sizeof *p);
  1115  	memset(p, 0, sizeof *p);
  1116  	p->as = a;
  1117  	p->lineno = stmtline;
  1118  	p->from = g2->from;
  1119  	p->to = g2->to;
  1120  	p->pc = pc;
  1121  
  1122  	if(lastpc == nil) {
  1123  		pl = linknewplist(ctxt);
  1124  		pl->firstpc = p;
  1125  	} else
  1126  		lastpc->link = p;
  1127  	lastpc = p;	
  1128  
  1129  out:
  1130  	if(a != AGLOBL && a != ADATA)
  1131  		pc++;
  1132  }
  1133  
  1134  #include "../cc/lexbody"
  1135  #include "../cc/macbody"