From 77a415e5a698e8f897aed8aa64db6855b8f952fc Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Thu, 29 Jan 2015 14:58:54 -0500 Subject: [PATCH] liblink: place TEXT/GLOBL flags in p->from3 always Before, amd64 and 386 stored the flags in p->from.scale and arm and ppc64 stored the flags in p->reg. Both caused special cases in printing and in handling of the addresses. To avoid possible conflicts with the real meaning of p->from and to avoid storing a non-register value in a reg field, use from3 to hold a TYPE_CONST value giving the flags. There is still a special case for printing, because the flags are specified without a $, and normally a TYPE_CONST prints with a $. But that's much less special than what came before. This allows us to remove the textflag and settextflag methods from LinkArch. They are no longer architecture-specific. Change-Id: I931da8e1ecd92e127cd9aa44ef5a73c42e730110 Reviewed-on: https://go-review.googlesource.com/3572 Reviewed-by: Austin Clements --- include/link.h | 8 +- src/cmd/5a/a.h | 1 + src/cmd/5a/a.y | 12 +- src/cmd/5a/lex.c | 2 - src/cmd/5a/y.tab.c | 194 ++++++------ src/cmd/5g/gg.h | 2 - src/cmd/5g/gsubr.c | 6 +- src/cmd/6a/a.h | 1 + src/cmd/6a/a.y | 68 ++-- src/cmd/6a/lex.c | 2 - src/cmd/6a/y.tab.c | 721 +++++++++++++++++++++--------------------- src/cmd/6g/gg.h | 2 - src/cmd/6g/gsubr.c | 6 +- src/cmd/8a/a.h | 1 + src/cmd/8a/a.y | 66 ++-- src/cmd/8a/lex.c | 2 - src/cmd/8a/y.tab.c | 704 +++++++++++++++++++++-------------------- src/cmd/8g/gg.h | 2 - src/cmd/8g/gsubr.c | 6 +- src/cmd/9a/a.h | 1 + src/cmd/9a/a.y | 12 +- src/cmd/9a/lex.c | 2 - src/cmd/9a/y.tab.c | 142 +++++---- src/cmd/9g/gg.h | 2 - src/cmd/9g/gsubr.c | 6 +- src/cmd/gc/pgen.c | 10 +- src/liblink/asm5.c | 1 - src/liblink/asm9.c | 4 - src/liblink/list5.c | 2 +- src/liblink/list6.c | 6 +- src/liblink/list8.c | 6 +- src/liblink/list9.c | 11 +- src/liblink/obj5.c | 22 +- src/liblink/obj6.c | 30 +- src/liblink/obj8.c | 24 +- src/liblink/obj9.c | 22 +- src/liblink/objfile.c | 4 +- 37 files changed, 1052 insertions(+), 1061 deletions(-) diff --git a/include/link.h b/include/link.h index 42071dbb35..a72c66d17e 100644 --- a/include/link.h +++ b/include/link.h @@ -210,7 +210,7 @@ struct Reloc }; // TODO(rsc): Describe prog. -// TOOD(rsc): Make ARM scond == 0 mean C_SCOND_NONE. +// TODO(rsc): Describe TEXT/GLOBL flag in from3, DATA width in from3. struct Prog { vlong pc; @@ -224,7 +224,7 @@ struct Prog int16 reg; // arm, ppc64 only (e.g., ADD from, reg, to); // starts at 0 for both GPRs and FPRs; // also used for ADATA width on arm, ppc64 - Addr from3; // ppc64 only (e.g., RLWM/FMADD from, reg, from3, to) + Addr from3; // addl source argument (e.g., RLWM/FMADD from, reg, from3, to) Addr to; // for 5g, 6g, 8g internal use @@ -245,8 +245,6 @@ struct Prog char width; /* fake for DATA */ char mode; /* 16, 32, or 64 in 6l, 8l; internal use in 5g, 6g, 8g */ - - /*c2go uchar TEXTFLAG; */ }; // prevent incompatible type signatures between liblink and 8l on Plan 9 @@ -604,8 +602,6 @@ struct LinkArch int (*isdata)(Prog*); Prog* (*prg)(void); void (*progedit)(Link*, Prog*); - void (*settextflag)(Prog*, int); - int (*textflag)(Prog*); int minlc; int ptrsize; diff --git a/src/cmd/5a/a.h b/src/cmd/5a/a.h index df9838ad37..296379b01c 100644 --- a/src/cmd/5a/a.h +++ b/src/cmd/5a/a.h @@ -127,6 +127,7 @@ EXTERN int32 thunk; EXTERN Biobuf obuf; EXTERN Link* ctxt; EXTERN Biobuf bstdout; +EXTERN Prog* lastpc; void* alloc(int32); void* allocn(void*, int32, int32); diff --git a/src/cmd/5a/a.y b/src/cmd/5a/a.y index 330b844089..2248c05022 100644 --- a/src/cmd/5a/a.y +++ b/src/cmd/5a/a.y @@ -220,7 +220,11 @@ inst: | LTYPEB name ',' con ',' '$' textsize { settext($2.sym); - outcode($1, Always, &$2, $4, &$7); + outcode($1, Always, &$2, 0, &$7); + if(pass > 1) { + lastpc->from3.type = TYPE_CONST; + lastpc->from3.offset = $4; + } } /* * GLOBL @@ -233,7 +237,11 @@ inst: | LGLOBL name ',' con ',' imm { settext($2.sym); - outcode($1, Always, &$2, $4, &$6); + outcode($1, Always, &$2, 0, &$6); + if(pass > 1) { + lastpc->from3.type = TYPE_CONST; + lastpc->from3.offset = $4; + } } /* * DATA diff --git a/src/cmd/5a/lex.c b/src/cmd/5a/lex.c index 4c4a3b7920..cfe0e1c520 100644 --- a/src/cmd/5a/lex.c +++ b/src/cmd/5a/lex.c @@ -497,8 +497,6 @@ static int bcode[] = ANOP, }; -static Prog *lastpc; - void outcode(int a, int scond, Addr *g1, int reg, Addr *g2) { diff --git a/src/cmd/5a/y.tab.c b/src/cmd/5a/y.tab.c index fe231af860..0b6a695733 100644 --- a/src/cmd/5a/y.tab.c +++ b/src/cmd/5a/y.tab.c @@ -577,17 +577,17 @@ static const yytype_uint16 yyrline[] = 0, 68, 68, 70, 69, 77, 76, 85, 90, 96, 97, 98, 104, 108, 112, 119, 126, 133, 137, 144, 151, 158, 165, 172, 181, 193, 197, 201, 208, 215, - 220, 228, 233, 241, 248, 255, 262, 266, 270, 274, - 281, 303, 311, 320, 327, 336, 347, 353, 356, 360, - 365, 366, 369, 375, 386, 392, 398, 404, 411, 417, - 422, 428, 431, 437, 445, 449, 458, 464, 465, 466, - 467, 472, 478, 484, 490, 491, 494, 495, 503, 512, - 513, 522, 523, 529, 532, 533, 534, 536, 544, 552, - 561, 567, 573, 579, 587, 593, 601, 602, 606, 614, - 615, 621, 622, 630, 631, 634, 640, 648, 656, 664, - 674, 677, 681, 687, 688, 689, 692, 693, 697, 701, - 705, 709, 715, 718, 724, 725, 729, 733, 737, 741, - 745, 749, 753, 757, 761 + 220, 232, 237, 249, 256, 263, 270, 274, 278, 282, + 289, 311, 319, 328, 335, 344, 355, 361, 364, 368, + 373, 374, 377, 383, 394, 400, 406, 412, 419, 425, + 430, 436, 439, 445, 453, 457, 466, 472, 473, 474, + 475, 480, 486, 492, 498, 499, 502, 503, 511, 520, + 521, 530, 531, 537, 540, 541, 542, 544, 552, 560, + 569, 575, 581, 587, 595, 601, 609, 610, 614, 622, + 623, 629, 630, 638, 639, 642, 648, 656, 664, 672, + 682, 685, 689, 695, 696, 697, 700, 701, 705, 709, + 713, 717, 723, 726, 732, 733, 737, 741, 745, 749, + 753, 757, 761, 765, 769 }; #endif @@ -1941,12 +1941,16 @@ yyreduce: #line 221 "a.y" { settext((yyvsp[(2) - (7)].addr).sym); - outcode((yyvsp[(1) - (7)].lval), Always, &(yyvsp[(2) - (7)].addr), (yyvsp[(4) - (7)].lval), &(yyvsp[(7) - (7)].addr)); + outcode((yyvsp[(1) - (7)].lval), Always, &(yyvsp[(2) - (7)].addr), 0, &(yyvsp[(7) - (7)].addr)); + if(pass > 1) { + lastpc->from3.type = TYPE_CONST; + lastpc->from3.offset = (yyvsp[(4) - (7)].lval); + } } break; case 31: -#line 229 "a.y" +#line 233 "a.y" { settext((yyvsp[(2) - (4)].addr).sym); outcode((yyvsp[(1) - (4)].lval), Always, &(yyvsp[(2) - (4)].addr), 0, &(yyvsp[(4) - (4)].addr)); @@ -1954,64 +1958,68 @@ yyreduce: break; case 32: -#line 234 "a.y" +#line 238 "a.y" { settext((yyvsp[(2) - (6)].addr).sym); - outcode((yyvsp[(1) - (6)].lval), Always, &(yyvsp[(2) - (6)].addr), (yyvsp[(4) - (6)].lval), &(yyvsp[(6) - (6)].addr)); + outcode((yyvsp[(1) - (6)].lval), Always, &(yyvsp[(2) - (6)].addr), 0, &(yyvsp[(6) - (6)].addr)); + if(pass > 1) { + lastpc->from3.type = TYPE_CONST; + lastpc->from3.offset = (yyvsp[(4) - (6)].lval); + } } break; case 33: -#line 242 "a.y" +#line 250 "a.y" { outcode((yyvsp[(1) - (6)].lval), Always, &(yyvsp[(2) - (6)].addr), (yyvsp[(4) - (6)].lval), &(yyvsp[(6) - (6)].addr)); } break; case 34: -#line 249 "a.y" +#line 257 "a.y" { outcode((yyvsp[(1) - (4)].lval), (yyvsp[(2) - (4)].lval), &(yyvsp[(3) - (4)].addr), 0, &nullgen); } break; case 35: -#line 256 "a.y" +#line 264 "a.y" { outcode((yyvsp[(1) - (3)].lval), Always, &nullgen, 0, &(yyvsp[(3) - (3)].addr)); } break; case 36: -#line 263 "a.y" +#line 271 "a.y" { outcode((yyvsp[(1) - (5)].lval), (yyvsp[(2) - (5)].lval), &(yyvsp[(3) - (5)].addr), 0, &(yyvsp[(5) - (5)].addr)); } break; case 37: -#line 267 "a.y" +#line 275 "a.y" { outcode((yyvsp[(1) - (5)].lval), (yyvsp[(2) - (5)].lval), &(yyvsp[(3) - (5)].addr), 0, &(yyvsp[(5) - (5)].addr)); } break; case 38: -#line 271 "a.y" +#line 279 "a.y" { outcode((yyvsp[(1) - (7)].lval), (yyvsp[(2) - (7)].lval), &(yyvsp[(3) - (7)].addr), (yyvsp[(5) - (7)].lval), &(yyvsp[(7) - (7)].addr)); } break; case 39: -#line 275 "a.y" +#line 283 "a.y" { outcode((yyvsp[(1) - (6)].lval), (yyvsp[(2) - (6)].lval), &(yyvsp[(3) - (6)].addr), (yyvsp[(5) - (6)].addr).reg, &nullgen); } break; case 40: -#line 282 "a.y" +#line 290 "a.y" { Addr g; @@ -2033,14 +2041,14 @@ yyreduce: break; case 41: -#line 304 "a.y" +#line 312 "a.y" { outcode((yyvsp[(1) - (7)].lval), (yyvsp[(2) - (7)].lval), &(yyvsp[(3) - (7)].addr), (yyvsp[(5) - (7)].addr).reg, &(yyvsp[(7) - (7)].addr)); } break; case 42: -#line 312 "a.y" +#line 320 "a.y" { (yyvsp[(7) - (9)].addr).type = TYPE_REGREG2; (yyvsp[(7) - (9)].addr).offset = (yyvsp[(9) - (9)].lval); @@ -2049,14 +2057,14 @@ yyreduce: break; case 43: -#line 321 "a.y" +#line 329 "a.y" { outcode((yyvsp[(1) - (2)].lval), Always, &(yyvsp[(2) - (2)].addr), 0, &nullgen); } break; case 44: -#line 328 "a.y" +#line 336 "a.y" { if((yyvsp[(2) - (4)].addr).type != TYPE_CONST || (yyvsp[(4) - (4)].addr).type != TYPE_CONST) yyerror("arguments to PCDATA must be integer constants"); @@ -2065,7 +2073,7 @@ yyreduce: break; case 45: -#line 337 "a.y" +#line 345 "a.y" { if((yyvsp[(2) - (4)].addr).type != TYPE_CONST) yyerror("index for FUNCDATA must be integer constant"); @@ -2076,35 +2084,35 @@ yyreduce: break; case 46: -#line 348 "a.y" +#line 356 "a.y" { outcode((yyvsp[(1) - (2)].lval), Always, &nullgen, 0, &nullgen); } break; case 47: -#line 353 "a.y" +#line 361 "a.y" { (yyval.lval) = Always; } break; case 48: -#line 357 "a.y" +#line 365 "a.y" { (yyval.lval) = ((yyvsp[(1) - (2)].lval) & ~C_SCOND) | (yyvsp[(2) - (2)].lval); } break; case 49: -#line 361 "a.y" +#line 369 "a.y" { (yyval.lval) = (yyvsp[(1) - (2)].lval) | (yyvsp[(2) - (2)].lval); } break; case 52: -#line 370 "a.y" +#line 378 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_BRANCH; @@ -2113,7 +2121,7 @@ yyreduce: break; case 53: -#line 376 "a.y" +#line 384 "a.y" { (yyvsp[(1) - (2)].sym) = labellookup((yyvsp[(1) - (2)].sym)); (yyval.addr) = nullgen; @@ -2125,7 +2133,7 @@ yyreduce: break; case 54: -#line 387 "a.y" +#line 395 "a.y" { (yyval.addr).type = TYPE_TEXTSIZE; (yyval.addr).offset = (yyvsp[(1) - (1)].lval); @@ -2134,7 +2142,7 @@ yyreduce: break; case 55: -#line 393 "a.y" +#line 401 "a.y" { (yyval.addr).type = TYPE_TEXTSIZE; (yyval.addr).offset = -(yyvsp[(2) - (2)].lval); @@ -2143,7 +2151,7 @@ yyreduce: break; case 56: -#line 399 "a.y" +#line 407 "a.y" { (yyval.addr).type = TYPE_TEXTSIZE; (yyval.addr).offset = (yyvsp[(1) - (3)].lval); @@ -2152,7 +2160,7 @@ yyreduce: break; case 57: -#line 405 "a.y" +#line 413 "a.y" { (yyval.addr).type = TYPE_TEXTSIZE; (yyval.addr).offset = -(yyvsp[(2) - (4)].lval); @@ -2161,7 +2169,7 @@ yyreduce: break; case 58: -#line 412 "a.y" +#line 420 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_CONST; @@ -2170,7 +2178,7 @@ yyreduce: break; case 59: -#line 418 "a.y" +#line 426 "a.y" { (yyval.addr) = (yyvsp[(2) - (2)].addr); (yyval.addr).type = TYPE_CONST; @@ -2178,7 +2186,7 @@ yyreduce: break; case 60: -#line 423 "a.y" +#line 431 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_SCONST; @@ -2187,7 +2195,7 @@ yyreduce: break; case 62: -#line 432 "a.y" +#line 440 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_FCONST; @@ -2196,7 +2204,7 @@ yyreduce: break; case 63: -#line 438 "a.y" +#line 446 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_FCONST; @@ -2205,14 +2213,14 @@ yyreduce: break; case 64: -#line 446 "a.y" +#line 454 "a.y" { (yyval.lval) = 1 << (yyvsp[(1) - (1)].lval); } break; case 65: -#line 450 "a.y" +#line 458 "a.y" { int i; (yyval.lval)=0; @@ -2224,14 +2232,14 @@ yyreduce: break; case 66: -#line 459 "a.y" +#line 467 "a.y" { (yyval.lval) = (1<<(yyvsp[(1) - (3)].lval)) | (yyvsp[(3) - (3)].lval); } break; case 70: -#line 468 "a.y" +#line 476 "a.y" { (yyval.addr) = (yyvsp[(1) - (4)].addr); (yyval.addr).reg = (yyvsp[(3) - (4)].lval); @@ -2239,7 +2247,7 @@ yyreduce: break; case 71: -#line 473 "a.y" +#line 481 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2248,7 +2256,7 @@ yyreduce: break; case 72: -#line 479 "a.y" +#line 487 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2257,7 +2265,7 @@ yyreduce: break; case 73: -#line 485 "a.y" +#line 493 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2266,7 +2274,7 @@ yyreduce: break; case 77: -#line 496 "a.y" +#line 504 "a.y" { (yyval.addr) = (yyvsp[(1) - (1)].addr); if((yyvsp[(1) - (1)].addr).name != NAME_EXTERN && (yyvsp[(1) - (1)].addr).name != NAME_STATIC) { @@ -2275,7 +2283,7 @@ yyreduce: break; case 78: -#line 504 "a.y" +#line 512 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2285,7 +2293,7 @@ yyreduce: break; case 80: -#line 514 "a.y" +#line 522 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2295,7 +2303,7 @@ yyreduce: break; case 82: -#line 524 "a.y" +#line 532 "a.y" { (yyval.addr) = (yyvsp[(1) - (4)].addr); (yyval.addr).type = TYPE_MEM; @@ -2304,7 +2312,7 @@ yyreduce: break; case 87: -#line 537 "a.y" +#line 545 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_CONST; @@ -2313,7 +2321,7 @@ yyreduce: break; case 88: -#line 545 "a.y" +#line 553 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2322,7 +2330,7 @@ yyreduce: break; case 89: -#line 553 "a.y" +#line 561 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REGREG; @@ -2332,7 +2340,7 @@ yyreduce: break; case 90: -#line 562 "a.y" +#line 570 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_SHIFT; @@ -2341,7 +2349,7 @@ yyreduce: break; case 91: -#line 568 "a.y" +#line 576 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_SHIFT; @@ -2350,7 +2358,7 @@ yyreduce: break; case 92: -#line 574 "a.y" +#line 582 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_SHIFT; @@ -2359,7 +2367,7 @@ yyreduce: break; case 93: -#line 580 "a.y" +#line 588 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_SHIFT; @@ -2368,7 +2376,7 @@ yyreduce: break; case 94: -#line 588 "a.y" +#line 596 "a.y" { if((yyval.lval) < REG_R0 || (yyval.lval) > REG_R15) print("register value out of range in shift\n"); @@ -2377,7 +2385,7 @@ yyreduce: break; case 95: -#line 594 "a.y" +#line 602 "a.y" { if((yyval.lval) < 0 || (yyval.lval) >= 32) print("shift value out of range\n"); @@ -2386,14 +2394,14 @@ yyreduce: break; case 97: -#line 603 "a.y" +#line 611 "a.y" { (yyval.lval) = REGPC; } break; case 98: -#line 607 "a.y" +#line 615 "a.y" { if((yyvsp[(3) - (4)].lval) < 0 || (yyvsp[(3) - (4)].lval) >= NREG) print("register value out of range in R(...)\n"); @@ -2402,14 +2410,14 @@ yyreduce: break; case 100: -#line 616 "a.y" +#line 624 "a.y" { (yyval.lval) = REGSP; } break; case 102: -#line 623 "a.y" +#line 631 "a.y" { if((yyvsp[(3) - (4)].lval) < 0 || (yyvsp[(3) - (4)].lval) >= NREG) print("register value out of range in C(...)\n"); @@ -2418,7 +2426,7 @@ yyreduce: break; case 105: -#line 635 "a.y" +#line 643 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2427,7 +2435,7 @@ yyreduce: break; case 106: -#line 641 "a.y" +#line 649 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2436,7 +2444,7 @@ yyreduce: break; case 107: -#line 649 "a.y" +#line 657 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2447,7 +2455,7 @@ yyreduce: break; case 108: -#line 657 "a.y" +#line 665 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2458,7 +2466,7 @@ yyreduce: break; case 109: -#line 665 "a.y" +#line 673 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2469,140 +2477,140 @@ yyreduce: break; case 110: -#line 674 "a.y" +#line 682 "a.y" { (yyval.lval) = 0; } break; case 111: -#line 678 "a.y" +#line 686 "a.y" { (yyval.lval) = (yyvsp[(2) - (2)].lval); } break; case 112: -#line 682 "a.y" +#line 690 "a.y" { (yyval.lval) = -(yyvsp[(2) - (2)].lval); } break; case 117: -#line 694 "a.y" +#line 702 "a.y" { (yyval.lval) = (yyvsp[(1) - (1)].sym)->value; } break; case 118: -#line 698 "a.y" +#line 706 "a.y" { (yyval.lval) = -(yyvsp[(2) - (2)].lval); } break; case 119: -#line 702 "a.y" +#line 710 "a.y" { (yyval.lval) = (yyvsp[(2) - (2)].lval); } break; case 120: -#line 706 "a.y" +#line 714 "a.y" { (yyval.lval) = ~(yyvsp[(2) - (2)].lval); } break; case 121: -#line 710 "a.y" +#line 718 "a.y" { (yyval.lval) = (yyvsp[(2) - (3)].lval); } break; case 122: -#line 715 "a.y" +#line 723 "a.y" { (yyval.lval) = 0; } break; case 123: -#line 719 "a.y" +#line 727 "a.y" { (yyval.lval) = (yyvsp[(2) - (2)].lval); } break; case 125: -#line 726 "a.y" +#line 734 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) + (yyvsp[(3) - (3)].lval); } break; case 126: -#line 730 "a.y" +#line 738 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) - (yyvsp[(3) - (3)].lval); } break; case 127: -#line 734 "a.y" +#line 742 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) * (yyvsp[(3) - (3)].lval); } break; case 128: -#line 738 "a.y" +#line 746 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) / (yyvsp[(3) - (3)].lval); } break; case 129: -#line 742 "a.y" +#line 750 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) % (yyvsp[(3) - (3)].lval); } break; case 130: -#line 746 "a.y" +#line 754 "a.y" { (yyval.lval) = (yyvsp[(1) - (4)].lval) << (yyvsp[(4) - (4)].lval); } break; case 131: -#line 750 "a.y" +#line 758 "a.y" { (yyval.lval) = (yyvsp[(1) - (4)].lval) >> (yyvsp[(4) - (4)].lval); } break; case 132: -#line 754 "a.y" +#line 762 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) & (yyvsp[(3) - (3)].lval); } break; case 133: -#line 758 "a.y" +#line 766 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) ^ (yyvsp[(3) - (3)].lval); } break; case 134: -#line 762 "a.y" +#line 770 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) | (yyvsp[(3) - (3)].lval); } @@ -2610,7 +2618,7 @@ yyreduce: /* Line 1267 of yacc.c. */ -#line 2614 "y.tab.c" +#line 2622 "y.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); diff --git a/src/cmd/5g/gg.h b/src/cmd/5g/gg.h index 8fbb773473..6ee7008574 100644 --- a/src/cmd/5g/gg.h +++ b/src/cmd/5g/gg.h @@ -9,8 +9,6 @@ #include "../gc/go.h" #include "../5l/5.out.h" -#define TEXTFLAG reg - enum { REGALLOC_R0 = REG_R0, diff --git a/src/cmd/5g/gsubr.c b/src/cmd/5g/gsubr.c index ab8feb6e0b..66acdedbd5 100644 --- a/src/cmd/5g/gsubr.c +++ b/src/cmd/5g/gsubr.c @@ -200,9 +200,9 @@ ggloblnod(Node *nam) p->to.type = TYPE_CONST; p->to.offset = nam->type->width; if(nam->readonly) - p->reg = RODATA; + p->from3.offset = RODATA; if(nam->type != T && !haspointers(nam->type)) - p->reg |= NOPTR; + p->from3.offset |= NOPTR; } void @@ -217,7 +217,7 @@ ggloblsym(Sym *s, int32 width, int8 flags) p->to.type = TYPE_CONST; p->to.name = NAME_NONE; p->to.offset = width; - p->reg = flags; + p->from3.offset = flags; } void diff --git a/src/cmd/6a/a.h b/src/cmd/6a/a.h index e1927b6d40..95c4babdfc 100644 --- a/src/cmd/6a/a.h +++ b/src/cmd/6a/a.h @@ -139,6 +139,7 @@ EXTERN int32 thunk; EXTERN Biobuf obuf; EXTERN Link* ctxt; EXTERN Biobuf bstdout; +EXTERN Prog* lastpc; void* alloc(int32); void* allocn(void*, int32, int32); diff --git a/src/cmd/6a/a.y b/src/cmd/6a/a.y index 954884463c..61001142c5 100644 --- a/src/cmd/6a/a.y +++ b/src/cmd/6a/a.y @@ -60,8 +60,8 @@ %type con expr pointer offset %type mem imm reg nam rel rem rim rom omem nmem textsize %type nonnon nonrel nonrem rimnon rimrem remrim -%type spec1 spec2 spec3 spec4 spec5 spec6 spec7 spec8 spec9 -%type spec10 spec11 spec12 spec13 +%type spec1 spec3 spec4 spec5 spec6 spec7 spec8 spec9 +%type spec10 spec12 spec13 %% prog: | prog @@ -103,7 +103,7 @@ inst: | LTYPE4 remrim { outcode($1, &$2); } | LTYPER nonrel { outcode($1, &$2); } | LTYPED spec1 { outcode($1, &$2); } -| LTYPET spec2 { outcode($1, &$2); } +| spec2 | LTYPEC spec3 { outcode($1, &$2); } | LTYPEN spec4 { outcode($1, &$2); } | LTYPES spec5 { outcode($1, &$2); } @@ -112,7 +112,7 @@ inst: | LTYPEXC spec8 { outcode($1, &$2); } | LTYPEX spec9 { outcode($1, &$2); } | LTYPERT spec10 { outcode($1, &$2); } -| LTYPEG spec11 { outcode($1, &$2); } +| spec11 | LTYPEPC spec12 { outcode($1, &$2); } | LTYPEF spec13 { outcode($1, &$2); } @@ -191,18 +191,47 @@ spec1: /* DATA */ } spec2: /* TEXT */ - mem ',' '$' textsize + LTYPET mem ',' '$' textsize { - settext($1.sym); - $$.from = $1; - $$.to = $4; + Addr2 a; + settext($2.sym); + a.from = $2; + a.to = $5; + outcode(ATEXT, &a); } -| mem ',' con ',' '$' textsize +| LTYPET mem ',' con ',' '$' textsize { - settext($1.sym); - $$.from = $1; - $$.from.scale = $3; - $$.to = $6; + Addr2 a; + settext($2.sym); + a.from = $2; + a.to = $7; + outcode(ATEXT, &a); + if(pass > 1) { + lastpc->from3.type = TYPE_CONST; + lastpc->from3.offset = $4; + } + } + +spec11: /* GLOBL */ + LTYPEG mem ',' imm + { + Addr2 a; + settext($2.sym); + a.from = $2; + a.to = $4; + outcode(AGLOBL, &a); + } +| LTYPEG mem ',' con ',' imm + { + Addr2 a; + settext($2.sym); + a.from = $2; + a.to = $6; + outcode(AGLOBL, &a); + if(pass > 1) { + lastpc->from3.type = TYPE_CONST; + lastpc->from3.offset = $4; + } } spec3: /* JMP/CALL */ @@ -297,19 +326,6 @@ spec10: /* RET/RETF */ $$.to = nullgen; } -spec11: /* GLOBL */ - mem ',' imm - { - $$.from = $1; - $$.to = $3; - } -| mem ',' con ',' imm - { - $$.from = $1; - $$.from.scale = $3; - $$.to = $5; - } - spec12: /* PCDATA */ rim ',' rim { diff --git a/src/cmd/6a/lex.c b/src/cmd/6a/lex.c index d9e1e4555e..c600796cd0 100644 --- a/src/cmd/6a/lex.c +++ b/src/cmd/6a/lex.c @@ -1104,8 +1104,6 @@ cclean(void) outcode(AEND, &g2); } -static Prog *lastpc; - void outcode(int a, Addr2 *g2) { diff --git a/src/cmd/6a/y.tab.c b/src/cmd/6a/y.tab.c index 61855c4431..3dd287ceb9 100644 --- a/src/cmd/6a/y.tab.c +++ b/src/cmd/6a/y.tab.c @@ -411,7 +411,7 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 531 +#define YYLAST 515 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 56 @@ -471,18 +471,18 @@ static const yytype_uint16 yyprhs[] = { 0, 0, 3, 4, 5, 9, 10, 15, 17, 20, 23, 27, 31, 34, 37, 40, 43, 46, 49, 52, - 55, 58, 61, 64, 67, 70, 73, 76, 79, 82, - 85, 88, 89, 91, 95, 99, 102, 104, 107, 109, - 112, 114, 118, 124, 129, 136, 139, 141, 143, 145, - 149, 155, 159, 165, 168, 170, 174, 180, 186, 187, - 189, 193, 199, 203, 207, 209, 211, 213, 215, 218, - 221, 223, 225, 227, 229, 234, 237, 239, 241, 243, - 245, 247, 249, 251, 254, 257, 260, 263, 268, 274, - 278, 280, 282, 284, 289, 294, 299, 306, 316, 326, - 330, 334, 340, 349, 351, 358, 364, 372, 373, 376, - 379, 381, 383, 385, 387, 389, 392, 395, 398, 402, - 404, 407, 411, 416, 418, 422, 426, 430, 434, 438, - 443, 448, 452, 456 + 54, 57, 60, 63, 66, 69, 72, 75, 78, 80, + 83, 86, 87, 89, 93, 97, 100, 102, 105, 107, + 110, 112, 116, 122, 128, 136, 141, 148, 151, 153, + 155, 157, 161, 167, 171, 177, 180, 182, 186, 192, + 198, 199, 201, 205, 209, 211, 213, 215, 217, 220, + 223, 225, 227, 229, 231, 236, 239, 241, 243, 245, + 247, 249, 251, 253, 256, 259, 262, 265, 270, 276, + 280, 282, 284, 286, 291, 296, 301, 308, 318, 328, + 332, 336, 342, 351, 353, 360, 366, 374, 375, 378, + 381, 383, 385, 387, 389, 391, 394, 397, 400, 404, + 406, 409, 413, 418, 420, 424, 428, 432, 436, 440, + 445, 450, 454, 458 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ @@ -493,47 +493,48 @@ static const yytype_int8 yyrhs[] = 1, 49, -1, 45, 50, 95, -1, 47, 50, 95, -1, 13, 62, -1, 14, 66, -1, 15, 65, -1, 16, 63, -1, 17, 64, -1, 21, 67, -1, 19, - 68, -1, 22, 69, -1, 18, 70, -1, 20, 71, - -1, 25, 72, -1, 26, 73, -1, 27, 74, -1, - 28, 75, -1, 29, 76, -1, 30, 77, -1, 23, - 78, -1, 24, 79, -1, 31, 80, -1, -1, 51, - -1, 83, 51, 81, -1, 81, 51, 83, -1, 83, - 51, -1, 83, -1, 51, 81, -1, 81, -1, 51, - 84, -1, 84, -1, 86, 51, 84, -1, 90, 11, - 93, 51, 86, -1, 87, 51, 52, 94, -1, 87, - 51, 93, 51, 52, 94, -1, 51, 82, -1, 82, - -1, 62, -1, 66, -1, 83, 51, 81, -1, 83, - 51, 81, 48, 37, -1, 83, 51, 81, -1, 83, - 51, 81, 48, 38, -1, 83, 51, -1, 83, -1, - 83, 51, 81, -1, 85, 51, 81, 51, 93, -1, - 86, 51, 81, 51, 85, -1, -1, 86, -1, 87, - 51, 86, -1, 87, 51, 93, 51, 86, -1, 83, - 51, 83, -1, 83, 51, 83, -1, 85, -1, 87, - -1, 84, -1, 89, -1, 10, 85, -1, 10, 88, - -1, 85, -1, 88, -1, 81, -1, 86, -1, 93, - 53, 34, 54, -1, 45, 91, -1, 36, -1, 39, - -1, 37, -1, 40, -1, 44, -1, 38, -1, 41, - -1, 52, 93, -1, 52, 90, -1, 52, 43, -1, - 52, 42, -1, 52, 53, 42, 54, -1, 52, 53, - 9, 42, 54, -1, 52, 9, 42, -1, 88, -1, - 89, -1, 93, -1, 93, 53, 37, 54, -1, 93, - 53, 44, 54, -1, 93, 53, 38, 54, -1, 93, - 53, 37, 10, 93, 54, -1, 93, 53, 37, 54, - 53, 37, 10, 93, 54, -1, 93, 53, 37, 54, - 53, 38, 10, 93, 54, -1, 53, 37, 54, -1, - 53, 44, 54, -1, 53, 37, 10, 93, 54, -1, - 53, 37, 54, 53, 37, 10, 93, 54, -1, 90, - -1, 90, 53, 37, 10, 93, 54, -1, 45, 91, - 53, 92, 54, -1, 45, 6, 7, 91, 53, 35, - 54, -1, -1, 8, 93, -1, 9, 93, -1, 35, - -1, 44, -1, 33, -1, 32, -1, 47, -1, 9, - 93, -1, 8, 93, -1, 55, 93, -1, 53, 95, - 54, -1, 32, -1, 9, 32, -1, 32, 9, 32, - -1, 9, 32, 9, 32, -1, 93, -1, 95, 8, - 95, -1, 95, 9, 95, -1, 95, 10, 95, -1, - 95, 11, 95, -1, 95, 12, 95, -1, 95, 6, - 6, 95, -1, 95, 7, 7, 95, -1, 95, 5, - 95, -1, 95, 4, 95, -1, 95, 3, 95, -1 + 68, -1, 69, -1, 18, 71, -1, 20, 72, -1, + 25, 73, -1, 26, 74, -1, 27, 75, -1, 28, + 76, -1, 29, 77, -1, 30, 78, -1, 70, -1, + 24, 79, -1, 31, 80, -1, -1, 51, -1, 83, + 51, 81, -1, 81, 51, 83, -1, 83, 51, -1, + 83, -1, 51, 81, -1, 81, -1, 51, 84, -1, + 84, -1, 86, 51, 84, -1, 90, 11, 93, 51, + 86, -1, 22, 87, 51, 52, 94, -1, 22, 87, + 51, 93, 51, 52, 94, -1, 23, 87, 51, 86, + -1, 23, 87, 51, 93, 51, 86, -1, 51, 82, + -1, 82, -1, 62, -1, 66, -1, 83, 51, 81, + -1, 83, 51, 81, 48, 37, -1, 83, 51, 81, + -1, 83, 51, 81, 48, 38, -1, 83, 51, -1, + 83, -1, 83, 51, 81, -1, 85, 51, 81, 51, + 93, -1, 86, 51, 81, 51, 85, -1, -1, 86, + -1, 83, 51, 83, -1, 83, 51, 83, -1, 85, + -1, 87, -1, 84, -1, 89, -1, 10, 85, -1, + 10, 88, -1, 85, -1, 88, -1, 81, -1, 86, + -1, 93, 53, 34, 54, -1, 45, 91, -1, 36, + -1, 39, -1, 37, -1, 40, -1, 44, -1, 38, + -1, 41, -1, 52, 93, -1, 52, 90, -1, 52, + 43, -1, 52, 42, -1, 52, 53, 42, 54, -1, + 52, 53, 9, 42, 54, -1, 52, 9, 42, -1, + 88, -1, 89, -1, 93, -1, 93, 53, 37, 54, + -1, 93, 53, 44, 54, -1, 93, 53, 38, 54, + -1, 93, 53, 37, 10, 93, 54, -1, 93, 53, + 37, 54, 53, 37, 10, 93, 54, -1, 93, 53, + 37, 54, 53, 38, 10, 93, 54, -1, 53, 37, + 54, -1, 53, 44, 54, -1, 53, 37, 10, 93, + 54, -1, 53, 37, 54, 53, 37, 10, 93, 54, + -1, 90, -1, 90, 53, 37, 10, 93, 54, -1, + 45, 91, 53, 92, 54, -1, 45, 6, 7, 91, + 53, 35, 54, -1, -1, 8, 93, -1, 9, 93, + -1, 35, -1, 44, -1, 33, -1, 32, -1, 47, + -1, 9, 93, -1, 8, 93, -1, 55, 93, -1, + 53, 95, 54, -1, 32, -1, 9, 32, -1, 32, + 9, 32, -1, 9, 32, 9, 32, -1, 93, -1, + 95, 8, 95, -1, 95, 9, 95, -1, 95, 10, + 95, -1, 95, 11, 95, -1, 95, 12, 95, -1, + 95, 6, 6, 95, -1, 95, 7, 7, 95, -1, + 95, 5, 95, -1, 95, 4, 95, -1, 95, 3, + 95, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ @@ -543,16 +544,16 @@ static const yytype_uint16 yyrline[] = 88, 93, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 120, 124, 131, 138, 145, 150, 157, 162, 169, - 174, 179, 186, 194, 200, 209, 214, 221, 222, 225, - 230, 240, 245, 255, 260, 265, 272, 280, 290, 294, - 301, 306, 314, 323, 334, 335, 338, 339, 340, 344, - 348, 349, 352, 353, 356, 362, 373, 379, 385, 391, - 397, 403, 409, 417, 423, 433, 439, 445, 451, 457, - 465, 466, 469, 475, 482, 489, 496, 505, 515, 525, - 531, 537, 545, 556, 560, 569, 577, 587, 590, 594, - 600, 601, 605, 608, 609, 613, 617, 621, 625, 631, - 637, 643, 649, 657, 658, 662, 666, 670, 674, 678, - 682, 686, 690, 694 + 174, 179, 186, 194, 202, 216, 224, 238, 243, 250, + 251, 254, 259, 269, 274, 284, 289, 294, 301, 309, + 319, 323, 330, 339, 350, 351, 354, 355, 356, 360, + 364, 365, 368, 369, 372, 378, 389, 395, 401, 407, + 413, 419, 425, 433, 439, 449, 455, 461, 467, 473, + 481, 482, 485, 491, 498, 505, 512, 521, 531, 541, + 547, 553, 561, 572, 576, 585, 593, 603, 606, 610, + 616, 617, 621, 624, 625, 629, 633, 637, 641, 647, + 653, 659, 665, 673, 674, 678, 682, 686, 690, 694, + 698, 702, 706, 710 }; #endif @@ -569,8 +570,8 @@ static const char *const yytname[] = "LFREG", "LMREG", "LXREG", "LFCONST", "LSCONST", "LSP", "LNAME", "LLAB", "LVAR", "':'", "';'", "'='", "','", "'$'", "'('", "')'", "'~'", "$accept", "prog", "@1", "line", "@2", "inst", "nonnon", "rimrem", - "remrim", "rimnon", "nonrem", "nonrel", "spec1", "spec2", "spec3", - "spec4", "spec5", "spec6", "spec7", "spec8", "spec9", "spec10", "spec11", + "remrim", "rimnon", "nonrem", "nonrel", "spec1", "spec2", "spec11", + "spec3", "spec4", "spec5", "spec6", "spec7", "spec8", "spec9", "spec10", "spec12", "spec13", "rem", "rom", "rim", "rel", "reg", "imm", "mem", "omem", "nmem", "nam", "offset", "pointer", "con", "textsize", "expr", 0 }; @@ -598,7 +599,7 @@ static const yytype_uint8 yyr1[] = 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 62, 62, 63, 64, 65, 65, 66, 66, 67, 67, 67, 68, 69, 69, 70, 70, 71, 71, 72, - 72, 73, 73, 74, 74, 74, 75, 76, 77, 77, + 72, 73, 73, 74, 74, 75, 75, 75, 76, 77, 78, 78, 79, 80, 81, 81, 82, 82, 82, 82, 82, 82, 83, 83, 84, 84, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, @@ -613,12 +614,12 @@ static const yytype_uint8 yyr1[] = static const yytype_uint8 yyr2[] = { 0, 2, 0, 0, 3, 0, 4, 1, 2, 2, - 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 2, 2, 2, 2, 2, 2, 2, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 0, 1, 3, 3, 2, 1, 2, 1, 2, - 1, 3, 5, 4, 6, 2, 1, 1, 1, 3, - 5, 3, 5, 2, 1, 3, 5, 5, 0, 1, - 3, 5, 3, 3, 1, 1, 1, 1, 2, 2, + 1, 3, 5, 5, 7, 4, 6, 2, 1, 1, + 1, 3, 5, 3, 5, 2, 1, 3, 5, 5, + 0, 1, 3, 3, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 4, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 5, 3, 1, 1, 1, 4, 4, 4, 6, 9, 9, 3, @@ -635,30 +636,30 @@ static const yytype_uint8 yydefact[] = { 2, 3, 1, 0, 0, 31, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 58, 0, 0, 0, 7, 4, 0, 9, - 32, 12, 0, 0, 113, 76, 78, 81, 77, 79, - 82, 80, 107, 114, 0, 0, 0, 13, 38, 64, - 65, 90, 91, 103, 92, 0, 14, 72, 36, 73, - 15, 0, 16, 0, 0, 107, 0, 20, 46, 66, - 70, 71, 67, 92, 18, 0, 32, 47, 48, 21, - 107, 0, 0, 17, 40, 0, 0, 19, 0, 28, - 0, 29, 0, 22, 0, 23, 0, 24, 54, 25, - 0, 26, 0, 27, 59, 30, 0, 5, 0, 0, + 0, 0, 60, 0, 0, 0, 7, 4, 0, 19, + 28, 9, 32, 12, 0, 0, 113, 76, 78, 81, + 77, 79, 82, 80, 107, 114, 0, 0, 0, 13, + 38, 64, 65, 90, 91, 103, 92, 0, 14, 72, + 36, 73, 15, 0, 16, 0, 0, 107, 0, 20, + 48, 66, 70, 71, 67, 92, 18, 0, 32, 49, + 50, 21, 107, 0, 0, 17, 40, 0, 0, 0, + 0, 29, 0, 22, 0, 23, 0, 24, 56, 25, + 0, 26, 0, 27, 61, 30, 0, 5, 0, 0, 8, 116, 115, 0, 0, 0, 0, 37, 0, 0, 123, 0, 117, 0, 0, 0, 86, 85, 0, 84, - 83, 35, 0, 0, 68, 69, 75, 45, 0, 0, - 75, 39, 0, 0, 0, 0, 0, 0, 0, 53, + 83, 35, 0, 0, 68, 69, 75, 47, 0, 0, + 75, 39, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 10, 11, 107, 108, 109, 0, 0, 99, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 89, 0, - 0, 33, 34, 0, 0, 41, 0, 0, 60, 0, - 62, 49, 51, 55, 0, 0, 63, 6, 0, 112, + 0, 33, 34, 0, 0, 41, 0, 0, 45, 0, + 62, 51, 53, 57, 0, 0, 63, 6, 0, 112, 110, 111, 0, 0, 0, 133, 132, 131, 0, 0, 124, 125, 126, 127, 128, 0, 0, 93, 95, 94, 0, 87, 74, 0, 0, 119, 43, 0, 0, 0, 0, 0, 0, 0, 105, 101, 0, 129, 130, 0, - 0, 0, 88, 42, 120, 0, 0, 61, 50, 52, - 56, 57, 0, 0, 104, 96, 0, 0, 0, 121, + 0, 0, 88, 42, 120, 0, 0, 46, 52, 54, + 58, 59, 0, 0, 104, 96, 0, 0, 0, 121, 44, 106, 0, 0, 0, 122, 102, 0, 0, 97, 98 }; @@ -666,54 +667,54 @@ static const yytype_uint8 yydefact[] = /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 3, 27, 153, 28, 31, 60, 62, 56, - 47, 83, 74, 87, 67, 79, 93, 95, 97, 99, - 101, 103, 89, 91, 105, 57, 68, 58, 69, 49, - 59, 50, 51, 52, 53, 116, 202, 54, 226, 121 + -1, 1, 3, 27, 153, 28, 33, 62, 64, 58, + 49, 85, 76, 29, 30, 69, 81, 93, 95, 97, + 99, 101, 103, 91, 105, 59, 70, 60, 71, 51, + 61, 52, 53, 54, 55, 116, 202, 56, 226, 121 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -89 +#define YYPACT_NINF -87 static const yytype_int16 yypact[] = { - -89, 16, -89, 163, 0, -13, 219, 241, 241, 317, - 193, 13, 267, 333, 164, 164, 241, 241, 241, 241, - 472, 17, 17, 241, -17, 23, -89, -89, 52, -89, - -89, -89, 433, 433, -89, -89, -89, -89, -89, -89, - -89, -89, 45, -89, 317, 358, 433, -89, -89, -89, - -89, -89, -89, 50, 63, 351, -89, -89, 68, -89, - -89, 71, -89, 73, 70, 45, 292, -89, -89, -89, - -89, -89, -89, 80, -89, 117, 317, -89, -89, -89, - 38, 365, 433, -89, -89, 87, 86, -89, 89, -89, - 90, -89, 91, -89, 92, -89, 100, -89, 101, -89, - 105, -89, 114, -89, -89, -89, 115, -89, 433, 433, - -89, -89, -89, 160, 433, 433, 118, -89, 5, 116, - -89, 82, -89, 131, -12, 383, -89, -89, 392, -89, - -89, -89, 317, 241, -89, -89, 118, -89, 6, 433, - -89, -89, 365, 140, 399, 408, 241, 317, 317, 317, - 317, 317, 241, 163, 486, 486, 38, -89, -89, 4, - 433, 122, -89, 433, 433, 433, 189, 190, 433, 433, - 433, 433, 433, -89, 194, 7, 146, 153, -89, 424, - 159, -89, -89, 162, 167, -89, 9, 171, -89, 173, - -89, 166, 178, -89, 184, 185, -89, -89, 186, -89, - -89, -89, 187, 188, 208, 495, 512, 519, 433, 433, - 85, 85, -89, -89, -89, 433, 433, 199, -89, -89, - 207, -89, -89, 17, 215, 253, -89, 213, 17, 230, - 231, 433, 472, 233, -89, -89, 261, 55, 55, 229, - 235, 75, -89, -89, 275, 255, 9, -89, -89, -89, - -89, -89, 236, 433, -89, -89, 281, 282, 263, -89, - -89, -89, 243, 433, 433, -89, -89, 244, 256, -89, - -89 + -87, 8, -87, 211, -34, -31, 236, 256, 256, 330, + 156, -19, 290, 9, 384, 384, 256, 256, 256, 256, + 72, -20, -20, 256, -15, -5, -87, -87, 4, -87, + -87, -87, -87, -87, 34, 34, -87, -87, -87, -87, + -87, -87, -87, -87, 119, -87, 330, 364, 34, -87, + -87, -87, -87, -87, -87, -13, 10, 270, -87, -87, + 20, -87, -87, 37, -87, 39, 350, 119, 310, -87, + -87, -87, -87, -87, -87, 41, -87, 44, 330, -87, + -87, -87, 60, 391, 34, -87, -87, 45, 50, 55, + 66, -87, 70, -87, 73, -87, 85, -87, 92, -87, + 105, -87, 116, -87, -87, -87, 117, -87, 34, 34, + -87, -87, -87, 107, 34, 34, 80, -87, 21, 135, + -87, 168, -87, 133, 82, 398, -87, -87, 401, -87, + -87, -87, 330, 256, -87, -87, 80, -87, 63, 34, + -87, -87, 391, 157, 417, 426, 256, 330, 330, 330, + 330, 330, 256, 211, 486, 486, 60, -87, -87, 58, + 34, 149, -87, 34, 34, 34, 184, 197, 34, 34, + 34, 34, 34, -87, 198, 26, 159, 160, -87, 433, + 162, -87, -87, 163, 167, -87, 7, 195, -87, 196, + -87, 171, 200, -87, 199, 201, -87, -87, 202, -87, + -87, -87, 203, 205, 173, 495, 503, 175, 34, 34, + 128, 128, -87, -87, -87, 34, 34, 208, -87, -87, + 209, -87, -87, -20, 217, 242, -87, 210, -20, 229, + 231, 34, 72, 232, -87, -87, 260, 40, 40, 228, + 230, 104, -87, -87, 262, 253, 7, -87, -87, -87, + -87, -87, 250, 34, -87, -87, 276, 280, 273, -87, + -87, -87, 252, 34, 34, -87, -87, 267, 278, -87, + -87 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -89, -89, -89, 156, -89, -89, 301, -89, -89, -89, - 303, -89, -89, -89, -89, -89, -89, -89, -89, -89, - -89, -89, -89, -89, -89, -2, 250, 11, -11, -9, - -8, 112, -4, 2, -3, -56, -89, -10, 77, -88 + -87, -87, -87, 154, -87, -87, 298, -87, -87, -87, + 302, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -2, 248, 11, -11, -9, + -8, 137, -1, 2, 35, -61, -87, -10, 78, -86 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -723,118 +724,114 @@ static const yytype_int16 yypgoto[] = #define YYTABLE_NINF -1 static const yytype_uint16 yytable[] = { - 73, 70, 84, 86, 48, 85, 71, 63, 75, 136, - 48, 100, 72, 102, 104, 160, 2, 216, 224, 61, - 154, 155, 111, 112, 140, 175, 176, 92, 94, 96, - 98, 107, 177, 108, 106, 120, 122, 199, 30, 200, - 183, 225, 117, 175, 176, 130, 114, 115, 201, 29, - 177, 113, 129, 114, 115, 134, 73, 70, 42, 161, - 135, 217, 71, 168, 169, 170, 171, 172, 72, 55, - 141, 86, 120, 109, 117, 205, 206, 207, 32, 33, - 210, 211, 212, 213, 214, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 170, 171, 172, 120, 120, - 198, 110, 34, 123, 157, 158, 35, 36, 37, 38, - 39, 40, 256, 257, 41, 112, 124, 43, 120, 131, - 237, 238, 132, 45, 133, 46, 88, 90, 139, 184, - 181, 185, 86, 138, 187, 189, 173, 188, 142, 143, - 144, 145, 146, 147, 182, 191, 192, 193, 194, 195, - 203, 148, 149, 120, 120, 120, 150, 190, 120, 120, - 120, 120, 120, 196, 4, 151, 152, 156, 174, 112, - 162, 159, 32, 33, 183, 204, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 208, 34, 209, 120, 120, - 218, 32, 33, 64, 215, 239, 240, 219, 24, 42, - 25, 43, 26, 221, 229, 243, 222, 45, 223, 46, - 247, 250, 227, 251, 228, 34, 230, 32, 33, 35, - 36, 37, 38, 39, 40, 231, 232, 41, 65, 233, - 43, 234, 235, 262, 66, 236, 45, 244, 46, 32, - 33, 34, 241, 267, 268, 35, 36, 37, 38, 39, - 40, 242, 245, 41, 42, 246, 43, 248, 252, 249, - 44, 253, 45, 34, 46, 32, 33, 35, 36, 37, - 38, 39, 40, 254, 258, 41, 42, 259, 43, 255, - 261, 263, 264, 55, 45, 265, 46, 266, 269, 34, - 32, 33, 64, 35, 36, 37, 38, 39, 40, 197, - 270, 41, 42, 77, 43, 78, 137, 0, 76, 0, - 45, 0, 46, 260, 34, 32, 33, 0, 35, 36, - 37, 38, 39, 40, 0, 0, 41, 65, 0, 43, - 0, 32, 33, 0, 0, 45, 0, 46, 0, 34, - 0, 0, 0, 35, 36, 37, 38, 39, 40, 32, - 125, 41, 42, 0, 43, 34, 32, 33, 0, 0, - 45, 0, 46, 32, 33, 0, 0, 0, 80, 0, - 43, 0, 0, 34, 81, 55, 82, 0, 46, 0, - 34, 32, 33, 126, 127, 118, 42, 34, 43, 0, - 32, 179, 119, 0, 128, 43, 46, 32, 33, 0, - 80, 82, 43, 46, 0, 34, 32, 33, 82, 0, - 46, 0, 0, 0, 34, 178, 0, 0, 0, 0, - 43, 34, 32, 33, 180, 0, 82, 0, 46, 43, - 34, 32, 33, 0, 0, 82, 43, 46, 0, 0, - 0, 186, 82, 0, 46, 43, 34, 0, 0, 0, - 55, 82, 0, 46, 0, 34, 220, 0, 0, 0, - 0, 43, 0, 0, 0, 0, 0, 82, 0, 46, - 43, 0, 0, 0, 0, 0, 82, 0, 46, 163, + 75, 72, 86, 88, 50, 87, 136, 65, 2, 73, + 50, 100, 74, 102, 104, 31, 224, 34, 35, 63, + 32, 140, 154, 155, 111, 112, 44, 92, 94, 96, + 98, 160, 57, 107, 106, 108, 216, 120, 122, 225, + 123, 36, 34, 35, 117, 109, 77, 130, 168, 169, + 170, 171, 172, 110, 82, 139, 45, 134, 75, 72, + 83, 57, 84, 124, 48, 135, 36, 73, 114, 115, + 74, 131, 141, 88, 120, 161, 117, 205, 206, 207, + 217, 45, 210, 211, 212, 213, 214, 84, 132, 48, + 133, 199, 129, 200, 138, 198, 142, 183, 120, 120, + 175, 176, 201, 143, 157, 158, 144, 177, 37, 38, + 39, 40, 41, 42, 156, 112, 43, 145, 120, 175, + 176, 146, 237, 238, 147, 113, 177, 114, 115, 184, + 181, 185, 88, 159, 187, 189, 148, 188, 170, 171, + 172, 256, 257, 149, 182, 191, 192, 193, 194, 195, + 203, 89, 90, 120, 120, 120, 150, 190, 120, 120, + 120, 120, 120, 196, 34, 35, 66, 151, 152, 112, + 174, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 166, 167, 168, 169, 170, 171, 172, 36, 162, + 208, 183, 37, 38, 39, 40, 41, 42, 120, 120, + 43, 67, 204, 45, 209, 239, 240, 68, 215, 47, + 236, 48, 4, 218, 219, 243, 221, 222, 223, 229, + 247, 250, 173, 251, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 262, 34, 35, 227, 228, 230, 244, + 231, 245, 232, 267, 268, 233, 24, 234, 25, 235, + 26, 241, 246, 242, 34, 35, 248, 252, 36, 249, + 253, 258, 37, 38, 39, 40, 41, 42, 34, 125, + 43, 44, 254, 45, 255, 259, 263, 46, 36, 47, + 264, 48, 37, 38, 39, 40, 41, 42, 34, 35, + 43, 44, 36, 45, 261, 265, 266, 197, 57, 47, + 79, 48, 126, 127, 80, 44, 137, 45, 34, 35, + 66, 269, 36, 128, 260, 48, 37, 38, 39, 40, + 41, 42, 270, 0, 43, 44, 0, 45, 34, 35, + 0, 78, 36, 47, 0, 48, 37, 38, 39, 40, + 41, 42, 0, 0, 43, 67, 0, 45, 34, 35, + 0, 0, 36, 47, 0, 48, 37, 38, 39, 40, + 41, 42, 34, 35, 43, 44, 0, 45, 0, 0, + 0, 0, 36, 47, 0, 48, 37, 38, 39, 40, + 41, 42, 34, 35, 43, 0, 36, 45, 0, 34, + 35, 118, 0, 47, 0, 48, 34, 35, 119, 34, + 179, 45, 0, 0, 0, 0, 36, 84, 0, 48, + 0, 0, 0, 36, 0, 34, 35, 0, 0, 44, + 36, 45, 0, 36, 34, 35, 82, 47, 45, 48, + 178, 34, 35, 180, 84, 45, 48, 0, 45, 36, + 0, 84, 0, 48, 84, 0, 48, 0, 36, 0, + 0, 0, 0, 0, 45, 36, 0, 0, 0, 186, + 84, 0, 48, 45, 0, 220, 0, 0, 57, 84, + 45, 48, 0, 0, 0, 0, 84, 0, 48, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 35, 36, - 37, 38, 39, 40, 0, 0, 41, 165, 166, 167, - 168, 169, 170, 171, 172, 166, 167, 168, 169, 170, - 171, 172 + 165, 166, 167, 168, 169, 170, 171, 172, 165, 166, + 167, 168, 169, 170, 171, 172 }; static const yytype_int16 yycheck[] = { - 10, 10, 13, 13, 6, 13, 10, 9, 11, 65, - 12, 20, 10, 21, 22, 10, 0, 10, 9, 8, - 108, 109, 32, 33, 80, 37, 38, 16, 17, 18, - 19, 48, 44, 50, 23, 45, 46, 33, 51, 35, - 34, 32, 44, 37, 38, 55, 8, 9, 44, 49, - 44, 6, 55, 8, 9, 64, 66, 66, 45, 54, - 64, 54, 66, 8, 9, 10, 11, 12, 66, 52, - 81, 81, 82, 50, 76, 163, 164, 165, 8, 9, - 168, 169, 170, 171, 172, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 10, 11, 12, 108, 109, - 156, 49, 32, 53, 114, 115, 36, 37, 38, 39, - 40, 41, 37, 38, 44, 125, 53, 47, 128, 51, - 208, 209, 51, 53, 51, 55, 14, 15, 11, 139, - 132, 142, 142, 53, 144, 145, 54, 145, 51, 53, - 51, 51, 51, 51, 133, 147, 148, 149, 150, 151, - 160, 51, 51, 163, 164, 165, 51, 146, 168, 169, - 170, 171, 172, 152, 1, 51, 51, 7, 37, 179, - 54, 53, 8, 9, 34, 53, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 6, 32, 7, 208, 209, - 54, 8, 9, 10, 10, 215, 216, 54, 45, 45, - 47, 47, 49, 54, 48, 223, 54, 53, 51, 55, - 228, 231, 51, 232, 51, 32, 48, 8, 9, 36, - 37, 38, 39, 40, 41, 51, 51, 44, 45, 53, - 47, 54, 54, 253, 51, 37, 53, 32, 55, 8, - 9, 32, 53, 263, 264, 36, 37, 38, 39, 40, - 41, 54, 9, 44, 45, 52, 47, 37, 35, 38, - 51, 10, 53, 32, 55, 8, 9, 36, 37, 38, - 39, 40, 41, 54, 9, 44, 45, 32, 47, 54, - 54, 10, 10, 52, 53, 32, 55, 54, 54, 32, - 8, 9, 10, 36, 37, 38, 39, 40, 41, 153, - 54, 44, 45, 12, 47, 12, 66, -1, 51, -1, - 53, -1, 55, 246, 32, 8, 9, -1, 36, 37, - 38, 39, 40, 41, -1, -1, 44, 45, -1, 47, - -1, 8, 9, -1, -1, 53, -1, 55, -1, 32, - -1, -1, -1, 36, 37, 38, 39, 40, 41, 8, - 9, 44, 45, -1, 47, 32, 8, 9, -1, -1, - 53, -1, 55, 8, 9, -1, -1, -1, 45, -1, - 47, -1, -1, 32, 51, 52, 53, -1, 55, -1, - 32, 8, 9, 42, 43, 37, 45, 32, 47, -1, - 8, 9, 44, -1, 53, 47, 55, 8, 9, -1, - 45, 53, 47, 55, -1, 32, 8, 9, 53, -1, - 55, -1, -1, -1, 32, 42, -1, -1, -1, -1, - 47, 32, 8, 9, 42, -1, 53, -1, 55, 47, - 32, 8, 9, -1, -1, 53, 47, 55, -1, -1, - -1, 52, 53, -1, 55, 47, 32, -1, -1, -1, - 52, 53, -1, 55, -1, 32, 42, -1, -1, -1, - -1, 47, -1, -1, -1, -1, -1, 53, -1, 55, - 47, -1, -1, -1, -1, -1, 53, -1, 55, 3, + 10, 10, 13, 13, 6, 13, 67, 9, 0, 10, + 12, 20, 10, 21, 22, 49, 9, 8, 9, 8, + 51, 82, 108, 109, 34, 35, 45, 16, 17, 18, + 19, 10, 52, 48, 23, 50, 10, 47, 48, 32, + 53, 32, 8, 9, 46, 50, 11, 57, 8, 9, + 10, 11, 12, 49, 45, 11, 47, 66, 68, 68, + 51, 52, 53, 53, 55, 66, 32, 68, 8, 9, + 68, 51, 83, 83, 84, 54, 78, 163, 164, 165, + 54, 47, 168, 169, 170, 171, 172, 53, 51, 55, + 51, 33, 57, 35, 53, 156, 51, 34, 108, 109, + 37, 38, 44, 53, 114, 115, 51, 44, 36, 37, + 38, 39, 40, 41, 7, 125, 44, 51, 128, 37, + 38, 51, 208, 209, 51, 6, 44, 8, 9, 139, + 132, 142, 142, 53, 144, 145, 51, 145, 10, 11, + 12, 37, 38, 51, 133, 147, 148, 149, 150, 151, + 160, 14, 15, 163, 164, 165, 51, 146, 168, 169, + 170, 171, 172, 152, 8, 9, 10, 51, 51, 179, + 37, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 6, 7, 8, 9, 10, 11, 12, 32, 54, + 6, 34, 36, 37, 38, 39, 40, 41, 208, 209, + 44, 45, 53, 47, 7, 215, 216, 51, 10, 53, + 37, 55, 1, 54, 54, 223, 54, 54, 51, 48, + 228, 231, 54, 232, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 253, 8, 9, 51, 51, 48, 32, + 51, 9, 51, 263, 264, 53, 45, 54, 47, 54, + 49, 53, 52, 54, 8, 9, 37, 35, 32, 38, + 10, 9, 36, 37, 38, 39, 40, 41, 8, 9, + 44, 45, 54, 47, 54, 32, 10, 51, 32, 53, + 10, 55, 36, 37, 38, 39, 40, 41, 8, 9, + 44, 45, 32, 47, 54, 32, 54, 153, 52, 53, + 12, 55, 42, 43, 12, 45, 68, 47, 8, 9, + 10, 54, 32, 53, 246, 55, 36, 37, 38, 39, + 40, 41, 54, -1, 44, 45, -1, 47, 8, 9, + -1, 51, 32, 53, -1, 55, 36, 37, 38, 39, + 40, 41, -1, -1, 44, 45, -1, 47, 8, 9, + -1, -1, 32, 53, -1, 55, 36, 37, 38, 39, + 40, 41, 8, 9, 44, 45, -1, 47, -1, -1, + -1, -1, 32, 53, -1, 55, 36, 37, 38, 39, + 40, 41, 8, 9, 44, -1, 32, 47, -1, 8, + 9, 37, -1, 53, -1, 55, 8, 9, 44, 8, + 9, 47, -1, -1, -1, -1, 32, 53, -1, 55, + -1, -1, -1, 32, -1, 8, 9, -1, -1, 45, + 32, 47, -1, 32, 8, 9, 45, 53, 47, 55, + 42, 8, 9, 42, 53, 47, 55, -1, 47, 32, + -1, 53, -1, 55, 53, -1, 55, -1, 32, -1, + -1, -1, -1, -1, 47, 32, -1, -1, -1, 52, + 53, -1, 55, 47, -1, 42, -1, -1, 52, 53, + 47, 55, -1, -1, -1, -1, 53, -1, 55, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 36, 37, - 38, 39, 40, 41, -1, -1, 44, 5, 6, 7, - 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, - 11, 12 + 5, 6, 7, 8, 9, 10, 11, 12, 5, 6, + 7, 8, 9, 10, 11, 12 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -843,15 +840,15 @@ static const yytype_uint8 yystos[] = { 0, 57, 0, 58, 1, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 45, 47, 49, 59, 61, 49, - 51, 62, 8, 9, 32, 36, 37, 38, 39, 40, - 41, 44, 45, 47, 51, 53, 55, 66, 81, 85, - 87, 88, 89, 90, 93, 52, 65, 81, 83, 86, - 63, 83, 64, 81, 10, 45, 51, 70, 82, 84, - 85, 88, 89, 93, 68, 90, 51, 62, 66, 71, - 45, 51, 53, 67, 84, 86, 93, 69, 87, 78, - 87, 79, 83, 72, 83, 73, 83, 74, 83, 75, - 85, 76, 86, 77, 86, 80, 83, 48, 50, 50, + 28, 29, 30, 31, 45, 47, 49, 59, 61, 69, + 70, 49, 51, 62, 8, 9, 32, 36, 37, 38, + 39, 40, 41, 44, 45, 47, 51, 53, 55, 66, + 81, 85, 87, 88, 89, 90, 93, 52, 65, 81, + 83, 86, 63, 83, 64, 81, 10, 45, 51, 71, + 82, 84, 85, 88, 89, 93, 68, 90, 51, 62, + 66, 72, 45, 51, 53, 67, 84, 86, 93, 87, + 87, 79, 83, 73, 83, 74, 83, 75, 83, 76, + 85, 77, 86, 78, 86, 80, 83, 48, 50, 50, 49, 93, 93, 6, 8, 9, 91, 81, 37, 44, 93, 95, 93, 53, 53, 9, 42, 43, 53, 90, 93, 51, 51, 51, 85, 88, 91, 82, 53, 11, @@ -1752,11 +1749,6 @@ yyreduce: { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); } break; - case 19: -#line 106 "a.y" - { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); } - break; - case 20: #line 107 "a.y" { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); } @@ -1797,11 +1789,6 @@ yyreduce: { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); } break; - case 28: -#line 115 "a.y" - { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); } - break; - case 29: #line 116 "a.y" { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); } @@ -1912,48 +1899,81 @@ yyreduce: case 43: #line 195 "a.y" { - settext((yyvsp[(1) - (4)].addr).sym); - (yyval.addr2).from = (yyvsp[(1) - (4)].addr); - (yyval.addr2).to = (yyvsp[(4) - (4)].addr); + Addr2 a; + settext((yyvsp[(2) - (5)].addr).sym); + a.from = (yyvsp[(2) - (5)].addr); + a.to = (yyvsp[(5) - (5)].addr); + outcode(ATEXT, &a); } break; case 44: -#line 201 "a.y" - { - settext((yyvsp[(1) - (6)].addr).sym); - (yyval.addr2).from = (yyvsp[(1) - (6)].addr); - (yyval.addr2).from.scale = (yyvsp[(3) - (6)].lval); - (yyval.addr2).to = (yyvsp[(6) - (6)].addr); +#line 203 "a.y" + { + Addr2 a; + settext((yyvsp[(2) - (7)].addr).sym); + a.from = (yyvsp[(2) - (7)].addr); + a.to = (yyvsp[(7) - (7)].addr); + outcode(ATEXT, &a); + if(pass > 1) { + lastpc->from3.type = TYPE_CONST; + lastpc->from3.offset = (yyvsp[(4) - (7)].lval); + } } break; case 45: -#line 210 "a.y" +#line 217 "a.y" + { + Addr2 a; + settext((yyvsp[(2) - (4)].addr).sym); + a.from = (yyvsp[(2) - (4)].addr); + a.to = (yyvsp[(4) - (4)].addr); + outcode(AGLOBL, &a); + } + break; + + case 46: +#line 225 "a.y" + { + Addr2 a; + settext((yyvsp[(2) - (6)].addr).sym); + a.from = (yyvsp[(2) - (6)].addr); + a.to = (yyvsp[(6) - (6)].addr); + outcode(AGLOBL, &a); + if(pass > 1) { + lastpc->from3.type = TYPE_CONST; + lastpc->from3.offset = (yyvsp[(4) - (6)].lval); + } + } + break; + + case 47: +#line 239 "a.y" { (yyval.addr2).from = nullgen; (yyval.addr2).to = (yyvsp[(2) - (2)].addr); } break; - case 46: -#line 215 "a.y" + case 48: +#line 244 "a.y" { (yyval.addr2).from = nullgen; (yyval.addr2).to = (yyvsp[(1) - (1)].addr); } break; - case 49: -#line 226 "a.y" + case 51: +#line 255 "a.y" { (yyval.addr2).from = (yyvsp[(1) - (3)].addr); (yyval.addr2).to = (yyvsp[(3) - (3)].addr); } break; - case 50: -#line 231 "a.y" + case 52: +#line 260 "a.y" { (yyval.addr2).from = (yyvsp[(1) - (5)].addr); (yyval.addr2).to = (yyvsp[(3) - (5)].addr); @@ -1963,16 +1983,16 @@ yyreduce: } break; - case 51: -#line 241 "a.y" + case 53: +#line 270 "a.y" { (yyval.addr2).from = (yyvsp[(1) - (3)].addr); (yyval.addr2).to = (yyvsp[(3) - (3)].addr); } break; - case 52: -#line 246 "a.y" + case 54: +#line 275 "a.y" { (yyval.addr2).from = (yyvsp[(1) - (5)].addr); (yyval.addr2).to = (yyvsp[(3) - (5)].addr); @@ -1982,32 +2002,32 @@ yyreduce: } break; - case 53: -#line 256 "a.y" + case 55: +#line 285 "a.y" { (yyval.addr2).from = (yyvsp[(1) - (2)].addr); (yyval.addr2).to = nullgen; } break; - case 54: -#line 261 "a.y" + case 56: +#line 290 "a.y" { (yyval.addr2).from = (yyvsp[(1) - (1)].addr); (yyval.addr2).to = nullgen; } break; - case 55: -#line 266 "a.y" + case 57: +#line 295 "a.y" { (yyval.addr2).from = (yyvsp[(1) - (3)].addr); (yyval.addr2).to = (yyvsp[(3) - (3)].addr); } break; - case 56: -#line 273 "a.y" + case 58: +#line 302 "a.y" { (yyval.addr2).from = (yyvsp[(1) - (5)].addr); (yyval.addr2).to = (yyvsp[(3) - (5)].addr); @@ -2015,8 +2035,8 @@ yyreduce: } break; - case 57: -#line 281 "a.y" + case 59: +#line 310 "a.y" { (yyval.addr2).from = (yyvsp[(3) - (5)].addr); (yyval.addr2).to = (yyvsp[(5) - (5)].addr); @@ -2026,41 +2046,24 @@ yyreduce: } break; - case 58: -#line 290 "a.y" + case 60: +#line 319 "a.y" { (yyval.addr2).from = nullgen; (yyval.addr2).to = nullgen; } break; - case 59: -#line 295 "a.y" + case 61: +#line 324 "a.y" { (yyval.addr2).from = (yyvsp[(1) - (1)].addr); (yyval.addr2).to = nullgen; } break; - case 60: -#line 302 "a.y" - { - (yyval.addr2).from = (yyvsp[(1) - (3)].addr); - (yyval.addr2).to = (yyvsp[(3) - (3)].addr); - } - break; - - case 61: -#line 307 "a.y" - { - (yyval.addr2).from = (yyvsp[(1) - (5)].addr); - (yyval.addr2).from.scale = (yyvsp[(3) - (5)].lval); - (yyval.addr2).to = (yyvsp[(5) - (5)].addr); - } - break; - case 62: -#line 315 "a.y" +#line 331 "a.y" { if((yyvsp[(1) - (3)].addr).type != TYPE_CONST || (yyvsp[(3) - (3)].addr).type != TYPE_CONST) yyerror("arguments to PCDATA must be integer constants"); @@ -2070,7 +2073,7 @@ yyreduce: break; case 63: -#line 324 "a.y" +#line 340 "a.y" { if((yyvsp[(1) - (3)].addr).type != TYPE_CONST) yyerror("index for FUNCDATA must be integer constant"); @@ -2082,21 +2085,21 @@ yyreduce: break; case 68: -#line 341 "a.y" +#line 357 "a.y" { (yyval.addr) = (yyvsp[(2) - (2)].addr); } break; case 69: -#line 345 "a.y" +#line 361 "a.y" { (yyval.addr) = (yyvsp[(2) - (2)].addr); } break; case 74: -#line 357 "a.y" +#line 373 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_BRANCH; @@ -2105,7 +2108,7 @@ yyreduce: break; case 75: -#line 363 "a.y" +#line 379 "a.y" { (yyvsp[(1) - (2)].sym) = labellookup((yyvsp[(1) - (2)].sym)); (yyval.addr) = nullgen; @@ -2117,7 +2120,7 @@ yyreduce: break; case 76: -#line 374 "a.y" +#line 390 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2126,7 +2129,7 @@ yyreduce: break; case 77: -#line 380 "a.y" +#line 396 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2135,7 +2138,7 @@ yyreduce: break; case 78: -#line 386 "a.y" +#line 402 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2144,7 +2147,7 @@ yyreduce: break; case 79: -#line 392 "a.y" +#line 408 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2153,7 +2156,7 @@ yyreduce: break; case 80: -#line 398 "a.y" +#line 414 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2162,7 +2165,7 @@ yyreduce: break; case 81: -#line 404 "a.y" +#line 420 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2171,7 +2174,7 @@ yyreduce: break; case 82: -#line 410 "a.y" +#line 426 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2180,7 +2183,7 @@ yyreduce: break; case 83: -#line 418 "a.y" +#line 434 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_CONST; @@ -2189,7 +2192,7 @@ yyreduce: break; case 84: -#line 424 "a.y" +#line 440 "a.y" { (yyval.addr) = (yyvsp[(2) - (2)].addr); (yyval.addr).type = TYPE_ADDR; @@ -2202,7 +2205,7 @@ yyreduce: break; case 85: -#line 434 "a.y" +#line 450 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_SCONST; @@ -2211,7 +2214,7 @@ yyreduce: break; case 86: -#line 440 "a.y" +#line 456 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_FCONST; @@ -2220,7 +2223,7 @@ yyreduce: break; case 87: -#line 446 "a.y" +#line 462 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_FCONST; @@ -2229,7 +2232,7 @@ yyreduce: break; case 88: -#line 452 "a.y" +#line 468 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_FCONST; @@ -2238,7 +2241,7 @@ yyreduce: break; case 89: -#line 458 "a.y" +#line 474 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_FCONST; @@ -2247,7 +2250,7 @@ yyreduce: break; case 92: -#line 470 "a.y" +#line 486 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2256,7 +2259,7 @@ yyreduce: break; case 93: -#line 476 "a.y" +#line 492 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2266,7 +2269,7 @@ yyreduce: break; case 94: -#line 483 "a.y" +#line 499 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2276,7 +2279,7 @@ yyreduce: break; case 95: -#line 490 "a.y" +#line 506 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2286,7 +2289,7 @@ yyreduce: break; case 96: -#line 497 "a.y" +#line 513 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2298,7 +2301,7 @@ yyreduce: break; case 97: -#line 506 "a.y" +#line 522 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2311,7 +2314,7 @@ yyreduce: break; case 98: -#line 516 "a.y" +#line 532 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2324,7 +2327,7 @@ yyreduce: break; case 99: -#line 526 "a.y" +#line 542 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2333,7 +2336,7 @@ yyreduce: break; case 100: -#line 532 "a.y" +#line 548 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2342,7 +2345,7 @@ yyreduce: break; case 101: -#line 538 "a.y" +#line 554 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2353,7 +2356,7 @@ yyreduce: break; case 102: -#line 546 "a.y" +#line 562 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2365,14 +2368,14 @@ yyreduce: break; case 103: -#line 557 "a.y" +#line 573 "a.y" { (yyval.addr) = (yyvsp[(1) - (1)].addr); } break; case 104: -#line 561 "a.y" +#line 577 "a.y" { (yyval.addr) = (yyvsp[(1) - (6)].addr); (yyval.addr).index = (yyvsp[(3) - (6)].lval); @@ -2382,7 +2385,7 @@ yyreduce: break; case 105: -#line 570 "a.y" +#line 586 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2393,7 +2396,7 @@ yyreduce: break; case 106: -#line 578 "a.y" +#line 594 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2404,70 +2407,70 @@ yyreduce: break; case 107: -#line 587 "a.y" +#line 603 "a.y" { (yyval.lval) = 0; } break; case 108: -#line 591 "a.y" +#line 607 "a.y" { (yyval.lval) = (yyvsp[(2) - (2)].lval); } break; case 109: -#line 595 "a.y" +#line 611 "a.y" { (yyval.lval) = -(yyvsp[(2) - (2)].lval); } break; case 111: -#line 602 "a.y" +#line 618 "a.y" { (yyval.lval) = NAME_AUTO; } break; case 114: -#line 610 "a.y" +#line 626 "a.y" { (yyval.lval) = (yyvsp[(1) - (1)].sym)->value; } break; case 115: -#line 614 "a.y" +#line 630 "a.y" { (yyval.lval) = -(yyvsp[(2) - (2)].lval); } break; case 116: -#line 618 "a.y" +#line 634 "a.y" { (yyval.lval) = (yyvsp[(2) - (2)].lval); } break; case 117: -#line 622 "a.y" +#line 638 "a.y" { (yyval.lval) = ~(yyvsp[(2) - (2)].lval); } break; case 118: -#line 626 "a.y" +#line 642 "a.y" { (yyval.lval) = (yyvsp[(2) - (3)].lval); } break; case 119: -#line 632 "a.y" +#line 648 "a.y" { (yyval.addr).type = TYPE_TEXTSIZE; (yyval.addr).offset = (yyvsp[(1) - (1)].lval); @@ -2476,7 +2479,7 @@ yyreduce: break; case 120: -#line 638 "a.y" +#line 654 "a.y" { (yyval.addr).type = TYPE_TEXTSIZE; (yyval.addr).offset = -(yyvsp[(2) - (2)].lval); @@ -2485,7 +2488,7 @@ yyreduce: break; case 121: -#line 644 "a.y" +#line 660 "a.y" { (yyval.addr).type = TYPE_TEXTSIZE; (yyval.addr).offset = (yyvsp[(1) - (3)].lval); @@ -2494,7 +2497,7 @@ yyreduce: break; case 122: -#line 650 "a.y" +#line 666 "a.y" { (yyval.addr).type = TYPE_TEXTSIZE; (yyval.addr).offset = -(yyvsp[(2) - (4)].lval); @@ -2503,70 +2506,70 @@ yyreduce: break; case 124: -#line 659 "a.y" +#line 675 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) + (yyvsp[(3) - (3)].lval); } break; case 125: -#line 663 "a.y" +#line 679 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) - (yyvsp[(3) - (3)].lval); } break; case 126: -#line 667 "a.y" +#line 683 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) * (yyvsp[(3) - (3)].lval); } break; case 127: -#line 671 "a.y" +#line 687 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) / (yyvsp[(3) - (3)].lval); } break; case 128: -#line 675 "a.y" +#line 691 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) % (yyvsp[(3) - (3)].lval); } break; case 129: -#line 679 "a.y" +#line 695 "a.y" { (yyval.lval) = (yyvsp[(1) - (4)].lval) << (yyvsp[(4) - (4)].lval); } break; case 130: -#line 683 "a.y" +#line 699 "a.y" { (yyval.lval) = (yyvsp[(1) - (4)].lval) >> (yyvsp[(4) - (4)].lval); } break; case 131: -#line 687 "a.y" +#line 703 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) & (yyvsp[(3) - (3)].lval); } break; case 132: -#line 691 "a.y" +#line 707 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) ^ (yyvsp[(3) - (3)].lval); } break; case 133: -#line 695 "a.y" +#line 711 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) | (yyvsp[(3) - (3)].lval); } @@ -2574,7 +2577,7 @@ yyreduce: /* Line 1267 of yacc.c. */ -#line 2578 "y.tab.c" +#line 2581 "y.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); diff --git a/src/cmd/6g/gg.h b/src/cmd/6g/gg.h index 581b7a231e..7a7b824da1 100644 --- a/src/cmd/6g/gg.h +++ b/src/cmd/6g/gg.h @@ -9,8 +9,6 @@ #include "../gc/go.h" #include "../6l/6.out.h" -#define TEXTFLAG from.scale - EXTERN int32 dynloc; EXTERN uchar reg[MAXREG]; EXTERN int32 pcloc; // instruction counter diff --git a/src/cmd/6g/gsubr.c b/src/cmd/6g/gsubr.c index 1e996ae162..6c7cc89025 100644 --- a/src/cmd/6g/gsubr.c +++ b/src/cmd/6g/gsubr.c @@ -198,9 +198,9 @@ ggloblnod(Node *nam) p->to.type = TYPE_CONST; p->to.offset = nam->type->width; if(nam->readonly) - p->from.scale = RODATA; + p->from3.offset = RODATA; if(nam->type != T && !haspointers(nam->type)) - p->from.scale |= NOPTR; + p->from3.offset |= NOPTR; } void @@ -225,7 +225,7 @@ ggloblsym(Sym *s, int32 width, int8 flags) p->from.sym = linksym(s); p->to.type = TYPE_CONST; p->to.offset = width; - p->from.scale = flags; + p->from3.offset = flags; } int diff --git a/src/cmd/8a/a.h b/src/cmd/8a/a.h index a1aca07aea..24654b0ab8 100644 --- a/src/cmd/8a/a.h +++ b/src/cmd/8a/a.h @@ -139,6 +139,7 @@ EXTERN int32 thunk; EXTERN Biobuf obuf; EXTERN Link* ctxt; EXTERN Biobuf bstdout; +EXTERN Prog* lastpc; void* alloc(int32); void* allocn(void*, int32, int32); diff --git a/src/cmd/8a/a.y b/src/cmd/8a/a.y index 0203d660c1..3276289ffb 100644 --- a/src/cmd/8a/a.y +++ b/src/cmd/8a/a.y @@ -59,7 +59,7 @@ %type con expr pointer offset %type mem imm reg nam rel rem rim rom omem nmem textsize %type nonnon nonrel nonrem rimnon rimrem remrim -%type spec1 spec2 spec3 spec4 spec5 spec6 spec7 spec8 spec9 spec10 spec11 spec12 +%type spec1 spec3 spec4 spec5 spec6 spec7 spec9 spec10 spec11 spec12 %% prog: | prog @@ -101,13 +101,13 @@ inst: | LTYPE4 remrim { outcode($1, &$2); } | LTYPER nonrel { outcode($1, &$2); } | LTYPED spec1 { outcode($1, &$2); } -| LTYPET spec2 { outcode($1, &$2); } +| spec2 | LTYPEC spec3 { outcode($1, &$2); } | LTYPEN spec4 { outcode($1, &$2); } | LTYPES spec5 { outcode($1, &$2); } | LTYPEM spec6 { outcode($1, &$2); } | LTYPEI spec7 { outcode($1, &$2); } -| LTYPEG spec8 { outcode($1, &$2); } +| spec8 | LTYPEXC spec9 { outcode($1, &$2); } | LTYPEX spec10 { outcode($1, &$2); } | LTYPEPC spec11 { outcode($1, &$2); } @@ -188,18 +188,47 @@ spec1: /* DATA */ } spec2: /* TEXT */ - mem ',' '$' textsize + LTYPET mem ',' '$' textsize { - settext($1.sym); - $$.from = $1; - $$.to = $4; + Addr2 a; + settext($2.sym); + a.from = $2; + a.to = $5; + outcode(ATEXT, &a); } -| mem ',' con ',' '$' textsize +| LTYPET mem ',' con ',' '$' textsize { - settext($1.sym); - $$.from = $1; - $$.from.scale = $3; - $$.to = $6; + Addr2 a; + settext($2.sym); + a.from = $2; + a.to = $7; + outcode(ATEXT, &a); + if(pass > 1) { + lastpc->from3.type = TYPE_CONST; + lastpc->from3.offset = $4; + } + } + +spec8: /* GLOBL */ + LTYPEG mem ',' imm + { + Addr2 a; + settext($2.sym); + a.from = $2; + a.to = $4; + outcode(AGLOBL, &a); + } +| LTYPEG mem ',' con ',' imm + { + Addr2 a; + settext($2.sym); + a.from = $2; + a.to = $6; + outcode(AGLOBL, &a); + if(pass > 1) { + lastpc->from3.type = TYPE_CONST; + lastpc->from3.offset = $4; + } } spec3: /* JMP/CALL */ @@ -271,19 +300,6 @@ spec7: $$.to = $3; } -spec8: /* GLOBL */ - mem ',' imm - { - $$.from = $1; - $$.to = $3; - } -| mem ',' con ',' imm - { - $$.from = $1; - $$.from.scale = $3; - $$.to = $5; - } - spec9: /* CMPPS/CMPPD */ reg ',' rem ',' con { diff --git a/src/cmd/8a/lex.c b/src/cmd/8a/lex.c index 9ac56e5459..846f6c6daf 100644 --- a/src/cmd/8a/lex.c +++ b/src/cmd/8a/lex.c @@ -881,8 +881,6 @@ cclean(void) outcode(AEND, &g2); } -static Prog *lastpc; - void outcode(int a, Addr2 *g2) { diff --git a/src/cmd/8a/y.tab.c b/src/cmd/8a/y.tab.c index 79439ccf8d..66c11abd83 100644 --- a/src/cmd/8a/y.tab.c +++ b/src/cmd/8a/y.tab.c @@ -407,7 +407,7 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 544 +#define YYLAST 561 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 54 @@ -467,18 +467,18 @@ static const yytype_uint16 yyprhs[] = { 0, 0, 3, 4, 5, 9, 10, 15, 17, 20, 23, 27, 31, 34, 37, 40, 43, 46, 49, 52, - 55, 58, 61, 64, 67, 70, 73, 76, 79, 82, - 85, 86, 88, 92, 96, 99, 101, 104, 106, 109, - 111, 115, 121, 126, 133, 136, 138, 141, 143, 145, - 149, 155, 159, 165, 168, 170, 174, 178, 184, 190, - 196, 200, 204, 206, 208, 210, 212, 215, 218, 220, - 222, 224, 226, 228, 233, 236, 238, 240, 242, 244, - 246, 248, 251, 254, 257, 260, 265, 271, 275, 277, - 280, 284, 289, 291, 293, 295, 300, 305, 312, 322, - 332, 336, 340, 345, 351, 360, 362, 369, 375, 383, - 384, 387, 390, 392, 394, 396, 398, 400, 403, 406, - 409, 413, 415, 419, 423, 427, 431, 435, 440, 445, - 449, 453 + 54, 57, 60, 63, 66, 69, 71, 74, 77, 80, + 83, 84, 86, 90, 94, 97, 99, 102, 104, 107, + 109, 113, 119, 125, 133, 138, 145, 148, 150, 153, + 155, 157, 161, 167, 171, 177, 180, 182, 186, 192, + 198, 202, 206, 208, 210, 212, 214, 217, 220, 222, + 224, 226, 228, 230, 235, 238, 240, 242, 244, 246, + 248, 250, 253, 256, 259, 262, 267, 273, 277, 279, + 282, 286, 291, 293, 295, 297, 302, 307, 314, 324, + 334, 338, 342, 347, 353, 362, 364, 371, 377, 385, + 386, 389, 392, 394, 396, 398, 400, 402, 405, 408, + 411, 415, 417, 421, 425, 429, 433, 437, 442, 447, + 451, 455 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ @@ -489,47 +489,47 @@ static const yytype_int8 yyrhs[] = 1, 47, -1, 43, 48, 92, -1, 45, 48, 92, -1, 13, 60, -1, 14, 64, -1, 15, 63, -1, 16, 61, -1, 17, 62, -1, 21, 65, -1, 19, - 66, -1, 22, 67, -1, 18, 68, -1, 20, 69, - -1, 23, 70, -1, 24, 71, -1, 25, 72, -1, - 26, 73, -1, 27, 74, -1, 28, 75, -1, 29, - 76, -1, 30, 77, -1, -1, 49, -1, 80, 49, - 78, -1, 78, 49, 80, -1, 80, 49, -1, 80, - -1, 49, 78, -1, 78, -1, 49, 81, -1, 81, - -1, 83, 49, 81, -1, 88, 11, 91, 49, 83, - -1, 85, 49, 50, 84, -1, 85, 49, 91, 49, - 50, 84, -1, 49, 79, -1, 79, -1, 10, 88, - -1, 60, -1, 64, -1, 80, 49, 78, -1, 80, - 49, 78, 46, 36, -1, 80, 49, 78, -1, 80, - 49, 78, 46, 37, -1, 80, 49, -1, 80, -1, - 80, 49, 78, -1, 85, 49, 83, -1, 85, 49, - 91, 49, 83, -1, 82, 49, 78, 49, 91, -1, - 83, 49, 78, 49, 82, -1, 80, 49, 80, -1, - 80, 49, 80, -1, 82, -1, 85, -1, 81, -1, - 87, -1, 10, 82, -1, 10, 86, -1, 82, -1, - 86, -1, 83, -1, 78, -1, 83, -1, 91, 51, - 33, 52, -1, 43, 89, -1, 35, -1, 38, -1, - 36, -1, 39, -1, 42, -1, 37, -1, 50, 91, - -1, 50, 88, -1, 50, 41, -1, 50, 40, -1, - 50, 51, 40, 52, -1, 50, 51, 9, 40, 52, - -1, 50, 9, 40, -1, 31, -1, 9, 31, -1, - 31, 9, 31, -1, 9, 31, 9, 31, -1, 86, - -1, 87, -1, 91, -1, 91, 51, 36, 52, -1, - 91, 51, 42, 52, -1, 91, 51, 36, 10, 91, - 52, -1, 91, 51, 36, 52, 51, 36, 10, 91, - 52, -1, 91, 51, 36, 52, 51, 37, 10, 91, - 52, -1, 51, 36, 52, -1, 51, 42, 52, -1, - 91, 51, 37, 52, -1, 51, 36, 10, 91, 52, - -1, 51, 36, 52, 51, 36, 10, 91, 52, -1, - 88, -1, 88, 51, 36, 10, 91, 52, -1, 43, - 89, 51, 90, 52, -1, 43, 6, 7, 89, 51, - 34, 52, -1, -1, 8, 91, -1, 9, 91, -1, - 34, -1, 42, -1, 32, -1, 31, -1, 45, -1, - 9, 91, -1, 8, 91, -1, 53, 91, -1, 51, - 92, 52, -1, 91, -1, 92, 8, 92, -1, 92, - 9, 92, -1, 92, 10, 92, -1, 92, 11, 92, - -1, 92, 12, 92, -1, 92, 6, 6, 92, -1, - 92, 7, 7, 92, -1, 92, 5, 92, -1, 92, - 4, 92, -1, 92, 3, 92, -1 + 66, -1, 67, -1, 18, 69, -1, 20, 70, -1, + 23, 71, -1, 24, 72, -1, 25, 73, -1, 68, + -1, 27, 74, -1, 28, 75, -1, 29, 76, -1, + 30, 77, -1, -1, 49, -1, 80, 49, 78, -1, + 78, 49, 80, -1, 80, 49, -1, 80, -1, 49, + 78, -1, 78, -1, 49, 81, -1, 81, -1, 83, + 49, 81, -1, 88, 11, 91, 49, 83, -1, 22, + 85, 49, 50, 84, -1, 22, 85, 49, 91, 49, + 50, 84, -1, 26, 85, 49, 83, -1, 26, 85, + 49, 91, 49, 83, -1, 49, 79, -1, 79, -1, + 10, 88, -1, 60, -1, 64, -1, 80, 49, 78, + -1, 80, 49, 78, 46, 36, -1, 80, 49, 78, + -1, 80, 49, 78, 46, 37, -1, 80, 49, -1, + 80, -1, 80, 49, 78, -1, 82, 49, 78, 49, + 91, -1, 83, 49, 78, 49, 82, -1, 80, 49, + 80, -1, 80, 49, 80, -1, 82, -1, 85, -1, + 81, -1, 87, -1, 10, 82, -1, 10, 86, -1, + 82, -1, 86, -1, 83, -1, 78, -1, 83, -1, + 91, 51, 33, 52, -1, 43, 89, -1, 35, -1, + 38, -1, 36, -1, 39, -1, 42, -1, 37, -1, + 50, 91, -1, 50, 88, -1, 50, 41, -1, 50, + 40, -1, 50, 51, 40, 52, -1, 50, 51, 9, + 40, 52, -1, 50, 9, 40, -1, 31, -1, 9, + 31, -1, 31, 9, 31, -1, 9, 31, 9, 31, + -1, 86, -1, 87, -1, 91, -1, 91, 51, 36, + 52, -1, 91, 51, 42, 52, -1, 91, 51, 36, + 10, 91, 52, -1, 91, 51, 36, 52, 51, 36, + 10, 91, 52, -1, 91, 51, 36, 52, 51, 37, + 10, 91, 52, -1, 51, 36, 52, -1, 51, 42, + 52, -1, 91, 51, 37, 52, -1, 51, 36, 10, + 91, 52, -1, 51, 36, 52, 51, 36, 10, 91, + 52, -1, 88, -1, 88, 51, 36, 10, 91, 52, + -1, 43, 89, 51, 90, 52, -1, 43, 6, 7, + 89, 51, 34, 52, -1, -1, 8, 91, -1, 9, + 91, -1, 34, -1, 42, -1, 32, -1, 31, -1, + 45, -1, 9, 91, -1, 8, 91, -1, 53, 91, + -1, 51, 92, 52, -1, 91, -1, 92, 8, 92, + -1, 92, 9, 92, -1, 92, 10, 92, -1, 92, + 11, 92, -1, 92, 12, 92, -1, 92, 6, 6, + 92, -1, 92, 7, 7, 92, -1, 92, 5, 92, + -1, 92, 4, 92, -1, 92, 3, 92, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ @@ -539,16 +539,16 @@ static const yytype_uint16 yyrline[] = 86, 91, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 117, 121, 128, 135, 142, 147, 154, 159, 166, 171, - 176, 183, 191, 197, 206, 211, 216, 224, 225, 228, - 233, 243, 248, 258, 263, 268, 275, 280, 288, 296, - 306, 315, 326, 327, 330, 331, 332, 336, 340, 341, - 342, 345, 346, 349, 355, 366, 372, 378, 384, 390, - 396, 404, 410, 420, 426, 432, 438, 444, 452, 458, - 464, 470, 478, 479, 482, 489, 496, 503, 513, 523, - 533, 539, 545, 552, 561, 572, 576, 585, 593, 603, - 606, 610, 616, 617, 621, 624, 625, 629, 633, 637, - 641, 647, 648, 652, 656, 660, 664, 668, 672, 676, - 680, 684 + 176, 183, 191, 199, 213, 221, 235, 240, 245, 253, + 254, 257, 262, 272, 277, 287, 292, 297, 304, 312, + 322, 331, 342, 343, 346, 347, 348, 352, 356, 357, + 358, 361, 362, 365, 371, 382, 388, 394, 400, 406, + 412, 420, 426, 436, 442, 448, 454, 460, 468, 474, + 480, 486, 494, 495, 498, 505, 512, 519, 529, 539, + 549, 555, 561, 568, 577, 588, 592, 601, 609, 619, + 622, 626, 632, 633, 637, 640, 641, 645, 649, 653, + 657, 663, 664, 668, 672, 676, 680, 684, 688, 692, + 696, 700 }; #endif @@ -565,8 +565,8 @@ static const char *const yytname[] = "LXREG", "LFCONST", "LSCONST", "LSP", "LNAME", "LLAB", "LVAR", "':'", "';'", "'='", "','", "'$'", "'('", "')'", "'~'", "$accept", "prog", "@1", "line", "@2", "inst", "nonnon", "rimrem", "remrim", "rimnon", "nonrem", - "nonrel", "spec1", "spec2", "spec3", "spec4", "spec5", "spec6", "spec7", - "spec8", "spec9", "spec10", "spec11", "spec12", "rem", "rom", "rim", + "nonrel", "spec1", "spec2", "spec8", "spec3", "spec4", "spec5", "spec6", + "spec7", "spec9", "spec10", "spec11", "spec12", "rem", "rom", "rim", "rel", "reg", "imm", "textsize", "mem", "omem", "nmem", "nam", "offset", "pointer", "con", "expr", 0 }; @@ -593,8 +593,8 @@ static const yytype_uint8 yyr1[] = 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 60, 60, 61, 62, 63, 63, 64, 64, 65, 65, - 65, 66, 67, 67, 68, 68, 68, 69, 69, 70, - 70, 71, 71, 72, 72, 72, 73, 73, 74, 75, + 65, 66, 67, 67, 68, 68, 69, 69, 69, 70, + 70, 71, 71, 72, 72, 73, 73, 73, 74, 75, 76, 77, 78, 78, 79, 79, 79, 79, 79, 79, 79, 80, 80, 81, 81, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 83, 83, 84, 84, @@ -609,11 +609,11 @@ static const yytype_uint8 yyr1[] = static const yytype_uint8 yyr2[] = { 0, 2, 0, 0, 3, 0, 4, 1, 2, 2, - 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 2, 2, 2, 2, 2, 2, 2, 1, + 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 0, 1, 3, 3, 2, 1, 2, 1, 2, 1, - 3, 5, 4, 6, 2, 1, 2, 1, 1, 3, - 5, 3, 5, 2, 1, 3, 3, 5, 5, 5, + 3, 5, 5, 7, 4, 6, 2, 1, 2, 1, + 1, 3, 5, 3, 5, 2, 1, 3, 5, 5, 3, 3, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 4, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 5, 3, 1, 2, @@ -631,29 +631,29 @@ static const yytype_uint8 yydefact[] = { 2, 3, 1, 0, 0, 30, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 4, 0, 9, 31, - 12, 0, 0, 115, 75, 77, 80, 76, 78, 79, - 109, 116, 0, 0, 0, 13, 37, 62, 63, 92, - 93, 105, 94, 0, 14, 71, 35, 72, 15, 0, - 16, 0, 0, 109, 0, 20, 45, 64, 68, 70, - 69, 65, 94, 18, 0, 31, 47, 48, 21, 109, - 0, 0, 17, 39, 0, 0, 19, 0, 22, 0, - 23, 0, 24, 54, 25, 0, 26, 0, 27, 0, + 0, 0, 0, 0, 0, 7, 4, 0, 19, 25, + 9, 31, 12, 0, 0, 115, 75, 77, 80, 76, + 78, 79, 109, 116, 0, 0, 0, 13, 37, 62, + 63, 92, 93, 105, 94, 0, 14, 71, 35, 72, + 15, 0, 16, 0, 0, 109, 0, 20, 47, 64, + 68, 70, 69, 65, 94, 18, 0, 31, 49, 50, + 21, 109, 0, 0, 17, 39, 0, 0, 0, 22, + 0, 23, 0, 24, 56, 0, 26, 0, 27, 0, 28, 0, 29, 0, 5, 0, 0, 8, 118, 117, 0, 0, 0, 0, 36, 0, 0, 121, 0, 119, 0, 0, 0, 84, 83, 0, 82, 81, 34, 0, - 0, 66, 67, 46, 74, 0, 44, 0, 0, 74, - 38, 0, 0, 0, 0, 0, 53, 0, 0, 0, + 0, 66, 67, 48, 74, 0, 46, 0, 0, 74, + 38, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 10, 11, 109, 110, 111, 0, 0, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 87, 0, 0, - 32, 33, 0, 0, 40, 0, 0, 49, 51, 55, - 56, 0, 0, 0, 60, 61, 6, 0, 114, 112, + 32, 33, 0, 0, 40, 0, 0, 51, 53, 57, + 44, 0, 0, 0, 60, 61, 6, 0, 114, 112, 113, 0, 0, 0, 131, 130, 129, 0, 0, 122, 123, 124, 125, 126, 0, 0, 95, 102, 96, 0, 85, 73, 0, 0, 88, 42, 0, 0, 0, 0, 0, 0, 0, 107, 103, 0, 127, 128, 0, 0, - 0, 86, 41, 89, 0, 0, 50, 52, 57, 58, + 0, 86, 41, 89, 0, 0, 52, 54, 45, 58, 59, 0, 0, 106, 97, 0, 0, 0, 90, 43, 108, 0, 0, 0, 91, 104, 0, 0, 98, 99 }; @@ -661,53 +661,53 @@ static const yytype_uint8 yydefact[] = /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 3, 26, 152, 27, 30, 58, 60, 54, - 45, 82, 73, 86, 65, 78, 88, 90, 92, 94, - 96, 98, 100, 102, 55, 66, 56, 67, 47, 57, - 225, 48, 49, 50, 51, 113, 201, 52, 118 + -1, 1, 3, 26, 152, 27, 32, 60, 62, 56, + 47, 84, 75, 28, 29, 67, 80, 89, 91, 93, + 96, 98, 100, 102, 57, 68, 58, 69, 49, 59, + 225, 50, 51, 52, 53, 113, 201, 54, 118 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -89 +#define YYPACT_NINF -87 static const yytype_int16 yypact[] = { - -89, 8, -89, 211, -36, -35, 164, 283, 283, 331, - 235, 9, 307, 41, 409, 283, 283, 283, 409, 502, - -18, 283, 283, 60, 30, -89, -89, 21, -89, -89, - -89, 466, 466, -89, -89, -89, -89, -89, -89, -89, - 79, -89, 331, 394, 466, -89, -89, -89, -89, -89, - -89, 38, 46, 370, -89, -89, 58, -89, -89, 64, - -89, 65, 331, 79, 259, -89, -89, -89, -89, -89, - -89, -89, 66, -89, 105, 331, -89, -89, -89, 31, - 418, 466, -89, -89, 69, 71, -89, 75, -89, 76, - -89, 78, -89, 80, -89, 87, -89, 89, -89, 91, - -89, 93, -89, 95, -89, 466, 466, -89, -89, -89, - 116, 466, 466, 94, -89, -1, 96, -89, 171, -89, - 110, -11, 90, -89, -89, 425, -89, -89, -89, 331, - 283, -89, -89, -89, 94, 355, -89, 67, 466, -89, - -89, 418, 118, 435, 331, 331, 331, 442, 331, 331, - 283, 283, 211, 181, 181, 31, -89, -89, 35, 466, - 104, -89, 466, 466, 466, 150, 158, 466, 466, 466, - 466, 466, -89, 159, 10, 142, 144, -89, 459, 156, - -89, -89, 166, 161, -89, 7, 162, 170, 173, -89, - -89, 197, 198, 199, -89, -89, -89, 200, -89, -89, - -89, 203, 205, 213, 516, 524, 253, 466, 466, 53, - 53, -89, -89, -89, 466, 466, 224, -89, -89, 227, - -89, -89, -18, 219, 267, -89, 231, 246, 250, -18, - 466, 502, 249, -89, -89, 279, 36, 36, 241, 247, - 74, -89, -89, 291, 272, 7, -89, -89, -89, -89, - -89, 254, 466, -89, -89, 295, 297, 277, -89, -89, - -89, 261, 466, 466, -89, -89, 265, 271, -89, -89 + -87, 14, -87, 242, -29, -23, 164, 313, 313, 361, + 265, -14, 337, 180, 417, 313, 313, 313, 417, 81, + 24, 313, 313, 16, 31, -87, -87, 33, -87, -87, + -87, -87, -87, 498, 498, -87, -87, -87, -87, -87, + -87, -87, 43, -87, 361, 58, 498, -87, -87, -87, + -87, -87, -87, 37, 39, 400, -87, -87, 42, -87, + -87, 44, -87, 48, 361, 43, 289, -87, -87, -87, + -87, -87, -87, -87, 62, -87, 99, 361, -87, -87, + -87, 13, 424, 498, -87, -87, 65, 73, 76, -87, + 78, -87, 80, -87, 86, 87, -87, 89, -87, 102, + -87, 106, -87, 113, -87, 498, 498, -87, -87, -87, + 123, 498, 498, 112, -87, -2, 119, -87, 175, -87, + 128, 50, 441, -87, -87, 448, -87, -87, -87, 361, + 313, -87, -87, -87, 112, 385, -87, -5, 498, -87, + -87, 424, 141, 465, 361, 361, 361, 474, 361, 361, + 313, 313, 242, 549, 549, 13, -87, -87, 12, 498, + 124, -87, 498, 498, 498, 184, 185, 498, 498, 498, + 498, 498, -87, 181, 1, 142, 144, -87, 481, 156, + -87, -87, 158, 163, -87, 7, 167, 147, 172, -87, + -87, 170, 177, 179, -87, -87, -87, 173, -87, -87, + -87, 199, 202, 196, 136, 229, 238, 498, 498, 59, + 59, -87, -87, -87, 498, 498, 225, -87, -87, 226, + -87, -87, 24, 246, 270, -87, 230, 245, 247, 24, + 498, 81, 248, -87, -87, 273, 96, 96, 234, 236, + 3, -87, -87, 281, 260, 7, -87, -87, -87, -87, + -87, 240, 498, -87, -87, 283, 284, 264, -87, -87, + -87, 253, 498, 498, -87, -87, 254, 257, -87, -87 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -89, -89, -89, 172, -89, -89, 299, -89, -89, -89, - 315, -89, -89, -89, -89, -89, -89, -89, -89, -89, - -89, -89, -89, -89, 18, 266, 20, -7, -9, -8, - 84, 5, -3, -6, 4, -50, -89, -10, -88 + -87, -87, -87, 159, -87, -87, 300, -87, -87, -87, + 301, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, 21, 251, 26, -7, -9, -8, + 74, -1, -3, -6, 4, -56, -87, -10, -86 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -717,120 +717,124 @@ static const yytype_int16 yypgoto[] = #define YYTABLE_NINF -1 static const yytype_uint16 yytable[] = { - 72, 68, 69, 85, 71, 84, 83, 70, 2, 159, - 97, 28, 99, 134, 29, 74, 223, 153, 154, 87, - 215, 108, 109, 95, 46, 174, 175, 61, 59, 139, - 46, 176, 53, 117, 119, 89, 91, 93, 224, 111, - 112, 101, 103, 127, 167, 168, 169, 170, 171, 31, - 32, 160, 40, 131, 72, 68, 69, 126, 71, 132, - 114, 70, 216, 169, 170, 171, 133, 198, 107, 199, - 85, 117, 33, 140, 204, 205, 206, 200, 106, 209, - 210, 211, 212, 213, 79, 110, 41, 111, 112, 120, - 80, 53, 81, 114, 44, 117, 117, 121, 31, 32, - 182, 156, 157, 174, 175, 197, 104, 128, 105, 176, - 255, 256, 109, 129, 130, 117, 138, 137, 141, 236, - 237, 33, 142, 155, 143, 144, 131, 145, 183, 146, - 177, 85, 132, 186, 184, 41, 147, 191, 148, 190, - 149, 81, 150, 44, 151, 158, 173, 180, 161, 202, - 181, 182, 117, 117, 117, 203, 207, 117, 117, 117, - 117, 117, 187, 188, 189, 208, 192, 193, 109, 214, - 194, 195, 31, 32, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 217, 33, 218, 117, 117, 34, - 35, 36, 37, 38, 238, 239, 39, 40, 220, 41, - 222, 226, 4, 42, 242, 43, 227, 44, 221, 228, - 249, 248, 250, 172, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 261, 31, 32, 62, 229, 230, 231, 235, - 243, 232, 266, 267, 23, 233, 24, 234, 25, 165, - 166, 167, 168, 169, 170, 171, 33, 31, 32, 135, - 34, 35, 36, 37, 38, 240, 244, 39, 63, 241, - 41, 245, 246, 251, 64, 53, 43, 247, 44, 252, - 33, 31, 32, 253, 34, 35, 36, 37, 38, 254, - 257, 39, 63, 258, 41, 262, 260, 263, 264, 53, - 43, 76, 44, 265, 33, 31, 32, 268, 34, 35, - 36, 37, 38, 269, 196, 39, 40, 77, 41, 259, - 136, 0, 0, 53, 43, 0, 44, 0, 33, 31, - 32, 0, 34, 35, 36, 37, 38, 0, 0, 39, - 40, 0, 41, 0, 0, 0, 75, 0, 43, 0, - 44, 0, 33, 31, 32, 0, 34, 35, 36, 37, - 38, 0, 0, 39, 40, 0, 41, 0, 31, 122, - 0, 0, 43, 0, 44, 0, 33, 0, 0, 0, - 34, 35, 36, 37, 38, 0, 0, 39, 0, 0, - 41, 33, 31, 32, 0, 0, 43, 0, 44, 0, - 123, 124, 0, 40, 0, 41, 0, 31, 32, 0, - 0, 125, 0, 44, 0, 33, 31, 32, 0, 0, - 115, 0, 0, 31, 178, 0, 116, 0, 0, 41, - 33, 0, 0, 31, 32, 81, 0, 44, 0, 33, - 31, 32, 40, 0, 41, 0, 33, 0, 0, 0, - 43, 79, 44, 41, 0, 179, 33, 31, 32, 81, - 41, 44, 0, 33, 31, 32, 81, 0, 44, 0, - 41, 0, 0, 0, 0, 185, 81, 41, 44, 0, - 33, 0, 53, 81, 0, 44, 0, 33, 0, 219, - 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, - 81, 41, 44, 0, 0, 0, 0, 81, 0, 44, - 163, 164, 165, 166, 167, 168, 169, 170, 171, 164, - 165, 166, 167, 168, 169, 170, 171, 34, 35, 36, - 37, 38, 0, 0, 39 + 74, 70, 71, 87, 73, 86, 85, 72, 159, 134, + 97, 215, 99, 88, 2, 76, 223, 95, 30, 153, + 154, 111, 112, 108, 109, 139, 31, 48, 182, 42, + 63, 174, 175, 48, 61, 117, 119, 176, 224, 255, + 256, 90, 92, 94, 198, 127, 199, 101, 103, 110, + 160, 111, 112, 216, 200, 131, 74, 70, 71, 126, + 73, 132, 104, 72, 105, 114, 33, 34, 133, 169, + 170, 171, 87, 117, 55, 140, 204, 205, 206, 106, + 107, 209, 210, 211, 212, 213, 174, 175, 120, 35, + 121, 128, 176, 129, 115, 117, 117, 130, 114, 197, + 116, 156, 157, 43, 167, 168, 169, 170, 171, 83, + 138, 46, 109, 137, 141, 117, 36, 37, 38, 39, + 40, 236, 237, 41, 142, 143, 131, 144, 183, 145, + 155, 87, 132, 186, 184, 146, 147, 191, 148, 190, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 202, + 180, 149, 117, 117, 117, 150, 181, 117, 117, 117, + 117, 117, 151, 158, 173, 187, 188, 189, 109, 192, + 193, 161, 33, 34, 182, 203, 194, 195, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 33, 34, + 207, 214, 208, 227, 217, 35, 218, 117, 117, 36, + 37, 38, 39, 40, 238, 239, 41, 42, 220, 43, + 221, 35, 222, 44, 242, 45, 226, 46, 228, 229, + 249, 248, 250, 81, 232, 43, 230, 172, 231, 82, + 55, 83, 235, 46, 164, 165, 166, 167, 168, 169, + 170, 171, 261, 4, 165, 166, 167, 168, 169, 170, + 171, 233, 266, 267, 234, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 33, 34, 64, 240, 243, 241, 244, + 245, 246, 251, 252, 247, 23, 253, 24, 254, 25, + 257, 258, 260, 262, 263, 264, 35, 33, 34, 135, + 36, 37, 38, 39, 40, 265, 268, 41, 65, 269, + 43, 196, 78, 79, 66, 55, 45, 136, 46, 259, + 35, 33, 34, 0, 36, 37, 38, 39, 40, 0, + 0, 41, 65, 0, 43, 0, 0, 0, 0, 55, + 45, 0, 46, 0, 35, 33, 34, 0, 36, 37, + 38, 39, 40, 0, 0, 41, 42, 0, 43, 0, + 0, 0, 0, 55, 45, 0, 46, 0, 35, 33, + 34, 0, 36, 37, 38, 39, 40, 0, 0, 41, + 42, 0, 43, 0, 0, 0, 77, 0, 45, 0, + 46, 0, 35, 33, 34, 0, 36, 37, 38, 39, + 40, 0, 0, 41, 42, 0, 43, 0, 33, 122, + 0, 0, 45, 0, 46, 0, 35, 0, 0, 0, + 36, 37, 38, 39, 40, 33, 34, 41, 0, 0, + 43, 35, 33, 34, 0, 0, 45, 0, 46, 0, + 123, 124, 0, 42, 0, 43, 0, 0, 35, 33, + 34, 125, 0, 46, 0, 35, 33, 178, 0, 0, + 42, 0, 43, 0, 0, 0, 0, 81, 45, 43, + 46, 0, 35, 33, 34, 83, 0, 46, 0, 35, + 0, 177, 33, 34, 0, 0, 43, 0, 179, 33, + 34, 0, 83, 43, 46, 0, 35, 0, 0, 83, + 0, 46, 0, 0, 0, 35, 33, 34, 0, 0, + 43, 0, 35, 0, 0, 185, 83, 0, 46, 43, + 0, 219, 0, 0, 55, 83, 43, 46, 0, 35, + 0, 0, 83, 0, 46, 0, 0, 0, 0, 0, + 0, 0, 0, 43, 0, 0, 0, 0, 0, 83, + 0, 46, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171 }; static const yytype_int16 yycheck[] = { - 10, 10, 10, 13, 10, 13, 13, 10, 0, 10, - 19, 47, 20, 63, 49, 11, 9, 105, 106, 14, - 10, 31, 32, 18, 6, 36, 37, 9, 8, 79, - 12, 42, 50, 43, 44, 15, 16, 17, 31, 8, - 9, 21, 22, 53, 8, 9, 10, 11, 12, 8, - 9, 52, 43, 62, 64, 64, 64, 53, 64, 62, - 42, 64, 52, 10, 11, 12, 62, 32, 47, 34, - 80, 81, 31, 80, 162, 163, 164, 42, 48, 167, - 168, 169, 170, 171, 43, 6, 45, 8, 9, 51, - 49, 50, 51, 75, 53, 105, 106, 51, 8, 9, - 33, 111, 112, 36, 37, 155, 46, 49, 48, 42, - 36, 37, 122, 49, 49, 125, 11, 51, 49, 207, - 208, 31, 51, 7, 49, 49, 135, 49, 138, 49, - 40, 141, 135, 143, 141, 45, 49, 147, 49, 147, - 49, 51, 49, 53, 49, 51, 36, 129, 52, 159, - 130, 33, 162, 163, 164, 51, 6, 167, 168, 169, - 170, 171, 144, 145, 146, 7, 148, 149, 178, 10, - 150, 151, 8, 9, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 52, 31, 52, 207, 208, 35, + 10, 10, 10, 13, 10, 13, 13, 10, 10, 65, + 19, 10, 20, 14, 0, 11, 9, 18, 47, 105, + 106, 8, 9, 33, 34, 81, 49, 6, 33, 43, + 9, 36, 37, 12, 8, 45, 46, 42, 31, 36, + 37, 15, 16, 17, 32, 55, 34, 21, 22, 6, + 52, 8, 9, 52, 42, 64, 66, 66, 66, 55, + 66, 64, 46, 66, 48, 44, 8, 9, 64, 10, + 11, 12, 82, 83, 50, 82, 162, 163, 164, 48, + 47, 167, 168, 169, 170, 171, 36, 37, 51, 31, + 51, 49, 42, 49, 36, 105, 106, 49, 77, 155, + 42, 111, 112, 45, 8, 9, 10, 11, 12, 51, + 11, 53, 122, 51, 49, 125, 35, 36, 37, 38, + 39, 207, 208, 42, 51, 49, 135, 49, 138, 49, + 7, 141, 135, 143, 141, 49, 49, 147, 49, 147, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 159, + 129, 49, 162, 163, 164, 49, 130, 167, 168, 169, + 170, 171, 49, 51, 36, 144, 145, 146, 178, 148, + 149, 52, 8, 9, 33, 51, 150, 151, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 8, 9, + 6, 10, 7, 46, 52, 31, 52, 207, 208, 35, 36, 37, 38, 39, 214, 215, 42, 43, 52, 45, - 49, 49, 1, 49, 222, 51, 46, 53, 52, 46, - 230, 229, 231, 52, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 252, 8, 9, 10, 49, 49, 49, 36, - 31, 51, 262, 263, 43, 52, 45, 52, 47, 6, - 7, 8, 9, 10, 11, 12, 31, 8, 9, 10, - 35, 36, 37, 38, 39, 51, 9, 42, 43, 52, - 45, 50, 36, 34, 49, 50, 51, 37, 53, 10, - 31, 8, 9, 52, 35, 36, 37, 38, 39, 52, - 9, 42, 43, 31, 45, 10, 52, 10, 31, 50, - 51, 12, 53, 52, 31, 8, 9, 52, 35, 36, - 37, 38, 39, 52, 152, 42, 43, 12, 45, 245, - 64, -1, -1, 50, 51, -1, 53, -1, 31, 8, + 52, 31, 49, 49, 222, 51, 49, 53, 46, 49, + 230, 229, 231, 43, 51, 45, 49, 52, 49, 49, + 50, 51, 36, 53, 5, 6, 7, 8, 9, 10, + 11, 12, 252, 1, 6, 7, 8, 9, 10, 11, + 12, 52, 262, 263, 52, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 8, 9, 10, 51, 31, 52, 9, + 50, 36, 34, 10, 37, 43, 52, 45, 52, 47, + 9, 31, 52, 10, 10, 31, 31, 8, 9, 10, + 35, 36, 37, 38, 39, 52, 52, 42, 43, 52, + 45, 152, 12, 12, 49, 50, 51, 66, 53, 245, + 31, 8, 9, -1, 35, 36, 37, 38, 39, -1, + -1, 42, 43, -1, 45, -1, -1, -1, -1, 50, + 51, -1, 53, -1, 31, 8, 9, -1, 35, 36, + 37, 38, 39, -1, -1, 42, 43, -1, 45, -1, + -1, -1, -1, 50, 51, -1, 53, -1, 31, 8, 9, -1, 35, 36, 37, 38, 39, -1, -1, 42, 43, -1, 45, -1, -1, -1, 49, -1, 51, -1, 53, -1, 31, 8, 9, -1, 35, 36, 37, 38, 39, -1, -1, 42, 43, -1, 45, -1, 8, 9, -1, -1, 51, -1, 53, -1, 31, -1, -1, -1, - 35, 36, 37, 38, 39, -1, -1, 42, -1, -1, + 35, 36, 37, 38, 39, 8, 9, 42, -1, -1, 45, 31, 8, 9, -1, -1, 51, -1, 53, -1, - 40, 41, -1, 43, -1, 45, -1, 8, 9, -1, - -1, 51, -1, 53, -1, 31, 8, 9, -1, -1, - 36, -1, -1, 8, 9, -1, 42, -1, -1, 45, - 31, -1, -1, 8, 9, 51, -1, 53, -1, 31, - 8, 9, 43, -1, 45, -1, 31, -1, -1, -1, - 51, 43, 53, 45, -1, 40, 31, 8, 9, 51, - 45, 53, -1, 31, 8, 9, 51, -1, 53, -1, - 45, -1, -1, -1, -1, 50, 51, 45, 53, -1, - 31, -1, 50, 51, -1, 53, -1, 31, -1, 40, - -1, -1, -1, -1, 45, -1, -1, -1, -1, -1, - 51, 45, 53, -1, -1, -1, -1, 51, -1, 53, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 5, - 6, 7, 8, 9, 10, 11, 12, 35, 36, 37, - 38, 39, -1, -1, 42 + 40, 41, -1, 43, -1, 45, -1, -1, 31, 8, + 9, 51, -1, 53, -1, 31, 8, 9, -1, -1, + 43, -1, 45, -1, -1, -1, -1, 43, 51, 45, + 53, -1, 31, 8, 9, 51, -1, 53, -1, 31, + -1, 40, 8, 9, -1, -1, 45, -1, 40, 8, + 9, -1, 51, 45, 53, -1, 31, -1, -1, 51, + -1, 53, -1, -1, -1, 31, 8, 9, -1, -1, + 45, -1, 31, -1, -1, 50, 51, -1, 53, 45, + -1, 40, -1, -1, 50, 51, 45, 53, -1, 31, + -1, -1, 51, -1, 53, -1, -1, -1, -1, -1, + -1, -1, -1, 45, -1, -1, -1, -1, -1, 51, + -1, 53, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -839,14 +843,14 @@ static const yytype_uint8 yystos[] = { 0, 55, 0, 56, 1, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 43, 45, 47, 57, 59, 47, 49, - 60, 8, 9, 31, 35, 36, 37, 38, 39, 42, - 43, 45, 49, 51, 53, 64, 78, 82, 85, 86, - 87, 88, 91, 50, 63, 78, 80, 83, 61, 80, - 62, 78, 10, 43, 49, 68, 79, 81, 82, 83, - 86, 87, 91, 66, 88, 49, 60, 64, 69, 43, - 49, 51, 65, 81, 83, 91, 67, 85, 70, 80, - 71, 80, 72, 80, 73, 85, 74, 82, 75, 83, + 28, 29, 30, 43, 45, 47, 57, 59, 67, 68, + 47, 49, 60, 8, 9, 31, 35, 36, 37, 38, + 39, 42, 43, 45, 49, 51, 53, 64, 78, 82, + 85, 86, 87, 88, 91, 50, 63, 78, 80, 83, + 61, 80, 62, 78, 10, 43, 49, 69, 79, 81, + 82, 83, 86, 87, 91, 66, 88, 49, 60, 64, + 70, 43, 49, 51, 65, 81, 83, 91, 85, 71, + 80, 72, 80, 73, 80, 85, 74, 82, 75, 83, 76, 80, 77, 80, 46, 48, 48, 47, 91, 91, 6, 8, 9, 89, 78, 36, 42, 91, 92, 91, 51, 51, 9, 40, 41, 51, 88, 91, 49, 49, @@ -1747,11 +1751,6 @@ yyreduce: { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); } break; - case 19: -#line 104 "a.y" - { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); } - break; - case 20: #line 105 "a.y" { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); } @@ -1777,11 +1776,6 @@ yyreduce: { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); } break; - case 25: -#line 110 "a.y" - { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); } - break; - case 26: #line 111 "a.y" { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); } @@ -1902,40 +1896,73 @@ yyreduce: case 42: #line 192 "a.y" { - settext((yyvsp[(1) - (4)].addr).sym); - (yyval.addr2).from = (yyvsp[(1) - (4)].addr); - (yyval.addr2).to = (yyvsp[(4) - (4)].addr); + Addr2 a; + settext((yyvsp[(2) - (5)].addr).sym); + a.from = (yyvsp[(2) - (5)].addr); + a.to = (yyvsp[(5) - (5)].addr); + outcode(ATEXT, &a); } break; case 43: -#line 198 "a.y" - { - settext((yyvsp[(1) - (6)].addr).sym); - (yyval.addr2).from = (yyvsp[(1) - (6)].addr); - (yyval.addr2).from.scale = (yyvsp[(3) - (6)].lval); - (yyval.addr2).to = (yyvsp[(6) - (6)].addr); +#line 200 "a.y" + { + Addr2 a; + settext((yyvsp[(2) - (7)].addr).sym); + a.from = (yyvsp[(2) - (7)].addr); + a.to = (yyvsp[(7) - (7)].addr); + outcode(ATEXT, &a); + if(pass > 1) { + lastpc->from3.type = TYPE_CONST; + lastpc->from3.offset = (yyvsp[(4) - (7)].lval); + } } break; case 44: -#line 207 "a.y" +#line 214 "a.y" + { + Addr2 a; + settext((yyvsp[(2) - (4)].addr).sym); + a.from = (yyvsp[(2) - (4)].addr); + a.to = (yyvsp[(4) - (4)].addr); + outcode(AGLOBL, &a); + } + break; + + case 45: +#line 222 "a.y" + { + Addr2 a; + settext((yyvsp[(2) - (6)].addr).sym); + a.from = (yyvsp[(2) - (6)].addr); + a.to = (yyvsp[(6) - (6)].addr); + outcode(AGLOBL, &a); + if(pass > 1) { + lastpc->from3.type = TYPE_CONST; + lastpc->from3.offset = (yyvsp[(4) - (6)].lval); + } + } + break; + + case 46: +#line 236 "a.y" { (yyval.addr2).from = nullgen; (yyval.addr2).to = (yyvsp[(2) - (2)].addr); } break; - case 45: -#line 212 "a.y" + case 47: +#line 241 "a.y" { (yyval.addr2).from = nullgen; (yyval.addr2).to = (yyvsp[(1) - (1)].addr); } break; - case 46: -#line 217 "a.y" + case 48: +#line 246 "a.y" { (yyval.addr2).from = nullgen; (yyval.addr2).to = (yyvsp[(2) - (2)].addr); @@ -1943,16 +1970,16 @@ yyreduce: } break; - case 49: -#line 229 "a.y" + case 51: +#line 258 "a.y" { (yyval.addr2).from = (yyvsp[(1) - (3)].addr); (yyval.addr2).to = (yyvsp[(3) - (3)].addr); } break; - case 50: -#line 234 "a.y" + case 52: +#line 263 "a.y" { (yyval.addr2).from = (yyvsp[(1) - (5)].addr); (yyval.addr2).to = (yyvsp[(3) - (5)].addr); @@ -1962,16 +1989,16 @@ yyreduce: } break; - case 51: -#line 244 "a.y" + case 53: +#line 273 "a.y" { (yyval.addr2).from = (yyvsp[(1) - (3)].addr); (yyval.addr2).to = (yyvsp[(3) - (3)].addr); } break; - case 52: -#line 249 "a.y" + case 54: +#line 278 "a.y" { (yyval.addr2).from = (yyvsp[(1) - (5)].addr); (yyval.addr2).to = (yyvsp[(3) - (5)].addr); @@ -1981,49 +2008,32 @@ yyreduce: } break; - case 53: -#line 259 "a.y" + case 55: +#line 288 "a.y" { (yyval.addr2).from = (yyvsp[(1) - (2)].addr); (yyval.addr2).to = nullgen; } break; - case 54: -#line 264 "a.y" + case 56: +#line 293 "a.y" { (yyval.addr2).from = (yyvsp[(1) - (1)].addr); (yyval.addr2).to = nullgen; } break; - case 55: -#line 269 "a.y" - { - (yyval.addr2).from = (yyvsp[(1) - (3)].addr); - (yyval.addr2).to = (yyvsp[(3) - (3)].addr); - } - break; - - case 56: -#line 276 "a.y" + case 57: +#line 298 "a.y" { (yyval.addr2).from = (yyvsp[(1) - (3)].addr); (yyval.addr2).to = (yyvsp[(3) - (3)].addr); } break; - case 57: -#line 281 "a.y" - { - (yyval.addr2).from = (yyvsp[(1) - (5)].addr); - (yyval.addr2).from.scale = (yyvsp[(3) - (5)].lval); - (yyval.addr2).to = (yyvsp[(5) - (5)].addr); - } - break; - case 58: -#line 289 "a.y" +#line 305 "a.y" { (yyval.addr2).from = (yyvsp[(1) - (5)].addr); (yyval.addr2).to = (yyvsp[(3) - (5)].addr); @@ -2032,7 +2042,7 @@ yyreduce: break; case 59: -#line 297 "a.y" +#line 313 "a.y" { (yyval.addr2).from = (yyvsp[(3) - (5)].addr); (yyval.addr2).to = (yyvsp[(5) - (5)].addr); @@ -2043,7 +2053,7 @@ yyreduce: break; case 60: -#line 307 "a.y" +#line 323 "a.y" { if((yyvsp[(1) - (3)].addr).type != TYPE_CONST || (yyvsp[(3) - (3)].addr).type != TYPE_CONST) yyerror("arguments to PCDATA must be integer constants"); @@ -2053,7 +2063,7 @@ yyreduce: break; case 61: -#line 316 "a.y" +#line 332 "a.y" { if((yyvsp[(1) - (3)].addr).type != TYPE_CONST) yyerror("index for FUNCDATA must be integer constant"); @@ -2065,21 +2075,21 @@ yyreduce: break; case 66: -#line 333 "a.y" +#line 349 "a.y" { (yyval.addr) = (yyvsp[(2) - (2)].addr); } break; case 67: -#line 337 "a.y" +#line 353 "a.y" { (yyval.addr) = (yyvsp[(2) - (2)].addr); } break; case 73: -#line 350 "a.y" +#line 366 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_BRANCH; @@ -2088,7 +2098,7 @@ yyreduce: break; case 74: -#line 356 "a.y" +#line 372 "a.y" { (yyvsp[(1) - (2)].sym) = labellookup((yyvsp[(1) - (2)].sym)); (yyval.addr) = nullgen; @@ -2100,7 +2110,7 @@ yyreduce: break; case 75: -#line 367 "a.y" +#line 383 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2109,7 +2119,7 @@ yyreduce: break; case 76: -#line 373 "a.y" +#line 389 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2118,7 +2128,7 @@ yyreduce: break; case 77: -#line 379 "a.y" +#line 395 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2127,7 +2137,7 @@ yyreduce: break; case 78: -#line 385 "a.y" +#line 401 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2136,7 +2146,7 @@ yyreduce: break; case 79: -#line 391 "a.y" +#line 407 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2145,7 +2155,7 @@ yyreduce: break; case 80: -#line 397 "a.y" +#line 413 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2154,7 +2164,7 @@ yyreduce: break; case 81: -#line 405 "a.y" +#line 421 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_CONST; @@ -2163,7 +2173,7 @@ yyreduce: break; case 82: -#line 411 "a.y" +#line 427 "a.y" { (yyval.addr) = (yyvsp[(2) - (2)].addr); (yyval.addr).type = TYPE_ADDR; @@ -2176,7 +2186,7 @@ yyreduce: break; case 83: -#line 421 "a.y" +#line 437 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_SCONST; @@ -2185,7 +2195,7 @@ yyreduce: break; case 84: -#line 427 "a.y" +#line 443 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_FCONST; @@ -2194,7 +2204,7 @@ yyreduce: break; case 85: -#line 433 "a.y" +#line 449 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_FCONST; @@ -2203,7 +2213,7 @@ yyreduce: break; case 86: -#line 439 "a.y" +#line 455 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_FCONST; @@ -2212,7 +2222,7 @@ yyreduce: break; case 87: -#line 445 "a.y" +#line 461 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_FCONST; @@ -2221,7 +2231,7 @@ yyreduce: break; case 88: -#line 453 "a.y" +#line 469 "a.y" { (yyval.addr).type = TYPE_TEXTSIZE; (yyval.addr).offset = (yyvsp[(1) - (1)].lval); @@ -2230,7 +2240,7 @@ yyreduce: break; case 89: -#line 459 "a.y" +#line 475 "a.y" { (yyval.addr).type = TYPE_TEXTSIZE; (yyval.addr).offset = -(yyvsp[(2) - (2)].lval); @@ -2239,7 +2249,7 @@ yyreduce: break; case 90: -#line 465 "a.y" +#line 481 "a.y" { (yyval.addr).type = TYPE_TEXTSIZE; (yyval.addr).offset = (yyvsp[(1) - (3)].lval); @@ -2248,7 +2258,7 @@ yyreduce: break; case 91: -#line 471 "a.y" +#line 487 "a.y" { (yyval.addr).type = TYPE_TEXTSIZE; (yyval.addr).offset = -(yyvsp[(2) - (4)].lval); @@ -2257,7 +2267,7 @@ yyreduce: break; case 94: -#line 483 "a.y" +#line 499 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2267,7 +2277,7 @@ yyreduce: break; case 95: -#line 490 "a.y" +#line 506 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2277,7 +2287,7 @@ yyreduce: break; case 96: -#line 497 "a.y" +#line 513 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2287,7 +2297,7 @@ yyreduce: break; case 97: -#line 504 "a.y" +#line 520 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2300,7 +2310,7 @@ yyreduce: break; case 98: -#line 514 "a.y" +#line 530 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2313,7 +2323,7 @@ yyreduce: break; case 99: -#line 524 "a.y" +#line 540 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2326,7 +2336,7 @@ yyreduce: break; case 100: -#line 534 "a.y" +#line 550 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2335,7 +2345,7 @@ yyreduce: break; case 101: -#line 540 "a.y" +#line 556 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2344,7 +2354,7 @@ yyreduce: break; case 102: -#line 546 "a.y" +#line 562 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2354,7 +2364,7 @@ yyreduce: break; case 103: -#line 553 "a.y" +#line 569 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2366,7 +2376,7 @@ yyreduce: break; case 104: -#line 562 "a.y" +#line 578 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2378,14 +2388,14 @@ yyreduce: break; case 105: -#line 573 "a.y" +#line 589 "a.y" { (yyval.addr) = (yyvsp[(1) - (1)].addr); } break; case 106: -#line 577 "a.y" +#line 593 "a.y" { (yyval.addr) = (yyvsp[(1) - (6)].addr); (yyval.addr).index = (yyvsp[(3) - (6)].lval); @@ -2395,7 +2405,7 @@ yyreduce: break; case 107: -#line 586 "a.y" +#line 602 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2406,7 +2416,7 @@ yyreduce: break; case 108: -#line 594 "a.y" +#line 610 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -2417,133 +2427,133 @@ yyreduce: break; case 109: -#line 603 "a.y" +#line 619 "a.y" { (yyval.lval) = 0; } break; case 110: -#line 607 "a.y" +#line 623 "a.y" { (yyval.lval) = (yyvsp[(2) - (2)].lval); } break; case 111: -#line 611 "a.y" +#line 627 "a.y" { (yyval.lval) = -(yyvsp[(2) - (2)].lval); } break; case 113: -#line 618 "a.y" +#line 634 "a.y" { (yyval.lval) = NAME_AUTO; } break; case 116: -#line 626 "a.y" +#line 642 "a.y" { (yyval.lval) = (yyvsp[(1) - (1)].sym)->value; } break; case 117: -#line 630 "a.y" +#line 646 "a.y" { (yyval.lval) = -(yyvsp[(2) - (2)].lval); } break; case 118: -#line 634 "a.y" +#line 650 "a.y" { (yyval.lval) = (yyvsp[(2) - (2)].lval); } break; case 119: -#line 638 "a.y" +#line 654 "a.y" { (yyval.lval) = ~(yyvsp[(2) - (2)].lval); } break; case 120: -#line 642 "a.y" +#line 658 "a.y" { (yyval.lval) = (yyvsp[(2) - (3)].lval); } break; case 122: -#line 649 "a.y" +#line 665 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) + (yyvsp[(3) - (3)].lval); } break; case 123: -#line 653 "a.y" +#line 669 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) - (yyvsp[(3) - (3)].lval); } break; case 124: -#line 657 "a.y" +#line 673 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) * (yyvsp[(3) - (3)].lval); } break; case 125: -#line 661 "a.y" +#line 677 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) / (yyvsp[(3) - (3)].lval); } break; case 126: -#line 665 "a.y" +#line 681 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) % (yyvsp[(3) - (3)].lval); } break; case 127: -#line 669 "a.y" +#line 685 "a.y" { (yyval.lval) = (yyvsp[(1) - (4)].lval) << (yyvsp[(4) - (4)].lval); } break; case 128: -#line 673 "a.y" +#line 689 "a.y" { (yyval.lval) = (yyvsp[(1) - (4)].lval) >> (yyvsp[(4) - (4)].lval); } break; case 129: -#line 677 "a.y" +#line 693 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) & (yyvsp[(3) - (3)].lval); } break; case 130: -#line 681 "a.y" +#line 697 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) ^ (yyvsp[(3) - (3)].lval); } break; case 131: -#line 685 "a.y" +#line 701 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) | (yyvsp[(3) - (3)].lval); } @@ -2551,7 +2561,7 @@ yyreduce: /* Line 1267 of yacc.c. */ -#line 2555 "y.tab.c" +#line 2565 "y.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); diff --git a/src/cmd/8g/gg.h b/src/cmd/8g/gg.h index 9fe2c498fa..d9cc2e562f 100644 --- a/src/cmd/8g/gg.h +++ b/src/cmd/8g/gg.h @@ -9,8 +9,6 @@ #include "../gc/go.h" #include "../8l/8.out.h" -#define TEXTFLAG from.scale - // foptoas flags enum { diff --git a/src/cmd/8g/gsubr.c b/src/cmd/8g/gsubr.c index b55d9d16c6..6f3a2c6906 100644 --- a/src/cmd/8g/gsubr.c +++ b/src/cmd/8g/gsubr.c @@ -200,9 +200,9 @@ ggloblnod(Node *nam) p->to.type = TYPE_CONST; p->to.offset = nam->type->width; if(nam->readonly) - p->from.scale = RODATA; + p->from3.offset = RODATA; if(nam->type != T && !haspointers(nam->type)) - p->from.scale |= NOPTR; + p->from3.offset |= NOPTR; } void @@ -218,7 +218,7 @@ ggloblsym(Sym *s, int32 width, int8 flags) p->to.type = TYPE_CONST; p->to.index = REG_NONE; p->to.offset = width; - p->from.scale = flags; + p->from3.offset = flags; } void diff --git a/src/cmd/9a/a.h b/src/cmd/9a/a.h index 7a01fc9479..a2280b1e98 100644 --- a/src/cmd/9a/a.h +++ b/src/cmd/9a/a.h @@ -126,6 +126,7 @@ EXTERN int32 thunk; EXTERN Biobuf obuf; EXTERN Link* ctxt; EXTERN Biobuf bstdout; +EXTERN Prog* lastpc; void* alloc(int32); void* allocn(void*, int32, int32); diff --git a/src/cmd/9a/a.y b/src/cmd/9a/a.y index 5d817922a3..8e0b3956ac 100644 --- a/src/cmd/9a/a.y +++ b/src/cmd/9a/a.y @@ -621,7 +621,11 @@ inst: | LTEXT name ',' con ',' '$' textsize { settext($2.sym); - outcode($1, &$2, $4, &$7); + outcode($1, &$2, 0, &$7); + if(pass > 1) { + lastpc->from3.type = TYPE_CONST; + lastpc->from3.offset = $4; + } } /* * GLOBL @@ -634,7 +638,11 @@ inst: | LGLOBL name ',' con ',' imm { settext($2.sym); - outcode($1, &$2, $4, &$6); + outcode($1, &$2, 0, &$6); + if(pass > 1) { + lastpc->from3.type = TYPE_CONST; + lastpc->from3.offset = $4; + } } /* diff --git a/src/cmd/9a/lex.c b/src/cmd/9a/lex.c index a8bf520219..9b343f0d69 100644 --- a/src/cmd/9a/lex.c +++ b/src/cmd/9a/lex.c @@ -650,8 +650,6 @@ cclean(void) outcode(AEND, &nullgen, 0, &nullgen); } -static Prog *lastpc; - void outcode(int a, Addr *g1, int reg, Addr *g2) { diff --git a/src/cmd/9a/y.tab.c b/src/cmd/9a/y.tab.c index 4207cdadbd..ea8fdfd929 100644 --- a/src/cmd/9a/y.tab.c +++ b/src/cmd/9a/y.tab.c @@ -648,14 +648,14 @@ static const yytype_uint16 yyrline[] = 428, 432, 436, 443, 447, 451, 455, 459, 463, 470, 474, 478, 482, 489, 493, 497, 501, 508, 512, 520, 524, 528, 532, 536, 540, 544, 551, 555, 559, 563, - 567, 571, 578, 582, 589, 598, 609, 616, 621, 629, - 634, 643, 647, 651, 658, 664, 670, 681, 689, 690, - 693, 701, 709, 717, 725, 731, 739, 742, 750, 756, - 764, 770, 778, 786, 807, 813, 819, 825, 833, 838, - 846, 852, 859, 867, 868, 876, 883, 893, 894, 903, - 911, 919, 928, 929, 932, 935, 939, 945, 946, 947, - 950, 951, 955, 959, 963, 967, 973, 974, 978, 982, - 986, 990, 994, 998, 1002, 1006, 1010 + 567, 571, 578, 582, 589, 598, 609, 616, 621, 633, + 638, 651, 655, 659, 666, 672, 678, 689, 697, 698, + 701, 709, 717, 725, 733, 739, 747, 750, 758, 764, + 772, 778, 786, 794, 815, 821, 827, 833, 841, 846, + 854, 860, 867, 875, 876, 884, 891, 901, 902, 911, + 919, 927, 936, 937, 940, 943, 947, 953, 954, 955, + 958, 959, 963, 967, 971, 975, 981, 982, 986, 990, + 994, 998, 1002, 1006, 1010, 1014, 1018 }; #endif @@ -2737,12 +2737,16 @@ yyreduce: #line 622 "a.y" { settext((yyvsp[(2) - (7)].addr).sym); - outcode((yyvsp[(1) - (7)].lval), &(yyvsp[(2) - (7)].addr), (yyvsp[(4) - (7)].lval), &(yyvsp[(7) - (7)].addr)); + outcode((yyvsp[(1) - (7)].lval), &(yyvsp[(2) - (7)].addr), 0, &(yyvsp[(7) - (7)].addr)); + if(pass > 1) { + lastpc->from3.type = TYPE_CONST; + lastpc->from3.offset = (yyvsp[(4) - (7)].lval); + } } break; case 119: -#line 630 "a.y" +#line 634 "a.y" { settext((yyvsp[(2) - (4)].addr).sym); outcode((yyvsp[(1) - (4)].lval), &(yyvsp[(2) - (4)].addr), 0, &(yyvsp[(4) - (4)].addr)); @@ -2750,43 +2754,47 @@ yyreduce: break; case 120: -#line 635 "a.y" +#line 639 "a.y" { settext((yyvsp[(2) - (6)].addr).sym); - outcode((yyvsp[(1) - (6)].lval), &(yyvsp[(2) - (6)].addr), (yyvsp[(4) - (6)].lval), &(yyvsp[(6) - (6)].addr)); + outcode((yyvsp[(1) - (6)].lval), &(yyvsp[(2) - (6)].addr), 0, &(yyvsp[(6) - (6)].addr)); + if(pass > 1) { + lastpc->from3.type = TYPE_CONST; + lastpc->from3.offset = (yyvsp[(4) - (6)].lval); + } } break; case 121: -#line 644 "a.y" +#line 652 "a.y" { outcode((yyvsp[(1) - (6)].lval), &(yyvsp[(2) - (6)].addr), (yyvsp[(4) - (6)].lval), &(yyvsp[(6) - (6)].addr)); } break; case 122: -#line 648 "a.y" +#line 656 "a.y" { outcode((yyvsp[(1) - (6)].lval), &(yyvsp[(2) - (6)].addr), (yyvsp[(4) - (6)].lval), &(yyvsp[(6) - (6)].addr)); } break; case 123: -#line 652 "a.y" +#line 660 "a.y" { outcode((yyvsp[(1) - (6)].lval), &(yyvsp[(2) - (6)].addr), (yyvsp[(4) - (6)].lval), &(yyvsp[(6) - (6)].addr)); } break; case 124: -#line 659 "a.y" +#line 667 "a.y" { outcode((yyvsp[(1) - (2)].lval), &nullgen, 0, &nullgen); } break; case 125: -#line 665 "a.y" +#line 673 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_BRANCH; @@ -2795,7 +2803,7 @@ yyreduce: break; case 126: -#line 671 "a.y" +#line 679 "a.y" { (yyvsp[(1) - (2)].sym) = labellookup((yyvsp[(1) - (2)].sym)); (yyval.addr) = nullgen; @@ -2807,7 +2815,7 @@ yyreduce: break; case 127: -#line 682 "a.y" +#line 690 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2816,7 +2824,7 @@ yyreduce: break; case 130: -#line 694 "a.y" +#line 702 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2825,7 +2833,7 @@ yyreduce: break; case 131: -#line 702 "a.y" +#line 710 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2834,7 +2842,7 @@ yyreduce: break; case 132: -#line 710 "a.y" +#line 718 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2843,7 +2851,7 @@ yyreduce: break; case 133: -#line 718 "a.y" +#line 726 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2852,7 +2860,7 @@ yyreduce: break; case 134: -#line 726 "a.y" +#line 734 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2861,7 +2869,7 @@ yyreduce: break; case 135: -#line 732 "a.y" +#line 740 "a.y" { if((yyvsp[(3) - (4)].lval) < 0 || (yyvsp[(3) - (4)].lval) >= 1024) yyerror("SPR/DCR out of range"); @@ -2872,7 +2880,7 @@ yyreduce: break; case 137: -#line 743 "a.y" +#line 751 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2881,7 +2889,7 @@ yyreduce: break; case 138: -#line 751 "a.y" +#line 759 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2890,7 +2898,7 @@ yyreduce: break; case 139: -#line 757 "a.y" +#line 765 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2899,7 +2907,7 @@ yyreduce: break; case 140: -#line 765 "a.y" +#line 773 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2908,7 +2916,7 @@ yyreduce: break; case 141: -#line 771 "a.y" +#line 779 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2917,7 +2925,7 @@ yyreduce: break; case 142: -#line 779 "a.y" +#line 787 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_REG; @@ -2926,7 +2934,7 @@ yyreduce: break; case 143: -#line 787 "a.y" +#line 795 "a.y" { int mb, me; uint32 v; @@ -2948,7 +2956,7 @@ yyreduce: break; case 144: -#line 808 "a.y" +#line 816 "a.y" { (yyval.addr).type = TYPE_TEXTSIZE; (yyval.addr).offset = (yyvsp[(1) - (1)].lval); @@ -2957,7 +2965,7 @@ yyreduce: break; case 145: -#line 814 "a.y" +#line 822 "a.y" { (yyval.addr).type = TYPE_TEXTSIZE; (yyval.addr).offset = -(yyvsp[(2) - (2)].lval); @@ -2966,7 +2974,7 @@ yyreduce: break; case 146: -#line 820 "a.y" +#line 828 "a.y" { (yyval.addr).type = TYPE_TEXTSIZE; (yyval.addr).offset = (yyvsp[(1) - (3)].lval); @@ -2975,7 +2983,7 @@ yyreduce: break; case 147: -#line 826 "a.y" +#line 834 "a.y" { (yyval.addr).type = TYPE_TEXTSIZE; (yyval.addr).offset = -(yyvsp[(2) - (4)].lval); @@ -2984,7 +2992,7 @@ yyreduce: break; case 148: -#line 834 "a.y" +#line 842 "a.y" { (yyval.addr) = (yyvsp[(2) - (2)].addr); (yyval.addr).type = TYPE_CONST; @@ -2992,7 +3000,7 @@ yyreduce: break; case 149: -#line 839 "a.y" +#line 847 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_SCONST; @@ -3001,7 +3009,7 @@ yyreduce: break; case 150: -#line 847 "a.y" +#line 855 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_FCONST; @@ -3010,7 +3018,7 @@ yyreduce: break; case 151: -#line 853 "a.y" +#line 861 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_FCONST; @@ -3019,7 +3027,7 @@ yyreduce: break; case 152: -#line 860 "a.y" +#line 868 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_CONST; @@ -3028,7 +3036,7 @@ yyreduce: break; case 154: -#line 869 "a.y" +#line 877 "a.y" { if((yyval.lval) < 0 || (yyval.lval) >= NREG) print("register value out of range\n"); @@ -3037,7 +3045,7 @@ yyreduce: break; case 155: -#line 877 "a.y" +#line 885 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -3047,7 +3055,7 @@ yyreduce: break; case 156: -#line 884 "a.y" +#line 892 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -3058,7 +3066,7 @@ yyreduce: break; case 158: -#line 895 "a.y" +#line 903 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -3068,7 +3076,7 @@ yyreduce: break; case 159: -#line 904 "a.y" +#line 912 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -3079,7 +3087,7 @@ yyreduce: break; case 160: -#line 912 "a.y" +#line 920 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -3090,7 +3098,7 @@ yyreduce: break; case 161: -#line 920 "a.y" +#line 928 "a.y" { (yyval.addr) = nullgen; (yyval.addr).type = TYPE_MEM; @@ -3101,126 +3109,126 @@ yyreduce: break; case 164: -#line 932 "a.y" +#line 940 "a.y" { (yyval.lval) = 0; } break; case 165: -#line 936 "a.y" +#line 944 "a.y" { (yyval.lval) = (yyvsp[(2) - (2)].lval); } break; case 166: -#line 940 "a.y" +#line 948 "a.y" { (yyval.lval) = -(yyvsp[(2) - (2)].lval); } break; case 171: -#line 952 "a.y" +#line 960 "a.y" { (yyval.lval) = (yyvsp[(1) - (1)].sym)->value; } break; case 172: -#line 956 "a.y" +#line 964 "a.y" { (yyval.lval) = -(yyvsp[(2) - (2)].lval); } break; case 173: -#line 960 "a.y" +#line 968 "a.y" { (yyval.lval) = (yyvsp[(2) - (2)].lval); } break; case 174: -#line 964 "a.y" +#line 972 "a.y" { (yyval.lval) = ~(yyvsp[(2) - (2)].lval); } break; case 175: -#line 968 "a.y" +#line 976 "a.y" { (yyval.lval) = (yyvsp[(2) - (3)].lval); } break; case 177: -#line 975 "a.y" +#line 983 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) + (yyvsp[(3) - (3)].lval); } break; case 178: -#line 979 "a.y" +#line 987 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) - (yyvsp[(3) - (3)].lval); } break; case 179: -#line 983 "a.y" +#line 991 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) * (yyvsp[(3) - (3)].lval); } break; case 180: -#line 987 "a.y" +#line 995 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) / (yyvsp[(3) - (3)].lval); } break; case 181: -#line 991 "a.y" +#line 999 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) % (yyvsp[(3) - (3)].lval); } break; case 182: -#line 995 "a.y" +#line 1003 "a.y" { (yyval.lval) = (yyvsp[(1) - (4)].lval) << (yyvsp[(4) - (4)].lval); } break; case 183: -#line 999 "a.y" +#line 1007 "a.y" { (yyval.lval) = (yyvsp[(1) - (4)].lval) >> (yyvsp[(4) - (4)].lval); } break; case 184: -#line 1003 "a.y" +#line 1011 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) & (yyvsp[(3) - (3)].lval); } break; case 185: -#line 1007 "a.y" +#line 1015 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) ^ (yyvsp[(3) - (3)].lval); } break; case 186: -#line 1011 "a.y" +#line 1019 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) | (yyvsp[(3) - (3)].lval); } @@ -3228,7 +3236,7 @@ yyreduce: /* Line 1267 of yacc.c. */ -#line 3232 "y.tab.c" +#line 3240 "y.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); diff --git a/src/cmd/9g/gg.h b/src/cmd/9g/gg.h index ea9d52db8e..983a22a270 100644 --- a/src/cmd/9g/gg.h +++ b/src/cmd/9g/gg.h @@ -12,8 +12,6 @@ // TODO(minux): Remove when no longer used. #define noimpl sysfatal("%s not implemented (%s:%d).", __func__, __FILE__, __LINE__) -#define TEXTFLAG reg - EXTERN int32 dynloc; EXTERN uchar reg[NREG+NFREG]; EXTERN int32 pcloc; // instruction counter diff --git a/src/cmd/9g/gsubr.c b/src/cmd/9g/gsubr.c index bafc26c03e..5e8e21a9c7 100644 --- a/src/cmd/9g/gsubr.c +++ b/src/cmd/9g/gsubr.c @@ -200,9 +200,9 @@ ggloblnod(Node *nam) p->to.type = TYPE_CONST; p->to.offset = nam->type->width; if(nam->readonly) - p->reg = RODATA; + p->from3.offset = RODATA; if(nam->type != T && !haspointers(nam->type)) - p->reg |= NOPTR; + p->from3.offset |= NOPTR; } void @@ -228,7 +228,7 @@ ggloblsym(Sym *s, int32 width, int8 flags) p->to.type = TYPE_CONST; p->to.name = NAME_NONE; p->to.offset = width; - p->reg = flags; + p->from3.offset = flags; } int diff --git a/src/cmd/gc/pgen.c b/src/cmd/gc/pgen.c index 99644d201f..183bd71426 100644 --- a/src/cmd/gc/pgen.c +++ b/src/cmd/gc/pgen.c @@ -231,20 +231,20 @@ compile(Node *fn) nodconst(&nod1, types[TINT32], 0); ptxt = arch.gins(arch.ATEXT, isblank(curfn->nname) ? N : curfn->nname, &nod1); if(fn->dupok) - arch.thelinkarch->settextflag(ptxt, arch.thelinkarch->textflag(ptxt) | DUPOK); + ptxt->from3.offset |= DUPOK; if(fn->wrapper) - arch.thelinkarch->settextflag(ptxt, arch.thelinkarch->textflag(ptxt) | WRAPPER); + ptxt->from3.offset |= WRAPPER; if(fn->needctxt) - arch.thelinkarch->settextflag(ptxt, arch.thelinkarch->textflag(ptxt) | NEEDCTXT); + ptxt->from3.offset |= NEEDCTXT; if(fn->nosplit) - arch.thelinkarch->settextflag(ptxt, arch.thelinkarch->textflag(ptxt) | NOSPLIT); + ptxt->from3.offset |= NOSPLIT; // Clumsy but important. // See test/recover.go for test cases and src/reflect/value.go // for the actual functions being considered. if(myimportpath != nil && strcmp(myimportpath, "reflect") == 0) { if(strcmp(curfn->nname->sym->name, "callReflect") == 0 || strcmp(curfn->nname->sym->name, "callMethod") == 0) - arch.thelinkarch->settextflag(ptxt, arch.thelinkarch->textflag(ptxt) | WRAPPER); + ptxt->from3.offset |= WRAPPER; } arch.afunclit(&ptxt->from, curfn->nname); diff --git a/src/liblink/asm5.c b/src/liblink/asm5.c index 38a7399725..8723553fa4 100644 --- a/src/liblink/asm5.c +++ b/src/liblink/asm5.c @@ -72,7 +72,6 @@ static Optab optab[] = /* struct Optab: OPCODE, from, prog->reg, to, type,size,param,flag */ { ATEXT, C_ADDR, C_NONE, C_TEXTSIZE, 0, 0, 0 }, - { ATEXT, C_ADDR, C_REG, C_TEXTSIZE, 0, 0, 0 }, { AADD, C_REG, C_REG, C_REG, 1, 4, 0 }, { AADD, C_REG, C_NONE, C_REG, 1, 4, 0 }, diff --git a/src/liblink/asm9.c b/src/liblink/asm9.c index 9101c56c51..bc3174d08f 100644 --- a/src/liblink/asm9.c +++ b/src/liblink/asm9.c @@ -60,13 +60,9 @@ struct Optab static Optab optab[] = { { ATEXT, C_LEXT, C_NONE, C_NONE, C_TEXTSIZE, 0, 0, 0 }, - { ATEXT, C_LEXT, C_REG, C_NONE, C_TEXTSIZE, 0, 0, 0 }, { ATEXT, C_LEXT, C_NONE, C_LCON, C_TEXTSIZE, 0, 0, 0 }, - { ATEXT, C_LEXT, C_REG, C_LCON, C_TEXTSIZE, 0, 0, 0 }, { ATEXT, C_ADDR, C_NONE, C_NONE, C_TEXTSIZE, 0, 0, 0 }, - { ATEXT, C_ADDR, C_REG, C_NONE, C_TEXTSIZE, 0, 0, 0 }, { ATEXT, C_ADDR, C_NONE, C_LCON, C_TEXTSIZE, 0, 0, 0 }, - { ATEXT, C_ADDR, C_REG, C_LCON, C_TEXTSIZE, 0, 0, 0 }, /* move register */ { AMOVD, C_REG, C_NONE, C_NONE, C_REG, 1, 4, 0 }, diff --git a/src/liblink/list5.c b/src/liblink/list5.c index d04c8c27a8..a687400b08 100644 --- a/src/liblink/list5.c +++ b/src/liblink/list5.c @@ -112,7 +112,7 @@ Pconv(Fmt *fp) sprint(str, "%.5lld (%L) %A %D/%d,%D", p->pc, p->lineno, a, &p->from, p->reg, &p->to); else if(p->as == ATEXT) - sprint(str, "%.5lld (%L) %A %D,%d,%D", p->pc, p->lineno, a, &p->from, p->reg, &p->to); + sprint(str, "%.5lld (%L) %A %D,%lld,%D", p->pc, p->lineno, a, &p->from, p->from3.offset, &p->to); else if(p->reg == 0) sprint(str, "%.5lld (%L) %A%s %D,%D", p->pc, p->lineno, a, sc, &p->from, &p->to); diff --git a/src/liblink/list6.c b/src/liblink/list6.c index 2cb1777ba4..c3f13e921f 100644 --- a/src/liblink/list6.c +++ b/src/liblink/list6.c @@ -90,9 +90,9 @@ Pconv(Fmt *fp) break; case ATEXT: - if(p->from.scale) { - sprint(str, "%.5lld (%L) %A %D,%d,%D", - p->pc, p->lineno, p->as, &p->from, p->from.scale, &p->to); + if(p->from3.offset) { + sprint(str, "%.5lld (%L) %A %D,%lld,%D", + p->pc, p->lineno, p->as, &p->from, p->from3.offset, &p->to); break; } sprint(str, "%.5lld (%L) %A %D,%D", diff --git a/src/liblink/list8.c b/src/liblink/list8.c index 33c0791a19..c8a4ca7e8c 100644 --- a/src/liblink/list8.c +++ b/src/liblink/list8.c @@ -77,9 +77,9 @@ Pconv(Fmt *fp) break; case ATEXT: - if(p->from.scale) { - sprint(str, "%.5lld (%L) %A %D,%d,%D", - p->pc, p->lineno, p->as, &p->from, p->from.scale, &p->to); + if(p->from3.offset) { + sprint(str, "%.5lld (%L) %A %D,%lld,%D", + p->pc, p->lineno, p->as, &p->from, p->from3.offset, &p->to); break; } sprint(str, "%.5lld (%L) %A %D,%D", diff --git a/src/liblink/list9.c b/src/liblink/list9.c index 149d713fe8..58eccb265d 100644 --- a/src/liblink/list9.c +++ b/src/liblink/list9.c @@ -95,14 +95,9 @@ Pconv(Fmt *fp) str[0] = 0; if(a == ADATA || a == AINIT || a == ADYNT) sprint(str, "%.5lld (%L) %A %D/%d,%D", p->pc, p->lineno, a, &p->from, p->reg, &p->to); - else if(a == ATEXT) { - if(p->reg != 0) - sprint(str, "%.5lld (%L) %A %D,%d,%D", p->pc, p->lineno, a, &p->from, p->reg, &p->to); - else - sprint(str, "%.5lld (%L) %A %D,%D", p->pc, p->lineno, a, &p->from, &p->to); - } else if(a == AGLOBL) { - if(p->reg != 0) - sprint(str, "%.5lld (%L) %A %D,%d,%D", p->pc, p->lineno, a, &p->from, p->reg, &p->to); + else if(a == ATEXT || a == AGLOBL) { + if(p->from3.offset != 0) + sprint(str, "%.5lld (%L) %A %D,%lld,%D", p->pc, p->lineno, a, &p->from, p->from3.offset, &p->to); else sprint(str, "%.5lld (%L) %A %D,%D", p->pc, p->lineno, a, &p->from, &p->to); } else { diff --git a/src/liblink/obj5.c b/src/liblink/obj5.c index 0f2e9fa4f2..8d20173912 100644 --- a/src/liblink/obj5.c +++ b/src/liblink/obj5.c @@ -58,18 +58,6 @@ datasize(Prog *p) return p->reg; } -static int -textflag(Prog *p) -{ - return p->reg; -} - -static void -settextflag(Prog *p, int f) -{ - p->reg = f; -} - static void progedit(Link *ctxt, Prog *p) { @@ -268,7 +256,7 @@ preprocess(Link *ctxt, LSym *cursym) cursym->args = p->to.u.argsize; if(ctxt->debugzerostack) { - if(autoffset && !(p->reg&NOSPLIT)) { + if(autoffset && !(p->from3.offset&NOSPLIT)) { // MOVW $4(R13), R1 p = appendp(ctxt, p); p->as = AMOVW; @@ -421,8 +409,8 @@ preprocess(Link *ctxt, LSym *cursym) break; } - if(!(p->reg & NOSPLIT)) - p = stacksplit(ctxt, p, autosize, !(cursym->text->reg&NEEDCTXT)); // emit split check + if(!(p->from3.offset & NOSPLIT)) + p = stacksplit(ctxt, p, autosize, !(cursym->text->from3.offset&NEEDCTXT)); // emit split check // MOVW.W R14,$-autosize(SP) p = appendp(ctxt, p); @@ -435,7 +423,7 @@ preprocess(Link *ctxt, LSym *cursym) p->to.reg = REGSP; p->spadj = autosize; - if(cursym->text->reg & WRAPPER) { + if(cursym->text->from3.offset & WRAPPER) { // if(g->panic != nil && g->panic->argp == FP) g->panic->argp = bottom-of-frame // // MOVW g_panic(g), R1 @@ -1048,8 +1036,6 @@ LinkArch linkarm = { .isdata = isdata, .prg = prg, .progedit = progedit, - .settextflag = settextflag, - .textflag = textflag, .minlc = 4, .ptrsize = 4, diff --git a/src/liblink/obj6.c b/src/liblink/obj6.c index 2b51061a0b..12e0606453 100644 --- a/src/liblink/obj6.c +++ b/src/liblink/obj6.c @@ -78,18 +78,6 @@ datasize(Prog *p) return p->from.scale; } -static int -textflag(Prog *p) -{ - return p->from.scale; -} - -static void -settextflag(Prog *p, int f) -{ - p->from.scale = f; -} - static void nacladdr(Link*, Prog*, Addr*); static int @@ -404,24 +392,24 @@ preprocess(Link *ctxt, LSym *cursym) cursym->args = textarg; cursym->locals = p->to.offset; - if(autoffset < StackSmall && !(p->from.scale & NOSPLIT)) { + if(autoffset < StackSmall && !(p->from3.offset & NOSPLIT)) { for(q = p; q != nil; q = q->link) { if(q->as == ACALL) goto noleaf; if((q->as == ADUFFCOPY || q->as == ADUFFZERO) && autoffset >= StackSmall - 8) goto noleaf; } - p->from.scale |= NOSPLIT; + p->from3.offset |= NOSPLIT; noleaf:; } q = nil; - if(!(p->from.scale & NOSPLIT) || (p->from.scale & WRAPPER)) { + if(!(p->from3.offset & NOSPLIT) || (p->from3.offset & WRAPPER)) { p = appendp(ctxt, p); p = load_g_cx(ctxt, p); // load g into CX } - if(!(cursym->text->from.scale & NOSPLIT)) - p = stacksplit(ctxt, p, autoffset, textarg, !(cursym->text->from.scale&NEEDCTXT), &q); // emit split check + if(!(cursym->text->from3.offset & NOSPLIT)) + p = stacksplit(ctxt, p, autoffset, textarg, !(cursym->text->from3.offset&NEEDCTXT), &q); // emit split check if(autoffset) { if(autoffset%ctxt->arch->regsize != 0) @@ -468,7 +456,7 @@ preprocess(Link *ctxt, LSym *cursym) p->to.reg = REG_BP; } - if(cursym->text->from.scale & WRAPPER) { + if(cursym->text->from3.offset & WRAPPER) { // if(g->panic != nil && g->panic->argp == FP) g->panic->argp = bottom-of-frame // // MOVQ g_panic(CX), BX @@ -564,7 +552,7 @@ preprocess(Link *ctxt, LSym *cursym) p2->pcond = p; } - if(ctxt->debugzerostack && autoffset && !(cursym->text->from.scale&NOSPLIT)) { + if(ctxt->debugzerostack && autoffset && !(cursym->text->from3.offset&NOSPLIT)) { // 6l -Z means zero the stack frame on entry. // This slows down function calls but can help avoid // false positives in garbage collection. @@ -1093,8 +1081,6 @@ LinkArch linkamd64 = { .isdata = isdata, .prg = prg, .progedit = progedit, - .settextflag = settextflag, - .textflag = textflag, .minlc = 1, .ptrsize = 8, @@ -1127,8 +1113,6 @@ LinkArch linkamd64p32 = { .isdata = isdata, .prg = prg, .progedit = progedit, - .settextflag = settextflag, - .textflag = textflag, .minlc = 1, .ptrsize = 4, diff --git a/src/liblink/obj8.c b/src/liblink/obj8.c index cceeeb1b87..16b0e07eac 100644 --- a/src/liblink/obj8.c +++ b/src/liblink/obj8.c @@ -68,18 +68,6 @@ datasize(Prog *p) return p->from.scale; } -static int -textflag(Prog *p) -{ - return p->from.scale; -} - -static void -settextflag(Prog *p, int f) -{ - p->from.scale = f; -} - static int canuselocaltls(Link *ctxt) { @@ -302,12 +290,12 @@ preprocess(Link *ctxt, LSym *cursym) q = nil; - if(!(p->from.scale & NOSPLIT) || (p->from.scale & WRAPPER)) { + if(!(p->from3.offset & NOSPLIT) || (p->from3.offset & WRAPPER)) { p = appendp(ctxt, p); p = load_g_cx(ctxt, p); // load g into CX } - if(!(cursym->text->from.scale & NOSPLIT)) - p = stacksplit(ctxt, p, autoffset, !(cursym->text->from.scale&NEEDCTXT), &q); // emit split check + if(!(cursym->text->from3.offset & NOSPLIT)) + p = stacksplit(ctxt, p, autoffset, !(cursym->text->from3.offset&NEEDCTXT), &q); // emit split check if(autoffset) { p = appendp(ctxt, p); @@ -330,7 +318,7 @@ preprocess(Link *ctxt, LSym *cursym) q->pcond = p; deltasp = autoffset; - if(cursym->text->from.scale & WRAPPER) { + if(cursym->text->from3.offset & WRAPPER) { // if(g->panic != nil && g->panic->argp == FP) g->panic->argp = bottom-of-frame // // MOVL g_panic(CX), BX @@ -401,7 +389,7 @@ preprocess(Link *ctxt, LSym *cursym) p2->pcond = p; } - if(ctxt->debugzerostack && autoffset && !(cursym->text->from.scale&NOSPLIT)) { + if(ctxt->debugzerostack && autoffset && !(cursym->text->from3.offset&NOSPLIT)) { // 8l -Z means zero the stack frame on entry. // This slows down function calls but can help avoid // false positives in garbage collection. @@ -894,8 +882,6 @@ LinkArch link386 = { .isdata = isdata, .prg = prg, .progedit = progedit, - .settextflag = settextflag, - .textflag = textflag, .minlc = 1, .ptrsize = 4, diff --git a/src/liblink/obj9.c b/src/liblink/obj9.c index 6f7652f5f8..60fa1d66e1 100644 --- a/src/liblink/obj9.c +++ b/src/liblink/obj9.c @@ -57,18 +57,6 @@ datasize(Prog *p) return p->reg; } -static int -textflag(Prog *p) -{ - return p->reg; -} - -static void -settextflag(Prog *p, int f) -{ - p->reg = f; -} - static void progedit(Link *ctxt, Prog *p) { @@ -367,8 +355,8 @@ preprocess(Link *ctxt, LSym *cursym) autosize += 4; p->to.offset = autosize-8; - if(!(p->reg & NOSPLIT)) - p = stacksplit(ctxt, p, autosize, !(cursym->text->reg&NEEDCTXT)); // emit split check + if(!(p->from3.offset & NOSPLIT)) + p = stacksplit(ctxt, p, autosize, !(cursym->text->from3.offset&NEEDCTXT)); // emit split check q = p; if(autosize) { @@ -420,7 +408,7 @@ preprocess(Link *ctxt, LSym *cursym) if(q->as == AMOVDU) q->spadj = -aoffset; - if(cursym->text->reg & WRAPPER) { + if(cursym->text->from3.offset & WRAPPER) { // if(g->panic != nil && g->panic->argp == FP) g->panic->argp = bottom-of-frame // // MOVD g_panic(g), R3 @@ -970,8 +958,6 @@ LinkArch linkppc64 = { .isdata = isdata, .prg = prg, .progedit = progedit, - .settextflag = settextflag, - .textflag = textflag, .minlc = 4, .ptrsize = 8, @@ -1004,8 +990,6 @@ LinkArch linkppc64le = { .isdata = isdata, .prg = prg, .progedit = progedit, - .settextflag = settextflag, - .textflag = textflag, .minlc = 4, .ptrsize = 8, diff --git a/src/liblink/objfile.c b/src/liblink/objfile.c index bdd63ccb64..79a88db0bf 100644 --- a/src/liblink/objfile.c +++ b/src/liblink/objfile.c @@ -189,7 +189,7 @@ writeobj(Link *ctxt, Biobuf *b) s->size = p->to.offset; if(s->type == 0 || s->type == SXREF) s->type = SBSS; - flag = ctxt->arch->textflag(p); + flag = p->from3.offset; if(flag & DUPOK) s->dupok = 1; if(flag & RODATA) @@ -222,7 +222,7 @@ writeobj(Link *ctxt, Biobuf *b) else etext->next = s; etext = s; - flag = ctxt->arch->textflag(p); + flag = p->from3.offset; if(flag & DUPOK) s->dupok = 1; if(flag & NOSPLIT) -- 2.51.0