#line 2 "/sys/src/cmd/qa/a.y"
#include "a.h"
#line 4 "/sys/src/cmd/qa/a.y"
typedef union
{
Sym *sym;
long lval;
double dval;
char sval[8];
Gen gen;
} YYSTYPE;
extern int yyerrflag;
#ifndef YYMAXDEPTH
#define YYMAXDEPTH 150
#endif
YYSTYPE yylval;
YYSTYPE yyval;
#define LMOVW 57346
#define LMOVB 57347
#define LABS 57348
#define LLOGW 57349
#define LSHW 57350
#define LADDW 57351
#define LCMP 57352
#define LCROP 57353
#define LBRA 57354
#define LFMOV 57355
#define LFCONV 57356
#define LFCMP 57357
#define LFADD 57358
#define LFMA 57359
#define LTRAP 57360
#define LXORW 57361
#define LNOP 57362
#define LEND 57363
#define LRETT 57364
#define LWORD 57365
#define LTEXT 57366
#define LDATA 57367
#define LRETRN 57368
#define LCONST 57369
#define LSP 57370
#define LSB 57371
#define LFP 57372
#define LPC 57373
#define LCREG 57374
#define LFLUSH 57375
#define LREG 57376
#define LFREG 57377
#define LR 57378
#define LCR 57379
#define LF 57380
#define LFPSCR 57381
#define LLR 57382
#define LCTR 57383
#define LSPR 57384
#define LSPREG 57385
#define LSEG 57386
#define LMSR 57387
#define LSCHED 57388
#define LXLD 57389
#define LXST 57390
#define LXOP 57391
#define LXMV 57392
#define LRLWM 57393
#define LMOVMW 57394
#define LMOVEM 57395
#define LMOVFL 57396
#define LMTFSB 57397
#define LMA 57398
#define LFCONST 57399
#define LSCONST 57400
#define LNAME 57401
#define LLAB 57402
#define LVAR 57403
#define YYEOFCODE 1
#define YYERRCODE 2
short yyexca[] =
{-1, 1,
1, -1,
-2, 0,
};
#define YYNPROD 188
#define YYPRIVATE 57344
#define yydebug 1
#define YYLAST 864
short yyact[] =
{
46, 52, 90, 57, 429, 105, 102, 55, 276, 50,
94, 440, 85, 56, 281, 95, 97, 98, 100, 101,
2, 53, 114, 51, 80, 79, 172, 122, 124, 126,
65, 129, 131, 128, 134, 94, 138, 93, 96, 74,
99, 75, 109, 453, 452, 115, 74, 441, 75, 54,
419, 123, 77, 74, 418, 75, 408, 66, 137, 74,
62, 75, 67, 63, 64, 83, 84, 69, 68, 71,
82, 407, 128, 94, 80, 79, 388, 117, 387, 205,
94, 384, 280, 373, 76, 128, 78, 372, 147, 371,
370, 61, 409, 65, 81, 369, 368, 49, 366, 60,
60, 60, 77, 365, 321, 204, 205, 66, 103, 110,
91, 198, 113, 364, 199, 289, 48, 60, 205, 161,
118, 119, 120, 121, 231, 141, 141, 168, 87, 89,
171, 135, 170, 169, 111, 112, 78, 226, 206, 207,
108, 107, 164, 449, 81, 448, 127, 447, 130, 132,
247, 256, 257, 254, 167, 265, 267, 252, 271, 272,
273, 274, 260, 253, 446, 233, 234, 445, 176, 177,
178, 251, 444, 250, 400, 263, 261, 399, 268, 270,
293, 296, 297, 189, 397, 80, 79, 396, 116, 395,
163, 308, 310, 312, 314, 316, 317, 202, 394, 255,
80, 79, 393, 392, 319, 322, 269, 391, 390, 323,
326, 389, 383, 77, 307, 382, 337, 339, 340, 341,
381, 343, 133, 347, 139, 380, 379, 143, 77, 378,
377, 376, 146, 148, 227, 74, 363, 75, 60, 338,
362, 60, 230, 304, 344, 346, 117, 78, 223, 222,
221, 262, 104, 283, 349, 81, 220, 284, 285, 286,
288, 219, 78, 291, 292, 218, 249, 104, 60, 259,
81, 217, 216, 215, 60, 214, 213, 305, 212, 211,
298, 299, 300, 301, 210, 208, 320, 74, 62, 75,
203, 63, 202, 329, 80, 79, 295, 197, 374, 196,
195, 194, 303, 209, 58, 193, 192, 191, 60, 333,
334, 335, 336, 190, 188, 185, 184, 375, 136, 350,
183, 351, 77, 224, 225, 182, 228, 229, 181, 385,
62, 180, 386, 63, 80, 79, 179, 160, 345, 165,
348, 159, 158, 157, 156, 155, 154, 153, 152, 151,
47, 86, 88, 150, 76, 149, 78, 45, 44, 42,
106, 61, 77, 92, 81, 43, 162, 450, 125, 74,
403, 75, 398, 405, 40, 41, 39, 410, 411, 412,
413, 414, 415, 416, 187, 304, 74, 64, 75, 62,
417, 266, 63, 420, 76, 404, 78, 433, 442, 232,
432, 61, 438, 439, 81, 74, 62, 75, 74, 63,
75, 80, 451, 425, 426, 427, 174, 175, 428, 431,
66, 358, 435, 436, 437, 113, 443, 352, 353, 354,
355, 356, 66, 162, 359, 360, 361, 113, 290, 77,
357, 186, 69, 68, 8, 82, 455, 456, 200, 458,
459, 145, 144, 406, 245, 244, 243, 241, 242, 236,
237, 238, 239, 240, 1, 173, 275, 174, 175, 186,
166, 76, 103, 78, 460, 287, 202, 70, 104, 59,
264, 81, 73, 430, 430, 72, 0, 423, 424, 248,
80, 79, 258, 0, 0, 306, 309, 311, 313, 315,
0, 318, 0, 278, 277, 279, 330, 0, 0, 74,
275, 75, 0, 331, 434, 332, 140, 142, 77, 294,
278, 277, 279, 80, 79, 302, 74, 282, 75, 167,
0, 83, 84, 66, 0, 74, 457, 75, 113, 0,
176, 0, 454, 324, 327, 278, 277, 279, 401, 402,
9, 77, 78, 238, 239, 240, 0, 104, 0, 342,
81, 0, 10, 11, 17, 15, 16, 14, 26, 19,
20, 12, 22, 25, 23, 24, 21, 0, 33, 35,
0, 34, 36, 37, 38, 78, 367, 0, 80, 79,
104, 66, 94, 81, 62, 0, 113, 63, 0, 80,
79, 0, 0, 0, 6, 29, 30, 32, 31, 27,
28, 80, 79, 13, 18, 0, 77, 4, 3, 5,
0, 66, 7, 74, 0, 75, 67, 77, 0, 83,
84, 69, 68, 71, 82, 62, 80, 79, 63, 77,
80, 79, 236, 237, 238, 239, 240, 0, 76, 0,
78, 64, 0, 0, 0, 61, 0, 94, 81, 76,
0, 78, 80, 79, 77, 0, 61, 0, 77, 81,
0, 76, 0, 78, 0, 74, 0, 75, 61, 0,
94, 81, 0, 80, 79, 0, 0, 80, 79, 0,
77, 0, 0, 80, 79, 0, 111, 112, 78, 0,
76, 0, 78, 422, 0, 0, 81, 104, 80, 79,
81, 77, 80, 79, 0, 77, 0, 0, 0, 0,
0, 77, 111, 112, 78, 0, 0, 421, 0, 328,
0, 0, 81, 0, 0, 0, 77, 0, 0, 0,
77, 0, 0, 111, 112, 78, 0, 111, 112, 78,
325, 0, 0, 81, 201, 78, 0, 81, 0, 0,
104, 0, 0, 81, 0, 0, 0, 166, 76, 0,
78, 0, 76, 0, 78, 104, 0, 0, 81, 104,
0, 0, 81, 245, 244, 243, 241, 242, 236, 237,
238, 239, 240, 245, 244, 243, 241, 242, 236, 237,
238, 239, 240, 244, 243, 241, 242, 236, 237, 238,
239, 240, 243, 241, 242, 236, 237, 238, 239, 240,
241, 242, 236, 237, 238, 239, 240, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 246, 0, 0, 0, 0, 0, 0,
0, 0, 0, 235
};
short yypact[] =
{
-1000, 548,-1000, 304, 302, 286, 291,-1000, 284, 283,
15, 325, 285, -68, -5, 364, -5, 364, 364, 684,
65, 2, 344, 344, 344, 344, 364, -5, 631, -4,
364, 9, -4, 243, -48, 171, 703, 703, 171,-1000,
-1000, 684, 684,-1000,-1000,-1000, 280, 278, 274, 273,
272, 271, 270, 269, 268, 267, 266, 262,-1000,-1000,
43, 191,-1000, 66,-1000, 699,-1000, 51,-1000, 57,
-1000, 56,-1000,-1000,-1000, 54, 458,-1000,-1000, 684,
684, 684,-1000,-1000,-1000, 261, 256, 253, 250, 245,
241, 240, 374, 239, 684, 238, 232, 231, 230, 226,
225, 224, 222,-1000, 684,-1000,-1000, 481, 678, 215,
30, 458, 407, 51, 210, 209,-1000,-1000, 204, 203,
201, 200, 198, 197, 196, 190, 186, 181, 364, 175,
174, 173,-1000,-1000, 171, 171, 361, 171, 171,-1000,
167, 48, 387,-1000, 548, 548, 789,-1000, 779, 579,
364, 364, 602, 549, 342, 364, 390, 491, 364, 364,
364, 482, 5, 450, 684,-1000,-1000, 43, 684, 684,
191, 684, 39, 430, 684, 684,-1000,-1000,-1000, 325,
364, 364, 344, 344, 344, 590,-1000, 318, 684,-1000,
-5, 364, 364, 364, 364, 364, 364, 684, 27,-1000,
-1000, 481, 42, 674, 653, 465, 39,-1000, 364,-1000,
364, 344, 344, 344, 344, -5, 364, 364, 364, 703,
-5, -43, 364, -4,-1000,-1000,-1000,-1000,-1000,-1000,
514, 507, 684,-1000,-1000,-1000, 684, 684, 684, 684,
684, 433, 413, 684, 684, 684,-1000,-1000,-1000,-1000,
165,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
-1000, 161,-1000,-1000,-1000,-1000, 37,-1000,-1000,-1000,
-1000,-1000,-1000,-1000,-1000, 26, 21,-1000,-1000,-1000,
-1000, 364,-1000, 19, 18, 13, 12, 10, 6, 507,
407,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
-1000,-1000,-1000,-1000,-1000,-1000, 156, 155,-1000, 154,
-1000, 151,-1000, 150,-1000, 145,-1000,-1000, 140,-1000,
137,-1000, 4,-1000,-1000, 481,-1000,-1000, 481, 3,
-1,-1000,-1000,-1000, 136, 133, 132, 128, 127, 123,
114,-1000,-1000,-1000, 112,-1000, 109,-1000,-1000, 300,
102, 99, 542, 542,-1000,-1000,-1000, 684, 684, 813,
806, 798, 348, 338, 684,-1000,-1000, -6,-1000,-1000,
-1000,-1000,-1000,-1000, -21, 16, 364, 364, 364, 364,
364, 364, 364, 684,-1000, -23, -27, 627,-1000, 344,
344, 378, 378, 378, 514, 514, 364, -4, -68, -68,
-67, 633, 633,-1000,-1000,-1000, -30,-1000,-1000, 359,
-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
-1000,-1000, 481,-1000, 97,-1000,-1000,-1000, 92, 89,
72, 70, 68,-1000,-1000,-1000, 295,-1000,-1000,-1000,
402,-1000, -33, -34, 344, 364, 364, 684, 364, 364,
-68, 176,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
-1000
};
short yypgo[] =
{
0, 88, 190, 8, 26, 304, 339, 0, 116, 479,
21, 97, 3, 485, 482, 23, 1, 2, 5, 49,
7, 6, 9, 480, 13, 477, 4, 464, 20, 452,
451, 444, 188
};
short yyr1[] =
{
0, 27, 27, 29, 28, 30, 28, 28, 28, 28,
28, 28, 28, 31, 31, 31, 31, 31, 31, 31,
31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
31, 31, 31, 31, 31, 31, 18, 18, 18, 7,
12, 12, 13, 20, 14, 25, 19, 19, 19, 24,
24, 22, 23, 11, 11, 10, 10, 21, 26, 16,
16, 17, 17, 15, 5, 5, 8, 8, 6, 6,
9, 9, 9, 32, 32, 4, 4, 4, 3, 3,
3, 1, 1, 1, 1, 1, 1, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2
};
short yyr2[] =
{
0, 0, 2, 0, 4, 0, 4, 4, 4, 2,
1, 2, 2, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 6, 4, 4, 4, 6, 4, 4,
6, 6, 6, 4, 4, 6, 4, 6, 4, 6,
4, 4, 2, 6, 4, 4, 4, 6, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 2, 2,
4, 3, 3, 5, 4, 4, 6, 4, 4, 6,
6, 6, 8, 4, 4, 3, 2, 4, 4, 6,
8, 4, 6, 4, 4, 6, 6, 8, 8, 8,
8, 4, 4, 4, 6, 4, 6, 4, 4, 2,
2, 3, 3, 3, 3, 3, 3, 2, 4, 6,
6, 8, 6, 6, 6, 2, 4, 2, 2, 1,
1, 1, 1, 1, 1, 1, 1, 4, 1, 4,
4, 1, 4, 1, 4, 1, 4, 1, 3, 2,
2, 2, 3, 2, 1, 4, 3, 5, 1, 4,
4, 5, 7, 0, 1, 0, 2, 2, 1, 1,
1, 1, 1, 2, 2, 2, 3, 1, 3, 3,
3, 3, 3, 4, 4, 3, 3, 3
};
short yychk[] =
{
-1000, -27, -28, 70, 69, 71, 56, 74, -31, 2,
14, 15, 23, 65, 19, 17, 18, 16, 66, 21,
22, 28, 24, 26, 27, 25, 20, 61, 62, 57,
58, 60, 59, 30, 33, 31, 34, 35, 36, 72,
72, 73, 73, 74, 74, 74, -7, -6, -8, -11,
-22, -15, -16, -10, -19, -20, -24, -12, -5, -9,
-1, 76, 45, 48, 49, 78, 42, 47, 53, 52,
-25, 54, -13, -14, 44, 46, 69, 37, 71, 10,
9, 79, 55, 50, 51, -7, -6, -8, -6, -8,
-17, -11, 78, -15, 78, -7, -15, -7, -7, -15,
-7, -7, -21, -1, 76, -18, -6, 76, 75, -10,
-1, 69, 70, 47, -7, -15, -32, 75, -11, -11,
-11, -11, -7, -15, -7, -6, -7, -8, 76, -7,
-8, -7, -8, -32, -7, -11, 75, -15, -16, -32,
-9, -1, -9, -32, -29, -30, -2, -1, -2, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 76, -5, -2, 76, -6, 68, -1, 76, 76,
76, 76, -4, 7, 9, 10, -1, -1, -1, 75,
75, 75, 75, 75, 75, 75, 67, 10, 75, -1,
75, 75, 75, 75, 75, 75, 75, 75, -12, -18,
-6, 76, -1, 75, 75, 76, -4, -4, 75, -32,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, -32, -32, -7, -11, -32, -32,
75, 76, 12, -28, -28, 74, 9, 10, 11, 12,
13, 7, 8, 6, 5, 4, 74, -7, -6, -8,
-15, -10, -20, -24, -12, -19, -7, -7, -6, -8,
-22, -15, -11, -10, -23, -7, 49, -7, -10, -19,
-10, -7, -7, -7, -7, -5, -3, 39, 38, 40,
77, 9, 77, -1, -1, -1, -1, -5, -1, 76,
8, -1, -1, -7, -6, -8, -7, -7, -11, -11,
-11, -11, -6, -8, 67, -1, -5, -15, -7, -5,
-7, -5, -7, -5, -7, -5, -7, -7, -5, -21,
-1, 77, -12, -18, -6, 76, -18, -6, 76, -1,
41, -5, -5, -11, -11, -11, -11, -7, -15, -7,
-7, -7, -6, -7, -15, -8, -15, -7, -8, -15,
-1, -1, -2, -2, -2, -2, -2, 7, 8, -2,
-2, -2, 75, 75, 76, 77, 77, -5, 77, 77,
77, 77, 77, 77, -3, -4, 75, 75, 75, 75,
75, 75, 75, 75, 77, -12, -12, 75, 77, 75,
75, 75, 75, 75, 75, 75, 75, 75, 72, 75,
75, -2, -2, -20, 47, -22, -1, 77, 77, 76,
-7, -7, -7, -7, -7, -7, -7, -21, 77, 77,
-18, -6, 76, -11, -11, -10, -10, -10, -15, -26,
-1, -15, -26, -7, -8, -15, -15, -15, -16, -17,
78, 77, 39, -12, 75, 75, 75, 75, 75, 75,
72, 10, 77, 77, -11, -7, -7, -1, -7, -7,
-15
};
short yydef[] =
{
1, -2, 2, 0, 0, 0, 0, 10, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 163, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 163, 0, 163, 0, 0, 163, 3,
5, 0, 0, 9, 11, 12, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 129, 158,
0, 0, 143, 0, 141, 0, 145, 133, 136, 0,
138, 0, 130, 131, 154, 0, 165, 171, 172, 0,
0, 0, 135, 132, 134, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
52, 0, 0, 147, 0, 68, 69, 0, 0, 0,
0, 165, 165, 0, 163, 0, 86, 164, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 109, 110, 163, 163, 164, 163, 163, 117,
0, 0, 0, 125, 0, 0, 0, 177, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 149, 150, 153, 0, 0,
0, 0, 0, 0, 0, 0, 173, 174, 175, 0,
0, 0, 0, 0, 0, 0, 151, 0, 0, 153,
0, 0, 0, 0, 0, 0, 0, 0, 0, 71,
72, 0, 0, 0, 0, 0, 127, 128, 164, 85,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 111, 112, 113, 114, 115, 116,
0, 0, 0, 4, 6, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 8, 13, 25, 26,
0, 38, 39, 63, 65, 67, 14, 15, 29, 30,
32, 0, 31, 34, 35, 54, 0, 55, 58, 66,
59, 61, 60, 62, 64, 0, 0, 168, 169, 170,
156, 0, 176, 0, 0, 0, 0, 0, 0, 0,
165, 166, 167, 16, 27, 28, 17, 18, 19, 20,
21, 22, 23, 24, 152, 36, 129, 0, 43, 129,
44, 129, 46, 129, 48, 129, 50, 51, 0, 56,
147, 70, 0, 74, 75, 0, 77, 78, 0, 0,
0, 83, 84, 87, 88, 0, 91, 93, 94, 0,
0, 101, 102, 103, 0, 105, 0, 107, 108, 118,
0, 0, 178, 179, 180, 181, 182, 0, 0, 185,
186, 187, 0, 0, 0, 159, 160, 0, 144, 146,
137, 139, 140, 155, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 73, 0, 0, 0, 126, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 183, 184, 37, 133, 33, 0, 157, 161, 0,
40, 42, 41, 45, 47, 49, 53, 57, 76, 79,
80, 81, 0, 89, 0, 92, 95, 96, 0, 0,
0, 0, 0, 104, 106, 120, 119, 122, 123, 124,
0, 142, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 162, 82, 90, 97, 98, 148, 99, 100,
121
};
short yytok1[] =
{
1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 78, 13, 6, 0,
76, 77, 11, 9, 75, 10, 0, 12, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 72, 74,
7, 73, 8, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 5, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 4, 0, 79
};
short yytok2[] =
{
2, 3, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
62, 63, 64, 65, 66, 67, 68, 69, 70, 71
};
long yytok3[] =
{
0
};
#define YYFLAG -1000
#define yyclearin yychar = -1
#define yyerrok yyerrflag = 0
#ifdef yydebug
#include "y.debug"
#else
#define yydebug 0
char* yytoknames[1]; /* for debugging */
char* yystates[1]; /* for debugging */
#endif
/* parser for yacc output */
int yynerrs = 0; /* number of errors */
int yyerrflag = 0; /* error recovery flag */
extern int fprint(int, char*, ...);
extern int sprint(char*, char*, ...);
char*
yytokname(int yyc)
{
static char x[16];
if(yyc > 0 && yyc <= sizeof(yytoknames)/sizeof(yytoknames[0]))
if(yytoknames[yyc-1])
return yytoknames[yyc-1];
sprint(x, "<%d>", yyc);
return x;
}
char*
yystatname(int yys)
{
static char x[16];
if(yys >= 0 && yys < sizeof(yystates)/sizeof(yystates[0]))
if(yystates[yys])
return yystates[yys];
sprint(x, "<%d>\n", yys);
return x;
}
long
yylex1(void)
{
long yychar;
long *t3p;
int c;
yychar = yylex();
if(yychar <= 0) {
c = yytok1[0];
goto out;
}
if(yychar < sizeof(yytok1)/sizeof(yytok1[0])) {
c = yytok1[yychar];
goto out;
}
if(yychar >= YYPRIVATE)
if(yychar < YYPRIVATE+sizeof(yytok2)/sizeof(yytok2[0])) {
c = yytok2[yychar-YYPRIVATE];
goto out;
}
for(t3p=yytok3;; t3p+=2) {
c = t3p[0];
if(c == yychar) {
c = t3p[1];
goto out;
}
if(c == 0)
break;
}
c = 0;
out:
if(c == 0)
c = yytok2[1]; /* unknown char */
if(yydebug >= 3)
fprint(2, "lex %.4lux %s\n", yychar, yytokname(c));
return c;
}
int
yyparse(void)
{
struct
{
YYSTYPE yyv;
int yys;
} yys[YYMAXDEPTH], *yyp, *yypt;
short *yyxi;
int yyj, yym, yystate, yyn, yyg;
long yychar;
YYSTYPE save1, save2;
int save3, save4;
save1 = yylval;
save2 = yyval;
save3 = yynerrs;
save4 = yyerrflag;
yystate = 0;
yychar = -1;
yynerrs = 0;
yyerrflag = 0;
yyp = &yys[-1];
goto yystack;
ret0:
yyn = 0;
goto ret;
ret1:
yyn = 1;
goto ret;
ret:
yylval = save1;
yyval = save2;
yynerrs = save3;
yyerrflag = save4;
return yyn;
yystack:
/* put a state and value onto the stack */
if(yydebug >= 4)
fprint(2, "char %s in %s", yytokname(yychar), yystatname(yystate));
yyp++;
if(yyp >= &yys[YYMAXDEPTH]) {
yyerror("yacc stack overflow");
goto ret1;
}
yyp->yys = yystate;
yyp->yyv = yyval;
yynewstate:
yyn = yypact[yystate];
if(yyn <= YYFLAG)
goto yydefault; /* simple state */
if(yychar < 0)
yychar = yylex1();
yyn += yychar;
if(yyn < 0 || yyn >= YYLAST)
goto yydefault;
yyn = yyact[yyn];
if(yychk[yyn] == yychar) { /* valid shift */
yychar = -1;
yyval = yylval;
yystate = yyn;
if(yyerrflag > 0)
yyerrflag--;
goto yystack;
}
yydefault:
/* default state action */
yyn = yydef[yystate];
if(yyn == -2) {
if(yychar < 0)
yychar = yylex1();
/* look through exception table */
for(yyxi=yyexca;; yyxi+=2)
if(yyxi[0] == -1 && yyxi[1] == yystate)
break;
for(yyxi += 2;; yyxi += 2) {
yyn = yyxi[0];
if(yyn < 0 || yyn == yychar)
break;
}
yyn = yyxi[1];
if(yyn < 0)
goto ret0;
}
if(yyn == 0) {
/* error ... attempt to resume parsing */
switch(yyerrflag) {
case 0: /* brand new error */
yyerror("syntax error");
yynerrs++;
if(yydebug >= 1) {
fprint(2, "%s", yystatname(yystate));
fprint(2, "saw %s\n", yytokname(yychar));
}
case 1:
case 2: /* incompletely recovered error ... try again */
yyerrflag = 3;
/* find a state where "error" is a legal shift action */
while(yyp >= yys) {
yyn = yypact[yyp->yys] + YYERRCODE;
if(yyn >= 0 && yyn < YYLAST) {
yystate = yyact[yyn]; /* simulate a shift of "error" */
if(yychk[yystate] == YYERRCODE)
goto yystack;
}
/* the current yyp has no shift onn "error", pop stack */
if(yydebug >= 2)
fprint(2, "error recovery pops state %d, uncovers %d\n",
yyp->yys, (yyp-1)->yys );
yyp--;
}
/* there is no state on the stack with an error shift ... abort */
goto ret1;
case 3: /* no shift yet; clobber input char */
if(yydebug >= 2)
fprint(2, "error recovery discards %s\n", yytokname(yychar));
if(yychar == YYEOFCODE)
goto ret1;
yychar = -1;
goto yynewstate; /* try again in the same state */
}
}
/* reduction by production yyn */
if(yydebug >= 2)
fprint(2, "reduce %d in:\n\t%s", yyn, yystatname(yystate));
yypt = yyp;
yyp -= yyr2[yyn];
yyval = (yyp+1)->yyv;
yym = yyn;
/* consult goto table to find next state */
yyn = yyr1[yyn];
yyg = yypgo[yyn];
yyj = yyg + yyp->yys + 1;
if(yyj >= YYLAST || yychk[yystate=yyact[yyj]] != -yyn)
yystate = yyact[yyg];
switch(yym) {
case 3:
#line 38 "/sys/src/cmd/qa/a.y"
{
if(yypt[-1].yyv.sym->value != pc)
yyerror("redeclaration of %s", yypt[-1].yyv.sym->name);
yypt[-1].yyv.sym->value = pc;
} break;
case 5:
#line 45 "/sys/src/cmd/qa/a.y"
{
yypt[-1].yyv.sym->type = LLAB;
yypt[-1].yyv.sym->value = pc;
} break;
case 7:
#line 51 "/sys/src/cmd/qa/a.y"
{
yypt[-3].yyv.sym->type = LVAR;
yypt[-3].yyv.sym->value = yypt[-1].yyv.lval;
} break;
case 8:
#line 56 "/sys/src/cmd/qa/a.y"
{
if(yypt[-3].yyv.sym->value != yypt[-1].yyv.lval)
yyerror("redeclaration of %s", yypt[-3].yyv.sym->name);
yypt[-3].yyv.sym->value = yypt[-1].yyv.lval;
} break;
case 9:
#line 62 "/sys/src/cmd/qa/a.y"
{
nosched = yypt[-1].yyv.lval;
} break;
case 13:
#line 74 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 14:
#line 78 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 15:
#line 82 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 16:
#line 86 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 17:
#line 90 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 18:
#line 94 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 19:
#line 101 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 20:
#line 105 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 21:
#line 109 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 22:
#line 113 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 23:
#line 117 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 24:
#line 121 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 25:
#line 128 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 26:
#line 132 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 27:
#line 136 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 28:
#line 140 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 29:
#line 147 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 30:
#line 151 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 31:
#line 158 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 32:
#line 162 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 33:
#line 166 "/sys/src/cmd/qa/a.y"
{
outgcode(yypt[-5].yyv.lval, &yypt[-4].yyv.gen, NREG, &yypt[-2].yyv.gen, &yypt[-0].yyv.gen);
} break;
case 34:
#line 170 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 35:
#line 174 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 36:
#line 178 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, yypt[-0].yyv.lval, &nullgen);
} break;
case 37:
#line 185 "/sys/src/cmd/qa/a.y"
{
outgcode(yypt[-5].yyv.lval, &yypt[-4].yyv.gen, NREG, &yypt[-2].yyv.gen, &yypt[-0].yyv.gen);
} break;
case 38:
#line 189 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 39:
#line 193 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 40:
#line 203 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-5].yyv.lval, &yypt[-4].yyv.gen, yypt[-2].yyv.lval, &yypt[-0].yyv.gen);
} break;
case 41:
#line 207 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-5].yyv.lval, &yypt[-4].yyv.gen, yypt[-2].yyv.lval, &yypt[-0].yyv.gen);
} break;
case 42:
#line 211 "/sys/src/cmd/qa/a.y"
{
outgcode(yypt[-5].yyv.lval, &yypt[-4].yyv.gen, NREG, &yypt[-2].yyv.gen, &yypt[-0].yyv.gen);
} break;
case 43:
#line 215 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 44:
#line 219 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 45:
#line 223 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-5].yyv.lval, &yypt[-4].yyv.gen, yypt[-2].yyv.lval, &yypt[-0].yyv.gen);
} break;
case 46:
#line 227 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 47:
#line 231 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-5].yyv.lval, &yypt[-4].yyv.gen, yypt[-2].yyv.lval, &yypt[-0].yyv.gen);
} break;
case 48:
#line 235 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 49:
#line 239 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-5].yyv.lval, &yypt[-4].yyv.gen, yypt[-2].yyv.lval, &yypt[-0].yyv.gen);
} break;
case 50:
#line 243 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 51:
#line 247 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 52:
#line 251 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-1].yyv.lval, &yypt[-0].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 53:
#line 258 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-5].yyv.lval, &yypt[-4].yyv.gen, yypt[-2].yyv.lval, &yypt[-0].yyv.gen);
} break;
case 54:
#line 265 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 55:
#line 269 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 56:
#line 276 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, yypt[-0].yyv.gen.reg, &yypt[-0].yyv.gen);
} break;
case 57:
#line 280 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-5].yyv.lval, &yypt[-4].yyv.gen, yypt[-2].yyv.lval, &yypt[-0].yyv.gen);
} break;
case 58:
#line 288 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 59:
#line 292 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 60:
#line 296 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 61:
#line 300 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 62:
#line 304 "/sys/src/cmd/qa/a.y"
{
int r;
r = yypt[-2].yyv.gen.offset;
yypt[-2].yyv.gen.offset = 0;
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, r, &yypt[-0].yyv.gen);
} break;
case 63:
#line 311 "/sys/src/cmd/qa/a.y"
{
int r;
r = yypt[-0].yyv.gen.offset;
yypt[-0].yyv.gen.offset = 0;
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, r, &yypt[-0].yyv.gen);
} break;
case 64:
#line 318 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 65:
#line 322 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 66:
#line 326 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 67:
#line 330 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 68:
#line 339 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-1].yyv.lval, &nullgen, NREG, &yypt[-0].yyv.gen);
} break;
case 69:
#line 343 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-1].yyv.lval, &nullgen, NREG, &yypt[-0].yyv.gen);
} break;
case 70:
#line 347 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &nullgen, NREG, &yypt[-1].yyv.gen);
} break;
case 71:
#line 351 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-2].yyv.lval, &nullgen, NREG, &yypt[-0].yyv.gen);
} break;
case 72:
#line 355 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-2].yyv.lval, &nullgen, NREG, &yypt[-0].yyv.gen);
} break;
case 73:
#line 359 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-4].yyv.lval, &nullgen, NREG, &yypt[-1].yyv.gen);
} break;
case 74:
#line 363 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 75:
#line 367 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 76:
#line 371 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-5].yyv.lval, &yypt[-4].yyv.gen, NREG, &yypt[-1].yyv.gen);
} break;
case 77:
#line 375 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &nullgen, yypt[-2].yyv.lval, &yypt[-0].yyv.gen);
} break;
case 78:
#line 379 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &nullgen, yypt[-2].yyv.lval, &yypt[-0].yyv.gen);
} break;
case 79:
#line 383 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-5].yyv.lval, &nullgen, yypt[-4].yyv.lval, &yypt[-1].yyv.gen);
} break;
case 80:
#line 387 "/sys/src/cmd/qa/a.y"
{
Gen g;
g = nullgen;
g.type = D_CONST;
g.offset = yypt[-4].yyv.lval;
outcode(yypt[-5].yyv.lval, &g, yypt[-2].yyv.lval, &yypt[-0].yyv.gen);
} break;
case 81:
#line 395 "/sys/src/cmd/qa/a.y"
{
Gen g;
g = nullgen;
g.type = D_CONST;
g.offset = yypt[-4].yyv.lval;
outcode(yypt[-5].yyv.lval, &g, yypt[-2].yyv.lval, &yypt[-0].yyv.gen);
} break;
case 82:
#line 403 "/sys/src/cmd/qa/a.y"
{
Gen g;
g = nullgen;
g.type = D_CONST;
g.offset = yypt[-6].yyv.lval;
outcode(yypt[-7].yyv.lval, &g, yypt[-4].yyv.lval, &yypt[-1].yyv.gen);
} break;
case 83:
#line 414 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, yypt[-0].yyv.lval, &nullgen);
} break;
case 84:
#line 418 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, yypt[-0].yyv.lval, &nullgen);
} break;
case 85:
#line 422 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-2].yyv.lval, &yypt[-1].yyv.gen, NREG, &nullgen);
} break;
case 86:
#line 426 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-1].yyv.lval, &nullgen, NREG, &nullgen);
} break;
case 87:
#line 433 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 88:
#line 437 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 89:
#line 441 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-5].yyv.lval, &yypt[-4].yyv.gen, yypt[-2].yyv.gen.reg, &yypt[-0].yyv.gen);
} break;
case 90:
#line 445 "/sys/src/cmd/qa/a.y"
{
outgcode(yypt[-7].yyv.lval, &yypt[-6].yyv.gen, yypt[-4].yyv.gen.reg, &yypt[-2].yyv.gen, &yypt[-0].yyv.gen);
} break;
case 91:
#line 449 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 92:
#line 453 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-5].yyv.lval, &yypt[-4].yyv.gen, yypt[-0].yyv.gen.reg, &yypt[-2].yyv.gen);
} break;
case 93:
#line 460 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 94:
#line 464 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 95:
#line 468 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-5].yyv.lval, &yypt[-4].yyv.gen, yypt[-0].yyv.gen.reg, &yypt[-2].yyv.gen);
} break;
case 96:
#line 472 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-5].yyv.lval, &yypt[-4].yyv.gen, yypt[-0].yyv.gen.reg, &yypt[-2].yyv.gen);
} break;
case 97:
#line 479 "/sys/src/cmd/qa/a.y"
{
outgcode(yypt[-7].yyv.lval, &yypt[-6].yyv.gen, yypt[-4].yyv.gen.reg, &yypt[-2].yyv.gen, &yypt[-0].yyv.gen);
} break;
case 98:
#line 483 "/sys/src/cmd/qa/a.y"
{
outgcode(yypt[-7].yyv.lval, &yypt[-6].yyv.gen, yypt[-4].yyv.gen.reg, &yypt[-2].yyv.gen, &yypt[-0].yyv.gen);
} break;
case 99:
#line 487 "/sys/src/cmd/qa/a.y"
{
outgcode(yypt[-7].yyv.lval, &yypt[-6].yyv.gen, yypt[-4].yyv.gen.reg, &yypt[-2].yyv.gen, &yypt[-0].yyv.gen);
} break;
case 100:
#line 491 "/sys/src/cmd/qa/a.y"
{
outgcode(yypt[-7].yyv.lval, &yypt[-6].yyv.gen, yypt[-4].yyv.gen.reg, &yypt[-2].yyv.gen, &yypt[-0].yyv.gen);
} break;
case 101:
#line 498 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 102:
#line 502 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 103:
#line 510 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 104:
#line 514 "/sys/src/cmd/qa/a.y"
{
outgcode(yypt[-5].yyv.lval, &yypt[-4].yyv.gen, NREG, &yypt[-2].yyv.gen, &yypt[-0].yyv.gen);
} break;
case 105:
#line 518 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 106:
#line 522 "/sys/src/cmd/qa/a.y"
{
outgcode(yypt[-5].yyv.lval, &yypt[-4].yyv.gen, NREG, &yypt[-2].yyv.gen, &yypt[-0].yyv.gen);
} break;
case 107:
#line 526 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 108:
#line 530 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 109:
#line 534 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-1].yyv.lval, &yypt[-0].yyv.gen, NREG, &nullgen);
} break;
case 110:
#line 541 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-1].yyv.lval, &nullgen, NREG, &nullgen);
} break;
case 111:
#line 545 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-2].yyv.lval, &yypt[-1].yyv.gen, NREG, &nullgen);
} break;
case 112:
#line 549 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-2].yyv.lval, &yypt[-1].yyv.gen, NREG, &nullgen);
} break;
case 113:
#line 553 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-2].yyv.lval, &nullgen, NREG, &yypt[-0].yyv.gen);
} break;
case 114:
#line 557 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-2].yyv.lval, &nullgen, NREG, &yypt[-0].yyv.gen);
} break;
case 115:
#line 564 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-2].yyv.lval, &yypt[-1].yyv.gen, NREG, &nullgen);
} break;
case 116:
#line 568 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-2].yyv.lval, &yypt[-1].yyv.gen, NREG, &nullgen);
} break;
case 117:
#line 575 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-1].yyv.lval, &nullgen, NREG, &nullgen);
} break;
case 118:
#line 582 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-3].yyv.lval, &yypt[-2].yyv.gen, NREG, &yypt[-0].yyv.gen);
} break;
case 119:
#line 586 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-5].yyv.lval, &yypt[-4].yyv.gen, yypt[-2].yyv.lval, &yypt[-0].yyv.gen);
} break;
case 120:
#line 590 "/sys/src/cmd/qa/a.y"
{
outgcode(yypt[-5].yyv.lval, &yypt[-4].yyv.gen, NREG, &yypt[-0].yyv.gen, &yypt[-2].yyv.gen);
} break;
case 121:
#line 594 "/sys/src/cmd/qa/a.y"
{
outgcode(yypt[-7].yyv.lval, &yypt[-6].yyv.gen, yypt[-4].yyv.lval, &yypt[-0].yyv.gen, &yypt[-2].yyv.gen);
} break;
case 122:
#line 601 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-5].yyv.lval, &yypt[-4].yyv.gen, yypt[-2].yyv.lval, &yypt[-0].yyv.gen);
} break;
case 123:
#line 605 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-5].yyv.lval, &yypt[-4].yyv.gen, yypt[-2].yyv.lval, &yypt[-0].yyv.gen);
} break;
case 124:
#line 609 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-5].yyv.lval, &yypt[-4].yyv.gen, yypt[-2].yyv.lval, &yypt[-0].yyv.gen);
} break;
case 125:
#line 616 "/sys/src/cmd/qa/a.y"
{
outcode(yypt[-1].yyv.lval, &nullgen, NREG, &nullgen);
} break;
case 126:
#line 622 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_BRANCH;
yyval.gen.offset = yypt[-3].yyv.lval + pc;
} break;
case 127:
#line 628 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
if(pass == 2)
yyerror("undefined label: %s", yypt[-1].yyv.sym->name);
yyval.gen.type = D_BRANCH;
yyval.gen.sym = yypt[-1].yyv.sym;
yyval.gen.offset = yypt[-0].yyv.lval;
} break;
case 128:
#line 637 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_BRANCH;
yyval.gen.sym = yypt[-1].yyv.sym;
yyval.gen.offset = yypt[-1].yyv.sym->value + yypt[-0].yyv.lval;
} break;
case 129:
#line 646 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_REG;
yyval.gen.reg = yypt[-0].yyv.lval;
} break;
case 132:
#line 658 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_SPR;
yyval.gen.offset = yypt[-0].yyv.lval;
} break;
case 133:
#line 666 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_CREG;
yyval.gen.reg = NREG; /* whole register */
} break;
case 134:
#line 674 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_SPR;
yyval.gen.offset = yypt[-0].yyv.lval;
} break;
case 135:
#line 682 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_MSR;
} break;
case 136:
#line 689 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_SPR;
yyval.gen.offset = yypt[-0].yyv.lval;
} break;
case 137:
#line 695 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = yypt[-3].yyv.lval;
yyval.gen.offset = yypt[-1].yyv.lval;
} break;
case 139:
#line 704 "/sys/src/cmd/qa/a.y"
{
if(yypt[-1].yyv.lval < 0 || yypt[-1].yyv.lval > 15)
yyerror("segment register number out of range");
yyval.gen = nullgen;
yyval.gen.type = D_SREG;
yyval.gen.reg = yypt[-1].yyv.lval;
yyval.gen.offset = NREG;
} break;
case 140:
#line 713 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_SREG;
yyval.gen.reg = NREG;
yyval.gen.offset = yypt[-1].yyv.lval;
} break;
case 141:
#line 722 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_FPSCR;
yyval.gen.reg = NREG;
} break;
case 142:
#line 730 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_FPSCR;
yyval.gen.reg = yypt[-1].yyv.lval;
} break;
case 143:
#line 738 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_FREG;
yyval.gen.reg = yypt[-0].yyv.lval;
} break;
case 144:
#line 744 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_FREG;
yyval.gen.reg = yypt[-1].yyv.lval;
} break;
case 145:
#line 752 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_CREG;
yyval.gen.reg = yypt[-0].yyv.lval;
} break;
case 146:
#line 758 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_CREG;
yyval.gen.reg = yypt[-1].yyv.lval;
} break;
case 147:
#line 766 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_REG;
yyval.gen.reg = yypt[-0].yyv.lval;
} break;
case 148:
#line 774 "/sys/src/cmd/qa/a.y"
{
int mb, me;
ulong v;
yyval.gen = nullgen;
yyval.gen.type = D_CONST;
mb = yypt[-2].yyv.lval;
me = yypt[-0].yyv.lval;
if(mb < 0 || mb > 31 || me < 0 || me > 31){
yyerror("illegal mask start/end value(s)");
mb = me = 0;
}
if(mb <= me)
v = ((ulong)~0L>>mb) & (~0L<<(31-me));
else
v = ~(((ulong)~0L>>(me+1)) & (~0L<<(31-(mb-1))));
yyval.gen.offset = v;
} break;
case 149:
#line 795 "/sys/src/cmd/qa/a.y"
{
yyval.gen = yypt[-0].yyv.gen;
yyval.gen.type = D_CONST;
} break;
case 150:
#line 800 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_SCONST;
memcpy(yyval.gen.sval, yypt[-0].yyv.sval, sizeof(yyval.gen.sval));
} break;
case 151:
#line 808 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_FCONST;
yyval.gen.dval = yypt[-0].yyv.dval;
} break;
case 152:
#line 814 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_FCONST;
yyval.gen.dval = -yypt[-0].yyv.dval;
} break;
case 153:
#line 821 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_CONST;
yyval.gen.offset = yypt[-0].yyv.lval;
} break;
case 155:
#line 830 "/sys/src/cmd/qa/a.y"
{
if(yyval.lval < 0 || yyval.lval >= NREG)
print("register value out of range\n");
yyval.lval = yypt[-1].yyv.lval;
} break;
case 156:
#line 838 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_OREG;
yyval.gen.reg = yypt[-1].yyv.lval;
yyval.gen.offset = 0;
} break;
case 157:
#line 845 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_OREG;
yyval.gen.reg = yypt[-3].yyv.lval;
yyval.gen.xreg = yypt[-1].yyv.lval;
yyval.gen.offset = 0;
} break;
case 159:
#line 856 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_OREG;
yyval.gen.reg = yypt[-1].yyv.lval;
yyval.gen.offset = yypt[-3].yyv.lval;
} break;
case 160:
#line 865 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_OREG;
yyval.gen.name = yypt[-1].yyv.lval;
yyval.gen.sym = S;
yyval.gen.offset = yypt[-3].yyv.lval;
} break;
case 161:
#line 873 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_OREG;
yyval.gen.name = yypt[-1].yyv.lval;
yyval.gen.sym = yypt[-4].yyv.sym;
yyval.gen.offset = yypt[-3].yyv.lval;
} break;
case 162:
#line 881 "/sys/src/cmd/qa/a.y"
{
yyval.gen = nullgen;
yyval.gen.type = D_OREG;
yyval.gen.name = D_STATIC;
yyval.gen.sym = yypt[-6].yyv.sym;
yyval.gen.offset = yypt[-3].yyv.lval;
} break;
case 165:
#line 893 "/sys/src/cmd/qa/a.y"
{
yyval.lval = 0;
} break;
case 166:
#line 897 "/sys/src/cmd/qa/a.y"
{
yyval.lval = yypt[-0].yyv.lval;
} break;
case 167:
#line 901 "/sys/src/cmd/qa/a.y"
{
yyval.lval = -yypt[-0].yyv.lval;
} break;
case 172:
#line 913 "/sys/src/cmd/qa/a.y"
{
yyval.lval = yypt[-0].yyv.sym->value;
} break;
case 173:
#line 917 "/sys/src/cmd/qa/a.y"
{
yyval.lval = -yypt[-0].yyv.lval;
} break;
case 174:
#line 921 "/sys/src/cmd/qa/a.y"
{
yyval.lval = yypt[-0].yyv.lval;
} break;
case 175:
#line 925 "/sys/src/cmd/qa/a.y"
{
yyval.lval = ~yypt[-0].yyv.lval;
} break;
case 176:
#line 929 "/sys/src/cmd/qa/a.y"
{
yyval.lval = yypt[-1].yyv.lval;
} break;
case 178:
#line 936 "/sys/src/cmd/qa/a.y"
{
yyval.lval = yypt[-2].yyv.lval + yypt[-0].yyv.lval;
} break;
case 179:
#line 940 "/sys/src/cmd/qa/a.y"
{
yyval.lval = yypt[-2].yyv.lval - yypt[-0].yyv.lval;
} break;
case 180:
#line 944 "/sys/src/cmd/qa/a.y"
{
yyval.lval = yypt[-2].yyv.lval * yypt[-0].yyv.lval;
} break;
case 181:
#line 948 "/sys/src/cmd/qa/a.y"
{
yyval.lval = yypt[-2].yyv.lval / yypt[-0].yyv.lval;
} break;
case 182:
#line 952 "/sys/src/cmd/qa/a.y"
{
yyval.lval = yypt[-2].yyv.lval % yypt[-0].yyv.lval;
} break;
case 183:
#line 956 "/sys/src/cmd/qa/a.y"
{
yyval.lval = yypt[-3].yyv.lval << yypt[-0].yyv.lval;
} break;
case 184:
#line 960 "/sys/src/cmd/qa/a.y"
{
yyval.lval = yypt[-3].yyv.lval >> yypt[-0].yyv.lval;
} break;
case 185:
#line 964 "/sys/src/cmd/qa/a.y"
{
yyval.lval = yypt[-2].yyv.lval & yypt[-0].yyv.lval;
} break;
case 186:
#line 968 "/sys/src/cmd/qa/a.y"
{
yyval.lval = yypt[-2].yyv.lval ^ yypt[-0].yyv.lval;
} break;
case 187:
#line 972 "/sys/src/cmd/qa/a.y"
{
yyval.lval = yypt[-2].yyv.lval | yypt[-0].yyv.lval;
} break;
}
goto yystack; /* stack new state and value */
}
|