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