xref: /plan9-contrib/sys/src/cmd/6a/lex.c (revision 40d015479ed36701ae6dcfd8814f849fc6285e8d)
1 #define	EXTERN
2 #include "a.h"
3 #include "y.tab.h"
4 #include <ctype.h>
5 
6 void
main(int argc,char * argv[])7 main(int argc, char *argv[])
8 {
9 	char *p;
10 	int nout, nproc, status, i, c;
11 
12 	thechar = '6';
13 	thestring = "amd64";
14 	memset(debug, 0, sizeof(debug));
15 	cinit();
16 	outfile = 0;
17 	include[ninclude++] = ".";
18 	ARGBEGIN {
19 	default:
20 		c = ARGC();
21 		if(c >= 0 || c < sizeof(debug))
22 			debug[c] = 1;
23 		break;
24 
25 	case 'o':
26 		outfile = ARGF();
27 		break;
28 
29 	case 'D':
30 		p = ARGF();
31 		if(p)
32 			Dlist[nDlist++] = p;
33 		break;
34 
35 	case 'I':
36 		p = ARGF();
37 		setinclude(p);
38 		break;
39 	} ARGEND
40 	if(*argv == 0) {
41 		print("usage: %ca [-options] file.s\n", thechar);
42 		errorexit();
43 	}
44 	if(argc > 1 && systemtype(Windows)){
45 		print("can't assemble multiple files on windows\n");
46 		errorexit();
47 	}
48 	if(argc > 1 && !systemtype(Windows)) {
49 		nproc = 1;
50 		if(p = getenv("NPROC"))
51 			nproc = atol(p);	/* */
52 		c = 0;
53 		nout = 0;
54 		for(;;) {
55 			while(nout < nproc && argc > 0) {
56 				i = myfork();
57 				if(i < 0) {
58 					i = mywait(&status);
59 					if(i < 0)
60 						errorexit();
61 					if(status)
62 						c++;
63 					nout--;
64 					continue;
65 				}
66 				if(i == 0) {
67 					print("%s:\n", *argv);
68 					if(assemble(*argv))
69 						errorexit();
70 					exits(0);
71 				}
72 				nout++;
73 				argc--;
74 				argv++;
75 			}
76 			i = mywait(&status);
77 			if(i < 0) {
78 				if(c)
79 					errorexit();
80 				exits(0);
81 			}
82 			if(status)
83 				c++;
84 			nout--;
85 		}
86 	}
87 	if(assemble(argv[0]))
88 		errorexit();
89 	exits(0);
90 }
91 
92 int
assemble(char * file)93 assemble(char *file)
94 {
95 	char ofile[100], incfile[20], *p;
96 	int i, of;
97 
98 	strcpy(ofile, file);
99 	p = utfrrune(ofile, pathchar());
100 	if(p) {
101 		include[0] = ofile;
102 		*p++ = 0;
103 	} else
104 		p = ofile;
105 	if(outfile == 0) {
106 		outfile = p;
107 		if(outfile){
108 			p = utfrrune(outfile, '.');
109 			if(p)
110 				if(p[1] == 's' && p[2] == 0)
111 					p[0] = 0;
112 			p = utfrune(outfile, 0);
113 			p[0] = '.';
114 			p[1] = thechar;
115 			p[2] = 0;
116 		} else
117 			outfile = "/dev/null";
118 	}
119 	p = getenv("INCLUDE");
120 	if(p) {
121 		setinclude(p);
122 	} else {
123 		if(systemtype(Plan9)) {
124 			p = getenv("ccroot");
125 			if(p == nil)
126 				p = "";
127 			snprint(incfile, sizeof(incfile), "%s/%s/include", p, thestring);
128 			setinclude(strdup(incfile));
129 		}
130 	}
131 
132 	of = mycreat(outfile, 0664);
133 	if(of < 0) {
134 		yyerror("%ca: cannot create %s", thechar, outfile);
135 		errorexit();
136 	}
137 	Binit(&obuf, of, OWRITE);
138 
139 	pass = 1;
140 	pinit(file);
141 	for(i=0; i<nDlist; i++)
142 		dodefine(Dlist[i]);
143 	yyparse();
144 	if(nerrors) {
145 		cclean();
146 		return nerrors;
147 	}
148 
149 	pass = 2;
150 	outhist();
151 	pinit(file);
152 	for(i=0; i<nDlist; i++)
153 		dodefine(Dlist[i]);
154 	yyparse();
155 	cclean();
156 	return nerrors;
157 }
158 
159 struct
160 {
161 	char	*name;
162 	ushort	type;
163 	ushort	value;
164 } itab[] =
165 {
166 	"SP",		LSP,	D_AUTO,
167 	"SB",		LSB,	D_EXTERN,
168 	"FP",		LFP,	D_PARAM,
169 	"PC",		LPC,	D_BRANCH,
170 
171 	"AL",		LBREG,	D_AL,
172 	"CL",		LBREG,	D_CL,
173 	"DL",		LBREG,	D_DL,
174 	"BL",		LBREG,	D_BL,
175 /*	"SPB",		LBREG,	D_SPB,	*/
176 	"SIB",		LBREG,	D_SIB,
177 	"DIB",		LBREG,	D_DIB,
178 	"BPB",		LBREG,	D_BPB,
179 	"R8B",		LBREG,	D_R8B,
180 	"R9B",		LBREG,	D_R9B,
181 	"R10B",		LBREG,	D_R10B,
182 	"R11B",		LBREG,	D_R11B,
183 	"R12B",		LBREG,	D_R12B,
184 	"R13B",		LBREG,	D_R13B,
185 	"R14B",		LBREG,	D_R14B,
186 	"R15B",		LBREG,	D_R15B,
187 
188 	"AH",		LBREG,	D_AH,
189 	"CH",		LBREG,	D_CH,
190 	"DH",		LBREG,	D_DH,
191 	"BH",		LBREG,	D_BH,
192 
193 	"AX",		LLREG,	D_AX,
194 	"CX",		LLREG,	D_CX,
195 	"DX",		LLREG,	D_DX,
196 	"BX",		LLREG,	D_BX,
197 /*	"SP",		LLREG,	D_SP,	*/
198 	"BP",		LLREG,	D_BP,
199 	"SI",		LLREG,	D_SI,
200 	"DI",		LLREG,	D_DI,
201 	"R8",		LLREG,	D_R8,
202 	"R9",		LLREG,	D_R9,
203 	"R10",		LLREG,	D_R10,
204 	"R11",		LLREG,	D_R11,
205 	"R12",		LLREG,	D_R12,
206 	"R13",		LLREG,	D_R13,
207 	"R14",		LLREG,	D_R14,
208 	"R15",		LLREG,	D_R15,
209 
210 	"RARG",		LLREG,	REGARG,
211 
212 /*
213 	"F0",		LFREG,	D_F0+0,
214 	"F1",		LFREG,	D_F0+1,
215 	"F2",		LFREG,	D_F0+2,
216 	"F3",		LFREG,	D_F0+3,
217 	"F4",		LFREG,	D_F0+4,
218 	"F5",		LFREG,	D_F0+5,
219 	"F6",		LFREG,	D_F0+6,
220 	"F7",		LFREG,	D_F0+7,
221 */
222 
223 	"M0",		LMREG,	D_M0+0,
224 	"M1",		LMREG,	D_M0+1,
225 	"M2",		LMREG,	D_M0+2,
226 	"M3",		LMREG,	D_M0+3,
227 	"M4",		LMREG,	D_M0+4,
228 	"M5",		LMREG,	D_M0+5,
229 	"M6",		LMREG,	D_M0+6,
230 	"M7",		LMREG,	D_M0+7,
231 
232 	"X0",		LXREG,	D_X0+0,
233 	"X1",		LXREG,	D_X0+1,
234 	"X2",		LXREG,	D_X0+2,
235 	"X3",		LXREG,	D_X0+3,
236 	"X4",		LXREG,	D_X0+4,
237 	"X5",		LXREG,	D_X0+5,
238 	"X6",		LXREG,	D_X0+6,
239 	"X7",		LXREG,	D_X0+7,
240 	"X8",		LXREG,	D_X0+8,
241 	"X9",		LXREG,	D_X0+9,
242 	"X10",		LXREG,	D_X0+10,
243 	"X11",		LXREG,	D_X0+11,
244 	"X12",		LXREG,	D_X0+12,
245 	"X13",		LXREG,	D_X0+13,
246 	"X14",		LXREG,	D_X0+14,
247 	"X15",		LXREG,	D_X0+15,
248 
249 	"Y0",		LYREG,	D_Y0+0,
250 	"Y1",		LYREG,	D_Y0+1,
251 	"Y2",		LYREG,	D_Y0+2,
252 	"Y3",		LYREG,	D_Y0+3,
253 	"Y4",		LYREG,	D_Y0+4,
254 	"Y5",		LYREG,	D_Y0+5,
255 	"Y6",		LYREG,	D_Y0+6,
256 	"Y7",		LYREG,	D_Y0+7,
257 	"Y8",		LYREG,	D_Y0+8,
258 	"Y9",		LYREG,	D_Y0+9,
259 	"Y10",		LYREG,	D_Y0+10,
260 	"Y11",		LYREG,	D_Y0+11,
261 	"Y12",		LYREG,	D_Y0+12,
262 	"Y13",		LYREG,	D_Y0+13,
263 	"Y14",		LYREG,	D_Y0+14,
264 	"Y15",		LYREG,	D_Y0+15,
265 
266 	"CS",		LSREG,	D_CS,
267 	"SS",		LSREG,	D_SS,
268 	"DS",		LSREG,	D_DS,
269 	"ES",		LSREG,	D_ES,
270 	"FS",		LSREG,	D_FS,
271 	"GS",		LSREG,	D_GS,
272 
273 	"GDTR",		LBREG,	D_GDTR,
274 	"IDTR",		LBREG,	D_IDTR,
275 	"LDTR",		LBREG,	D_LDTR,
276 	"MSW",		LBREG,	D_MSW,
277 	"TASK",		LBREG,	D_TASK,
278 
279 	"CR0",		LBREG,	D_CR+0,
280 	"CR1",		LBREG,	D_CR+1,
281 	"CR2",		LBREG,	D_CR+2,
282 	"CR3",		LBREG,	D_CR+3,
283 	"CR4",		LBREG,	D_CR+4,
284 	"CR5",		LBREG,	D_CR+5,
285 	"CR6",		LBREG,	D_CR+6,
286 	"CR7",		LBREG,	D_CR+7,
287 	"CR8",		LBREG,	D_CR+8,
288 	"CR9",		LBREG,	D_CR+9,
289 	"CR10",		LBREG,	D_CR+10,
290 	"CR11",		LBREG,	D_CR+11,
291 	"CR12",		LBREG,	D_CR+12,
292 	"CR13",		LBREG,	D_CR+13,
293 	"CR14",		LBREG,	D_CR+14,
294 	"CR15",		LBREG,	D_CR+15,
295 
296 	"DR0",		LBREG,	D_DR+0,
297 	"DR1",		LBREG,	D_DR+1,
298 	"DR2",		LBREG,	D_DR+2,
299 	"DR3",		LBREG,	D_DR+3,
300 	"DR4",		LBREG,	D_DR+4,
301 	"DR5",		LBREG,	D_DR+5,
302 	"DR6",		LBREG,	D_DR+6,
303 	"DR7",		LBREG,	D_DR+7,
304 
305 	"TR0",		LBREG,	D_TR+0,
306 	"TR1",		LBREG,	D_TR+1,
307 	"TR2",		LBREG,	D_TR+2,
308 	"TR3",		LBREG,	D_TR+3,
309 	"TR4",		LBREG,	D_TR+4,
310 	"TR5",		LBREG,	D_TR+5,
311 	"TR6",		LBREG,	D_TR+6,
312 	"TR7",		LBREG,	D_TR+7,
313 
314 	"AAA",		LTYPE0,	AAAA,
315 	"AAD",		LTYPE0,	AAAD,
316 	"AAM",		LTYPE0,	AAAM,
317 	"AAS",		LTYPE0,	AAAS,
318 	"ADCB",		LTYPE3,	AADCB,
319 	"ADCL",		LTYPE3,	AADCL,
320 	"ADCQ",		LTYPE3,	AADCQ,
321 	"ADCW",		LTYPE3,	AADCW,
322 	"ADDB",		LTYPE3,	AADDB,
323 	"ADDL",		LTYPE3,	AADDL,
324 	"ADDQ",		LTYPE3,	AADDQ,
325 	"ADDW",		LTYPE3,	AADDW,
326 	"ADJSP",	LTYPE2,	AADJSP,
327 	"ANDB",		LTYPE3,	AANDB,
328 	"ANDL",		LTYPE3,	AANDL,
329 	"ANDQ",		LTYPE3,	AANDQ,
330 	"ANDW",		LTYPE3,	AANDW,
331 	"ARPL",		LTYPE3,	AARPL,
332 	"BOUNDL",	LTYPE3,	ABOUNDL,
333 	"BOUNDW",	LTYPE3,	ABOUNDW,
334 	"BSFL",		LTYPE3,	ABSFL,
335 	"BSFQ",		LTYPE3,	ABSFQ,
336 	"BSFW",		LTYPE3,	ABSFW,
337 	"BSRL",		LTYPE3,	ABSRL,
338 	"BSRQ",		LTYPE3,	ABSRQ,
339 	"BSRW",		LTYPE3,	ABSRW,
340 	"BSWAPL",	LTYPE1,	ABSWAPL,
341 	"BSWAPQ",	LTYPE1,	ABSWAPQ,
342 	"BTCL",		LTYPE3,	ABTCL,
343 	"BTCQ",		LTYPE3,	ABTCQ,
344 	"BTCW",		LTYPE3,	ABTCW,
345 	"BTL",		LTYPE3,	ABTL,
346 	"BTQ",		LTYPE3,	ABTQ,
347 	"BTRL",		LTYPE3,	ABTRL,
348 	"BTRQ",		LTYPE3,	ABTRQ,
349 	"BTRW",		LTYPE3,	ABTRW,
350 	"BTSL",		LTYPE3,	ABTSL,
351 	"BTSQ",		LTYPE3,	ABTSQ,
352 	"BTSW",		LTYPE3,	ABTSW,
353 	"BTW",		LTYPE3,	ABTW,
354 	"BYTE",		LTYPE2,	ABYTE,
355 	"CALL",		LTYPEC,	ACALL,
356 	"CLC",		LTYPE0,	ACLC,
357 	"CLD",		LTYPE0,	ACLD,
358 	"CLI",		LTYPE0,	ACLI,
359 	"CLTS",		LTYPE0,	ACLTS,
360 	"CMC",		LTYPE0,	ACMC,
361 	"CMPB",		LTYPE4,	ACMPB,
362 	"CMPL",		LTYPE4,	ACMPL,
363 	"CMPQ",		LTYPE4,	ACMPQ,
364 	"CMPW",		LTYPE4,	ACMPW,
365 	"CMPSB",	LTYPE0,	ACMPSB,
366 	"CMPSL",	LTYPE0,	ACMPSL,
367 	"CMPSQ",	LTYPE0,	ACMPSQ,
368 	"CMPSW",	LTYPE0,	ACMPSW,
369 	"CMPXCHG8B",	LTYPE1,	ACMPXCHG8B,
370 	"CMPXCHG16B",	LTYPE1,	ACMPXCHG16B,
371 	"CMPXCHGB",	LTYPE3,	ACMPXCHGB,	/* LTYPE3? */
372 	"CMPXCHGL",	LTYPE3,	ACMPXCHGL,
373 	"CMPXCHGQ",	LTYPE3,	ACMPXCHGQ,
374 	"CMPXCHGW",	LTYPE3,	ACMPXCHGW,
375 	"CPUID",	LTYPE0,	ACPUID,
376 	"DAA",		LTYPE0,	ADAA,
377 	"DAS",		LTYPE0,	ADAS,
378 	"DATA",		LTYPED,	ADATA,
379 	"DECB",		LTYPE1,	ADECB,
380 	"DECL",		LTYPE1,	ADECL,
381 	"DECQ",		LTYPE1,	ADECQ,
382 	"DECW",		LTYPE1,	ADECW,
383 	"DIVB",		LTYPE2,	ADIVB,
384 	"DIVL",		LTYPE2,	ADIVL,
385 	"DIVQ",		LTYPE2,	ADIVQ,
386 	"DIVW",		LTYPE2,	ADIVW,
387 	"EMMS",		LTYPE0,	AEMMS,
388 	"END",		LTYPE0,	AEND,
389 	"ENTER",	LTYPE2,	AENTER,
390 	"GLOBL",	LTYPET,	AGLOBL,
391 	"HLT",		LTYPE0,	AHLT,
392 	"IDIVB",	LTYPE2,	AIDIVB,
393 	"IDIVL",	LTYPE2,	AIDIVL,
394 	"IDIVQ",	LTYPE2,	AIDIVQ,
395 	"IDIVW",	LTYPE2,	AIDIVW,
396 	"IMULB",	LTYPEI,	AIMULB,
397 	"IMULL",	LTYPEI,	AIMULL,
398 	"IMULQ",	LTYPEI,	AIMULQ,
399 	"IMULW",	LTYPEI,	AIMULW,
400 	"INB",		LTYPE0,	AINB,
401 	"INL",		LTYPE0,	AINL,
402 	"INW",		LTYPE0,	AINW,
403 	"INCB",		LTYPE1,	AINCB,
404 	"INCL",		LTYPE1,	AINCL,
405 	"INCQ",		LTYPE1,	AINCQ,
406 	"INCW",		LTYPE1,	AINCW,
407 	"INSB",		LTYPE0,	AINSB,
408 	"INSL",		LTYPE0,	AINSL,
409 	"INSW",		LTYPE0,	AINSW,
410 	"INT",		LTYPE2,	AINT,
411 	"INTO",		LTYPE0,	AINTO,
412 	"INVD",		LTYPE0,	AINVD,
413 	"INVLPG",	LTYPE2,	AINVLPG,
414 	"IRETL",	LTYPE0,	AIRETL,
415 	"IRETQ",	LTYPE0,	AIRETQ,
416 	"IRETW",	LTYPE0,	AIRETW,
417 
418 	"JOS",		LTYPER,	AJOS,
419 	"JO",		LTYPER,	AJOS,	/* alternate */
420 	"JOC",		LTYPER,	AJOC,
421 	"JNO",		LTYPER,	AJOC,	/* alternate */
422 	"JCS",		LTYPER,	AJCS,
423 	"JB",		LTYPER,	AJCS,	/* alternate */
424 	"JC",		LTYPER,	AJCS,	/* alternate */
425 	"JNAE",		LTYPER,	AJCS,	/* alternate */
426 	"JLO",		LTYPER,	AJCS,	/* alternate */
427 	"JCC",		LTYPER,	AJCC,
428 	"JAE",		LTYPER,	AJCC,	/* alternate */
429 	"JNB",		LTYPER,	AJCC,	/* alternate */
430 	"JNC",		LTYPER,	AJCC,	/* alternate */
431 	"JHS",		LTYPER,	AJCC,	/* alternate */
432 	"JEQ",		LTYPER,	AJEQ,
433 	"JE",		LTYPER,	AJEQ,	/* alternate */
434 	"JZ",		LTYPER,	AJEQ,	/* alternate */
435 	"JNE",		LTYPER,	AJNE,
436 	"JNZ",		LTYPER,	AJNE,	/* alternate */
437 	"JLS",		LTYPER,	AJLS,
438 	"JBE",		LTYPER,	AJLS,	/* alternate */
439 	"JNA",		LTYPER,	AJLS,	/* alternate */
440 	"JHI",		LTYPER,	AJHI,
441 	"JA",		LTYPER,	AJHI,	/* alternate */
442 	"JNBE",		LTYPER,	AJHI,	/* alternate */
443 	"JMI",		LTYPER,	AJMI,
444 	"JS",		LTYPER,	AJMI,	/* alternate */
445 	"JPL",		LTYPER,	AJPL,
446 	"JNS",		LTYPER,	AJPL,	/* alternate */
447 	"JPS",		LTYPER,	AJPS,
448 	"JP",		LTYPER,	AJPS,	/* alternate */
449 	"JPE",		LTYPER,	AJPS,	/* alternate */
450 	"JPC",		LTYPER,	AJPC,
451 	"JNP",		LTYPER,	AJPC,	/* alternate */
452 	"JPO",		LTYPER,	AJPC,	/* alternate */
453 	"JLT",		LTYPER,	AJLT,
454 	"JL",		LTYPER,	AJLT,	/* alternate */
455 	"JNGE",		LTYPER,	AJLT,	/* alternate */
456 	"JGE",		LTYPER,	AJGE,
457 	"JNL",		LTYPER,	AJGE,	/* alternate */
458 	"JLE",		LTYPER,	AJLE,
459 	"JNG",		LTYPER,	AJLE,	/* alternate */
460 	"JGT",		LTYPER,	AJGT,
461 	"JG",		LTYPER,	AJGT,	/* alternate */
462 	"JNLE",		LTYPER,	AJGT,	/* alternate */
463 
464 	"JCXZ",		LTYPER,	AJCXZ,
465 	"JMP",		LTYPEC,	AJMP,
466 	"LAHF",		LTYPE0,	ALAHF,
467 	"LARL",		LTYPE3,	ALARL,
468 	"LARW",		LTYPE3,	ALARW,
469 	"LEAL",		LTYPE3,	ALEAL,
470 	"LEAQ",		LTYPE3,	ALEAQ,
471 	"LEAW",		LTYPE3,	ALEAW,
472 	"LEAVEL",	LTYPE0,	ALEAVEL,
473 	"LEAVEQ",	LTYPE0,	ALEAVEQ,
474 	"LEAVEW",	LTYPE0,	ALEAVEW,
475 	"LFENCE",	LTYPE0,	ALFENCE,
476 	"LOCK",		LTYPE0,	ALOCK,
477 	"LODSB",	LTYPE0,	ALODSB,
478 	"LODSL",	LTYPE0,	ALODSL,
479 	"LODSQ",	LTYPE0,	ALODSQ,
480 	"LODSW",	LTYPE0,	ALODSW,
481 	"LONG",		LTYPE2,	ALONG,
482 	"LOOP",		LTYPER,	ALOOP,
483 	"LOOPEQ",	LTYPER,	ALOOPEQ,
484 	"LOOPNE",	LTYPER,	ALOOPNE,
485 	"LSLL",		LTYPE3,	ALSLL,
486 	"LSLW",		LTYPE3,	ALSLW,
487 	"MFENCE",	LTYPE0,	AMFENCE,
488 	"MODE",		LTYPE2,	AMODE,
489 	"MOVB",		LTYPE3,	AMOVB,
490 	"MOVL",		LTYPEM,	AMOVL,
491 	"MOVQ",		LTYPEM,	AMOVQ,
492 	"MOVW",		LTYPEM,	AMOVW,
493 	"MOVBLSX",	LTYPE3, AMOVBLSX,
494 	"MOVBLZX",	LTYPE3, AMOVBLZX,
495 	"MOVBQSX",	LTYPE3,	AMOVBQSX,
496 	"MOVBQZX",	LTYPE3,	AMOVBQZX,
497 	"MOVBWSX",	LTYPE3, AMOVBWSX,
498 	"MOVBWZX",	LTYPE3, AMOVBWZX,
499 	"MOVLQSX",	LTYPE3, AMOVLQSX,
500 	"MOVLQZX",	LTYPE3, AMOVLQZX,
501 	"MOVNTIL",	LTYPE3,	AMOVNTIL,
502 	"MOVNTIQ",	LTYPE3,	AMOVNTIQ,
503 	"MOVQL",	LTYPE3,	AMOVQL,
504 	"MOVWLSX",	LTYPE3, AMOVWLSX,
505 	"MOVWLZX",	LTYPE3, AMOVWLZX,
506 	"MOVWQSX",	LTYPE3,	AMOVWQSX,
507 	"MOVWQZX",	LTYPE3,	AMOVWQZX,
508 	"MOVSB",	LTYPE0,	AMOVSB,
509 	"MOVSL",	LTYPE0,	AMOVSL,
510 	"MOVSQ",	LTYPE0,	AMOVSQ,
511 	"MOVSW",	LTYPE0,	AMOVSW,
512 	"MULB",		LTYPE2,	AMULB,
513 	"MULL",		LTYPE2,	AMULL,
514 	"MULQ",		LTYPE2,	AMULQ,
515 	"MULW",		LTYPE2,	AMULW,
516 	"NEGB",		LTYPE1,	ANEGB,
517 	"NEGL",		LTYPE1,	ANEGL,
518 	"NEGQ",		LTYPE1,	ANEGQ,
519 	"NEGW",		LTYPE1,	ANEGW,
520 	"NOP",		LTYPEN,	ANOP,
521 	"NOTB",		LTYPE1,	ANOTB,
522 	"NOTL",		LTYPE1,	ANOTL,
523 	"NOTQ",		LTYPE1,	ANOTQ,
524 	"NOTW",		LTYPE1,	ANOTW,
525 	"ORB",		LTYPE3,	AORB,
526 	"ORL",		LTYPE3,	AORL,
527 	"ORQ",		LTYPE3,	AORQ,
528 	"ORW",		LTYPE3,	AORW,
529 	"OUTB",		LTYPE0,	AOUTB,
530 	"OUTL",		LTYPE0,	AOUTL,
531 	"OUTW",		LTYPE0,	AOUTW,
532 	"OUTSB",	LTYPE0,	AOUTSB,
533 	"OUTSL",	LTYPE0,	AOUTSL,
534 	"OUTSW",	LTYPE0,	AOUTSW,
535 	"PAUSE",	LTYPE0,	APAUSE,
536 	"POPAL",	LTYPE0,	APOPAL,
537 	"POPAW",	LTYPE0,	APOPAW,
538 	"POPCNTW",	LTYPE3, APOPCNTW,
539 	"POPCNTL",	LTYPE3, APOPCNTL,
540 	"POPCNTQ",	LTYPE3, APOPCNTQ,
541 	"POPFL",	LTYPE0,	APOPFL,
542 	"POPFQ",	LTYPE0,	APOPFQ,
543 	"POPFW",	LTYPE0,	APOPFW,
544 	"POPL",		LTYPE1,	APOPL,
545 	"POPQ",		LTYPE1,	APOPQ,
546 	"POPW",		LTYPE1,	APOPW,
547 	"PUSHAL",	LTYPE0,	APUSHAL,
548 	"PUSHAW",	LTYPE0,	APUSHAW,
549 	"PUSHFL",	LTYPE0,	APUSHFL,
550 	"PUSHFQ",	LTYPE0,	APUSHFQ,
551 	"PUSHFW",	LTYPE0,	APUSHFW,
552 	"PUSHL",	LTYPE2,	APUSHL,
553 	"PUSHQ",	LTYPE2,	APUSHQ,
554 	"PUSHW",	LTYPE2,	APUSHW,
555 	"RCLB",		LTYPE3,	ARCLB,
556 	"RCLL",		LTYPE3,	ARCLL,
557 	"RCLQ",		LTYPE3,	ARCLQ,
558 	"RCLW",		LTYPE3,	ARCLW,
559 	"RCRB",		LTYPE3,	ARCRB,
560 	"RCRL",		LTYPE3,	ARCRL,
561 	"RCRQ",		LTYPE3,	ARCRQ,
562 	"RCRW",		LTYPE3,	ARCRW,
563 	"RDMSR",	LTYPE0,	ARDMSR,
564 	"RDPMC",	LTYPE0,	ARDPMC,
565 	"RDTSC",	LTYPE0,	ARDTSC,
566 	"REP",		LTYPE0,	AREP,
567 	"REPN",		LTYPE0,	AREPN,
568 	"RET",		LTYPE0,	ARET,
569 	"RETFL",	LTYPERT,ARETFL,
570 	"RETFW",	LTYPERT,ARETFW,
571 	"RETFQ",	LTYPERT,ARETFQ,
572 	"ROLB",		LTYPE3,	AROLB,
573 	"ROLL",		LTYPE3,	AROLL,
574 	"ROLQ",		LTYPE3,	AROLQ,
575 	"ROLW",		LTYPE3,	AROLW,
576 	"RORB",		LTYPE3,	ARORB,
577 	"RORL",		LTYPE3,	ARORL,
578 	"RORQ",		LTYPE3,	ARORQ,
579 	"RORW",		LTYPE3,	ARORW,
580 	"RSM",		LTYPE0,	ARSM,
581 	"SAHF",		LTYPE0,	ASAHF,
582 	"SALB",		LTYPE3,	ASALB,
583 	"SALL",		LTYPE3,	ASALL,
584 	"SALQ",		LTYPE3,	ASALQ,
585 	"SALW",		LTYPE3,	ASALW,
586 	"SARB",		LTYPE3,	ASARB,
587 	"SARL",		LTYPE3,	ASARL,
588 	"SARQ",		LTYPE3,	ASARQ,
589 	"SARW",		LTYPE3,	ASARW,
590 	"SBBB",		LTYPE3,	ASBBB,
591 	"SBBL",		LTYPE3,	ASBBL,
592 	"SBBQ",		LTYPE3,	ASBBQ,
593 	"SBBW",		LTYPE3,	ASBBW,
594 	"SCASB",	LTYPE0,	ASCASB,
595 	"SCASL",	LTYPE0,	ASCASL,
596 	"SCASQ",	LTYPE0,	ASCASQ,
597 	"SCASW",	LTYPE0,	ASCASW,
598 	"SETCC",	LTYPE1,	ASETCC,
599 	"SETCS",	LTYPE1,	ASETCS,
600 	"SETEQ",	LTYPE1,	ASETEQ,
601 	"SETGE",	LTYPE1,	ASETGE,
602 	"SETGT",	LTYPE1,	ASETGT,
603 	"SETHI",	LTYPE1,	ASETHI,
604 	"SETLE",	LTYPE1,	ASETLE,
605 	"SETLS",	LTYPE1,	ASETLS,
606 	"SETLT",	LTYPE1,	ASETLT,
607 	"SETMI",	LTYPE1,	ASETMI,
608 	"SETNE",	LTYPE1,	ASETNE,
609 	"SETOC",	LTYPE1,	ASETOC,
610 	"SETOS",	LTYPE1,	ASETOS,
611 	"SETPC",	LTYPE1,	ASETPC,
612 	"SETPL",	LTYPE1,	ASETPL,
613 	"SETPS",	LTYPE1,	ASETPS,
614 	"SFENCE",	LTYPE0,	ASFENCE,
615 	"CDQ",		LTYPE0,	ACDQ,
616 	"CWD",		LTYPE0,	ACWD,
617 	"CQO",		LTYPE0,	ACQO,
618 	"SHLB",		LTYPE3,	ASHLB,
619 	"SHLL",		LTYPES,	ASHLL,
620 	"SHLQ",		LTYPES,	ASHLQ,
621 	"SHLW",		LTYPES,	ASHLW,
622 	"SHRB",		LTYPE3,	ASHRB,
623 	"SHRL",		LTYPES,	ASHRL,
624 	"SHRQ",		LTYPES,	ASHRQ,
625 	"SHRW",		LTYPES,	ASHRW,
626 	"STC",		LTYPE0,	ASTC,
627 	"STD",		LTYPE0,	ASTD,
628 	"STI",		LTYPE0,	ASTI,
629 	"STOSB",	LTYPE0,	ASTOSB,
630 	"STOSL",	LTYPE0,	ASTOSL,
631 	"STOSQ",	LTYPE0,	ASTOSQ,
632 	"STOSW",	LTYPE0,	ASTOSW,
633 	"SUBB",		LTYPE3,	ASUBB,
634 	"SUBL",		LTYPE3,	ASUBL,
635 	"SUBQ",		LTYPE3,	ASUBQ,
636 	"SUBW",		LTYPE3,	ASUBW,
637 	"SYSCALL",	LTYPE0,	ASYSCALL,
638 	"SYSRET",	LTYPE0,	ASYSRET,
639 	"SWAPGS",	LTYPE0,	ASWAPGS,
640 	"TESTB",	LTYPE3,	ATESTB,
641 	"TESTL",	LTYPE3,	ATESTL,
642 	"TESTQ",	LTYPE3,	ATESTQ,
643 	"TESTW",	LTYPE3,	ATESTW,
644 	"TEXT",		LTYPET,	ATEXT,
645 	"VERR",		LTYPE2,	AVERR,
646 	"VERW",		LTYPE2,	AVERW,
647 	"QUAD",		LTYPE2,	AQUAD,
648 	"WAIT",		LTYPE0,	AWAIT,
649 	"WBINVD",	LTYPE0,	AWBINVD,
650 	"WRMSR",	LTYPE0,	AWRMSR,
651 	"WORD",		LTYPE2,	AWORD,
652 	"XADDB",	LTYPE3,	AXADDB,
653 	"XADDL",	LTYPE3,	AXADDL,
654 	"XADDQ",	LTYPE3,	AXADDQ,
655 	"XADDW",	LTYPE3,	AXADDW,
656 	"XCHGB",	LTYPE3,	AXCHGB,
657 	"XCHGL",	LTYPE3,	AXCHGL,
658 	"XCHGQ",	LTYPE3,	AXCHGQ,
659 	"XCHGW",	LTYPE3,	AXCHGW,
660 	"XLAT",		LTYPE2,	AXLAT,
661 	"XORB",		LTYPE3,	AXORB,
662 	"XORL",		LTYPE3,	AXORL,
663 	"XORQ",		LTYPE3,	AXORQ,
664 	"XORW",		LTYPE3,	AXORW,
665 
666 	"CMOVLCC",	LTYPE3,	ACMOVLCC,
667 	"CMOVLCS",	LTYPE3,	ACMOVLCS,
668 	"CMOVLEQ",	LTYPE3,	ACMOVLEQ,
669 	"CMOVLGE",	LTYPE3,	ACMOVLGE,
670 	"CMOVLGT",	LTYPE3,	ACMOVLGT,
671 	"CMOVLHI",	LTYPE3,	ACMOVLHI,
672 	"CMOVLLE",	LTYPE3,	ACMOVLLE,
673 	"CMOVLLS",	LTYPE3,	ACMOVLLS,
674 	"CMOVLLT",	LTYPE3,	ACMOVLLT,
675 	"CMOVLMI",	LTYPE3,	ACMOVLMI,
676 	"CMOVLNE",	LTYPE3,	ACMOVLNE,
677 	"CMOVLOC",	LTYPE3,	ACMOVLOC,
678 	"CMOVLOS",	LTYPE3,	ACMOVLOS,
679 	"CMOVLPC",	LTYPE3,	ACMOVLPC,
680 	"CMOVLPL",	LTYPE3,	ACMOVLPL,
681 	"CMOVLPS",	LTYPE3,	ACMOVLPS,
682 	"CMOVQCC",	LTYPE3,	ACMOVQCC,
683 	"CMOVQCS",	LTYPE3,	ACMOVQCS,
684 	"CMOVQEQ",	LTYPE3,	ACMOVQEQ,
685 	"CMOVQGE",	LTYPE3,	ACMOVQGE,
686 	"CMOVQGT",	LTYPE3,	ACMOVQGT,
687 	"CMOVQHI",	LTYPE3,	ACMOVQHI,
688 	"CMOVQLE",	LTYPE3,	ACMOVQLE,
689 	"CMOVQLS",	LTYPE3,	ACMOVQLS,
690 	"CMOVQLT",	LTYPE3,	ACMOVQLT,
691 	"CMOVQMI",	LTYPE3,	ACMOVQMI,
692 	"CMOVQNE",	LTYPE3,	ACMOVQNE,
693 	"CMOVQOC",	LTYPE3,	ACMOVQOC,
694 	"CMOVQOS",	LTYPE3,	ACMOVQOS,
695 	"CMOVQPC",	LTYPE3,	ACMOVQPC,
696 	"CMOVQPL",	LTYPE3,	ACMOVQPL,
697 	"CMOVQPS",	LTYPE3,	ACMOVQPS,
698 	"CMOVWCC",	LTYPE3,	ACMOVWCC,
699 	"CMOVWCS",	LTYPE3,	ACMOVWCS,
700 	"CMOVWEQ",	LTYPE3,	ACMOVWEQ,
701 	"CMOVWGE",	LTYPE3,	ACMOVWGE,
702 	"CMOVWGT",	LTYPE3,	ACMOVWGT,
703 	"CMOVWHI",	LTYPE3,	ACMOVWHI,
704 	"CMOVWLE",	LTYPE3,	ACMOVWLE,
705 	"CMOVWLS",	LTYPE3,	ACMOVWLS,
706 	"CMOVWLT",	LTYPE3,	ACMOVWLT,
707 	"CMOVWMI",	LTYPE3,	ACMOVWMI,
708 	"CMOVWNE",	LTYPE3,	ACMOVWNE,
709 	"CMOVWOC",	LTYPE3,	ACMOVWOC,
710 	"CMOVWOS",	LTYPE3,	ACMOVWOS,
711 	"CMOVWPC",	LTYPE3,	ACMOVWPC,
712 	"CMOVWPL",	LTYPE3,	ACMOVWPL,
713 	"CMOVWPS",	LTYPE3,	ACMOVWPS,
714 
715 	"FMOVB",	LTYPE3, AFMOVB,
716 	"FMOVBP",	LTYPE3, AFMOVBP,
717 	"FMOVD",	LTYPE3, AFMOVD,
718 	"FMOVDP",	LTYPE3, AFMOVDP,
719 	"FMOVF",	LTYPE3, AFMOVF,
720 	"FMOVFP",	LTYPE3, AFMOVFP,
721 	"FMOVL",	LTYPE3, AFMOVL,
722 	"FMOVLP",	LTYPE3, AFMOVLP,
723 	"FMOVV",	LTYPE3, AFMOVV,
724 	"FMOVVP",	LTYPE3, AFMOVVP,
725 	"FMOVW",	LTYPE3, AFMOVW,
726 	"FMOVWP",	LTYPE3, AFMOVWP,
727 	"FMOVX",	LTYPE3, AFMOVX,
728 	"FMOVXP",	LTYPE3, AFMOVXP,
729 	"FCOMB",	LTYPE3, AFCOMB,
730 	"FCOMBP",	LTYPE3, AFCOMBP,
731 	"FCOMD",	LTYPE3, AFCOMD,
732 	"FCOMDP",	LTYPE3, AFCOMDP,
733 	"FCOMDPP",	LTYPE3, AFCOMDPP,
734 	"FCOMF",	LTYPE3, AFCOMF,
735 	"FCOMFP",	LTYPE3, AFCOMFP,
736 	"FCOML",	LTYPE3, AFCOML,
737 	"FCOMLP",	LTYPE3, AFCOMLP,
738 	"FCOMW",	LTYPE3, AFCOMW,
739 	"FCOMWP",	LTYPE3, AFCOMWP,
740 	"FUCOM",	LTYPE3, AFUCOM,
741 	"FUCOMP",	LTYPE3, AFUCOMP,
742 	"FUCOMPP",	LTYPE3, AFUCOMPP,
743 	"FADDW",	LTYPE3, AFADDW,
744 	"FADDL",	LTYPE3, AFADDL,
745 	"FADDF",	LTYPE3, AFADDF,
746 	"FADDD",	LTYPE3, AFADDD,
747 	"FADDDP",	LTYPE3, AFADDDP,
748 	"FSUBDP",	LTYPE3, AFSUBDP,
749 	"FSUBW",	LTYPE3, AFSUBW,
750 	"FSUBL",	LTYPE3, AFSUBL,
751 	"FSUBF",	LTYPE3, AFSUBF,
752 	"FSUBD",	LTYPE3, AFSUBD,
753 	"FSUBRDP",	LTYPE3, AFSUBRDP,
754 	"FSUBRW",	LTYPE3, AFSUBRW,
755 	"FSUBRL",	LTYPE3, AFSUBRL,
756 	"FSUBRF",	LTYPE3, AFSUBRF,
757 	"FSUBRD",	LTYPE3, AFSUBRD,
758 	"FMULDP",	LTYPE3, AFMULDP,
759 	"FMULW",	LTYPE3, AFMULW,
760 	"FMULL",	LTYPE3, AFMULL,
761 	"FMULF",	LTYPE3, AFMULF,
762 	"FMULD",	LTYPE3, AFMULD,
763 	"FDIVDP",	LTYPE3, AFDIVDP,
764 	"FDIVW",	LTYPE3, AFDIVW,
765 	"FDIVL",	LTYPE3, AFDIVL,
766 	"FDIVF",	LTYPE3, AFDIVF,
767 	"FDIVD",	LTYPE3, AFDIVD,
768 	"FDIVRDP",	LTYPE3, AFDIVRDP,
769 	"FDIVRW",	LTYPE3, AFDIVRW,
770 	"FDIVRL",	LTYPE3, AFDIVRL,
771 	"FDIVRF",	LTYPE3, AFDIVRF,
772 	"FDIVRD",	LTYPE3, AFDIVRD,
773 	"FXCHD",	LTYPE3, AFXCHD,
774 	"FFREE",	LTYPE1, AFFREE,
775 	"FLDCW",	LTYPE2, AFLDCW,
776 	"FLDENV",	LTYPE1, AFLDENV,
777 	"FRSTOR",	LTYPE2, AFRSTOR,
778 	"FSAVE",	LTYPE1, AFSAVE,
779 	"FSTCW",	LTYPE1, AFSTCW,
780 	"FSTENV",	LTYPE1, AFSTENV,
781 	"FSTSW",	LTYPE1, AFSTSW,
782 	"F2XM1",	LTYPE0, AF2XM1,
783 	"FABS",		LTYPE0, AFABS,
784 	"FCHS",		LTYPE0, AFCHS,
785 	"FCLEX",	LTYPE0, AFCLEX,
786 	"FCOS",		LTYPE0, AFCOS,
787 	"FDECSTP",	LTYPE0, AFDECSTP,
788 	"FINCSTP",	LTYPE0, AFINCSTP,
789 	"FINIT",	LTYPE0, AFINIT,
790 	"FLD1",		LTYPE0, AFLD1,
791 	"FLDL2E",	LTYPE0, AFLDL2E,
792 	"FLDL2T",	LTYPE0, AFLDL2T,
793 	"FLDLG2",	LTYPE0, AFLDLG2,
794 	"FLDLN2",	LTYPE0, AFLDLN2,
795 	"FLDPI",	LTYPE0, AFLDPI,
796 	"FLDZ",		LTYPE0, AFLDZ,
797 	"FNOP",		LTYPE0, AFNOP,
798 	"FPATAN",	LTYPE0, AFPATAN,
799 	"FPREM",	LTYPE0, AFPREM,
800 	"FPREM1",	LTYPE0, AFPREM1,
801 	"FPTAN",	LTYPE0, AFPTAN,
802 	"FRNDINT",	LTYPE0, AFRNDINT,
803 	"FSCALE",	LTYPE0, AFSCALE,
804 	"FSIN",		LTYPE0, AFSIN,
805 	"FSINCOS",	LTYPE0, AFSINCOS,
806 	"FSQRT",	LTYPE0, AFSQRT,
807 	"FTST",		LTYPE0, AFTST,
808 	"FXAM",		LTYPE0, AFXAM,
809 	"FXTRACT",	LTYPE0, AFXTRACT,
810 	"FYL2X",	LTYPE0, AFYL2X,
811 	"FYL2XP1",	LTYPE0, AFYL2XP1,
812 
813 	"ADDPD",	LTYPEY,	AADDPD,
814 	"ADDPS",	LTYPEY,	AADDPS,
815 	"ADDSD",	LTYPEY,	AADDSD,
816 	"ADDSS",	LTYPEY,	AADDSS,
817 	"ANDNPD",	LTYPEY,	AANDNPD,
818 	"ANDNPS",	LTYPEY,	AANDNPS,
819 	"ANDPD",	LTYPEY,	AANDPD,
820 	"ANDPS",	LTYPEY,	AANDPS,
821 	"CMPPD",	LTYPEXC,ACMPPD,
822 	"CMPPS",	LTYPEXC,ACMPPS,
823 	"CMPSD",	LTYPEXC,ACMPSD,
824 	"CMPSS",	LTYPEXC,ACMPSS,
825 	"COMISD",	LTYPEY,	ACOMISD,
826 	"COMISS",	LTYPEY,	ACOMISS,
827 	"CVTPL2PD",	LTYPEY,	ACVTPL2PD,
828 	"CVTPL2PS",	LTYPEY,	ACVTPL2PS,
829 	"CVTPD2PL",	LTYPEY,	ACVTPD2PL,
830 	"CVTPD2PS",	LTYPEY,	ACVTPD2PS,
831 	"CVTPS2PL",	LTYPEY,	ACVTPS2PL,
832 	"PF2IW",	LTYPEY,	APF2IW,
833 	"PF2IL",	LTYPEY,	APF2IL,
834 	"PF2ID",	LTYPEY,	APF2IL,	/* syn */
835 	"PI2FL",	LTYPEY,	API2FL,
836 	"PI2FD",	LTYPEY,	API2FL,	/* syn */
837 	"PI2FW",	LTYPEY,	API2FW,
838 	"CVTPS2PD",	LTYPEY,	ACVTPS2PD,
839 	"CVTSD2SL",	LTYPEY,	ACVTSD2SL,
840 	"CVTSD2SQ",	LTYPEY,	ACVTSD2SQ,
841 	"CVTSD2SS",	LTYPEY,	ACVTSD2SS,
842 	"CVTSL2SD",	LTYPEY,	ACVTSL2SD,
843 	"CVTSQ2SD",	LTYPEY,	ACVTSQ2SD,
844 	"CVTSL2SS",	LTYPEY,	ACVTSL2SS,
845 	"CVTSQ2SS",	LTYPEY,	ACVTSQ2SS,
846 	"CVTSS2SD",	LTYPEY,	ACVTSS2SD,
847 	"CVTSS2SL",	LTYPEY,	ACVTSS2SL,
848 	"CVTSS2SQ",	LTYPEY,	ACVTSS2SQ,
849 	"CVTTPD2PL",	LTYPEY,	ACVTTPD2PL,
850 	"CVTTPS2PL",	LTYPEY,	ACVTTPS2PL,
851 	"CVTTSD2SL",	LTYPEY,	ACVTTSD2SL,
852 	"CVTTSD2SQ",	LTYPEY,	ACVTTSD2SQ,
853 	"CVTTSS2SL",	LTYPEY,	ACVTTSS2SL,
854 	"CVTTSS2SQ",	LTYPEY,	ACVTTSS2SQ,
855 	"DIVPD",	LTYPEY,	ADIVPD,
856 	"DIVPS",	LTYPEY,	ADIVPS,
857 	"DIVSD",	LTYPEY,	ADIVSD,
858 	"DIVSS",	LTYPEY,	ADIVSS,
859 	"FXRSTOR",	LTYPE2,	AFXRSTOR,
860 	"FXRSTOR64",	LTYPE2,	AFXRSTOR64,
861 	"FXSAVE",	LTYPE1,	AFXSAVE,
862 	"FXSAVE64",	LTYPE1,	AFXSAVE64,
863 	"LDMXCSR",	LTYPE2,	ALDMXCSR,
864 	"MASKMOVDQU",	LTYPE3,	AMASKMOVDQU,
865 	"MASKMOVQ",	LTYPE3,	AMASKMOVQ,
866 	"MAXPD",	LTYPEY,	AMAXPD,
867 	"MAXPS",	LTYPEY,	AMAXPS,
868 	"MAXSD",	LTYPEY,	AMAXSD,
869 	"MAXSS",	LTYPEY,	AMAXSS,
870 	"MINPD",	LTYPEY,	AMINPD,
871 	"MINPS",	LTYPEY,	AMINPS,
872 	"MINSD",	LTYPEY,	AMINSD,
873 	"MINSS",	LTYPEY,	AMINSS,
874 	"MOVAPD",	LTYPE3,	AMOVAPD,
875 	"MOVAPS",	LTYPE3,	AMOVAPS,
876 	"MOVD",		LTYPE3,	AMOVQ,	/* syn */
877 	"MOVDQ2Q",	LTYPE3,	AMOVQ,	/* syn */
878 	"MOVO",		LTYPE3,	AMOVO,
879 	"MOVOA",	LTYPE3,	AMOVDQA,	/* syn */
880 	"MOVDQA",	LTYPE3,	AMOVDQA,
881 	"MOVDQU",	LTYPE3,	AMOVDQU,
882 	"MOVQQA",	LTYPE3, AMOVQQA,
883 	"MOVQQU",	LTYPE3,	AMOVQQU,
884 	"MOVHLPS",	LTYPE3,	AMOVHLPS,
885 	"MOVHPD",	LTYPE3,	AMOVHPD,
886 	"MOVHPS",	LTYPE3,	AMOVHPS,
887 	"MOVLHPS",	LTYPE3,	AMOVLHPS,
888 	"MOVLPD",	LTYPE3,	AMOVLPD,
889 	"MOVLPS",	LTYPE3,	AMOVLPS,
890 	"MOVMSKPD",	LTYPE3,	AMOVMSKPD,
891 	"MOVMSKPS",	LTYPE3,	AMOVMSKPS,
892 	"MOVNTDQ",	LTYPE3,	AMOVNTDQ,
893 	"MOVNTPD",	LTYPE3,	AMOVNTPD,
894 	"MOVNTPS",	LTYPE3,	AMOVNTPS,
895 	"MOVNTQ",	LTYPE3,	AMOVNTQ,
896 	"MOVQOZX",	LTYPE3,	AMOVQOZX,
897 	"MOVSD",	LTYPE3,	AMOVSD,
898 	"MOVSS",	LTYPE3,	AMOVSS,
899 	"MOVUPD",	LTYPE3,	AMOVUPD,
900 	"MOVUPS",	LTYPE3,	AMOVUPS,
901 	"MULPD",	LTYPEY,	AMULPD,
902 	"MULPS",	LTYPEY,	AMULPS,
903 	"MULSD",	LTYPEY,	AMULSD,
904 	"MULSS",	LTYPEY,	AMULSS,
905 	"ORPD",		LTYPEY,	AORPD,
906 	"ORPS",		LTYPEY,	AORPS,
907 	"PACKSSLW",	LTYPEY,	APACKSSLW,
908 	"PACKSSWB",	LTYPEY,	APACKSSWB,
909 	"PACKUSWB",	LTYPEY,	APACKUSWB,
910 	"PADDB",	LTYPEY,	APADDB,
911 	"PADDL",	LTYPEY,	APADDL,
912 	"PADDQ",	LTYPEY,	APADDQ,
913 	"PADDSB",	LTYPEY,	APADDSB,
914 	"PADDSW",	LTYPEY,	APADDSW,
915 	"PADDUSB",	LTYPEY,	APADDUSB,
916 	"PADDUSW",	LTYPEY,	APADDUSW,
917 	"PADDW",	LTYPEY,	APADDW,
918 	"PAND",		LTYPEY, APAND,
919 	"PANDB",	LTYPEY,	APANDB,
920 	"PANDL",	LTYPEY,	APANDL,
921 	"PANDSB",	LTYPEY,	APANDSB,
922 	"PANDSW",	LTYPEY,	APANDSW,
923 	"PANDUSB",	LTYPEY,	APANDUSB,
924 	"PANDUSW",	LTYPEY,	APANDUSW,
925 	"PANDW",	LTYPEY,	APANDW,
926 	"PANDN",	LTYPEY, APANDN,
927 	"PAVGB",	LTYPEY,	APAVGB,
928 	"PAVGW",	LTYPEY,	APAVGW,
929 	"PCMPEQB",	LTYPEY,	APCMPEQB,
930 	"PCMPEQL",	LTYPEY,	APCMPEQL,
931 	"PCMPEQW",	LTYPEY,	APCMPEQW,
932 	"PCMPGTB",	LTYPEY,	APCMPGTB,
933 	"PCMPGTL",	LTYPEY,	APCMPGTL,
934 	"PCMPGTW",	LTYPEY,	APCMPGTW,
935 	"PEXTRW",	LTYPEX,	APEXTRW,
936 	"PINSRW",	LTYPEX,	APINSRW,
937 	"PMADDWL",	LTYPEY,	APMADDWL,
938 	"PMAXSW",	LTYPEY,	APMAXSW,
939 	"PMAXUB",	LTYPEY,	APMAXUB,
940 	"PMINSW",	LTYPEY,	APMINSW,
941 	"PMINUB",	LTYPEY,	APMINUB,
942 	"PMOVMSKB",	LTYPE3,	APMOVMSKB,
943 	"PMULHRW",	LTYPEY,	APMULHRW,
944 	"PMULHUW",	LTYPEY,	APMULHUW,
945 	"PMULHW",	LTYPEY,	APMULHW,
946 	"PMULLW",	LTYPEY,	APMULLW,
947 	"PMULULQ",	LTYPEY,	APMULULQ,
948 	"POR",		LTYPEY,	APOR,
949 	"PSADBW",	LTYPEY,	APSADBW,
950 	"PSHUFHW",	LTYPEX,	APSHUFHW,
951 	"PSHUFL",	LTYPEX,	APSHUFL,
952 	"PSHUFLW",	LTYPEX,	APSHUFLW,
953 	"PSHUFW",	LTYPEX, APSHUFW,
954 	"PSLLDQ",	LTYPEY,	APSLLDQ,
955 	"PSLLL",	LTYPEY,	APSLLL,
956 	"PSLLQ",	LTYPEY,	APSLLQ,
957 	"PSLLW",	LTYPEY,	APSLLW,
958 	"PSRAL",	LTYPEY,	APSRAL,
959 	"PSRAW",	LTYPEY,	APSRAW,
960 	"PSRLDQ",	LTYPEY,	APSRLDQ,
961 	"PSRLL",	LTYPEY,	APSRLL,
962 	"PSRLQ",	LTYPEY,	APSRLQ,
963 	"PSRLW",	LTYPEY,	APSRLW,
964 	"PSUBB",	LTYPEY,	APSUBB,
965 	"PSUBL",	LTYPEY,	APSUBL,
966 	"PSUBQ",	LTYPEY,	APSUBQ,
967 	"PSUBSB",	LTYPEY,	APSUBSB,
968 	"PSUBSW",	LTYPEY,	APSUBSW,
969 	"PSUBUSB",	LTYPEY,	APSUBUSB,
970 	"PSUBUSW",	LTYPEY,	APSUBUSW,
971 	"PSUBW",	LTYPEY,	APSUBW,
972 	"PUNPCKHBW",	LTYPEY,	APUNPCKHBW,
973 	"PUNPCKHLQ",	LTYPEY,	APUNPCKHLQ,
974 	"PUNPCKHQDQ",	LTYPEY,	APUNPCKHQDQ,
975 	"PUNPCKHWL",	LTYPEY,	APUNPCKHWL,
976 	"PUNPCKLBW",	LTYPEY,	APUNPCKLBW,
977 	"PUNPCKLLQ",	LTYPEY,	APUNPCKLLQ,
978 	"PUNPCKLQDQ",	LTYPEY,	APUNPCKLQDQ,
979 	"PUNPCKLWL",	LTYPEY,	APUNPCKLWL,
980 	"PXOR",		LTYPEY,	APXOR,
981 	"RCPPS",	LTYPEY,	ARCPPS,
982 	"RCPSS",	LTYPEY,	ARCPSS,
983 	"RSQRTPS",	LTYPEY,	ARSQRTPS,
984 	"RSQRTSS",	LTYPEY,	ARSQRTSS,
985 	"SHUFPD",	LTYPEX,	ASHUFPD,
986 	"SHUFPS",	LTYPEX,	ASHUFPS,
987 	"SQRTPD",	LTYPEY,	ASQRTPD,
988 	"SQRTPS",	LTYPEY,	ASQRTPS,
989 	"SQRTSD",	LTYPEY,	ASQRTSD,
990 	"SQRTSS",	LTYPEY,	ASQRTSS,
991 	"STMXCSR",	LTYPE1,	ASTMXCSR,
992 	"SUBPD",	LTYPEY,	ASUBPD,
993 	"SUBPS",	LTYPEY,	ASUBPS,
994 	"SUBSD",	LTYPEY,	ASUBSD,
995 	"SUBSS",	LTYPEY,	ASUBSS,
996 	"UCOMISD",	LTYPEY,	AUCOMISD,
997 	"UCOMISS",	LTYPEY,	AUCOMISS,
998 	"UNPCKHPD",	LTYPEY,	AUNPCKHPD,
999 	"UNPCKHPS",	LTYPEY,	AUNPCKHPS,
1000 	"UNPCKLPD",	LTYPEY,	AUNPCKLPD,
1001 	"UNPCKLPS",	LTYPEY,	AUNPCKLPS,
1002 	"XORPD",	LTYPEY,	AXORPD,
1003 	"XORPS",	LTYPEY,	AXORPS,
1004 	"XSAVE",	LTYPE1,	AXSAVE,
1005 	"XSAVEOPT",	LTYPE1,	AXSAVEOPT,
1006 	"XRSTOR",	LTYPE2,	AXRSTOR,
1007 
1008 	/* sse/vex */
1009 	"AESDEC",	LTYPEY,	AAESDEC,
1010 	"AESDECLAST",	LTYPEY,	AAESDECLAST,
1011 	"AESENC",	LTYPEY,	AAESENC,
1012 	"AESENCLAST",	LTYPEY,	AAESENCLAST,
1013 	"AESIMC",	LTYPEY,	AAESIMC,
1014 	"AESKEYGENASSIST",	LTYPEY,	AAESKEYGENASSIST,
1015 	"BLENDPD",	LTYPEY,	ABLENDPD,
1016 	"BLENDPS",	LTYPEY,	ABLENDPS,
1017 	"BLENDVPD",	LTYPEY,	ABLENDVPD,
1018 	"BLENDVPS",	LTYPEY,	ABLENDVPS,
1019 	"CRC32B",	LTYPE3,	ACRC32B,
1020 	"CRC32L",	LTYPE3,	ACRC32L,
1021 	"CRC32Q",	LTYPE3,	ACRC32Q,
1022 	"CRC32W",	LTYPE3,	ACRC32W,
1023 	"DPPD",	LTYPEY,	ADPPD,
1024 	"DPPS",	LTYPEY,	ADPPS,
1025 	"EXTRACTPS",	LTYPEY,	AEXTRACTPS,
1026 	"INSERTPS",	LTYPEY,	AINSERTPS,
1027 	"MOVNTDQA",	LTYPEY,	AMOVNTDQA,
1028 	"MPSADBW",	LTYPEY,	AMPSADBW,
1029 	"PABSB",	LTYPEY,	APABSB,
1030 	"PABSL",	LTYPEY,	APABSL,
1031 	"PABSD",	LTYPEY,	APABSL,	/* syn */
1032 	"PABSW",	LTYPEY,	APABSW,
1033 	"PACKUSDW",	LTYPEY,	APACKUSDW,
1034 	"PALIGNR",	LTYPEX,	APALIGNR,
1035 	"PBLENDVB",	LTYPEY,	APBLENDVB,
1036 	"PBLENDW",	LTYPEY,	APBLENDW,
1037 	"PCLMULHQHQDQ",	LTYPEY,	APCLMULHQHQDQ,
1038 	"PCLMULHQLQDQ",	LTYPEY,	APCLMULHQLQDQ,
1039 	"PCLMULLQHQDQ",	LTYPEY,	APCLMULLQHQDQ,
1040 	"PCLMULLQLQDQ",	LTYPEY,	APCLMULLQLQDQ,
1041 	"PCLMULQDQ",	LTYPEY,	APCLMULQDQ,
1042 	"PCMPEQQ",	LTYPEY,	APCMPEQQ,
1043 	"PCMPESTRI",	LTYPEY,	APCMPESTRI,
1044 	"PCMPESTRM",	LTYPEY,	APCMPESTRM,
1045 	"PCMPGTQ",	LTYPEY,	APCMPGTQ,
1046 	"PCMPISTRI",	LTYPEY,	APCMPISTRI,
1047 	"PCMPISTRM",	LTYPEY,	APCMPISTRM,
1048 	"PEXTRB",	LTYPEY,	APEXTRB,
1049 	"PEXTRL",	LTYPEY,	APEXTRL,
1050 	"PHADDL",	LTYPEY,	APHADDL,
1051 	"PHADDSW",	LTYPEY,	APHADDSW,
1052 	"PHADDW",	LTYPEY,	APHADDW,
1053 	"PHMINPOSUW",	LTYPEY,	APHMINPOSUW,
1054 	"PHSUBL",	LTYPEY,	APHSUBL,
1055 	"PHSUBSW",	LTYPEY,	APHSUBSW,
1056 	"PHSUBW",	LTYPEY,	APHSUBW,
1057 	"PINSRB",	LTYPEY,	APINSRB,
1058 	"PINSRL",	LTYPEY,	APINSRL,
1059 	"PMADDUBSW",	LTYPEY,	APMADDUBSW,
1060 	"PMAXSB",	LTYPEY,	APMAXSB,
1061 	"PMAXSL",	LTYPEY,	APMAXSL,
1062 	"PMAXUL",	LTYPEY,	APMAXUL,
1063 	"PMAXUW",	LTYPEY,	APMAXUW,
1064 	"PMINSB",	LTYPEY,	APMINSB,
1065 	"PMINSL",	LTYPEY,	APMINSL,
1066 	"PMINUL",	LTYPEY,	APMINUL,
1067 	"PMINUW",	LTYPEY,	APMINUW,
1068 	"PMOVSXBL",	LTYPEY,	APMOVSXBL,
1069 	"PMOVSXBQ",	LTYPEY,	APMOVSXBQ,
1070 	"PMOVSXBW",	LTYPEY,	APMOVSXBW,
1071 	"PMOVSXLQ",	LTYPEY,	APMOVSXLQ,
1072 	"PMOVSXWL",	LTYPEY,	APMOVSXWL,
1073 	"PMOVSXWQ",	LTYPEY,	APMOVSXWQ,
1074 	"PMOVZXBL",	LTYPEY,	APMOVZXBL,
1075 	"PMOVZXBQ",	LTYPEY,	APMOVZXBQ,
1076 	"PMOVZXBW",	LTYPEY,	APMOVZXBW,
1077 	"PMOVZXLQ",	LTYPEY,	APMOVZXLQ,
1078 	"PMOVZXWL",	LTYPEY,	APMOVZXWL,
1079 	"PMOVZXWQ",	LTYPEY,	APMOVZXWQ,
1080 	"PMULHRSW",	LTYPEY,	APMULHRSW,
1081 	"PMULLL",	LTYPEY,	APMULLL,
1082 	"PMULLQ",	LTYPEY,	APMULLQ,
1083 	"PSHUFB",	LTYPEY,	APSHUFB,
1084 	"PSIGNB",	LTYPEY,	APSIGNB,
1085 	"PSIGNL",	LTYPEY,	APSIGNL,
1086 	"PSIGNW",	LTYPEY,	APSIGNW,
1087 	"PTEST",	LTYPEY,	APTEST,
1088 	"ROUNDPD",	LTYPEY,	AROUNDPD,
1089 	"ROUNDPS",	LTYPEY,	AROUNDPS,
1090 	"ROUNDSD",	LTYPEY,	AROUNDSD,
1091 	"ROUNDSS",	LTYPEY,	AROUNDSS,
1092 
1093 	/* vex only */
1094 	"VBROADCASTF128",	LTYPEY,	AVBROADCASTF128,
1095 	"VBROADCASTSL",	LTYPEY,	AVBROADCASTSL,
1096 	"VBROADCASTSS",	LTYPEY,	AVBROADCASTSS,
1097 	"VMASKMOVPD",	LTYPEY,	AVMASKMOVPD,
1098 	"VMASKMOVPS",	LTYPEY,	AVMASKMOVPS,
1099 	"VPERMILPD",	LTYPEY,	AVPERMILPD,
1100 	"VPERMILPS",	LTYPEY,	AVPERMILPS,
1101 	"VTESTPD",	LTYPEY,	AVTESTPD,
1102 	"VTESTPS",	LTYPEY,	AVTESTPS,
1103 
1104 	/* V* synonyms */
1105 	"VADDPD",	LTYPEY,	AADDPD,
1106 	"VADDPS",	LTYPEY,	AADDPS,
1107 	"VADDSD",	LTYPEY,	AADDSD,
1108 	"VADDSS",	LTYPEY,	AADDSS,
1109 	"VANDNPD",	LTYPEY,	AANDNPD,
1110 	"VANDNPS",	LTYPEY,	AANDNPS,
1111 	"VANDPD",	LTYPEY,	AANDPD,
1112 	"VANDPS",	LTYPEY,	AANDPS,
1113 	"VCMPPD",	LTYPEXC,ACMPPD,
1114 	"VCMPPS",	LTYPEXC,ACMPPS,
1115 	"VCMPSD",	LTYPEXC,ACMPSD,
1116 	"VCMPSS",	LTYPEXC,ACMPSS,
1117 	"VCOMISD",	LTYPEY,	ACOMISD,
1118 	"VCOMISS",	LTYPEY,	ACOMISS,
1119 	"VCVTPL2PD",	LTYPEY,	ACVTPL2PD,
1120 	"VCVTPL2PS",	LTYPEY,	ACVTPL2PS,
1121 	"VCVTPD2PL",	LTYPEY,	ACVTPD2PL,
1122 	"VCVTPD2PS",	LTYPEY,	ACVTPD2PS,
1123 	"VCVTPS2PL",	LTYPEY,	ACVTPS2PL,
1124 	"VCVTPS2PD",	LTYPEY,	ACVTPS2PD,
1125 	"VCVTSD2SL",	LTYPEY,	ACVTSD2SL,
1126 	"VCVTSD2SQ",	LTYPEY,	ACVTSD2SQ,
1127 	"VCVTSD2SS",	LTYPEY,	ACVTSD2SS,
1128 	"VCVTSL2SD",	LTYPEY,	ACVTSL2SD,
1129 	"VCVTSQ2SD",	LTYPEY,	ACVTSQ2SD,
1130 	"VCVTSL2SS",	LTYPEY,	ACVTSL2SS,
1131 	"VCVTSQ2SS",	LTYPEY,	ACVTSQ2SS,
1132 	"VCVTSS2SD",	LTYPEY,	ACVTSS2SD,
1133 	"VCVTSS2SL",	LTYPEY,	ACVTSS2SL,
1134 	"VCVTSS2SQ",	LTYPEY,	ACVTSS2SQ,
1135 	"VCVTTPD2PL",	LTYPEY,	ACVTTPD2PL,
1136 	"VCVTTPS2PL",	LTYPEY,	ACVTTPS2PL,
1137 	"VCVTTSD2SL",	LTYPEY,	ACVTTSD2SL,
1138 	"VCVTTSS2SL",	LTYPEY,	ACVTTSS2SL,
1139 	"VDIVPD",	LTYPEY,	ADIVPD,
1140 	"VDIVPS",	LTYPEY,	ADIVPS,
1141 	"VDIVSD",	LTYPEY,	ADIVSD,
1142 	"VDIVSS",	LTYPEY,	ADIVSS,
1143 	"VLDMXCSR",	LTYPE2,	ALDMXCSR,
1144 	"VMASKMOVDQU",	LTYPE3,	AMASKMOVDQU,
1145 	"VMASKMOVQ",	LTYPE3,	AMASKMOVQ,
1146 	"VMAXPD",	LTYPEY,	AMAXPD,
1147 	"VMAXPS",	LTYPEY,	AMAXPS,
1148 	"VMAXSD",	LTYPEY,	AMAXSD,
1149 	"VMAXSS",	LTYPEY,	AMAXSS,
1150 	"VMINPD",	LTYPEY,	AMINPD,
1151 	"VMINPS",	LTYPEY,	AMINPS,
1152 	"VMINSD",	LTYPEY,	AMINSD,
1153 	"VMINSS",	LTYPEY,	AMINSS,
1154 	"VMOVAPD",	LTYPE3,	AMOVAPD,
1155 	"VMOVAPS",	LTYPE3,	AMOVAPS,
1156 	"VMOVD",		LTYPE3,	AMOVL,	/* syn */
1157 	"VMOVDQA",	LTYPE3,	AMOVDQA,
1158 	"VMOVDQU",	LTYPE3,	AMOVDQU,
1159 	"VMOVQ",		LTYPE3,	AMOVQ,
1160 	"VMOVQQA",	LTYPE3, AMOVQQA,
1161 	"VMOVQQU",	LTYPE3,	AMOVQQU,
1162 	"VMOVHLPS",	LTYPE3,	AMOVHLPS,
1163 	"VMOVHPD",	LTYPE3,	AMOVHPD,
1164 	"VMOVHPS",	LTYPE3,	AMOVHPS,
1165 	"VMOVLHPS",	LTYPE3,	AMOVLHPS,
1166 	"VMOVLPD",	LTYPE3,	AMOVLPD,
1167 	"VMOVLPS",	LTYPE3,	AMOVLPS,
1168 	"VMOVMSKPD",	LTYPE3,	AMOVMSKPD,
1169 	"VMOVMSKPS",	LTYPE3,	AMOVMSKPS,
1170 	"VMOVNTDQ",	LTYPE3,	AMOVNTDQ,
1171 	"VMOVNTPD",	LTYPE3,	AMOVNTPD,
1172 	"VMOVNTPS",	LTYPE3,	AMOVNTPS,
1173 	"VMOVNTQ",	LTYPE3,	AMOVNTQ,
1174 	"VMOVSD",	LTYPE3,	AMOVSD,
1175 	"VMOVSS",	LTYPE3,	AMOVSS,
1176 	"VMOVUPD",	LTYPE3,	AMOVUPD,
1177 	"VMOVUPS",	LTYPE3,	AMOVUPS,
1178 	"VMULPD",	LTYPEY,	AMULPD,
1179 	"VMULPS",	LTYPEY,	AMULPS,
1180 	"VMULSD",	LTYPEY,	AMULSD,
1181 	"VMULSS",	LTYPEY,	AMULSS,
1182 	"VORPD",		LTYPEY,	AORPD,
1183 	"VORPS",		LTYPEY,	AORPS,
1184 	"VPACKSSLW",	LTYPEY,	APACKSSLW,
1185 	"VPACKSSWB",	LTYPEY,	APACKSSWB,
1186 	"VPACKUSWB",	LTYPEY,	APACKUSWB,
1187 	"VPADDB",	LTYPEY,	APADDB,
1188 	"VPADDL",	LTYPEY,	APADDL,
1189 	"VPADDQ",	LTYPEY,	APADDQ,
1190 	"VPADDSB",	LTYPEY,	APADDSB,
1191 	"VPADDSW",	LTYPEY,	APADDSW,
1192 	"VPADDUSB",	LTYPEY,	APADDUSB,
1193 	"VPADDUSW",	LTYPEY,	APADDUSW,
1194 	"VPADDW",	LTYPEY,	APADDW,
1195 	"VPAND",		LTYPEY, APAND,
1196 	"VPANDB",	LTYPEY,	APANDB,
1197 	"VPANDL",	LTYPEY,	APANDL,
1198 	"VPANDSB",	LTYPEY,	APANDSB,
1199 	"VPANDSW",	LTYPEY,	APANDSW,
1200 	"VPANDUSB",	LTYPEY,	APANDUSB,
1201 	"VPANDUSW",	LTYPEY,	APANDUSW,
1202 	"VPANDW",	LTYPEY,	APANDW,
1203 	"VPANDN",	LTYPEY, APANDN,
1204 	"VPAVGB",	LTYPEY,	APAVGB,
1205 	"VPAVGW",	LTYPEY,	APAVGW,
1206 	"VPCMPEQB",	LTYPEY,	APCMPEQB,
1207 	"VPCMPEQL",	LTYPEY,	APCMPEQL,
1208 	"VPCMPEQW",	LTYPEY,	APCMPEQW,
1209 	"VPCMPGTB",	LTYPEY,	APCMPGTB,
1210 	"VPCMPGTL",	LTYPEY,	APCMPGTL,
1211 	"VPCMPGTW",	LTYPEY,	APCMPGTW,
1212 	"VPEXTRW",	LTYPEX,	APEXTRW,
1213 	"VPINSRW",	LTYPEX,	APINSRW,
1214 	"VPMADDWL",	LTYPEY,	APMADDWL,
1215 	"VPMAXSW",	LTYPEY,	APMAXSW,
1216 	"VPMAXUB",	LTYPEY,	APMAXUB,
1217 	"VPMINSW",	LTYPEY,	APMINSW,
1218 	"VPMINUB",	LTYPEY,	APMINUB,
1219 	"VPMOVMSKB",	LTYPE3,	APMOVMSKB,
1220 	"VPMULHUW",	LTYPEY,	APMULHUW,
1221 	"VPMULHW",	LTYPEY,	APMULHW,
1222 	"VPMULLW",	LTYPEY,	APMULLW,
1223 	"VPMULULQ",	LTYPEY,	APMULULQ,
1224 	"VPOR",		LTYPEY,	APOR,
1225 	"VPSADBW",	LTYPEY,	APSADBW,
1226 	"VPSHUFHW",	LTYPEX,	APSHUFHW,
1227 	"VPSHUFL",	LTYPEX,	APSHUFL,
1228 	"VPSHUFLW",	LTYPEX,	APSHUFLW,
1229 	"VPSLLDQ",	LTYPEY,	APSLLDQ,
1230 	"VPSLLL",	LTYPEY,	APSLLL,
1231 	"VPSLLQ",	LTYPEY,	APSLLQ,
1232 	"VPSLLW",	LTYPEY,	APSLLW,
1233 	"VPSRAL",	LTYPEY,	APSRAL,
1234 	"VPSRAW",	LTYPEY,	APSRAW,
1235 	"VPSRLDQ",	LTYPEY,	APSRLDQ,
1236 	"VPSRLL",	LTYPEY,	APSRLL,
1237 	"VPSRLQ",	LTYPEY,	APSRLQ,
1238 	"VPSRLW",	LTYPEY,	APSRLW,
1239 	"VPSUBB",	LTYPEY,	APSUBB,
1240 	"VPSUBL",	LTYPEY,	APSUBL,
1241 	"VPSUBQ",	LTYPEY,	APSUBQ,
1242 	"VPSUBSB",	LTYPEY,	APSUBSB,
1243 	"VPSUBSW",	LTYPEY,	APSUBSW,
1244 	"VPSUBUSB",	LTYPEY,	APSUBUSB,
1245 	"VPSUBUSW",	LTYPEY,	APSUBUSW,
1246 	"VPSUBW",	LTYPEY,	APSUBW,
1247 	"VPUNPCKHBW",	LTYPEY,	APUNPCKHBW,
1248 	"VPUNPCKHLQ",	LTYPEY,	APUNPCKHLQ,
1249 	"VPUNPCKHQDQ",	LTYPEY,	APUNPCKHQDQ,
1250 	"VPUNPCKHWL",	LTYPEY,	APUNPCKHWL,
1251 	"VPUNPCKLBW",	LTYPEY,	APUNPCKLBW,
1252 	"VPUNPCKLLQ",	LTYPEY,	APUNPCKLLQ,
1253 	"VPUNPCKLQDQ",	LTYPEY,	APUNPCKLQDQ,
1254 	"VPUNPCKLWL",	LTYPEY,	APUNPCKLWL,
1255 	"VPXOR",		LTYPEY,	APXOR,
1256 	"VRCPPS",	LTYPEY,	ARCPPS,
1257 	"VRCPSS",	LTYPEY,	ARCPSS,
1258 	"VRSQRTPS",	LTYPEY,	ARSQRTPS,
1259 	"VRSQRTSS",	LTYPEY,	ARSQRTSS,
1260 	"VSHUFPD",	LTYPEX,	ASHUFPD,
1261 	"VSHUFPS",	LTYPEX,	ASHUFPS,
1262 	"VSQRTPD",	LTYPEY,	ASQRTPD,
1263 	"VSQRTPS",	LTYPEY,	ASQRTPS,
1264 	"VSQRTSD",	LTYPEY,	ASQRTSD,
1265 	"VSQRTSS",	LTYPEY,	ASQRTSS,
1266 	"VSTMXCSR",	LTYPE1,	ASTMXCSR,
1267 	"VSUBPD",	LTYPEY,	ASUBPD,
1268 	"VSUBPS",	LTYPEY,	ASUBPS,
1269 	"VSUBSD",	LTYPEY,	ASUBSD,
1270 	"VSUBSS",	LTYPEY,	ASUBSS,
1271 	"VUCOMISD",	LTYPEY,	AUCOMISD,
1272 	"VUCOMISS",	LTYPEY,	AUCOMISS,
1273 	"VUNPCKHPD",	LTYPEY,	AUNPCKHPD,
1274 	"VUNPCKHPS",	LTYPEY,	AUNPCKHPS,
1275 	"VUNPCKLPD",	LTYPEY,	AUNPCKLPD,
1276 	"VUNPCKLPS",	LTYPEY,	AUNPCKLPS,
1277 	"VXORPD",	LTYPEY,	AXORPD,
1278 	"VXORPS",	LTYPEY,	AXORPS,
1279 	"VAESDEC",	LTYPEY,	AAESDEC,
1280 	"VAESDECLAST",	LTYPEY,	AAESDECLAST,
1281 	"VAESENC",	LTYPEY,	AAESENC,
1282 	"VAESENCLAST",	LTYPEY,	AAESENCLAST,
1283 	"VAESIMC",	LTYPEY,	AAESIMC,
1284 	"VAESKEYGENASSIST",	LTYPEY,	AAESKEYGENASSIST,
1285 	"VBLENDPD",	LTYPEY,	ABLENDPD,
1286 	"VBLENDPS",	LTYPEY,	ABLENDPS,
1287 	"VBLENDVPD",	LTYPEY,	ABLENDVPD,
1288 	"VBLENDVPS",	LTYPEY,	ABLENDVPS,
1289 	"VDPPD",	LTYPEY,	ADPPD,
1290 	"VDPPS",	LTYPEY,	ADPPS,
1291 	"VEXTRACTPS",	LTYPEY,	AEXTRACTPS,
1292 	"VINSERTPS",	LTYPEY,	AINSERTPS,
1293 	"VMOVNTDQA",	LTYPEY,	AMOVNTDQA,
1294 	"VMPSADBW",	LTYPEY,	AMPSADBW,
1295 	"VPABSB",	LTYPEY,	APABSB,
1296 	"VPABSD",	LTYPEY,	APABSL,	/* syn */
1297 	"VPABSL",	LTYPEY,	APABSL,
1298 	"VPABSW",	LTYPEY,	APABSW,
1299 	"VPACKUSDW",	LTYPEY,	APACKUSDW,
1300 	"VPALIGNR",	LTYPEX,	APALIGNR,
1301 	"VPBLENDVB",	LTYPEY,	APBLENDVB,
1302 	"VPBLENDW",	LTYPEY,	APBLENDW,
1303 	"VPCLMULHQHQDQ",	LTYPEY,	APCLMULHQHQDQ,
1304 	"VPCLMULHQLQDQ",	LTYPEY,	APCLMULHQLQDQ,
1305 	"VPCLMULLQHQDQ",	LTYPEY,	APCLMULLQHQDQ,
1306 	"VPCLMULLQLQDQ",	LTYPEY,	APCLMULLQLQDQ,
1307 	"VPCLMULQDQ",	LTYPEY,	APCLMULQDQ,
1308 	"VPCMPEQQ",	LTYPEY,	APCMPEQQ,
1309 	"VPCMPESTRI",	LTYPEY,	APCMPESTRI,
1310 	"VPCMPESTRM",	LTYPEY,	APCMPESTRM,
1311 	"VPCMPGTQ",	LTYPEY,	APCMPGTQ,
1312 	"VPCMPISTRI",	LTYPEY,	APCMPISTRI,
1313 	"VPCMPISTRM",	LTYPEY,	APCMPISTRM,
1314 	"VPEXTRB",	LTYPEY,	APEXTRB,
1315 	"VPEXTRL",	LTYPEY,	APEXTRL,
1316 	"VPHADDL",	LTYPEY,	APHADDL,
1317 	"VPHADDSW",	LTYPEY,	APHADDSW,
1318 	"VPHADDW",	LTYPEY,	APHADDW,
1319 	"VPHMINPOSUW",	LTYPEY,	APHMINPOSUW,
1320 	"VPHSUBL",	LTYPEY,	APHSUBL,
1321 	"VPHSUBSW",	LTYPEY,	APHSUBSW,
1322 	"VPHSUBW",	LTYPEY,	APHSUBW,
1323 	"VPINSRB",	LTYPEY,	APINSRB,
1324 	"VPINSRL",	LTYPEY,	APINSRL,
1325 	"VPMADDUBSW",	LTYPEY,	APMADDUBSW,
1326 	"VPMAXSB",	LTYPEY,	APMAXSB,
1327 	"VPMAXSL",	LTYPEY,	APMAXSL,
1328 	"VPMAXUL",	LTYPEY,	APMAXUL,
1329 	"VPMAXUW",	LTYPEY,	APMAXUW,
1330 	"VPMINSB",	LTYPEY,	APMINSB,
1331 	"VPMINSL",	LTYPEY,	APMINSL,
1332 	"VPMINUL",	LTYPEY,	APMINUL,
1333 	"VPMINUW",	LTYPEY,	APMINUW,
1334 	"VPMOVSXBL",	LTYPEY,	APMOVSXBL,
1335 	"VPMOVSXBQ",	LTYPEY,	APMOVSXBQ,
1336 	"VPMOVSXBW",	LTYPEY,	APMOVSXBW,
1337 	"VPMOVSXLQ",	LTYPEY,	APMOVSXLQ,
1338 	"VPMOVSXWL",	LTYPEY,	APMOVSXWL,
1339 	"VPMOVSXWQ",	LTYPEY,	APMOVSXWQ,
1340 	"VPMOVZXBL",	LTYPEY,	APMOVZXBL,
1341 	"VPMOVZXBQ",	LTYPEY,	APMOVZXBQ,
1342 	"VPMOVZXBW",	LTYPEY,	APMOVZXBW,
1343 	"VPMOVZXLQ",	LTYPEY,	APMOVZXLQ,
1344 	"VPMOVZXWL",	LTYPEY,	APMOVZXWL,
1345 	"VPMOVZXWQ",	LTYPEY,	APMOVZXWQ,
1346 	"VPMULHRSW",	LTYPEY,	APMULHRSW,
1347 	"VPMULLL",	LTYPEY,	APMULLL,
1348 	"VPMULLQ",	LTYPEY,	APMULLQ,
1349 	"VPSHUFB",	LTYPEY,	APSHUFB,
1350 	"VPSIGNB",	LTYPEY,	APSIGNB,
1351 	"VPSIGNL",	LTYPEY,	APSIGNL,
1352 	"VPSIGNW",	LTYPEY,	APSIGNW,
1353 	"VPTEST",	LTYPEY,	APTEST,
1354 	"VROUNDPD",	LTYPEY,	AROUNDPD,
1355 	"VROUNDPS",	LTYPEY,	AROUNDPS,
1356 	"VROUNDSD",	LTYPEY,	AROUNDSD,
1357 	"VROUNDSS",	LTYPEY,	AROUNDSS,
1358 	0
1359 };
1360 
1361 int
isxyreg(int t)1362 isxyreg(int t)
1363 {
1364 	return t >= D_X0 && t <= D_X15 || t >= D_Y0 && t <= D_Y15;
1365 }
1366 
1367 void
cinit(void)1368 cinit(void)
1369 {
1370 	Sym *s;
1371 	int i;
1372 
1373 	nullgen.sym = S;
1374 	nullgen.offset = 0;
1375 	if(FPCHIP)
1376 		nullgen.dval = 0;
1377 	for(i=0; i<sizeof(nullgen.sval); i++)
1378 		nullgen.sval[i] = 0;
1379 	nullgen.type = D_NONE;
1380 	nullgen.index = D_NONE;
1381 	nullgen.scale = 0;
1382 
1383 	nerrors = 0;
1384 	iostack = I;
1385 	iofree = I;
1386 	peekc = IGN;
1387 	nhunk = 0;
1388 	for(i=0; i<NHASH; i++)
1389 		hash[i] = S;
1390 	for(i=0; itab[i].name; i++) {
1391 		s = slookup(itab[i].name);
1392 		if(s->type != LNAME)
1393 			yyerror("double initialization %s", itab[i].name);
1394 		s->type = itab[i].type;
1395 		s->value = itab[i].value;
1396 	}
1397 
1398 	pathname = allocn(pathname, 0, 100);
1399 	if(mygetwd(pathname, 99) == 0) {
1400 		pathname = allocn(pathname, 100, 900);
1401 		if(mygetwd(pathname, 999) == 0)
1402 			strcpy(pathname, "/???");
1403 	}
1404 }
1405 
1406 void
checkscale(int scale)1407 checkscale(int scale)
1408 {
1409 
1410 	switch(scale) {
1411 	case 1:
1412 	case 2:
1413 	case 4:
1414 	case 8:
1415 		return;
1416 	}
1417 	yyerror("scale must be 1248: %d", scale);
1418 }
1419 
1420 void
syminit(Sym * s)1421 syminit(Sym *s)
1422 {
1423 
1424 	s->type = LNAME;
1425 	s->value = 0;
1426 }
1427 
1428 void
cclean(void)1429 cclean(void)
1430 {
1431 	Gen2 g2;
1432 
1433 	g2.from = nullgen;
1434 	g2.to = nullgen;
1435 	outcode(AEND, &g2);
1436 	Bflush(&obuf);
1437 }
1438 
1439 void
zname(char * n,int t,int s)1440 zname(char *n, int t, int s)
1441 {
1442 
1443 	Bputc(&obuf, ANAME);		/* as(2) */
1444 	Bputc(&obuf, ANAME>>8);
1445 	Bputc(&obuf, t);		/* type */
1446 	Bputc(&obuf, s);		/* sym */
1447 	while(*n) {
1448 		Bputc(&obuf, *n);
1449 		n++;
1450 	}
1451 	Bputc(&obuf, 0);
1452 }
1453 
1454 void
zaddr(Gen * a,int s)1455 zaddr(Gen *a, int s)
1456 {
1457 	int i, l, t;
1458 	char *n;
1459 	Ieee e;
1460 
1461 	t = 0;
1462 	if(a->index != D_NONE || a->scale != 0)
1463 		t |= T_INDEX;
1464 	if(a->offset != 0) {
1465 		t |= T_OFFSET;
1466 		l = a->offset;
1467 		if((vlong)l != a->offset)
1468 			t |= T_64;
1469 	}
1470 	if(s != 0)
1471 		t |= T_SYM;
1472 
1473 	switch(a->type) {
1474 	default:
1475 		t |= T_TYPE;
1476 		break;
1477 	case D_FCONST:
1478 		t |= T_FCONST;
1479 		break;
1480 	case D_SCONST:
1481 		t |= T_SCONST;
1482 		break;
1483 	case D_NONE:
1484 		break;
1485 	}
1486 	Bputc(&obuf, t);
1487 
1488 	if(t & T_INDEX) {	/* implies index, scale */
1489 		Bputc(&obuf, a->index);
1490 		Bputc(&obuf, a->scale);
1491 	}
1492 	if(t & T_OFFSET) {	/* implies offset */
1493 		l = a->offset;
1494 		Bputc(&obuf, l);
1495 		Bputc(&obuf, l>>8);
1496 		Bputc(&obuf, l>>16);
1497 		Bputc(&obuf, l>>24);
1498 		if(t & T_64) {
1499 			l = a->offset>>32;
1500 			Bputc(&obuf, l);
1501 			Bputc(&obuf, l>>8);
1502 			Bputc(&obuf, l>>16);
1503 			Bputc(&obuf, l>>24);
1504 		}
1505 	}
1506 	if(t & T_SYM)		/* implies sym */
1507 		Bputc(&obuf, s);
1508 	if(t & T_FCONST) {
1509 		ieeedtod(&e, a->dval);
1510 		l = e.l;
1511 		Bputc(&obuf, l);
1512 		Bputc(&obuf, l>>8);
1513 		Bputc(&obuf, l>>16);
1514 		Bputc(&obuf, l>>24);
1515 		l = e.h;
1516 		Bputc(&obuf, l);
1517 		Bputc(&obuf, l>>8);
1518 		Bputc(&obuf, l>>16);
1519 		Bputc(&obuf, l>>24);
1520 		return;
1521 	}
1522 	if(t & T_SCONST) {
1523 		n = a->sval;
1524 		for(i=0; i<NSNAME; i++) {
1525 			Bputc(&obuf, *n);
1526 			n++;
1527 		}
1528 		return;
1529 	}
1530 	if(t & T_TYPE)
1531 		Bputc(&obuf, a->type);
1532 }
1533 
1534 void
outcode(int a,Gen2 * g2)1535 outcode(int a, Gen2 *g2)
1536 {
1537 	int sf, st, t;
1538 	Sym *s;
1539 
1540 	if(pass == 1)
1541 		goto out;
1542 
1543 jackpot:
1544 	sf = 0;
1545 	s = g2->from.sym;
1546 	while(s != S) {
1547 		sf = s->sym;
1548 		if(sf < 0 || sf >= NSYM)
1549 			sf = 0;
1550 		t = g2->from.type;
1551 		if(t == D_ADDR)
1552 			t = g2->from.index;
1553 		if(h[sf].type == t)
1554 		if(h[sf].sym == s)
1555 			break;
1556 		zname(s->name, t, sym);
1557 		s->sym = sym;
1558 		h[sym].sym = s;
1559 		h[sym].type = t;
1560 		sf = sym;
1561 		sym++;
1562 		if(sym >= NSYM)
1563 			sym = 1;
1564 		break;
1565 	}
1566 	st = 0;
1567 	s = g2->to.sym;
1568 	while(s != S) {
1569 		st = s->sym;
1570 		if(st < 0 || st >= NSYM)
1571 			st = 0;
1572 		t = g2->to.type;
1573 		if(t == D_ADDR)
1574 			t = g2->to.index;
1575 		if(h[st].type == t)
1576 		if(h[st].sym == s)
1577 			break;
1578 		zname(s->name, t, sym);
1579 		s->sym = sym;
1580 		h[sym].sym = s;
1581 		h[sym].type = t;
1582 		st = sym;
1583 		sym++;
1584 		if(sym >= NSYM)
1585 			sym = 1;
1586 		if(st == sf)
1587 			goto jackpot;
1588 		break;
1589 	}
1590 	Bputc(&obuf, a);
1591 	Bputc(&obuf, a>>8);
1592 	Bputc(&obuf, lineno);
1593 	Bputc(&obuf, lineno>>8);
1594 	Bputc(&obuf, lineno>>16);
1595 	Bputc(&obuf, lineno>>24);
1596 	zaddr(&g2->from, sf);
1597 	zaddr(&g2->to, st);
1598 
1599 out:
1600 	if(a != AGLOBL && a != ADATA && a != AMODE)
1601 		pc++;
1602 }
1603 
1604 void
outhist(void)1605 outhist(void)
1606 {
1607 	Gen g;
1608 	Hist *h;
1609 	char *p, *q, *op, c;
1610 	int n;
1611 
1612 	g = nullgen;
1613 	c = pathchar();
1614 	for(h = hist; h != H; h = h->link) {
1615 		p = h->name;
1616 		op = 0;
1617 		/* on windows skip drive specifier in pathname */
1618 		if(systemtype(Windows) && p && p[1] == ':'){
1619 			p += 2;
1620 			c = *p;
1621 		}
1622 		if(p && p[0] != c && h->offset == 0 && pathname){
1623 			/* on windows skip drive specifier in pathname */
1624 			if(systemtype(Windows) && pathname[1] == ':') {
1625 				op = p;
1626 				p = pathname+2;
1627 				c = *p;
1628 			} else if(pathname[0] == c){
1629 				op = p;
1630 				p = pathname;
1631 			}
1632 		}
1633 		while(p) {
1634 			q = strchr(p, c);
1635 			if(q) {
1636 				n = q-p;
1637 				if(n == 0){
1638 					n = 1;	/* leading "/" */
1639 					*p = '/';	/* don't emit "\" on windows */
1640 				}
1641 				q++;
1642 			} else {
1643 				n = strlen(p);
1644 				q = 0;
1645 			}
1646 			if(n) {
1647 				Bputc(&obuf, ANAME);
1648 				Bputc(&obuf, ANAME>>8);
1649 				Bputc(&obuf, D_FILE);	/* type */
1650 				Bputc(&obuf, 1);	/* sym */
1651 				Bputc(&obuf, '<');
1652 				Bwrite(&obuf, p, n);
1653 				Bputc(&obuf, 0);
1654 			}
1655 			p = q;
1656 			if(p == 0 && op) {
1657 				p = op;
1658 				op = 0;
1659 			}
1660 		}
1661 		g.offset = h->offset;
1662 
1663 		Bputc(&obuf, AHISTORY);
1664 		Bputc(&obuf, AHISTORY>>8);
1665 		Bputc(&obuf, h->line);
1666 		Bputc(&obuf, h->line>>8);
1667 		Bputc(&obuf, h->line>>16);
1668 		Bputc(&obuf, h->line>>24);
1669 		zaddr(&nullgen, 0);
1670 		zaddr(&g, 0);
1671 	}
1672 }
1673 
1674 #include "../cc/lexbody"
1675 #include "../cc/macbody"
1676 #include "../cc/compat"
1677