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++)
181 /* "SP", LLREG, D_SP, */
220 "GDTR", LBREG, D_GDTR,
221 "IDTR", LBREG, D_IDTR,
222 "LDTR", LBREG, D_LDTR,
224 "TASK", LBREG, D_TASK,
226 "CR0", LBREG, D_CR+0,
227 "CR1", LBREG, D_CR+1,
228 "CR2", LBREG, D_CR+2,
229 "CR3", LBREG, D_CR+3,
230 "CR4", LBREG, D_CR+4,
231 "CR5", LBREG, D_CR+5,
232 "CR6", LBREG, D_CR+6,
233 "CR7", LBREG, D_CR+7,
235 "DR0", LBREG, D_DR+0,
236 "DR1", LBREG, D_DR+1,
237 "DR2", LBREG, D_DR+2,
238 "DR3", LBREG, D_DR+3,
239 "DR4", LBREG, D_DR+4,
240 "DR5", LBREG, D_DR+5,
241 "DR6", LBREG, D_DR+6,
242 "DR7", LBREG, D_DR+7,
244 "TR0", LBREG, D_TR+0,
245 "TR1", LBREG, D_TR+1,
246 "TR2", LBREG, D_TR+2,
247 "TR3", LBREG, D_TR+3,
248 "TR4", LBREG, D_TR+4,
249 "TR5", LBREG, D_TR+5,
250 "TR6", LBREG, D_TR+6,
251 "TR7", LBREG, D_TR+7,
257 "ADCB", LTYPE3, AADCB,
258 "ADCL", LTYPE3, AADCL,
259 "ADCW", LTYPE3, AADCW,
260 "ADDB", LTYPE3, AADDB,
261 "ADDL", LTYPE3, AADDL,
262 "ADDW", LTYPE3, AADDW,
263 "ADJSP", LTYPE2, AADJSP,
264 "ANDB", LTYPE3, AANDB,
265 "ANDL", LTYPE3, AANDL,
266 "ANDW", LTYPE3, AANDW,
267 "ARPL", LTYPE3, AARPL,
268 "BOUNDL", LTYPE3, ABOUNDL,
269 "BOUNDW", LTYPE3, ABOUNDW,
270 "BSFL", LTYPE3, ABSFL,
271 "BSFW", LTYPE3, ABSFW,
272 "BSRL", LTYPE3, ABSRL,
273 "BSRW", LTYPE3, ABSRW,
274 "BTCL", LTYPE3, ABTCL,
275 "BTCW", LTYPE3, ABTCW,
277 "BTRL", LTYPE3, ABTRL,
278 "BTRW", LTYPE3, ABTRW,
279 "BTSL", LTYPE3, ABTSL,
280 "BTSW", LTYPE3, ABTSW,
282 "BYTE", LTYPE2, ABYTE,
283 "CALL", LTYPEC, ACALL,
287 "CLTS", LTYPE0, ACLTS,
289 "CMPB", LTYPE4, ACMPB,
290 "CMPL", LTYPE4, ACMPL,
291 "CMPW", LTYPE4, ACMPW,
292 "CMPSB", LTYPE0, ACMPSB,
293 "CMPSL", LTYPE0, ACMPSL,
294 "CMPSW", LTYPE0, ACMPSW,
295 "CMPXCHGB", LTYPE3, ACMPXCHGB,
296 "CMPXCHGL", LTYPE3, ACMPXCHGL,
297 "CMPXCHGW", LTYPE3, ACMPXCHGW,
298 "CPUID", LTYPE0, ACPUID,
301 "DATA", LTYPED, ADATA,
302 "DECB", LTYPE1, ADECB,
303 "DECL", LTYPE1, ADECL,
304 "DECW", LTYPE1, ADECW,
305 "DIVB", LTYPE2, ADIVB,
306 "DIVL", LTYPE2, ADIVL,
307 "DIVW", LTYPE2, ADIVW,
309 "ENTER", LTYPE2, AENTER,
310 "GLOBL", LTYPEG, AGLOBL,
312 "IDIVB", LTYPE2, AIDIVB,
313 "IDIVL", LTYPE2, AIDIVL,
314 "IDIVW", LTYPE2, AIDIVW,
315 "IMULB", LTYPEI, AIMULB,
316 "IMULL", LTYPEI, AIMULL,
317 "IMULW", LTYPEI, AIMULW,
321 "INCB", LTYPE1, AINCB,
322 "INCL", LTYPE1, AINCL,
323 "INCW", LTYPE1, AINCW,
324 "INSB", LTYPE0, AINSB,
325 "INSL", LTYPE0, AINSL,
326 "INSW", LTYPE0, AINSW,
328 "INTO", LTYPE0, AINTO,
329 "IRETL", LTYPE0, AIRETL,
330 "IRETW", LTYPE0, AIRETW,
333 "JO", LTYPER, AJOS, /* alternate */
335 "JNO", LTYPER, AJOC, /* alternate */
337 "JB", LTYPER, AJCS, /* alternate */
338 "JC", LTYPER, AJCS, /* alternate */
339 "JNAE", LTYPER, AJCS, /* alternate */
340 "JLO", LTYPER, AJCS, /* alternate */
342 "JAE", LTYPER, AJCC, /* alternate */
343 "JNB", LTYPER, AJCC, /* alternate */
344 "JNC", LTYPER, AJCC, /* alternate */
345 "JHS", LTYPER, AJCC, /* alternate */
347 "JE", LTYPER, AJEQ, /* alternate */
348 "JZ", LTYPER, AJEQ, /* alternate */
350 "JNZ", LTYPER, AJNE, /* alternate */
352 "JBE", LTYPER, AJLS, /* alternate */
353 "JNA", LTYPER, AJLS, /* alternate */
355 "JA", LTYPER, AJHI, /* alternate */
356 "JNBE", LTYPER, AJHI, /* alternate */
358 "JS", LTYPER, AJMI, /* alternate */
360 "JNS", LTYPER, AJPL, /* alternate */
362 "JP", LTYPER, AJPS, /* alternate */
363 "JPE", LTYPER, AJPS, /* alternate */
365 "JNP", LTYPER, AJPC, /* alternate */
366 "JPO", LTYPER, AJPC, /* alternate */
368 "JL", LTYPER, AJLT, /* alternate */
369 "JNGE", LTYPER, AJLT, /* alternate */
371 "JNL", LTYPER, AJGE, /* alternate */
373 "JNG", LTYPER, AJLE, /* alternate */
375 "JG", LTYPER, AJGT, /* alternate */
376 "JNLE", LTYPER, AJGT, /* alternate */
378 "JCXZ", LTYPER, AJCXZ,
380 "LAHF", LTYPE0, ALAHF,
381 "LARL", LTYPE3, ALARL,
382 "LARW", LTYPE3, ALARW,
383 "LEAL", LTYPE3, ALEAL,
384 "LEAW", LTYPE3, ALEAW,
385 "LEAVEL", LTYPE0, ALEAVEL,
386 "LEAVEW", LTYPE0, ALEAVEW,
387 "LOCK", LTYPE0, ALOCK,
388 "LODSB", LTYPE0, ALODSB,
389 "LODSL", LTYPE0, ALODSL,
390 "LODSW", LTYPE0, ALODSW,
391 "LONG", LTYPE2, ALONG,
392 "LOOP", LTYPER, ALOOP,
393 "LOOPEQ", LTYPER, ALOOPEQ,
394 "LOOPNE", LTYPER, ALOOPNE,
395 "LSLL", LTYPE3, ALSLL,
396 "LSLW", LTYPE3, ALSLW,
397 "MOVB", LTYPE3, AMOVB,
398 "MOVL", LTYPEM, AMOVL,
399 "MOVW", LTYPEM, AMOVW,
400 "MOVBLSX", LTYPE3, AMOVBLSX,
401 "MOVBLZX", LTYPE3, AMOVBLZX,
402 "MOVBWSX", LTYPE3, AMOVBWSX,
403 "MOVBWZX", LTYPE3, AMOVBWZX,
404 "MOVWLSX", LTYPE3, AMOVWLSX,
405 "MOVWLZX", LTYPE3, AMOVWLZX,
406 "MOVSB", LTYPE0, AMOVSB,
407 "MOVSL", LTYPE0, AMOVSL,
408 "MOVSW", LTYPE0, AMOVSW,
409 "MULB", LTYPE2, AMULB,
410 "MULL", LTYPE2, AMULL,
411 "MULW", LTYPE2, AMULW,
412 "NEGB", LTYPE1, ANEGB,
413 "NEGL", LTYPE1, ANEGL,
414 "NEGW", LTYPE1, ANEGW,
416 "NOTB", LTYPE1, ANOTB,
417 "NOTL", LTYPE1, ANOTL,
418 "NOTW", LTYPE1, ANOTW,
422 "OUTB", LTYPE0, AOUTB,
423 "OUTL", LTYPE0, AOUTL,
424 "OUTW", LTYPE0, AOUTW,
425 "OUTSB", LTYPE0, AOUTSB,
426 "OUTSL", LTYPE0, AOUTSL,
427 "OUTSW", LTYPE0, AOUTSW,
428 "POPAL", LTYPE0, APOPAL,
429 "POPAW", LTYPE0, APOPAW,
430 "POPFL", LTYPE0, APOPFL,
431 "POPFW", LTYPE0, APOPFW,
432 "POPL", LTYPE1, APOPL,
433 "POPW", LTYPE1, APOPW,
434 "PUSHAL", LTYPE0, APUSHAL,
435 "PUSHAW", LTYPE0, APUSHAW,
436 "PUSHFL", LTYPE0, APUSHFL,
437 "PUSHFW", LTYPE0, APUSHFW,
438 "PUSHL", LTYPE2, APUSHL,
439 "PUSHW", LTYPE2, APUSHW,
440 "RCLB", LTYPE3, ARCLB,
441 "RCLL", LTYPE3, ARCLL,
442 "RCLW", LTYPE3, ARCLW,
443 "RCRB", LTYPE3, ARCRB,
444 "RCRL", LTYPE3, ARCRL,
445 "RCRW", LTYPE3, ARCRW,
447 "REPN", LTYPE0, AREPN,
449 "ROLB", LTYPE3, AROLB,
450 "ROLL", LTYPE3, AROLL,
451 "ROLW", LTYPE3, AROLW,
452 "RORB", LTYPE3, ARORB,
453 "RORL", LTYPE3, ARORL,
454 "RORW", LTYPE3, ARORW,
455 "SAHF", LTYPE0, ASAHF,
456 "SALB", LTYPE3, ASALB,
457 "SALL", LTYPE3, ASALL,
458 "SALW", LTYPE3, ASALW,
459 "SARB", LTYPE3, ASARB,
460 "SARL", LTYPE3, ASARL,
461 "SARW", LTYPE3, ASARW,
462 "SBBB", LTYPE3, ASBBB,
463 "SBBL", LTYPE3, ASBBL,
464 "SBBW", LTYPE3, ASBBW,
465 "SCASB", LTYPE0, ASCASB,
466 "SCASL", LTYPE0, ASCASL,
467 "SCASW", LTYPE0, ASCASW,
468 "SETCC", LTYPE1, ASETCC,
469 "SETCS", LTYPE1, ASETCS,
470 "SETEQ", LTYPE1, ASETEQ,
471 "SETGE", LTYPE1, ASETGE,
472 "SETGT", LTYPE1, ASETGT,
473 "SETHI", LTYPE1, ASETHI,
474 "SETLE", LTYPE1, ASETLE,
475 "SETLS", LTYPE1, ASETLS,
476 "SETLT", LTYPE1, ASETLT,
477 "SETMI", LTYPE1, ASETMI,
478 "SETNE", LTYPE1, ASETNE,
479 "SETOC", LTYPE1, ASETOC,
480 "SETOS", LTYPE1, ASETOS,
481 "SETPC", LTYPE1, ASETPC,
482 "SETPL", LTYPE1, ASETPL,
483 "SETPS", LTYPE1, ASETPS,
486 "SHLB", LTYPE3, ASHLB,
487 "SHLL", LTYPES, ASHLL,
488 "SHLW", LTYPES, ASHLW,
489 "SHRB", LTYPE3, ASHRB,
490 "SHRL", LTYPES, ASHRL,
491 "SHRW", LTYPES, ASHRW,
495 "STOSB", LTYPE0, ASTOSB,
496 "STOSL", LTYPE0, ASTOSL,
497 "STOSW", LTYPE0, ASTOSW,
498 "SUBB", LTYPE3, ASUBB,
499 "SUBL", LTYPE3, ASUBL,
500 "SUBW", LTYPE3, ASUBW,
501 "SYSCALL", LTYPE0, ASYSCALL,
502 "TESTB", LTYPE3, ATESTB,
503 "TESTL", LTYPE3, ATESTL,
504 "TESTW", LTYPE3, ATESTW,
505 "TEXT", LTYPET, ATEXT,
506 "VERR", LTYPE2, AVERR,
507 "VERW", LTYPE2, AVERW,
508 "WAIT", LTYPE0, AWAIT,
509 "WORD", LTYPE2, AWORD,
510 "XCHGB", LTYPE3, AXCHGB,
511 "XCHGL", LTYPE3, AXCHGL,
512 "XCHGW", LTYPE3, AXCHGW,
513 "XLAT", LTYPE2, AXLAT,
514 "XORB", LTYPE3, AXORB,
515 "XORL", LTYPE3, AXORL,
516 "XORW", LTYPE3, AXORW,
518 "CMOVLCC", LTYPE3, ACMOVLCC,
519 "CMOVLCS", LTYPE3, ACMOVLCS,
520 "CMOVLEQ", LTYPE3, ACMOVLEQ,
521 "CMOVLGE", LTYPE3, ACMOVLGE,
522 "CMOVLGT", LTYPE3, ACMOVLGT,
523 "CMOVLHI", LTYPE3, ACMOVLHI,
524 "CMOVLLE", LTYPE3, ACMOVLLE,
525 "CMOVLLS", LTYPE3, ACMOVLLS,
526 "CMOVLLT", LTYPE3, ACMOVLLT,
527 "CMOVLMI", LTYPE3, ACMOVLMI,
528 "CMOVLNE", LTYPE3, ACMOVLNE,
529 "CMOVLOC", LTYPE3, ACMOVLOC,
530 "CMOVLOS", LTYPE3, ACMOVLOS,
531 "CMOVLPC", LTYPE3, ACMOVLPC,
532 "CMOVLPL", LTYPE3, ACMOVLPL,
533 "CMOVLPS", LTYPE3, ACMOVLPS,
534 "CMOVWCC", LTYPE3, ACMOVWCC,
535 "CMOVWCS", LTYPE3, ACMOVWCS,
536 "CMOVWEQ", LTYPE3, ACMOVWEQ,
537 "CMOVWGE", LTYPE3, ACMOVWGE,
538 "CMOVWGT", LTYPE3, ACMOVWGT,
539 "CMOVWHI", LTYPE3, ACMOVWHI,
540 "CMOVWLE", LTYPE3, ACMOVWLE,
541 "CMOVWLS", LTYPE3, ACMOVWLS,
542 "CMOVWLT", LTYPE3, ACMOVWLT,
543 "CMOVWMI", LTYPE3, ACMOVWMI,
544 "CMOVWNE", LTYPE3, ACMOVWNE,
545 "CMOVWOC", LTYPE3, ACMOVWOC,
546 "CMOVWOS", LTYPE3, ACMOVWOS,
547 "CMOVWPC", LTYPE3, ACMOVWPC,
548 "CMOVWPL", LTYPE3, ACMOVWPL,
549 "CMOVWPS", LTYPE3, ACMOVWPS,
551 "FMOVB", LTYPE3, AFMOVB,
552 "FMOVBP", LTYPE3, AFMOVBP,
553 "FMOVD", LTYPE3, AFMOVD,
554 "FMOVDP", LTYPE3, AFMOVDP,
555 "FMOVF", LTYPE3, AFMOVF,
556 "FMOVFP", LTYPE3, AFMOVFP,
557 "FMOVL", LTYPE3, AFMOVL,
558 "FMOVLP", LTYPE3, AFMOVLP,
559 "FMOVV", LTYPE3, AFMOVV,
560 "FMOVVP", LTYPE3, AFMOVVP,
561 "FMOVW", LTYPE3, AFMOVW,
562 "FMOVWP", LTYPE3, AFMOVWP,
563 "FMOVX", LTYPE3, AFMOVX,
564 "FMOVXP", LTYPE3, AFMOVXP,
565 "FCMOVCC", LTYPE3, AFCMOVCC,
566 "FCMOVCS", LTYPE3, AFCMOVCS,
567 "FCMOVEQ", LTYPE3, AFCMOVEQ,
568 "FCMOVHI", LTYPE3, AFCMOVHI,
569 "FCMOVLS", LTYPE3, AFCMOVLS,
570 "FCMOVNE", LTYPE3, AFCMOVNE,
571 "FCMOVNU", LTYPE3, AFCMOVNU,
572 "FCMOVUN", LTYPE3, AFCMOVUN,
573 "FCOMB", LTYPE3, AFCOMB,
574 "FCOMBP", LTYPE3, AFCOMBP,
575 "FCOMD", LTYPE3, AFCOMD,
576 "FCOMDP", LTYPE3, AFCOMDP,
577 "FCOMDPP", LTYPE3, AFCOMDPP,
578 "FCOMF", LTYPE3, AFCOMF,
579 "FCOMFP", LTYPE3, AFCOMFP,
580 "FCOMI", LTYPE3, AFCOMI,
581 "FCOMIP", LTYPE3, AFCOMIP,
582 "FCOML", LTYPE3, AFCOML,
583 "FCOMLP", LTYPE3, AFCOMLP,
584 "FCOMW", LTYPE3, AFCOMW,
585 "FCOMWP", LTYPE3, AFCOMWP,
586 "FUCOM", LTYPE3, AFUCOM,
587 "FUCOMI", LTYPE3, AFUCOMI,
588 "FUCOMIP", LTYPE3, AFUCOMIP,
589 "FUCOMP", LTYPE3, AFUCOMP,
590 "FUCOMPP", LTYPE3, AFUCOMPP,
591 "FADDW", LTYPE3, AFADDW,
592 "FADDL", LTYPE3, AFADDL,
593 "FADDF", LTYPE3, AFADDF,
594 "FADDD", LTYPE3, AFADDD,
595 "FADDDP", LTYPE3, AFADDDP,
596 "FSUBDP", LTYPE3, AFSUBDP,
597 "FSUBW", LTYPE3, AFSUBW,
598 "FSUBL", LTYPE3, AFSUBL,
599 "FSUBF", LTYPE3, AFSUBF,
600 "FSUBD", LTYPE3, AFSUBD,
601 "FSUBRDP", LTYPE3, AFSUBRDP,
602 "FSUBRW", LTYPE3, AFSUBRW,
603 "FSUBRL", LTYPE3, AFSUBRL,
604 "FSUBRF", LTYPE3, AFSUBRF,
605 "FSUBRD", LTYPE3, AFSUBRD,
606 "FMULDP", LTYPE3, AFMULDP,
607 "FMULW", LTYPE3, AFMULW,
608 "FMULL", LTYPE3, AFMULL,
609 "FMULF", LTYPE3, AFMULF,
610 "FMULD", LTYPE3, AFMULD,
611 "FDIVDP", LTYPE3, AFDIVDP,
612 "FDIVW", LTYPE3, AFDIVW,
613 "FDIVL", LTYPE3, AFDIVL,
614 "FDIVF", LTYPE3, AFDIVF,
615 "FDIVD", LTYPE3, AFDIVD,
616 "FDIVRDP", LTYPE3, AFDIVRDP,
617 "FDIVRW", LTYPE3, AFDIVRW,
618 "FDIVRL", LTYPE3, AFDIVRL,
619 "FDIVRF", LTYPE3, AFDIVRF,
620 "FDIVRD", LTYPE3, AFDIVRD,
621 "FXCHD", LTYPE3, AFXCHD,
622 "FFREE", LTYPE1, AFFREE,
623 "FLDCW", LTYPE2, AFLDCW,
624 "FLDENV", LTYPE1, AFLDENV,
625 "FRSTOR", LTYPE2, AFRSTOR,
626 "FSAVE", LTYPE1, AFSAVE,
627 "FSTCW", LTYPE1, AFSTCW,
628 "FSTENV", LTYPE1, AFSTENV,
629 "FSTSW", LTYPE1, AFSTSW,
630 "F2XM1", LTYPE0, AF2XM1,
631 "FABS", LTYPE0, AFABS,
632 "FCHS", LTYPE0, AFCHS,
633 "FCLEX", LTYPE0, AFCLEX,
634 "FCOS", LTYPE0, AFCOS,
635 "FDECSTP", LTYPE0, AFDECSTP,
636 "FINCSTP", LTYPE0, AFINCSTP,
637 "FINIT", LTYPE0, AFINIT,
638 "FLD1", LTYPE0, AFLD1,
639 "FLDL2E", LTYPE0, AFLDL2E,
640 "FLDL2T", LTYPE0, AFLDL2T,
641 "FLDLG2", LTYPE0, AFLDLG2,
642 "FLDLN2", LTYPE0, AFLDLN2,
643 "FLDPI", LTYPE0, AFLDPI,
644 "FLDZ", LTYPE0, AFLDZ,
645 "FNOP", LTYPE0, AFNOP,
646 "FPATAN", LTYPE0, AFPATAN,
647 "FPREM", LTYPE0, AFPREM,
648 "FPREM1", LTYPE0, AFPREM1,
649 "FPTAN", LTYPE0, AFPTAN,
650 "FRNDINT", LTYPE0, AFRNDINT,
651 "FSCALE", LTYPE0, AFSCALE,
652 "FSIN", LTYPE0, AFSIN,
653 "FSINCOS", LTYPE0, AFSINCOS,
654 "FSQRT", LTYPE0, AFSQRT,
655 "FTST", LTYPE0, AFTST,
656 "FXAM", LTYPE0, AFXAM,
657 "FXTRACT", LTYPE0, AFXTRACT,
658 "FYL2X", LTYPE0, AFYL2X,
659 "FYL2XP1", LTYPE0, AFYL2XP1,
661 "ADDPD", LTYPE3, AADDPD,
662 "ADDPS", LTYPE3, AADDPS,
663 "ADDSD", LTYPE3, AADDSD,
664 "ADDSS", LTYPE3, AADDSS,
665 "ANDNPD", LTYPE3, AANDNPD,
666 "ANDNPS", LTYPE3, AANDNPS,
667 "ANDPD", LTYPE3, AANDPD,
668 "ANDPS", LTYPE3, AANDPS,
669 "CMPPD", LTYPEXC,ACMPPD,
670 "CMPPS", LTYPEXC,ACMPPS,
671 "CMPSD", LTYPEXC,ACMPSD,
672 "CMPSS", LTYPEXC,ACMPSS,
673 "COMISD", LTYPE3, ACOMISD,
674 "COMISS", LTYPE3, ACOMISS,
675 "CVTPL2PD", LTYPE3, ACVTPL2PD,
676 "CVTPL2PS", LTYPE3, ACVTPL2PS,
677 "CVTPD2PL", LTYPE3, ACVTPD2PL,
678 "CVTPD2PS", LTYPE3, ACVTPD2PS,
679 "CVTPS2PL", LTYPE3, ACVTPS2PL,
680 "PF2IW", LTYPE3, APF2IW,
681 "PF2IL", LTYPE3, APF2IL,
682 "PF2ID", LTYPE3, APF2IL, /* syn */
683 "PI2FL", LTYPE3, API2FL,
684 "PI2FD", LTYPE3, API2FL, /* syn */
685 "PI2FW", LTYPE3, API2FW,
686 "CVTPS2PD", LTYPE3, ACVTPS2PD,
687 "CVTSD2SL", LTYPE3, ACVTSD2SL,
688 "CVTSD2SS", LTYPE3, ACVTSD2SS,
689 "CVTSL2SD", LTYPE3, ACVTSL2SD,
690 "CVTSL2SS", LTYPE3, ACVTSL2SS,
691 "CVTSS2SD", LTYPE3, ACVTSS2SD,
692 "CVTSS2SL", LTYPE3, ACVTSS2SL,
693 "CVTTPD2PL", LTYPE3, ACVTTPD2PL,
694 "CVTTPS2PL", LTYPE3, ACVTTPS2PL,
695 "CVTTSD2SL", LTYPE3, ACVTTSD2SL,
696 "CVTTSS2SL", LTYPE3, ACVTTSS2SL,
697 "DIVPD", LTYPE3, ADIVPD,
698 "DIVPS", LTYPE3, ADIVPS,
699 "DIVSD", LTYPE3, ADIVSD,
700 "DIVSS", LTYPE3, ADIVSS,
701 "FXRSTOR", LTYPE2, AFXRSTOR,
702 "FXSAVE", LTYPE1, AFXSAVE,
703 "LDMXCSR", LTYPE2, ALDMXCSR,
704 "MASKMOVOU", LTYPE3, AMASKMOVOU,
705 "MASKMOVDQU", LTYPE3, AMASKMOVOU, /* syn */
706 "MAXPD", LTYPE3, AMAXPD,
707 "MAXPS", LTYPE3, AMAXPS,
708 "MAXSD", LTYPE3, AMAXSD,
709 "MAXSS", LTYPE3, AMAXSS,
710 "MINPD", LTYPE3, AMINPD,
711 "MINPS", LTYPE3, AMINPS,
712 "MINSD", LTYPE3, AMINSD,
713 "MINSS", LTYPE3, AMINSS,
714 "MOVAPD", LTYPE3, AMOVAPD,
715 "MOVAPS", LTYPE3, AMOVAPS,
716 "MOVO", LTYPE3, AMOVO,
717 "MOVOA", LTYPE3, AMOVO, /* syn */
718 "MOVOU", LTYPE3, AMOVOU,
719 "MOVHLPS", LTYPE3, AMOVHLPS,
720 "MOVHPD", LTYPE3, AMOVHPD,
721 "MOVHPS", LTYPE3, AMOVHPS,
722 "MOVLHPS", LTYPE3, AMOVLHPS,
723 "MOVLPD", LTYPE3, AMOVLPD,
724 "MOVLPS", LTYPE3, AMOVLPS,
725 "MOVMSKPD", LTYPE3, AMOVMSKPD,
726 "MOVMSKPS", LTYPE3, AMOVMSKPS,
727 "MOVNTO", LTYPE3, AMOVNTO,
728 "MOVNTDQ", LTYPE3, AMOVNTO, /* syn */
729 "MOVNTPD", LTYPE3, AMOVNTPD,
730 "MOVNTPS", LTYPE3, AMOVNTPS,
731 "MOVNTQ", LTYPE3, AMOVNTQ,
732 "MOVQOZX", LTYPE3, AMOVQOZX,
733 "MOVSD", LTYPE3, AMOVSD,
734 "MOVSS", LTYPE3, AMOVSS,
735 "MOVUPD", LTYPE3, AMOVUPD,
736 "MOVUPS", LTYPE3, AMOVUPS,
737 "MULPD", LTYPE3, AMULPD,
738 "MULPS", LTYPE3, AMULPS,
739 "MULSD", LTYPE3, AMULSD,
740 "MULSS", LTYPE3, AMULSS,
741 "ORPD", LTYPE3, AORPD,
742 "ORPS", LTYPE3, AORPS,
743 "PACKSSLW", LTYPE3, APACKSSLW,
744 "PACKSSWB", LTYPE3, APACKSSWB,
745 "PACKUSWB", LTYPE3, APACKUSWB,
746 "PADDB", LTYPE3, APADDB,
747 "PADDL", LTYPE3, APADDL,
748 "PADDQ", LTYPE3, APADDQ,
749 "PADDSB", LTYPE3, APADDSB,
750 "PADDSW", LTYPE3, APADDSW,
751 "PADDUSB", LTYPE3, APADDUSB,
752 "PADDUSW", LTYPE3, APADDUSW,
753 "PADDW", LTYPE3, APADDW,
754 "PAND", LTYPE3, APAND,
755 "PANDB", LTYPE3, APANDB,
756 "PANDL", LTYPE3, APANDL,
757 "PANDSB", LTYPE3, APANDSB,
758 "PANDSW", LTYPE3, APANDSW,
759 "PANDUSB", LTYPE3, APANDUSB,
760 "PANDUSW", LTYPE3, APANDUSW,
761 "PANDW", LTYPE3, APANDW,
762 "PANDN", LTYPE3, APANDN,
763 "PAVGB", LTYPE3, APAVGB,
764 "PAVGW", LTYPE3, APAVGW,
765 "PCMPEQB", LTYPE3, APCMPEQB,
766 "PCMPEQL", LTYPE3, APCMPEQL,
767 "PCMPEQW", LTYPE3, APCMPEQW,
768 "PCMPGTB", LTYPE3, APCMPGTB,
769 "PCMPGTL", LTYPE3, APCMPGTL,
770 "PCMPGTW", LTYPE3, APCMPGTW,
771 "PEXTRW", LTYPEX, APEXTRW,
772 "PINSRW", LTYPEX, APINSRW,
773 "PMADDWL", LTYPE3, APMADDWL,
774 "PMAXSW", LTYPE3, APMAXSW,
775 "PMAXUB", LTYPE3, APMAXUB,
776 "PMINSW", LTYPE3, APMINSW,
777 "PMINUB", LTYPE3, APMINUB,
778 "PMOVMSKB", LTYPE3, APMOVMSKB,
779 "PMULHRW", LTYPE3, APMULHRW,
780 "PMULHUW", LTYPE3, APMULHUW,
781 "PMULHW", LTYPE3, APMULHW,
782 "PMULLW", LTYPE3, APMULLW,
783 "PMULULQ", LTYPE3, APMULULQ,
785 "PSADBW", LTYPE3, APSADBW,
786 "PSHUFHW", LTYPEX, APSHUFHW,
787 "PSHUFL", LTYPEX, APSHUFL,
788 "PSHUFLW", LTYPEX, APSHUFLW,
789 "PSHUFW", LTYPEX, APSHUFW,
790 "PSLLO", LTYPE3, APSLLO,
791 "PSLLDQ", LTYPE3, APSLLO, /* syn */
792 "PSLLL", LTYPE3, APSLLL,
793 "PSLLQ", LTYPE3, APSLLQ,
794 "PSLLW", LTYPE3, APSLLW,
795 "PSRAL", LTYPE3, APSRAL,
796 "PSRAW", LTYPE3, APSRAW,
797 "PSRLO", LTYPE3, APSRLO,
798 "PSRLDQ", LTYPE3, APSRLO, /* syn */
799 "PSRLL", LTYPE3, APSRLL,
800 "PSRLQ", LTYPE3, APSRLQ,
801 "PSRLW", LTYPE3, APSRLW,
802 "PSUBB", LTYPE3, APSUBB,
803 "PSUBL", LTYPE3, APSUBL,
804 "PSUBQ", LTYPE3, APSUBQ,
805 "PSUBSB", LTYPE3, APSUBSB,
806 "PSUBSW", LTYPE3, APSUBSW,
807 "PSUBUSB", LTYPE3, APSUBUSB,
808 "PSUBUSW", LTYPE3, APSUBUSW,
809 "PSUBW", LTYPE3, APSUBW,
810 "PUNPCKHBW", LTYPE3, APUNPCKHBW,
811 "PUNPCKHLQ", LTYPE3, APUNPCKHLQ,
812 "PUNPCKHQDQ", LTYPE3, APUNPCKHQDQ,
813 "PUNPCKHWL", LTYPE3, APUNPCKHWL,
814 "PUNPCKLBW", LTYPE3, APUNPCKLBW,
815 "PUNPCKLLQ", LTYPE3, APUNPCKLLQ,
816 "PUNPCKLQDQ", LTYPE3, APUNPCKLQDQ,
817 "PUNPCKLWL", LTYPE3, APUNPCKLWL,
818 "PXOR", LTYPE3, APXOR,
819 "RCPPS", LTYPE3, ARCPPS,
820 "RCPSS", LTYPE3, ARCPSS,
821 "RSQRTPS", LTYPE3, ARSQRTPS,
822 "RSQRTSS", LTYPE3, ARSQRTSS,
823 "SHUFPD", LTYPEX, ASHUFPD,
824 "SHUFPS", LTYPEX, ASHUFPS,
825 "SQRTPD", LTYPE3, ASQRTPD,
826 "SQRTPS", LTYPE3, ASQRTPS,
827 "SQRTSD", LTYPE3, ASQRTSD,
828 "SQRTSS", LTYPE3, ASQRTSS,
829 "STMXCSR", LTYPE1, ASTMXCSR,
830 "SUBPD", LTYPE3, ASUBPD,
831 "SUBPS", LTYPE3, ASUBPS,
832 "SUBSD", LTYPE3, ASUBSD,
833 "SUBSS", LTYPE3, ASUBSS,
834 "UCOMISD", LTYPE3, AUCOMISD,
835 "UCOMISS", LTYPE3, AUCOMISS,
836 "UNPCKHPD", LTYPE3, AUNPCKHPD,
837 "UNPCKHPS", LTYPE3, AUNPCKHPS,
838 "UNPCKLPD", LTYPE3, AUNPCKLPD,
839 "UNPCKLPS", LTYPE3, AUNPCKLPS,
840 "XORPD", LTYPE3, AXORPD,
841 "XORPS", LTYPE3, AXORPS,
856 for(i=0; i<sizeof(nullgen.sval); i++)
858 nullgen.type = D_NONE;
859 nullgen.index = D_NONE;
867 for(i=0; i<NHASH; i++)
869 for(i=0; itab[i].name; i++) {
870 s = slookup(itab[i].name);
872 yyerror("double initialization %s", itab[i].name);
873 s->type = itab[i].type;
874 s->value = itab[i].value;
877 pathname = allocn(pathname, 0, 100);
878 if(mygetwd(pathname, 99) == 0) {
879 pathname = allocn(pathname, 100, 900);
880 if(mygetwd(pathname, 999) == 0)
881 strcpy(pathname, "/???");
886 checkscale(int scale)
896 yyerror("scale must be 1248: %d", scale);
919 zname(char *n, int t, int s)
922 Bputc(&obuf, ANAME); /* as(2) */
923 Bputc(&obuf, ANAME>>8);
924 Bputc(&obuf, t); /* type */
925 Bputc(&obuf, s); /* sym */
942 if(a->index != D_NONE || a->scale != 0)
957 t |= T_OFFSET|T_OFFSET2;
967 if(t & T_INDEX) { /* implies index, scale */
968 Bputc(&obuf, a->index);
969 Bputc(&obuf, a->scale);
971 if(t & T_OFFSET) { /* implies offset */
985 if(t & T_SYM) /* implies sym */
988 ieeedtod(&e, a->dval);
1003 for(i=0; i<NSNAME; i++) {
1010 Bputc(&obuf, a->type);
1014 outcode(int a, Gen2 *g2)
1027 if(sf < 0 || sf >= NSYM)
1035 zname(s->name, t, sym);
1049 if(st < 0 || st >= NSYM)
1057 zname(s->name, t, sym);
1071 Bputc(&obuf, lineno);
1072 Bputc(&obuf, lineno>>8);
1073 Bputc(&obuf, lineno>>16);
1074 Bputc(&obuf, lineno>>24);
1075 zaddr(&g2->from, sf);
1079 if(a != AGLOBL && a != ADATA)
1088 char *p, *q, *op, c;
1093 for(h = hist; h != H; h = h->link) {
1096 /* on windows skip drive specifier in pathname */
1097 if(systemtype(Windows) && p && p[1] == ':'){
1101 if(p && p[0] != c && h->offset == 0 && pathname){
1102 /* on windows skip drive specifier in pathname */
1103 if(systemtype(Windows) && pathname[1] == ':') {
1107 } else if(pathname[0] == c){
1117 n = 1; /* leading "/" */
1118 *p = '/'; /* don't emit "\" on windows */
1126 Bputc(&obuf, ANAME);
1127 Bputc(&obuf, ANAME>>8);
1128 Bputc(&obuf, D_FILE); /* type */
1129 Bputc(&obuf, 1); /* sym */
1131 Bwrite(&obuf, p, n);
1140 g.offset = h->offset;
1142 Bputc(&obuf, AHISTORY);
1143 Bputc(&obuf, AHISTORY>>8);
1144 Bputc(&obuf, h->line);
1145 Bputc(&obuf, h->line>>8);
1146 Bputc(&obuf, h->line>>16);
1147 Bputc(&obuf, h->line>>24);
1153 #include "../cc/lexbody"
1154 #include "../cc/macbody"
1155 #include "../cc/compat"