#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 */ }