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