13 Bprint(&bso, "%5.2f span\n", cputime());
16 for(p = firstp; p != P; p = p->link) {
23 autosize = p->to.offset + 4;
25 p->from.sym->value = c;
29 diag("zero-width instruction\n%P", p);
36 setext = lookup("etext", 0);
39 textsize = c - INITTEXT;
42 INITDAT = rnd(c, INITRND);
44 Bprint(&bso, "tsize = %lux\n", textsize);
49 xdefine(char *p, int t, long v)
54 if(s->type == 0 || s->type == SXREF) {
102 if(t == 0 || t == SXREF) {
103 diag("undefined external: %s in %s",
104 a->sym->name, TNAME);
105 a->sym->type = SDATA;
107 instoffset = a->sym->value + a->offset - BIG;
108 if(instoffset >= -BIG && instoffset < BIG) {
117 instoffset = autosize + a->offset;
121 instoffset = autosize + a->offset + 4L;
123 if(instoffset >= -BIG && instoffset < BIG) {
132 instoffset = a->offset;
135 if(instoffset >= -BIG && instoffset < BIG)
142 if(a->name == D_NONE)
150 instoffset = a->offset;
154 if(instoffset >= -0x1000 && instoffset <= 0xfff)
156 if((instoffset & 0x3ff) == 0)
166 if(t == 0 || t == SXREF) {
167 diag("undefined external: %s in %s",
171 if(s->type == STEXT || s->type == SLEAF) {
172 instoffset = s->value + a->offset;
175 if(s->type == SCONST) {
176 instoffset = s->value + a->offset;
179 instoffset = s->value + a->offset - BIG;
180 if(instoffset >= -BIG && instoffset < BIG && instoffset != 0)
182 instoffset = s->value + a->offset + INITDAT;
183 /* not sure why this barfs */
188 if(instoffset >= -0x1000 && instoffset <= 0xfff)
190 if((instoffset & 0x3ff) == 0)
196 instoffset = autosize + a->offset;
197 if(instoffset >= -BIG && instoffset < BIG)
202 instoffset = autosize + a->offset + 4L;
203 if(instoffset >= -BIG && instoffset < BIG)
227 a1 = aclass(&p->from) + 1;
233 a3 = aclass(&p->to) + 1;
241 o = oprange[r].start;
243 o = oprange[r].stop; /* just generate an error */
251 p->optab = (o-optab)+1;
254 diag("illegal combination %A %d %d %d",
271 if(b == C_ZCON || b == C_SCON || b == C_UCON)
296 b == C_ESEXT || b == C_OSEXT ||
297 b == C_ELEXT || b == C_OLEXT)
301 if(b == C_ESEXT || b == C_OSEXT)
310 b == C_ESAUTO || b == C_OSAUTO ||
311 b == C_ELAUTO || b == C_OLAUTO)
315 if(b == C_ESAUTO || b == C_OSAUTO)
323 if(b == C_ZOREG || b == C_SOREG)
338 ocmp(const void *a1, const void *a2)
365 for(i=0; i<C_NCLASS; i++)
366 for(n=0; n<C_NCLASS; n++)
367 xcmp[i][n] = cmp(n, i);
368 for(n=0; optab[n].as != AXXX; n++)
370 qsort(optab, n, sizeof(optab[0]), ocmp);
373 oprange[r].start = optab+i;
374 while(optab[i].as == r)
376 oprange[r].stop = optab+i;
382 diag("unknown op in build: %A", r);
385 oprange[AADDX] = oprange[r];
386 oprange[ASUB] = oprange[r];
387 oprange[ASUBX] = oprange[r];
388 oprange[AMUL] = oprange[r];
389 oprange[AXOR] = oprange[r];
390 oprange[AXNOR] = oprange[r];
391 oprange[AAND] = oprange[r];
392 oprange[AANDN] = oprange[r];
393 oprange[AOR] = oprange[r];
394 oprange[AORN] = oprange[r];
395 oprange[ASLL] = oprange[r];
396 oprange[ASRL] = oprange[r];
397 oprange[ASRA] = oprange[r];
398 oprange[AADDCC] = oprange[r];
399 oprange[AADDXCC] = oprange[r];
400 oprange[ATADDCC] = oprange[r];
401 oprange[ATADDCCTV] = oprange[r];
402 oprange[ASUBCC] = oprange[r];
403 oprange[ASUBXCC] = oprange[r];
404 oprange[ATSUBCC] = oprange[r];
405 oprange[ATSUBCCTV] = oprange[r];
406 oprange[AXORCC] = oprange[r];
407 oprange[AXNORCC] = oprange[r];
408 oprange[AANDCC] = oprange[r];
409 oprange[AANDNCC] = oprange[r];
410 oprange[AORCC] = oprange[r];
411 oprange[AORNCC] = oprange[r];
412 oprange[AMULSCC] = oprange[r];
413 oprange[ASAVE] = oprange[r];
414 oprange[ARESTORE] = oprange[r];
417 oprange[AMOVH] = oprange[r];
418 oprange[AMOVHU] = oprange[r];
419 oprange[AMOVBU] = oprange[r];
420 oprange[ASWAP] = oprange[r];
421 oprange[ATAS] = oprange[r];
424 oprange[ABN] = oprange[r];
425 oprange[AFBA] = oprange[r];
426 oprange[AFBN] = oprange[r];
429 oprange[ABCC] = oprange[r];
430 oprange[ABCS] = oprange[r];
431 oprange[ABGE] = oprange[r];
432 oprange[ABGU] = oprange[r];
433 oprange[ABG] = oprange[r];
434 oprange[ABLEU] = oprange[r];
435 oprange[ABLE] = oprange[r];
436 oprange[ABL] = oprange[r];
437 oprange[ABNEG] = oprange[r];
438 oprange[ABNE] = oprange[r];
439 oprange[ABPOS] = oprange[r];
440 oprange[ABVC] = oprange[r];
441 oprange[ABVS] = oprange[r];
443 oprange[AFBE] = oprange[r];
444 oprange[AFBG] = oprange[r];
445 oprange[AFBGE] = oprange[r];
446 oprange[AFBL] = oprange[r];
447 oprange[AFBLE] = oprange[r];
448 oprange[AFBLG] = oprange[r];
449 oprange[AFBNE] = oprange[r];
450 oprange[AFBO] = oprange[r];
451 oprange[AFBU] = oprange[r];
452 oprange[AFBUE] = oprange[r];
453 oprange[AFBUG] = oprange[r];
454 oprange[AFBUGE] = oprange[r];
455 oprange[AFBUL] = oprange[r];
456 oprange[AFBULE] = oprange[r];
459 oprange[ATCC] = oprange[r];
460 oprange[ATCS] = oprange[r];
461 oprange[ATE] = oprange[r];
462 oprange[ATGE] = oprange[r];
463 oprange[ATGU] = oprange[r];
464 oprange[ATG] = oprange[r];
465 oprange[ATLEU] = oprange[r];
466 oprange[ATLE] = oprange[r];
467 oprange[ATL] = oprange[r];
468 oprange[ATNEG] = oprange[r];
469 oprange[ATNE] = oprange[r];
470 oprange[ATN] = oprange[r];
471 oprange[ATPOS] = oprange[r];
472 oprange[ATVC] = oprange[r];
473 oprange[ATVS] = oprange[r];
476 oprange[AFADDF] = oprange[r];
477 oprange[AFADDX] = oprange[r];
478 oprange[AFDIVD] = oprange[r];
479 oprange[AFDIVF] = oprange[r];
480 oprange[AFDIVX] = oprange[r];
481 oprange[AFMULD] = oprange[r];
482 oprange[AFMULF] = oprange[r];
483 oprange[AFMULX] = oprange[r];
484 oprange[AFSUBD] = oprange[r];
485 oprange[AFSUBF] = oprange[r];
486 oprange[AFSUBX] = oprange[r];
489 oprange[AFCMPF] = oprange[r];
490 oprange[AFCMPX] = oprange[r];
491 oprange[AFCMPED] = oprange[r];
492 oprange[AFCMPEF] = oprange[r];
493 oprange[AFCMPEX] = oprange[r];
496 oprange[AFMOVDF] = oprange[r];
497 oprange[AFMOVDW] = oprange[r];
498 oprange[AFMOVFD] = oprange[r];
499 oprange[AFMOVFW] = oprange[r];
500 oprange[AFMOVWD] = oprange[r];
501 oprange[AFMOVWF] = oprange[r];
502 oprange[AFNEGF] = oprange[r];
503 oprange[AFSQRTD] = oprange[r];
504 oprange[AFSQRTF] = oprange[r];