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