7 main(int argc, char *argv[])
10 int nout, nproc, status, i, c;
14 memset(debug, 0, sizeof(debug));
17 include[ninclude++] = ".";
21 if(c >= 0 || c < sizeof(debug))
41 print("usage: %ca [-options] file.s\n", thechar);
44 if(argc > 1 && systemtype(Windows)){
45 print("can't assemble multiple files on windows\n");
48 if(argc > 1 && !systemtype(Windows)) {
50 if(p = getenv("NPROC"))
51 nproc = atol(p); /* */
55 while(nout < nproc && argc > 0) {
67 print("%s:\n", *argv);
95 char ofile[100], incfile[20], *p;
99 p = utfrrune(ofile, pathchar());
108 p = utfrrune(outfile, '.');
110 if(p[1] == 's' && p[2] == 0)
112 p = utfrune(outfile, 0);
117 outfile = "/dev/null";
119 p = getenv("INCLUDE");
123 if(systemtype(Plan9)) {
124 sprint(incfile,"/%s/include", thestring);
125 setinclude(strdup(incfile));
129 of = mycreat(outfile, 0664);
131 yyerror("%ca: cannot create %s", thechar, outfile);
134 Binit(&obuf, of, OWRITE);
138 for(i=0; i<nDlist; i++)
149 for(i=0; i<nDlist; i++)
172 /* "SPB", LBREG, D_SPB, */
178 "R10B", LBREG, D_R10B,
179 "R11B", LBREG, D_R11B,
180 "R12B", LBREG, D_R12B,
181 "R13B", LBREG, D_R13B,
182 "R14B", LBREG, D_R14B,
183 "R15B", LBREG, D_R15B,
194 /* "SP", LLREG, D_SP, */
207 "RARG", LLREG, REGARG,
237 "X10", LXREG, D_X0+10,
238 "X11", LXREG, D_X0+11,
239 "X12", LXREG, D_X0+12,
240 "X13", LXREG, D_X0+13,
241 "X14", LXREG, D_X0+14,
242 "X15", LXREG, D_X0+15,
251 "GDTR", LBREG, D_GDTR,
252 "IDTR", LBREG, D_IDTR,
253 "LDTR", LBREG, D_LDTR,
255 "TASK", LBREG, D_TASK,
257 "CR0", LBREG, D_CR+0,
258 "CR1", LBREG, D_CR+1,
259 "CR2", LBREG, D_CR+2,
260 "CR3", LBREG, D_CR+3,
261 "CR4", LBREG, D_CR+4,
262 "CR5", LBREG, D_CR+5,
263 "CR6", LBREG, D_CR+6,
264 "CR7", LBREG, D_CR+7,
265 "CR8", LBREG, D_CR+8,
266 "CR9", LBREG, D_CR+9,
267 "CR10", LBREG, D_CR+10,
268 "CR11", LBREG, D_CR+11,
269 "CR12", LBREG, D_CR+12,
270 "CR13", LBREG, D_CR+13,
271 "CR14", LBREG, D_CR+14,
272 "CR15", LBREG, D_CR+15,
274 "DR0", LBREG, D_DR+0,
275 "DR1", LBREG, D_DR+1,
276 "DR2", LBREG, D_DR+2,
277 "DR3", LBREG, D_DR+3,
278 "DR4", LBREG, D_DR+4,
279 "DR5", LBREG, D_DR+5,
280 "DR6", LBREG, D_DR+6,
281 "DR7", LBREG, D_DR+7,
283 "TR0", LBREG, D_TR+0,
284 "TR1", LBREG, D_TR+1,
285 "TR2", LBREG, D_TR+2,
286 "TR3", LBREG, D_TR+3,
287 "TR4", LBREG, D_TR+4,
288 "TR5", LBREG, D_TR+5,
289 "TR6", LBREG, D_TR+6,
290 "TR7", LBREG, D_TR+7,
296 "ADCB", LTYPE3, AADCB,
297 "ADCL", LTYPE3, AADCL,
298 "ADCQ", LTYPE3, AADCQ,
299 "ADCW", LTYPE3, AADCW,
300 "ADDB", LTYPE3, AADDB,
301 "ADDL", LTYPE3, AADDL,
302 "ADDQ", LTYPE3, AADDQ,
303 "ADDW", LTYPE3, AADDW,
304 "ADJSP", LTYPE2, AADJSP,
305 "ANDB", LTYPE3, AANDB,
306 "ANDL", LTYPE3, AANDL,
307 "ANDQ", LTYPE3, AANDQ,
308 "ANDW", LTYPE3, AANDW,
309 "ARPL", LTYPE3, AARPL,
310 "BOUNDL", LTYPE3, ABOUNDL,
311 "BOUNDW", LTYPE3, ABOUNDW,
312 "BSFL", LTYPE3, ABSFL,
313 "BSFQ", LTYPE3, ABSFQ,
314 "BSFW", LTYPE3, ABSFW,
315 "BSRL", LTYPE3, ABSRL,
316 "BSRQ", LTYPE3, ABSRQ,
317 "BSRW", LTYPE3, ABSRW,
318 "BTCL", LTYPE3, ABTCL,
319 "BTCQ", LTYPE3, ABTCQ,
320 "BTCW", LTYPE3, ABTCW,
323 "BTRL", LTYPE3, ABTRL,
324 "BTRQ", LTYPE3, ABTRQ,
325 "BTRW", LTYPE3, ABTRW,
326 "BTSL", LTYPE3, ABTSL,
327 "BTSQ", LTYPE3, ABTSQ,
328 "BTSW", LTYPE3, ABTSW,
330 "BYTE", LTYPE2, ABYTE,
331 "CALL", LTYPEC, ACALL,
335 "CLTS", LTYPE0, ACLTS,
337 "CMPB", LTYPE4, ACMPB,
338 "CMPL", LTYPE4, ACMPL,
339 "CMPQ", LTYPE4, ACMPQ,
340 "CMPW", LTYPE4, ACMPW,
341 "CMPSB", LTYPE0, ACMPSB,
342 "CMPSL", LTYPE0, ACMPSL,
343 "CMPSQ", LTYPE0, ACMPSQ,
344 "CMPSW", LTYPE0, ACMPSW,
345 "CMPXCHG8B", LTYPE1, ACMPXCHG8B,
346 "CMPXCHGB", LTYPE3, ACMPXCHGB, /* LTYPE3? */
347 "CMPXCHGL", LTYPE3, ACMPXCHGL,
348 "CMPXCHGQ", LTYPE3, ACMPXCHGQ,
349 "CMPXCHGW", LTYPE3, ACMPXCHGW,
350 "CPUID", LTYPE0, ACPUID,
353 "DATA", LTYPED, ADATA,
354 "DECB", LTYPE1, ADECB,
355 "DECL", LTYPE1, ADECL,
356 "DECQ", LTYPE1, ADECQ,
357 "DECW", LTYPE1, ADECW,
358 "DIVB", LTYPE2, ADIVB,
359 "DIVL", LTYPE2, ADIVL,
360 "DIVQ", LTYPE2, ADIVQ,
361 "DIVW", LTYPE2, ADIVW,
362 "EMMS", LTYPE0, AEMMS,
364 "ENTER", LTYPE2, AENTER,
365 "GLOBL", LTYPET, AGLOBL,
367 "IDIVB", LTYPE2, AIDIVB,
368 "IDIVL", LTYPE2, AIDIVL,
369 "IDIVQ", LTYPE2, AIDIVQ,
370 "IDIVW", LTYPE2, AIDIVW,
371 "IMULB", LTYPEI, AIMULB,
372 "IMULL", LTYPEI, AIMULL,
373 "IMULQ", LTYPEI, AIMULQ,
374 "IMULW", LTYPEI, AIMULW,
378 "INCB", LTYPE1, AINCB,
379 "INCL", LTYPE1, AINCL,
380 "INCQ", LTYPE1, AINCQ,
381 "INCW", LTYPE1, AINCW,
382 "INSB", LTYPE0, AINSB,
383 "INSL", LTYPE0, AINSL,
384 "INSW", LTYPE0, AINSW,
386 "INTO", LTYPE0, AINTO,
387 "INVD", LTYPE0, AINVD,
388 "INVLPG", LTYPE2, AINVLPG,
389 "IRETL", LTYPE0, AIRETL,
390 "IRETQ", LTYPE0, AIRETQ,
391 "IRETW", LTYPE0, AIRETW,
394 "JO", LTYPER, AJOS, /* alternate */
396 "JNO", LTYPER, AJOC, /* alternate */
398 "JB", LTYPER, AJCS, /* alternate */
399 "JC", LTYPER, AJCS, /* alternate */
400 "JNAE", LTYPER, AJCS, /* alternate */
401 "JLO", LTYPER, AJCS, /* alternate */
403 "JAE", LTYPER, AJCC, /* alternate */
404 "JNB", LTYPER, AJCC, /* alternate */
405 "JNC", LTYPER, AJCC, /* alternate */
406 "JHS", LTYPER, AJCC, /* alternate */
408 "JE", LTYPER, AJEQ, /* alternate */
409 "JZ", LTYPER, AJEQ, /* alternate */
411 "JNZ", LTYPER, AJNE, /* alternate */
413 "JBE", LTYPER, AJLS, /* alternate */
414 "JNA", LTYPER, AJLS, /* alternate */
416 "JA", LTYPER, AJHI, /* alternate */
417 "JNBE", LTYPER, AJHI, /* alternate */
419 "JS", LTYPER, AJMI, /* alternate */
421 "JNS", LTYPER, AJPL, /* alternate */
423 "JP", LTYPER, AJPS, /* alternate */
424 "JPE", LTYPER, AJPS, /* alternate */
426 "JNP", LTYPER, AJPC, /* alternate */
427 "JPO", LTYPER, AJPC, /* alternate */
429 "JL", LTYPER, AJLT, /* alternate */
430 "JNGE", LTYPER, AJLT, /* alternate */
432 "JNL", LTYPER, AJGE, /* alternate */
434 "JNG", LTYPER, AJLE, /* alternate */
436 "JG", LTYPER, AJGT, /* alternate */
437 "JNLE", LTYPER, AJGT, /* alternate */
439 "JCXZ", LTYPER, AJCXZ,
441 "LAHF", LTYPE0, ALAHF,
442 "LARL", LTYPE3, ALARL,
443 "LARW", LTYPE3, ALARW,
444 "LEAL", LTYPE3, ALEAL,
445 "LEAQ", LTYPE3, ALEAQ,
446 "LEAW", LTYPE3, ALEAW,
447 "LEAVEL", LTYPE0, ALEAVEL,
448 "LEAVEQ", LTYPE0, ALEAVEQ,
449 "LEAVEW", LTYPE0, ALEAVEW,
450 "LFENCE", LTYPE0, ALFENCE,
451 "LOCK", LTYPE0, ALOCK,
452 "LODSB", LTYPE0, ALODSB,
453 "LODSL", LTYPE0, ALODSL,
454 "LODSQ", LTYPE0, ALODSQ,
455 "LODSW", LTYPE0, ALODSW,
456 "LONG", LTYPE2, ALONG,
457 "LOOP", LTYPER, ALOOP,
458 "LOOPEQ", LTYPER, ALOOPEQ,
459 "LOOPNE", LTYPER, ALOOPNE,
460 "LSLL", LTYPE3, ALSLL,
461 "LSLW", LTYPE3, ALSLW,
462 "MFENCE", LTYPE0, AMFENCE,
463 "MODE", LTYPE2, AMODE,
464 "MOVB", LTYPE3, AMOVB,
465 "MOVL", LTYPEM, AMOVL,
466 "MOVQ", LTYPEM, AMOVQ,
467 "MOVW", LTYPEM, AMOVW,
468 "MOVBLSX", LTYPE3, AMOVBLSX,
469 "MOVBLZX", LTYPE3, AMOVBLZX,
470 "MOVBQSX", LTYPE3, AMOVBQSX,
471 "MOVBQZX", LTYPE3, AMOVBQZX,
472 "MOVBWSX", LTYPE3, AMOVBWSX,
473 "MOVBWZX", LTYPE3, AMOVBWZX,
474 "MOVLQSX", LTYPE3, AMOVLQSX,
475 "MOVLQZX", LTYPE3, AMOVLQZX,
476 "MOVNTIL", LTYPE3, AMOVNTIL,
477 "MOVNTIQ", LTYPE3, AMOVNTIQ,
478 "MOVQL", LTYPE3, AMOVQL,
479 "MOVWLSX", LTYPE3, AMOVWLSX,
480 "MOVWLZX", LTYPE3, AMOVWLZX,
481 "MOVWQSX", LTYPE3, AMOVWQSX,
482 "MOVWQZX", LTYPE3, AMOVWQZX,
483 "MOVSB", LTYPE0, AMOVSB,
484 "MOVSL", LTYPE0, AMOVSL,
485 "MOVSQ", LTYPE0, AMOVSQ,
486 "MOVSW", LTYPE0, AMOVSW,
487 "MULB", LTYPE2, AMULB,
488 "MULL", LTYPE2, AMULL,
489 "MULQ", LTYPE2, AMULQ,
490 "MULW", LTYPE2, AMULW,
491 "NEGB", LTYPE1, ANEGB,
492 "NEGL", LTYPE1, ANEGL,
493 "NEGQ", LTYPE1, ANEGQ,
494 "NEGW", LTYPE1, ANEGW,
496 "NOTB", LTYPE1, ANOTB,
497 "NOTL", LTYPE1, ANOTL,
498 "NOTQ", LTYPE1, ANOTQ,
499 "NOTW", LTYPE1, ANOTW,
504 "OUTB", LTYPE0, AOUTB,
505 "OUTL", LTYPE0, AOUTL,
506 "OUTW", LTYPE0, AOUTW,
507 "OUTSB", LTYPE0, AOUTSB,
508 "OUTSL", LTYPE0, AOUTSL,
509 "OUTSW", LTYPE0, AOUTSW,
510 "POPAL", LTYPE0, APOPAL,
511 "POPAW", LTYPE0, APOPAW,
512 "POPFL", LTYPE0, APOPFL,
513 "POPFQ", LTYPE0, APOPFQ,
514 "POPFW", LTYPE0, APOPFW,
515 "POPL", LTYPE1, APOPL,
516 "POPQ", LTYPE1, APOPQ,
517 "POPW", LTYPE1, APOPW,
518 "PUSHAL", LTYPE0, APUSHAL,
519 "PUSHAW", LTYPE0, APUSHAW,
520 "PUSHFL", LTYPE0, APUSHFL,
521 "PUSHFQ", LTYPE0, APUSHFQ,
522 "PUSHFW", LTYPE0, APUSHFW,
523 "PUSHL", LTYPE2, APUSHL,
524 "PUSHQ", LTYPE2, APUSHQ,
525 "PUSHW", LTYPE2, APUSHW,
526 "RCLB", LTYPE3, ARCLB,
527 "RCLL", LTYPE3, ARCLL,
528 "RCLQ", LTYPE3, ARCLQ,
529 "RCLW", LTYPE3, ARCLW,
530 "RCRB", LTYPE3, ARCRB,
531 "RCRL", LTYPE3, ARCRL,
532 "RCRQ", LTYPE3, ARCRQ,
533 "RCRW", LTYPE3, ARCRW,
534 "RDMSR", LTYPE0, ARDMSR,
535 "RDPMC", LTYPE0, ARDPMC,
536 "RDTSC", LTYPE0, ARDTSC,
538 "REPN", LTYPE0, AREPN,
540 "RETFL", LTYPERT,ARETFL,
541 "RETFW", LTYPERT,ARETFW,
542 "RETFQ", LTYPERT,ARETFQ,
543 "ROLB", LTYPE3, AROLB,
544 "ROLL", LTYPE3, AROLL,
545 "ROLQ", LTYPE3, AROLQ,
546 "ROLW", LTYPE3, AROLW,
547 "RORB", LTYPE3, ARORB,
548 "RORL", LTYPE3, ARORL,
549 "RORQ", LTYPE3, ARORQ,
550 "RORW", LTYPE3, ARORW,
552 "SAHF", LTYPE0, ASAHF,
553 "SALB", LTYPE3, ASALB,
554 "SALL", LTYPE3, ASALL,
555 "SALQ", LTYPE3, ASALQ,
556 "SALW", LTYPE3, ASALW,
557 "SARB", LTYPE3, ASARB,
558 "SARL", LTYPE3, ASARL,
559 "SARQ", LTYPE3, ASARQ,
560 "SARW", LTYPE3, ASARW,
561 "SBBB", LTYPE3, ASBBB,
562 "SBBL", LTYPE3, ASBBL,
563 "SBBQ", LTYPE3, ASBBQ,
564 "SBBW", LTYPE3, ASBBW,
565 "SCASB", LTYPE0, ASCASB,
566 "SCASL", LTYPE0, ASCASL,
567 "SCASQ", LTYPE0, ASCASQ,
568 "SCASW", LTYPE0, ASCASW,
569 "SETCC", LTYPE1, ASETCC,
570 "SETCS", LTYPE1, ASETCS,
571 "SETEQ", LTYPE1, ASETEQ,
572 "SETGE", LTYPE1, ASETGE,
573 "SETGT", LTYPE1, ASETGT,
574 "SETHI", LTYPE1, ASETHI,
575 "SETLE", LTYPE1, ASETLE,
576 "SETLS", LTYPE1, ASETLS,
577 "SETLT", LTYPE1, ASETLT,
578 "SETMI", LTYPE1, ASETMI,
579 "SETNE", LTYPE1, ASETNE,
580 "SETOC", LTYPE1, ASETOC,
581 "SETOS", LTYPE1, ASETOS,
582 "SETPC", LTYPE1, ASETPC,
583 "SETPL", LTYPE1, ASETPL,
584 "SETPS", LTYPE1, ASETPS,
585 "SFENCE", LTYPE0, ASFENCE,
589 "SHLB", LTYPE3, ASHLB,
590 "SHLL", LTYPES, ASHLL,
591 "SHLQ", LTYPES, ASHLQ,
592 "SHLW", LTYPES, ASHLW,
593 "SHRB", LTYPE3, ASHRB,
594 "SHRL", LTYPES, ASHRL,
595 "SHRQ", LTYPES, ASHRQ,
596 "SHRW", LTYPES, ASHRW,
600 "STOSB", LTYPE0, ASTOSB,
601 "STOSL", LTYPE0, ASTOSL,
602 "STOSQ", LTYPE0, ASTOSQ,
603 "STOSW", LTYPE0, ASTOSW,
604 "SUBB", LTYPE3, ASUBB,
605 "SUBL", LTYPE3, ASUBL,
606 "SUBQ", LTYPE3, ASUBQ,
607 "SUBW", LTYPE3, ASUBW,
608 "SYSCALL", LTYPE0, ASYSCALL,
609 "SYSRET", LTYPE0, ASYSRET,
610 "SWAPGS", LTYPE0, ASWAPGS,
611 "TESTB", LTYPE3, ATESTB,
612 "TESTL", LTYPE3, ATESTL,
613 "TESTQ", LTYPE3, ATESTQ,
614 "TESTW", LTYPE3, ATESTW,
615 "TEXT", LTYPET, ATEXT,
616 "VERR", LTYPE2, AVERR,
617 "VERW", LTYPE2, AVERW,
618 "QUAD", LTYPE2, AQUAD,
619 "WAIT", LTYPE0, AWAIT,
620 "WBINVD", LTYPE0, AWBINVD,
621 "WRMSR", LTYPE0, AWRMSR,
622 "WORD", LTYPE2, AWORD,
623 "XADDB", LTYPE3, AXADDB,
624 "XADDL", LTYPE3, AXADDL,
625 "XADDQ", LTYPE3, AXADDQ,
626 "XADDW", LTYPE3, AXADDW,
627 "XCHGB", LTYPE3, AXCHGB,
628 "XCHGL", LTYPE3, AXCHGL,
629 "XCHGQ", LTYPE3, AXCHGQ,
630 "XCHGW", LTYPE3, AXCHGW,
631 "XLAT", LTYPE2, AXLAT,
632 "XORB", LTYPE3, AXORB,
633 "XORL", LTYPE3, AXORL,
634 "XORQ", LTYPE3, AXORQ,
635 "XORW", LTYPE3, AXORW,
637 "CMOVLCC", LTYPE3, ACMOVLCC,
638 "CMOVLCS", LTYPE3, ACMOVLCS,
639 "CMOVLEQ", LTYPE3, ACMOVLEQ,
640 "CMOVLGE", LTYPE3, ACMOVLGE,
641 "CMOVLGT", LTYPE3, ACMOVLGT,
642 "CMOVLHI", LTYPE3, ACMOVLHI,
643 "CMOVLLE", LTYPE3, ACMOVLLE,
644 "CMOVLLS", LTYPE3, ACMOVLLS,
645 "CMOVLLT", LTYPE3, ACMOVLLT,
646 "CMOVLMI", LTYPE3, ACMOVLMI,
647 "CMOVLNE", LTYPE3, ACMOVLNE,
648 "CMOVLOC", LTYPE3, ACMOVLOC,
649 "CMOVLOS", LTYPE3, ACMOVLOS,
650 "CMOVLPC", LTYPE3, ACMOVLPC,
651 "CMOVLPL", LTYPE3, ACMOVLPL,
652 "CMOVLPS", LTYPE3, ACMOVLPS,
653 "CMOVQCC", LTYPE3, ACMOVQCC,
654 "CMOVQCS", LTYPE3, ACMOVQCS,
655 "CMOVQEQ", LTYPE3, ACMOVQEQ,
656 "CMOVQGE", LTYPE3, ACMOVQGE,
657 "CMOVQGT", LTYPE3, ACMOVQGT,
658 "CMOVQHI", LTYPE3, ACMOVQHI,
659 "CMOVQLE", LTYPE3, ACMOVQLE,
660 "CMOVQLS", LTYPE3, ACMOVQLS,
661 "CMOVQLT", LTYPE3, ACMOVQLT,
662 "CMOVQMI", LTYPE3, ACMOVQMI,
663 "CMOVQNE", LTYPE3, ACMOVQNE,
664 "CMOVQOC", LTYPE3, ACMOVQOC,
665 "CMOVQOS", LTYPE3, ACMOVQOS,
666 "CMOVQPC", LTYPE3, ACMOVQPC,
667 "CMOVQPL", LTYPE3, ACMOVQPL,
668 "CMOVQPS", LTYPE3, ACMOVQPS,
669 "CMOVWCC", LTYPE3, ACMOVWCC,
670 "CMOVWCS", LTYPE3, ACMOVWCS,
671 "CMOVWEQ", LTYPE3, ACMOVWEQ,
672 "CMOVWGE", LTYPE3, ACMOVWGE,
673 "CMOVWGT", LTYPE3, ACMOVWGT,
674 "CMOVWHI", LTYPE3, ACMOVWHI,
675 "CMOVWLE", LTYPE3, ACMOVWLE,
676 "CMOVWLS", LTYPE3, ACMOVWLS,
677 "CMOVWLT", LTYPE3, ACMOVWLT,
678 "CMOVWMI", LTYPE3, ACMOVWMI,
679 "CMOVWNE", LTYPE3, ACMOVWNE,
680 "CMOVWOC", LTYPE3, ACMOVWOC,
681 "CMOVWOS", LTYPE3, ACMOVWOS,
682 "CMOVWPC", LTYPE3, ACMOVWPC,
683 "CMOVWPL", LTYPE3, ACMOVWPL,
684 "CMOVWPS", LTYPE3, ACMOVWPS,
686 "FMOVB", LTYPE3, AFMOVB,
687 "FMOVBP", LTYPE3, AFMOVBP,
688 "FMOVD", LTYPE3, AFMOVD,
689 "FMOVDP", LTYPE3, AFMOVDP,
690 "FMOVF", LTYPE3, AFMOVF,
691 "FMOVFP", LTYPE3, AFMOVFP,
692 "FMOVL", LTYPE3, AFMOVL,
693 "FMOVLP", LTYPE3, AFMOVLP,
694 "FMOVV", LTYPE3, AFMOVV,
695 "FMOVVP", LTYPE3, AFMOVVP,
696 "FMOVW", LTYPE3, AFMOVW,
697 "FMOVWP", LTYPE3, AFMOVWP,
698 "FMOVX", LTYPE3, AFMOVX,
699 "FMOVXP", LTYPE3, AFMOVXP,
700 "FCOMB", LTYPE3, AFCOMB,
701 "FCOMBP", LTYPE3, AFCOMBP,
702 "FCOMD", LTYPE3, AFCOMD,
703 "FCOMDP", LTYPE3, AFCOMDP,
704 "FCOMDPP", LTYPE3, AFCOMDPP,
705 "FCOMF", LTYPE3, AFCOMF,
706 "FCOMFP", LTYPE3, AFCOMFP,
707 "FCOML", LTYPE3, AFCOML,
708 "FCOMLP", LTYPE3, AFCOMLP,
709 "FCOMW", LTYPE3, AFCOMW,
710 "FCOMWP", LTYPE3, AFCOMWP,
711 "FUCOM", LTYPE3, AFUCOM,
712 "FUCOMP", LTYPE3, AFUCOMP,
713 "FUCOMPP", LTYPE3, AFUCOMPP,
714 "FADDW", LTYPE3, AFADDW,
715 "FADDL", LTYPE3, AFADDL,
716 "FADDF", LTYPE3, AFADDF,
717 "FADDD", LTYPE3, AFADDD,
718 "FADDDP", LTYPE3, AFADDDP,
719 "FSUBDP", LTYPE3, AFSUBDP,
720 "FSUBW", LTYPE3, AFSUBW,
721 "FSUBL", LTYPE3, AFSUBL,
722 "FSUBF", LTYPE3, AFSUBF,
723 "FSUBD", LTYPE3, AFSUBD,
724 "FSUBRDP", LTYPE3, AFSUBRDP,
725 "FSUBRW", LTYPE3, AFSUBRW,
726 "FSUBRL", LTYPE3, AFSUBRL,
727 "FSUBRF", LTYPE3, AFSUBRF,
728 "FSUBRD", LTYPE3, AFSUBRD,
729 "FMULDP", LTYPE3, AFMULDP,
730 "FMULW", LTYPE3, AFMULW,
731 "FMULL", LTYPE3, AFMULL,
732 "FMULF", LTYPE3, AFMULF,
733 "FMULD", LTYPE3, AFMULD,
734 "FDIVDP", LTYPE3, AFDIVDP,
735 "FDIVW", LTYPE3, AFDIVW,
736 "FDIVL", LTYPE3, AFDIVL,
737 "FDIVF", LTYPE3, AFDIVF,
738 "FDIVD", LTYPE3, AFDIVD,
739 "FDIVRDP", LTYPE3, AFDIVRDP,
740 "FDIVRW", LTYPE3, AFDIVRW,
741 "FDIVRL", LTYPE3, AFDIVRL,
742 "FDIVRF", LTYPE3, AFDIVRF,
743 "FDIVRD", LTYPE3, AFDIVRD,
744 "FXCHD", LTYPE3, AFXCHD,
745 "FFREE", LTYPE1, AFFREE,
746 "FLDCW", LTYPE2, AFLDCW,
747 "FLDENV", LTYPE1, AFLDENV,
748 "FRSTOR", LTYPE2, AFRSTOR,
749 "FSAVE", LTYPE1, AFSAVE,
750 "FSTCW", LTYPE1, AFSTCW,
751 "FSTENV", LTYPE1, AFSTENV,
752 "FSTSW", LTYPE1, AFSTSW,
753 "F2XM1", LTYPE0, AF2XM1,
754 "FABS", LTYPE0, AFABS,
755 "FCHS", LTYPE0, AFCHS,
756 "FCLEX", LTYPE0, AFCLEX,
757 "FCOS", LTYPE0, AFCOS,
758 "FDECSTP", LTYPE0, AFDECSTP,
759 "FINCSTP", LTYPE0, AFINCSTP,
760 "FINIT", LTYPE0, AFINIT,
761 "FLD1", LTYPE0, AFLD1,
762 "FLDL2E", LTYPE0, AFLDL2E,
763 "FLDL2T", LTYPE0, AFLDL2T,
764 "FLDLG2", LTYPE0, AFLDLG2,
765 "FLDLN2", LTYPE0, AFLDLN2,
766 "FLDPI", LTYPE0, AFLDPI,
767 "FLDZ", LTYPE0, AFLDZ,
768 "FNOP", LTYPE0, AFNOP,
769 "FPATAN", LTYPE0, AFPATAN,
770 "FPREM", LTYPE0, AFPREM,
771 "FPREM1", LTYPE0, AFPREM1,
772 "FPTAN", LTYPE0, AFPTAN,
773 "FRNDINT", LTYPE0, AFRNDINT,
774 "FSCALE", LTYPE0, AFSCALE,
775 "FSIN", LTYPE0, AFSIN,
776 "FSINCOS", LTYPE0, AFSINCOS,
777 "FSQRT", LTYPE0, AFSQRT,
778 "FTST", LTYPE0, AFTST,
779 "FXAM", LTYPE0, AFXAM,
780 "FXTRACT", LTYPE0, AFXTRACT,
781 "FYL2X", LTYPE0, AFYL2X,
782 "FYL2XP1", LTYPE0, AFYL2XP1,
784 "ADDPD", LTYPE3, AADDPD,
785 "ADDPS", LTYPE3, AADDPS,
786 "ADDSD", LTYPE3, AADDSD,
787 "ADDSS", LTYPE3, AADDSS,
788 "ANDNPD", LTYPE3, AANDNPD,
789 "ANDNPS", LTYPE3, AANDNPS,
790 "ANDPD", LTYPE3, AANDPD,
791 "ANDPS", LTYPE3, AANDPS,
792 "CMPPD", LTYPEXC,ACMPPD,
793 "CMPPS", LTYPEXC,ACMPPS,
794 "CMPSD", LTYPEXC,ACMPSD,
795 "CMPSS", LTYPEXC,ACMPSS,
796 "COMISD", LTYPE3, ACOMISD,
797 "COMISS", LTYPE3, ACOMISS,
798 "CVTPL2PD", LTYPE3, ACVTPL2PD,
799 "CVTPL2PS", LTYPE3, ACVTPL2PS,
800 "CVTPD2PL", LTYPE3, ACVTPD2PL,
801 "CVTPD2PS", LTYPE3, ACVTPD2PS,
802 "CVTPS2PL", LTYPE3, ACVTPS2PL,
803 "PF2IW", LTYPE3, APF2IW,
804 "PF2IL", LTYPE3, APF2IL,
805 "PF2ID", LTYPE3, APF2IL, /* syn */
806 "PI2FL", LTYPE3, API2FL,
807 "PI2FD", LTYPE3, API2FL, /* syn */
808 "PI2FW", LTYPE3, API2FW,
809 "CVTPS2PD", LTYPE3, ACVTPS2PD,
810 "CVTSD2SL", LTYPE3, ACVTSD2SL,
811 "CVTSD2SQ", LTYPE3, ACVTSD2SQ,
812 "CVTSD2SS", LTYPE3, ACVTSD2SS,
813 "CVTSL2SD", LTYPE3, ACVTSL2SD,
814 "CVTSQ2SD", LTYPE3, ACVTSQ2SD,
815 "CVTSL2SS", LTYPE3, ACVTSL2SS,
816 "CVTSQ2SS", LTYPE3, ACVTSQ2SS,
817 "CVTSS2SD", LTYPE3, ACVTSS2SD,
818 "CVTSS2SL", LTYPE3, ACVTSS2SL,
819 "CVTSS2SQ", LTYPE3, ACVTSS2SQ,
820 "CVTTPD2PL", LTYPE3, ACVTTPD2PL,
821 "CVTTPS2PL", LTYPE3, ACVTTPS2PL,
822 "CVTTSD2SL", LTYPE3, ACVTTSD2SL,
823 "CVTTSD2SQ", LTYPE3, ACVTTSD2SQ,
824 "CVTTSS2SL", LTYPE3, ACVTTSS2SL,
825 "CVTTSS2SQ", LTYPE3, ACVTTSS2SQ,
826 "DIVPD", LTYPE3, ADIVPD,
827 "DIVPS", LTYPE3, ADIVPS,
828 "DIVSD", LTYPE3, ADIVSD,
829 "DIVSS", LTYPE3, ADIVSS,
830 "FXRSTOR", LTYPE2, AFXRSTOR,
831 "FXRSTOR64", LTYPE2, AFXRSTOR64,
832 "FXSAVE", LTYPE1, AFXSAVE,
833 "FXSAVE64", LTYPE1, AFXSAVE64,
834 "LDMXCSR", LTYPE2, ALDMXCSR,
835 "MASKMOVOU", LTYPE3, AMASKMOVOU,
836 "MASKMOVDQU", LTYPE3, AMASKMOVOU, /* syn */
837 "MASKMOVQ", LTYPE3, AMASKMOVQ,
838 "MAXPD", LTYPE3, AMAXPD,
839 "MAXPS", LTYPE3, AMAXPS,
840 "MAXSD", LTYPE3, AMAXSD,
841 "MAXSS", LTYPE3, AMAXSS,
842 "MINPD", LTYPE3, AMINPD,
843 "MINPS", LTYPE3, AMINPS,
844 "MINSD", LTYPE3, AMINSD,
845 "MINSS", LTYPE3, AMINSS,
846 "MOVAPD", LTYPE3, AMOVAPD,
847 "MOVAPS", LTYPE3, AMOVAPS,
848 "MOVD", LTYPE3, AMOVQ, /* syn */
849 "MOVDQ2Q", LTYPE3, AMOVQ, /* syn */
850 "MOVO", LTYPE3, AMOVO,
851 "MOVOA", LTYPE3, AMOVO, /* syn */
852 "MOVOU", LTYPE3, AMOVOU,
853 "MOVHLPS", LTYPE3, AMOVHLPS,
854 "MOVHPD", LTYPE3, AMOVHPD,
855 "MOVHPS", LTYPE3, AMOVHPS,
856 "MOVLHPS", LTYPE3, AMOVLHPS,
857 "MOVLPD", LTYPE3, AMOVLPD,
858 "MOVLPS", LTYPE3, AMOVLPS,
859 "MOVMSKPD", LTYPE3, AMOVMSKPD,
860 "MOVMSKPS", LTYPE3, AMOVMSKPS,
861 "MOVNTO", LTYPE3, AMOVNTO,
862 "MOVNTDQ", LTYPE3, AMOVNTO, /* syn */
863 "MOVNTPD", LTYPE3, AMOVNTPD,
864 "MOVNTPS", LTYPE3, AMOVNTPS,
865 "MOVNTQ", LTYPE3, AMOVNTQ,
866 "MOVQOZX", LTYPE3, AMOVQOZX,
867 "MOVSD", LTYPE3, AMOVSD,
868 "MOVSS", LTYPE3, AMOVSS,
869 "MOVUPD", LTYPE3, AMOVUPD,
870 "MOVUPS", LTYPE3, AMOVUPS,
871 "MULPD", LTYPE3, AMULPD,
872 "MULPS", LTYPE3, AMULPS,
873 "MULSD", LTYPE3, AMULSD,
874 "MULSS", LTYPE3, AMULSS,
875 "ORPD", LTYPE3, AORPD,
876 "ORPS", LTYPE3, AORPS,
877 "PACKSSLW", LTYPE3, APACKSSLW,
878 "PACKSSWB", LTYPE3, APACKSSWB,
879 "PACKUSWB", LTYPE3, APACKUSWB,
880 "PADDB", LTYPE3, APADDB,
881 "PADDL", LTYPE3, APADDL,
882 "PADDQ", LTYPE3, APADDQ,
883 "PADDSB", LTYPE3, APADDSB,
884 "PADDSW", LTYPE3, APADDSW,
885 "PADDUSB", LTYPE3, APADDUSB,
886 "PADDUSW", LTYPE3, APADDUSW,
887 "PADDW", LTYPE3, APADDW,
888 "PAND", LTYPE3, APAND,
889 "PANDB", LTYPE3, APANDB,
890 "PANDL", LTYPE3, APANDL,
891 "PANDSB", LTYPE3, APANDSB,
892 "PANDSW", LTYPE3, APANDSW,
893 "PANDUSB", LTYPE3, APANDUSB,
894 "PANDUSW", LTYPE3, APANDUSW,
895 "PANDW", LTYPE3, APANDW,
896 "PANDN", LTYPE3, APANDN,
897 "PAVGB", LTYPE3, APAVGB,
898 "PAVGW", LTYPE3, APAVGW,
899 "PCMPEQB", LTYPE3, APCMPEQB,
900 "PCMPEQL", LTYPE3, APCMPEQL,
901 "PCMPEQW", LTYPE3, APCMPEQW,
902 "PCMPGTB", LTYPE3, APCMPGTB,
903 "PCMPGTL", LTYPE3, APCMPGTL,
904 "PCMPGTW", LTYPE3, APCMPGTW,
905 "PEXTRW", LTYPEX, APEXTRW,
906 "PINSRW", LTYPEX, APINSRW,
907 "PMADDWL", LTYPE3, APMADDWL,
908 "PMAXSW", LTYPE3, APMAXSW,
909 "PMAXUB", LTYPE3, APMAXUB,
910 "PMINSW", LTYPE3, APMINSW,
911 "PMINUB", LTYPE3, APMINUB,
912 "PMOVMSKB", LTYPE3, APMOVMSKB,
913 "PMULHRW", LTYPE3, APMULHRW,
914 "PMULHUW", LTYPE3, APMULHUW,
915 "PMULHW", LTYPE3, APMULHW,
916 "PMULLW", LTYPE3, APMULLW,
917 "PMULULQ", LTYPE3, APMULULQ,
919 "PSADBW", LTYPE3, APSADBW,
920 "PSHUFHW", LTYPEX, APSHUFHW,
921 "PSHUFL", LTYPEX, APSHUFL,
922 "PSHUFLW", LTYPEX, APSHUFLW,
923 "PSHUFW", LTYPEX, APSHUFW,
924 "PSLLO", LTYPE3, APSLLO,
925 "PSLLDQ", LTYPE3, APSLLO, /* syn */
926 "PSLLL", LTYPE3, APSLLL,
927 "PSLLQ", LTYPE3, APSLLQ,
928 "PSLLW", LTYPE3, APSLLW,
929 "PSRAL", LTYPE3, APSRAL,
930 "PSRAW", LTYPE3, APSRAW,
931 "PSRLO", LTYPE3, APSRLO,
932 "PSRLDQ", LTYPE3, APSRLO, /* syn */
933 "PSRLL", LTYPE3, APSRLL,
934 "PSRLQ", LTYPE3, APSRLQ,
935 "PSRLW", LTYPE3, APSRLW,
936 "PSUBB", LTYPE3, APSUBB,
937 "PSUBL", LTYPE3, APSUBL,
938 "PSUBQ", LTYPE3, APSUBQ,
939 "PSUBSB", LTYPE3, APSUBSB,
940 "PSUBSW", LTYPE3, APSUBSW,
941 "PSUBUSB", LTYPE3, APSUBUSB,
942 "PSUBUSW", LTYPE3, APSUBUSW,
943 "PSUBW", LTYPE3, APSUBW,
944 "PUNPCKHBW", LTYPE3, APUNPCKHBW,
945 "PUNPCKHLQ", LTYPE3, APUNPCKHLQ,
946 "PUNPCKHQDQ", LTYPE3, APUNPCKHQDQ,
947 "PUNPCKHWL", LTYPE3, APUNPCKHWL,
948 "PUNPCKLBW", LTYPE3, APUNPCKLBW,
949 "PUNPCKLLQ", LTYPE3, APUNPCKLLQ,
950 "PUNPCKLQDQ", LTYPE3, APUNPCKLQDQ,
951 "PUNPCKLWL", LTYPE3, APUNPCKLWL,
952 "PXOR", LTYPE3, APXOR,
953 "RCPPS", LTYPE3, ARCPPS,
954 "RCPSS", LTYPE3, ARCPSS,
955 "RSQRTPS", LTYPE3, ARSQRTPS,
956 "RSQRTSS", LTYPE3, ARSQRTSS,
957 "SHUFPD", LTYPEX, ASHUFPD,
958 "SHUFPS", LTYPEX, ASHUFPS,
959 "SQRTPD", LTYPE3, ASQRTPD,
960 "SQRTPS", LTYPE3, ASQRTPS,
961 "SQRTSD", LTYPE3, ASQRTSD,
962 "SQRTSS", LTYPE3, ASQRTSS,
963 "STMXCSR", LTYPE1, ASTMXCSR,
964 "SUBPD", LTYPE3, ASUBPD,
965 "SUBPS", LTYPE3, ASUBPS,
966 "SUBSD", LTYPE3, ASUBSD,
967 "SUBSS", LTYPE3, ASUBSS,
968 "UCOMISD", LTYPE3, AUCOMISD,
969 "UCOMISS", LTYPE3, AUCOMISS,
970 "UNPCKHPD", LTYPE3, AUNPCKHPD,
971 "UNPCKHPS", LTYPE3, AUNPCKHPS,
972 "UNPCKLPD", LTYPE3, AUNPCKLPD,
973 "UNPCKLPS", LTYPE3, AUNPCKLPS,
974 "XORPD", LTYPE3, AXORPD,
975 "XORPS", LTYPE3, AXORPS,
990 for(i=0; i<sizeof(nullgen.sval); i++)
992 nullgen.type = D_NONE;
993 nullgen.index = D_NONE;
1001 for(i=0; i<NHASH; i++)
1003 for(i=0; itab[i].name; i++) {
1004 s = slookup(itab[i].name);
1005 if(s->type != LNAME)
1006 yyerror("double initialization %s", itab[i].name);
1007 s->type = itab[i].type;
1008 s->value = itab[i].value;
1011 pathname = allocn(pathname, 0, 100);
1012 if(mygetwd(pathname, 99) == 0) {
1013 pathname = allocn(pathname, 100, 900);
1014 if(mygetwd(pathname, 999) == 0)
1015 strcpy(pathname, "/???");
1020 checkscale(int scale)
1030 yyerror("scale must be 1248: %d", scale);
1053 zname(char *n, int t, int s)
1056 Bputc(&obuf, ANAME); /* as(2) */
1057 Bputc(&obuf, ANAME>>8);
1058 Bputc(&obuf, t); /* type */
1059 Bputc(&obuf, s); /* sym */
1068 zaddr(Gen *a, int s)
1076 if(a->index != D_NONE || a->scale != 0)
1078 if(a->offset != 0) {
1081 if((vlong)l != a->offset)
1102 if(t & T_INDEX) { /* implies index, scale */
1103 Bputc(&obuf, a->index);
1104 Bputc(&obuf, a->scale);
1106 if(t & T_OFFSET) { /* implies offset */
1110 Bputc(&obuf, l>>16);
1111 Bputc(&obuf, l>>24);
1116 Bputc(&obuf, l>>16);
1117 Bputc(&obuf, l>>24);
1120 if(t & T_SYM) /* implies sym */
1123 ieeedtod(&e, a->dval);
1127 Bputc(&obuf, l>>16);
1128 Bputc(&obuf, l>>24);
1132 Bputc(&obuf, l>>16);
1133 Bputc(&obuf, l>>24);
1138 for(i=0; i<NSNAME; i++) {
1145 Bputc(&obuf, a->type);
1149 outcode(int a, Gen2 *g2)
1162 if(sf < 0 || sf >= NSYM)
1170 zname(s->name, t, sym);
1184 if(st < 0 || st >= NSYM)
1192 zname(s->name, t, sym);
1206 Bputc(&obuf, lineno);
1207 Bputc(&obuf, lineno>>8);
1208 Bputc(&obuf, lineno>>16);
1209 Bputc(&obuf, lineno>>24);
1210 zaddr(&g2->from, sf);
1214 if(a != AGLOBL && a != ADATA && a != AMODE)
1223 char *p, *q, *op, c;
1228 for(h = hist; h != H; h = h->link) {
1231 /* on windows skip drive specifier in pathname */
1232 if(systemtype(Windows) && p && p[1] == ':'){
1236 if(p && p[0] != c && h->offset == 0 && pathname){
1237 /* on windows skip drive specifier in pathname */
1238 if(systemtype(Windows) && pathname[1] == ':') {
1242 } else if(pathname[0] == c){
1252 n = 1; /* leading "/" */
1253 *p = '/'; /* don't emit "\" on windows */
1261 Bputc(&obuf, ANAME);
1262 Bputc(&obuf, ANAME>>8);
1263 Bputc(&obuf, D_FILE); /* type */
1264 Bputc(&obuf, 1); /* sym */
1266 Bwrite(&obuf, p, n);
1275 g.offset = h->offset;
1277 Bputc(&obuf, AHISTORY);
1278 Bputc(&obuf, AHISTORY>>8);
1279 Bputc(&obuf, h->line);
1280 Bputc(&obuf, h->line>>8);
1281 Bputc(&obuf, h->line>>16);
1282 Bputc(&obuf, h->line>>24);
1288 #include "../cc/lexbody"
1289 #include "../cc/macbody"
1290 #include "../cc/compat"