|
|
1.1 root 1:
2: #line 1 "asm.y"
3:
4: #include <asm.h>
5: /*
6: * count macro parms.
7: */
8: static
9: parmCt()
10: {
11: if(NULL == trueMac) {
12: yyerror(".parmct not in macro");
13: /* \fB.parmct\fR returns the number of
14: * parameters in the current macro. */
15: return(0);
16: }
17: else
18: return(countList(trueMac->parms));
19: }
20:
21: /*
22: * Verify that 2 symbols have the same segment.
23: */
24: static void
25: ckseg(s1, s2)
26: sym *s1, *s2;
27: {
28: if(s1->sg != s2->sg)
29: yyerror("Arithmetic between addresses on different segments");
30: /* You may only add or subtract addresses if they
31: * are in the same segment. */
32: }
33:
34: /*
35: * Create Immediate exps.
36: */
37: static expr *
38: setImm(val, symRef)
39: long val;
40: sym *symRef;
41: {
42: register expr *oper;
43: register short w;
44:
45: oper = xalloc();
46: oper->mode = T_IMM;
47: if (NULL != (oper->ref = symRef))
48: oper->ref = symRef->ref;
49: w = oper->exp = val;
50: if(w == val)
51: oper->size = 2;
52: else
53: oper->size = 4;
54: return(oper);
55: }
56:
57: /*
58: * Set up for most addressing modes.
59: */
60: static expr *
61: qbild(val, mode, r1, r2, scale, symRef)
62: long val;
63: int mode;
64: psym *r1, *r2;
65: long scale;
66: sym *symRef;
67: {
68: register expr *oper;
69: char i;
70:
71: if (NULL != r1 && T_R != mode) {
72: switch((int)r1->size) {
73: case 2:
74: lflags |= A_SHORT;
75: if (!scale)
76: break;
77: case 1:
78: regerror(r1);
79: break;
80: case 4:
81: lflags |= A_LONG;
82: break;
83: }
84:
85: if (ORD_REG != r1->flag) /* cant ind via ctl regs */
86: regerror(r1);
87:
88: if (NULL != r2) {
89: if (ORD_REG != r2->flag)
90: regerror(r2);
91: if (r1->size != r2->size)
92: yyerror("Mixed length addressing registers");
93: /* Addressing registers must both be the same length. */
94: }
95: }
96: else if ((T_R == mode) && (r1->flag == ORD_REG)) {
97: switch ((int)r1->size) {
98: case 4:
99: lflags |= O_LONG;
100: break;
101: case 2:
102: lflags |= O_SHORT;
103: }
104: }
105:
106: oper = xalloc();
107: oper->exp = val;
108: oper->r1 = r1;
109: oper->r2 = r2;
110: oper->mode = mode;
111:
112: i = scale;
113: if (i != scale)
114: i = 3; /* set a bad scale */
115:
116: switch (i) {
117: case 0:
118: case 1: /* for generated code */
119: oper->scale = 0; break;
120: case 2:
121: oper->scale = 1; break;
122: case 4:
123: oper->scale = 2; break;
124: case 8:
125: oper->scale = 3; break;
126: default:
127: yyerror("Bad scale");
128: /* Address scale must be 0, 1, 2, 4, or 8. */
129: }
130:
131: if (NULL != (oper->ref = symRef))
132: oper->ref = symRef->ref;
133: return(oper);
134: }
135:
136: /*
137: * Floating point register expr.
138: */
139: static expr *
140: fbild(regno)
141: long regno;
142: {
143: register expr *oper;
144:
145: if (regno < 0 || regno > 7) {
146: regno &= 7;
147: yyerror("Invalid floating point register number"); /**/
148: }
149:
150: oper = xalloc();
151: oper->exp = regno;
152: oper->mode = T_FP;
153: return (oper);
154: }
155:
156: /*
157: * Report register error.
158: */
159: regerror(rg)
160: psym *rg;
161: {
162: yyerror("%s is an improper register in this context", rg->name); /**/
163: }
164:
165: /*
166: * Concatinate strings.
167: */
168: static char *
169: concat(s1, s2)
170: char *s1, *s2;
171: {
172: long l;
173: unsigned short u;
174: char *res;
175:
176: u = l = (long)strlen(s1) + (long)strlen(s2) + 1;
177: if(u != l) {
178: yyerror("Length %ld string range exceeded", l);
179: /* Strings may not exceed 32 kilobytes. */
180: return(galloc(1));
181: }
182: res = galloc(u);
183: sprintf(res, "%s%s", s1, s2);
184: return(res);
185: }
186:
187: /*
188: * Substring.
189: * Assumes that all strings are created from unsigned lengths.
190: */
191: static char *
192: substr(s, from, len)
193: char *s;
194: long from, len;
195: {
196: register char *p, *res;
197: unsigned short l;
198:
199: l = strlen(s);
200: s += from;
201: from = l - from; /* from now len to end */
202:
203: if(len > from)
204: len = from; /* since strlen fit unsigned len must */
205: if(len < 0)
206: len = 0;
207:
208: for(p = res = galloc((unsigned)(len + 1)); len--; )
209: *p++ = *s++;
210: return(res);
211: }
212:
213: /*
214: * String search.
215: */
216: static
217: stringSearch(s1, s2)
218: char *s1, *s2;
219: {
220: char *p;
221:
222: if(NULL == (p = strstr(s1, s2)))
223: return(-1);
224: return(p - s1);
225: }
226:
227: /*
228: * Do long comparisons.
229: * < > <= >= != == compare operator
230: * 1 2 5 6 3 4 t
231: */
232: static
233: compare(t, v)
234: int t;
235: long v;
236: {
237: return(((v < 0) ? t : (v > 0) ? (t >> 1) : (t >> 2)) & 1);
238: }
239:
240: /*
241: * Do double comparisons.
242: * < > <= >= != == compare operator
243: * 1 2 5 6 3 4 t
244: */
245: static
246: fcompare(t, v)
247: int t;
248: double v;
249: {
250: return(((v < 0.0) ? t : (v > 0.0) ? (t >> 1) : (t >> 2)) & 1);
251: }
252:
253: static void
254: unmatched(c)
255: {
256: yyerror("Unmatched '%c'", c);
257: /* A delimeter, [, (, ), or ] is unmatched in this command. */
258: }
259:
260:
261: #include "y_tab.h"
262: #define YYCLEARIN yychar = -1000
263: #define YYERROK yyerrflag = 0
264: extern int yychar;
265: extern short yyerrflag;
266: #ifndef YYMAXDEPTH
267: #define YYMAXDEPTH 150
268: #endif
269: YYSTYPE yyval, yylval;
270: #ifdef YYTNAMES
271: struct yytname yytnames[50] =
272: {
273: "$end", -1,
274: "error", -2,
275: "PC", 256,
276: "NUMBER", 257,
277: "FNUM", 258,
278: "COMPARISON", 312,
279: "OP", 260,
280: "DATA", 261,
281: "CMD", 262,
282: "DCMD", 263,
283: "ICMD", 264,
284: "NCMD", 265,
285: "ECMD", 266,
286: "ECMDX", 267,
287: "IDENTIFIER", 268,
288: "REG", 269,
289: "DEFINED", 320,
290: "SIZEOF", 321,
291: "SEGMENT", 322,
292: "LOCATION", 323,
293: "PLUS", 315,
294: "MINUS", 316,
295: "TIMES", 317,
296: "DIVIDE", 318,
297: "REM", 319,
298: "LSHIFT", 313,
299: "RSHIFT", 314,
300: "AND", 311,
301: "OR", 309,
302: "XOR", 310,
303: "COMMA", 305,
304: "LPAREN", 328,
305: "RPAREN", 286,
306: "LBRACK", 329,
307: "RBRACK", 288,
308: "AT", 307,
309: "D_SIGN", 290,
310: "NOT", 324,
311: "BANG", 326,
312: "COLON", 306,
313: "PARMCT", 294,
314: "TOSTRING", 330,
315: "TONUMBER", 331,
316: "TOFLOAT", 332,
317: "FSTACK", 298,
318: "NL", 333,
319: "TOKEN", 327,
320: "P_SIGN", 308,
321: "LEN", 325,
322: NULL
323: } ;
324: #endif
325: #define YYACTSH 13
326: #define YYAMASK 017777
327: #define YYSHIFTACT 0
328: #define YYREDACT 1
329: #define YYACCEPTACT 2
330: #define YYERRACT 3
331: #define YYGOTO 4
332: #define YYPACTION 5
333: #define YYEOFVAL (-1)
334: #define YYERRVAL (-2)
335: #define YYOTHERS (-1000)
336:
337: unsigned char yypdnt[108] = {
338: 0, 1, 1, 2, 2, 2, 2, 2,
339: 2, 2, 2, 2, 2, 2, 2, 7,
340: 7, 7, 6, 6, 6, 6, 6, 4,
341: 4, 4, 5, 3, 3, 8, 8, 8,
342: 8, 13, 13, 14, 14, 14, 14, 14,
343: 14, 14, 14, 14, 14, 14, 14, 14,
344: 14, 14, 14, 14, 14, 14, 14, 14,
345: 14, 9, 9, 9, 9, 9, 11, 11,
346: 11, 11, 11, 11, 11, 11, 11, 11,
347: 11, 11, 11, 11, 11, 11, 11, 11,
348: 11, 11, 11, 11, 11, 11, 11, 11,
349: 11, 11, 11, 11, 12, 12, 12, 12,
350: 12, 12, 12, 10, 10, 10, 10, 10,
351: 10, 10, 10, 10
352: };
353: unsigned char yypn[108] = {
354: 2, 1, 2, 4, 4, 6, 6, 3,
355: 3, 4, 4, 4, 4, 2, 2, 3,
356: 1, 0, 1, 1, 1, 1, 3, 1,
357: 3, 0, 1, 0, 1, 3, 1, 2,
358: 0, 1, 3, 1, 1, 4, 3, 5,
359: 6, 5, 7, 4, 6, 7, 6, 8,
360: 4, 6, 7, 6, 8, 1, 1, 2,
361: 2, 1, 3, 3, 3, 3, 1, 3,
362: 3, 3, 3, 3, 3, 2, 2, 2,
363: 2, 2, 1, 3, 3, 3, 3, 3,
364: 3, 3, 3, 3, 3, 2, 2, 2,
365: 4, 3, 2, 2, 1, 3, 3, 6,
366: 4, 2, 2, 1, 3, 3, 3, 3,
367: 3, 2, 2, 2
368: };
369: unsigned char yypgo[15] = {
370: 0, 0, 2, 6, 8, 14, 20, 28,
371: 34, 38, 76, 114, 198, 228, 232
372: };
373: unsigned int yygo[236] = {
374: YYOTHERS, 0x3, 0x3, 0x8, YYOTHERS, 0x4, YYOTHERS, 0x5,
375: 0xc, 0x38, 0x7d, 0xb2, YYOTHERS, 0x36, 0xf, 0x3c,
376: 0x10, 0x3d, YYOTHERS, 0x37, 0xd, 0x39, 0x7b, 0xb1,
377: 0x80, 0xb3, YYOTHERS, 0x2f, 0x79, 0xb0, 0x81, 0xb4,
378: YYOTHERS, 0x30, 0x78, 0xaf, YYOTHERS, 0x28, 0x9, 0x29,
379: 0xa, 0x31, 0xd, 0x31, 0x18, 0x42, 0x19, 0x44,
380: 0x1a, 0x45, 0x1c, 0x29, 0x1d, 0x4a, 0x1f, 0x50,
381: 0x3f, 0x29, 0x5e, 0x90, 0x60, 0x92, 0x68, 0x9c,
382: 0x78, 0x29, 0x79, 0x31, 0x7b, 0x31, 0x80, 0x31,
383: 0x81, 0x31, YYOTHERS, 0x46, 0xa, 0x32, 0xd, 0x32,
384: 0x1b, 0x47, 0x1d, 0x4b, 0x23, 0x54, 0x24, 0x58,
385: 0x56, 0x8c, 0x57, 0x8d, 0x62, 0x96, 0x63, 0x97,
386: 0x64, 0x98, 0x65, 0x99, 0x66, 0x9a, 0x79, 0x32,
387: 0x7b, 0x32, 0x80, 0x32, 0x81, 0x32, 0x8b, 0x8d,
388: YYOTHERS, 0x2a, 0x9, 0x2b, 0x18, 0x43, 0x19, 0x43,
389: 0x1a, 0x43, 0x1b, 0x48, 0x1c, 0x2b, 0x1d, 0x4c,
390: 0x1f, 0x51, 0x20, 0x52, 0x21, 0x53, 0x23, 0x55,
391: 0x25, 0x5a, 0x3f, 0x2b, 0x5c, 0x8f, 0x5e, 0x43,
392: 0x5f, 0x91, 0x60, 0x93, 0x67, 0x9b, 0x68, 0x9d,
393: 0x69, 0x9e, 0x6a, 0x9f, 0x6b, 0xa0, 0x6c, 0xa1,
394: 0x6d, 0xa2, 0x6e, 0xa3, 0x6f, 0xa4, 0x70, 0xa5,
395: 0x71, 0xa6, 0x75, 0xac, 0x76, 0xad, 0x78, 0x2b,
396: 0x88, 0xb6, 0xb7, 0xc7, 0xb9, 0xc9, 0xbc, 0xcc,
397: 0xbf, 0xce, 0xc4, 0xcf, 0xca, 0xd4, 0xcd, 0xd8,
398: 0xd1, 0xdb, 0xd5, 0xdd, YYOTHERS, 0x33, 0xa, 0x34,
399: 0xd, 0x34, 0x1d, 0x4d, 0x24, 0x59, 0x25, 0x5b,
400: 0x57, 0x8e, 0x73, 0xaa, 0x74, 0xab, 0x77, 0xae,
401: 0x79, 0x34, 0x7b, 0x34, 0x80, 0x34, 0x81, 0x34,
402: 0xa9, 0x8e, YYOTHERS, 0x2c, 0x1c, 0x49, YYOTHERS, 0x2d,
403: 0x3f, 0x83, YYOTHERS, 0x2e
404: };
405: unsigned short yypa[225] = {
406: 0, 22, 26, 28, 52, 54, 74, 76,
407: 80, 82, 128, 162, 162, 166, 200, 204,
408: 210, 214, 216, 218, 220, 224, 226, 230,
409: 166, 166, 166, 166, 236, 166, 278, 166,
410: 166, 166, 284, 166, 286, 166, 300, 304,
411: 306, 310, 320, 332, 358, 370, 374, 376,
412: 380, 384, 392, 404, 430, 442, 444, 448,
413: 452, 456, 460, 462, 464, 468, 472, 474,
414: 516, 518, 520, 522, 546, 548, 550, 558,
415: 560, 562, 564, 574, 588, 614, 628, 634,
416: 638, 646, 670, 672, 674, 676, 678, 688,
417: 702, 704, 706, 708, 166, 710, 166, 166,
418: 166, 712, 678, 678, 678, 678, 678, 166,
419: 166, 166, 166, 166, 166, 166, 166, 166,
420: 166, 166, 718, 724, 724, 166, 166, 732,
421: 740, 128, 784, 166, 786, 162, 788, 790,
422: 166, 128, 792, 794, 796, 798, 800, 802,
423: 804, 840, 842, 678, 558, 846, 858, 866,
424: 892, 898, 906, 908, 916, 922, 926, 936,
425: 942, 948, 950, 952, 968, 970, 978, 986,
426: 988, 990, 992, 1004, 1016, 1034, 1056, 1076,
427: 1082, 732, 1086, 1092, 1096, 1124, 1150, 1156,
428: 1158, 1160, 1162, 1164, 1168, 1172, 1178, 166,
429: 1204, 1206, 1242, 1244, 1248, 1284, 1286, 166,
430: 1290, 1292, 1294, 1296, 166, 1298, 1300, 1302,
431: 1328, 1334, 166, 1360, 1366, 166, 1392, 1418,
432: 1444, 166, 1446, 1448, 1450, 166, 1476, 1478,
433: 1480, 1506, 1508, 1510, 1536, 1538, 1564, 1566,
434: 1568
435: };
436: unsigned int yyact[1570] = {
437: 0x2, 0x147, 0x201b, 0x104, 0x201b, 0x105, 0x201b, 0x106,
438: 0x201b, 0x107, 0x201b, 0x108, 0x201b, 0x109, 0x201b, 0x10a,
439: 0x201b, 0x10b, 0x201b, 0x14d, 0x1, YYOTHERS, 0x6, 0x14d,
440: 0x6000, YYOTHERS, 0x201c, YYOTHERS, 0x7, YYEOFVAL, 0x2, 0x147,
441: 0x201b, 0x104, 0x201b, 0x105, 0x201b, 0x106, 0x201b, 0x107,
442: 0x201b, 0x108, 0x201b, 0x109, 0x201b, 0x10a, 0x201b, 0x10b,
443: 0x201b, 0x14d, 0x1, YYOTHERS, 0x2001, YYOTHERS, 0x9, 0x104,
444: 0xa, 0x105, 0xb, 0x106, 0xc, 0x107, 0xd, 0x108,
445: 0xe, 0x109, 0xf, 0x10a, 0x10, 0x10b, 0x11, 0x14d,
446: 0x6000, YYOTHERS, 0x200e, YYOTHERS, 0x4000, YYEOFVAL, 0x6000, YYOTHERS,
447: 0x2002, YYOTHERS, 0x12, 0x101, 0x13, 0x102, 0x14, 0x104,
448: 0x15, 0x10c, 0x16, 0x10d, 0x17, 0x140, 0x18, 0x141,
449: 0x19, 0x142, 0x1a, 0x143, 0x1b, 0x13c, 0x1c, 0x13d,
450: 0x1d, 0x148, 0x1e, 0x149, 0x1f, 0x122, 0x20, 0x144,
451: 0x21, 0x146, 0x22, 0x126, 0x23, 0x14a, 0x24, 0x14b,
452: 0x25, 0x14c, 0x26, 0x12a, 0x27, 0x147, 0x2020, YYOTHERS,
453: 0x12, 0x101, 0x13, 0x102, 0x15, 0x10c, 0x17, 0x140,
454: 0x18, 0x141, 0x19, 0x142, 0x1a, 0x143, 0x1b, 0x13c,
455: 0x1d, 0x148, 0x20, 0x144, 0x21, 0x146, 0x22, 0x126,
456: 0x23, 0x14a, 0x24, 0x14b, 0x25, 0x14c, 0x27, 0x147,
457: 0x2011, YYOTHERS, 0x35, 0x147, 0x2019, YYOTHERS, 0x12, 0x101,
458: 0x13, 0x102, 0x15, 0x10c, 0x17, 0x140, 0x18, 0x141,
459: 0x19, 0x142, 0x1a, 0x143, 0x1b, 0x13c, 0x1d, 0x148,
460: 0x20, 0x144, 0x21, 0x146, 0x22, 0x126, 0x23, 0x14a,
461: 0x24, 0x14b, 0x25, 0x14c, 0x27, 0x147, 0x6000, YYOTHERS,
462: 0x3a, 0x14d, 0x6000, YYOTHERS, 0x3b, 0x14d, 0x35, 0x147,
463: 0x6000, YYOTHERS, 0x35, 0x147, 0x6000, YYOTHERS, 0x200d, YYOTHERS,
464: 0x203e, YYOTHERS, 0x2063, YYOTHERS, 0x3e, 0x14d, 0x6000, YYOTHERS,
465: 0x2039, YYOTHERS, 0x3f, 0x132, 0x2023, YYOTHERS, 0x40, 0x101,
466: 0x41, 0x10c, 0x6000, YYOTHERS, 0x12, 0x101, 0x13, 0x102,
467: 0x15, 0x10c, 0x16, 0x10d, 0x17, 0x140, 0x18, 0x141,
468: 0x19, 0x142, 0x1a, 0x143, 0x1b, 0x13c, 0x1d, 0x148,
469: 0x1e, 0x149, 0x1f, 0x122, 0x20, 0x144, 0x21, 0x146,
470: 0x22, 0x126, 0x23, 0x14a, 0x24, 0x14b, 0x25, 0x14c,
471: 0x26, 0x12a, 0x27, 0x147, 0x6000, YYOTHERS, 0x4e, 0x10d,
472: 0x4f, 0x131, 0x6000, YYOTHERS, 0x204a, YYOTHERS, 0x13, 0x102,
473: 0x56, 0x13c, 0x57, 0x148, 0x23, 0x14a, 0x25, 0x14c,
474: 0x27, 0x147, 0x6000, YYOTHERS, 0x5c, 0x149, 0x2024, YYOTHERS,
475: 0x205c, YYOTHERS, 0x5d, 0x14d, 0x6000, YYOTHERS, 0x5e, 0x138,
476: 0x5f, 0x13b, 0x60, 0x13c, 0x61, 0x149, 0x2035, YYOTHERS,
477: 0x62, 0x138, 0x63, 0x13b, 0x64, 0x13c, 0x65, 0x13d,
478: 0x66, 0x13e, 0x6000, YYOTHERS, 0x67, 0x138, 0x68, 0x13b,
479: 0x69, 0x13c, 0x6a, 0x13d, 0x6b, 0x13e, 0x6c, 0x13f,
480: 0x6d, 0x139, 0x6e, 0x13a, 0x6f, 0x137, 0x70, 0x135,
481: 0x71, 0x136, 0x72, 0x149, 0x2036, YYOTHERS, 0x73, 0x138,
482: 0x74, 0x13b, 0x75, 0x148, 0x76, 0x149, 0x77, 0x133,
483: 0x6000, YYOTHERS, 0x78, 0x131, 0x201e, YYOTHERS, 0x2021, YYOTHERS,
484: 0x79, 0x131, 0x2010, YYOTHERS, 0x7a, 0x14d, 0x6000, YYOTHERS,
485: 0x5e, 0x138, 0x5f, 0x13b, 0x60, 0x13c, 0x2012, YYOTHERS,
486: 0x62, 0x138, 0x63, 0x13b, 0x64, 0x13c, 0x65, 0x13d,
487: 0x66, 0x13e, 0x2013, YYOTHERS, 0x67, 0x138, 0x68, 0x13b,
488: 0x69, 0x13c, 0x6a, 0x13d, 0x6b, 0x13e, 0x6c, 0x13f,
489: 0x6d, 0x139, 0x6e, 0x13a, 0x6f, 0x137, 0x70, 0x135,
490: 0x71, 0x136, 0x7b, 0x134, 0x2014, YYOTHERS, 0x73, 0x138,
491: 0x74, 0x13b, 0x75, 0x148, 0x76, 0x149, 0x77, 0x133,
492: 0x2015, YYOTHERS, 0x201a, YYOTHERS, 0x7c, 0x14d, 0x6000, YYOTHERS,
493: 0x7d, 0x131, 0x2017, YYOTHERS, 0x7e, 0x14d, 0x6000, YYOTHERS,
494: 0x7f, 0x14d, 0x6000, YYOTHERS, 0x2008, YYOTHERS, 0x2007, YYOTHERS,
495: 0x80, 0x131, 0x6000, YYOTHERS, 0x81, 0x131, 0x6000, YYOTHERS,
496: 0x200c, YYOTHERS, 0x12, 0x101, 0x13, 0x102, 0x15, 0x10c,
497: 0x82, 0x10d, 0x17, 0x140, 0x18, 0x141, 0x19, 0x142,
498: 0x1a, 0x143, 0x1b, 0x13c, 0x1d, 0x148, 0x1e, 0x149,
499: 0x1f, 0x122, 0x20, 0x144, 0x21, 0x146, 0x22, 0x126,
500: 0x23, 0x14a, 0x24, 0x14b, 0x25, 0x14c, 0x26, 0x12a,
501: 0x27, 0x147, 0x6000, YYOTHERS, 0x2049, YYOTHERS, 0x2048, YYOTHERS,
502: 0x2045, YYOTHERS, 0x67, 0x138, 0x68, 0x13b, 0x69, 0x13c,
503: 0x6a, 0x13d, 0x6b, 0x13e, 0x6c, 0x13f, 0x6d, 0x139,
504: 0x6e, 0x13a, 0x6f, 0x137, 0x70, 0x135, 0x71, 0x136,
505: 0x6000, YYOTHERS, 0x2047, YYOTHERS, 0x2046, YYOTHERS, 0x5e, 0x138,
506: 0x5f, 0x13b, 0x60, 0x13c, 0x6000, YYOTHERS, 0x2069, YYOTHERS,
507: 0x2055, YYOTHERS, 0x201f, YYOTHERS, 0x5e, 0x138, 0x5f, 0x13b,
508: 0x60, 0x13c, 0x84, 0x11e, 0x6000, YYOTHERS, 0x62, 0x138,
509: 0x63, 0x13b, 0x64, 0x13c, 0x65, 0x13d, 0x66, 0x13e,
510: 0x85, 0x11e, 0x6000, YYOTHERS, 0x67, 0x138, 0x68, 0x13b,
511: 0x69, 0x13c, 0x6a, 0x13d, 0x6b, 0x13e, 0x6c, 0x13f,
512: 0x6d, 0x139, 0x6e, 0x13a, 0x6f, 0x137, 0x70, 0x135,
513: 0x71, 0x136, 0x86, 0x11e, 0x6000, YYOTHERS, 0x73, 0x138,
514: 0x74, 0x13b, 0x75, 0x148, 0x87, 0x11e, 0x76, 0x149,
515: 0x77, 0x133, 0x6000, YYOTHERS, 0x88, 0x131, 0x89, 0x120,
516: 0x6000, YYOTHERS, 0x8a, 0x10d, 0x6000, YYOTHERS, 0x5e, 0x138,
517: 0x5f, 0x13b, 0x60, 0x13c, 0x2038, YYOTHERS, 0x67, 0x138,
518: 0x68, 0x13b, 0x69, 0x13c, 0x6a, 0x13d, 0x6b, 0x13e,
519: 0x6c, 0x13f, 0x6d, 0x139, 0x6e, 0x13a, 0x6f, 0x137,
520: 0x70, 0x135, 0x71, 0x136, 0x2037, YYOTHERS, 0x2057, YYOTHERS,
521: 0x2056, YYOTHERS, 0x2062, YYOTHERS, 0x2061, YYOTHERS, 0x13, 0x102,
522: 0x56, 0x13c, 0x8b, 0x148, 0x25, 0x14c, 0x6000, YYOTHERS,
523: 0x13, 0x102, 0x56, 0x13c, 0x57, 0x148, 0x23, 0x14a,
524: 0x25, 0x14c, 0x27, 0x147, 0x6000, YYOTHERS, 0x205b, YYOTHERS,
525: 0x205a, YYOTHERS, 0x206b, YYOTHERS, 0x206a, YYOTHERS, 0x200b, YYOTHERS,
526: 0x94, 0x10d, 0x95, 0x131, 0x6000, YYOTHERS, 0xa7, 0x10d,
527: 0xa8, 0x131, 0x6000, YYOTHERS, 0xa9, 0x148, 0x23, 0x14a,
528: 0x27, 0x147, 0x6000, YYOTHERS, 0xa9, 0x148, 0x23, 0x14a,
529: 0x27, 0x147, 0x6000, YYOTHERS, 0x12, 0x101, 0x13, 0x102,
530: 0x15, 0x10c, 0x16, 0x10d, 0x17, 0x140, 0x18, 0x141,
531: 0x19, 0x142, 0x1a, 0x143, 0x1b, 0x13c, 0x1c, 0x13d,
532: 0x1d, 0x148, 0x1e, 0x149, 0x1f, 0x122, 0x20, 0x144,
533: 0x21, 0x146, 0x22, 0x126, 0x23, 0x14a, 0x24, 0x14b,
534: 0x25, 0x14c, 0x26, 0x12a, 0x27, 0x147, 0x2020, YYOTHERS,
535: 0x200a, YYOTHERS, 0x2003, YYOTHERS, 0x2004, YYOTHERS, 0x2009, YYOTHERS,
536: 0x2023, YYOTHERS, 0x2022, YYOTHERS, 0x203a, YYOTHERS, 0x2064, YYOTHERS,
537: 0x203f, YYOTHERS, 0x205d, YYOTHERS, 0x12, 0x101, 0x13, 0x102,
538: 0x15, 0x10c, 0xb5, 0x10d, 0x17, 0x140, 0x18, 0x141,
539: 0x19, 0x142, 0x1a, 0x143, 0x1b, 0x13c, 0x1d, 0x148,
540: 0x20, 0x144, 0x21, 0x146, 0x22, 0x126, 0x23, 0x14a,
541: 0x24, 0x14b, 0x25, 0x14c, 0x27, 0x147, 0x6000, YYOTHERS,
542: 0x2026, YYOTHERS, 0xb7, 0x131, 0x6000, YYOTHERS, 0x63, 0x13b,
543: 0x64, 0x13c, 0x65, 0x13d, 0x66, 0x13e, 0x85, 0x11e,
544: 0x6000, YYOTHERS, 0x74, 0x13b, 0x75, 0x148, 0x87, 0x11e,
545: 0x6000, YYOTHERS, 0x67, 0x138, 0x68, 0x13b, 0x69, 0x13c,
546: 0x6a, 0x13d, 0x6b, 0x13e, 0x6c, 0x13f, 0x6d, 0x139,
547: 0x6e, 0x13a, 0x6f, 0x137, 0x70, 0x135, 0x71, 0x136,
548: 0xb8, 0x120, 0x6000, YYOTHERS, 0x5f, 0x13b, 0x60, 0x13c,
549: 0x2041, YYOTHERS, 0x6a, 0x13d, 0x6b, 0x13e, 0x6c, 0x13f,
550: 0x203b, YYOTHERS, 0x2040, YYOTHERS, 0x6a, 0x13d, 0x6b, 0x13e,
551: 0x6c, 0x13f, 0x203c, YYOTHERS, 0xb9, 0x131, 0xba, 0x120,
552: 0x6000, YYOTHERS, 0xbb, 0x10d, 0x6000, YYOTHERS, 0x63, 0x13b,
553: 0x64, 0x13c, 0x65, 0x13d, 0x66, 0x13e, 0x2044, YYOTHERS,
554: 0x65, 0x13d, 0x66, 0x13e, 0x2065, YYOTHERS, 0x65, 0x13d,
555: 0x66, 0x13e, 0x2066, YYOTHERS, 0x2067, YYOTHERS, 0x2068, YYOTHERS,
556: 0x68, 0x13b, 0x69, 0x13c, 0x6a, 0x13d, 0x6b, 0x13e,
557: 0x6c, 0x13f, 0x6d, 0x139, 0x6e, 0x13a, 0x2042, YYOTHERS,
558: 0x203d, YYOTHERS, 0x6a, 0x13d, 0x6b, 0x13e, 0x6c, 0x13f,
559: 0x204b, YYOTHERS, 0x6a, 0x13d, 0x6b, 0x13e, 0x6c, 0x13f,
560: 0x204c, YYOTHERS, 0x204d, YYOTHERS, 0x204e, YYOTHERS, 0x204f, YYOTHERS,
561: 0x68, 0x13b, 0x69, 0x13c, 0x6a, 0x13d, 0x6b, 0x13e,
562: 0x6c, 0x13f, 0x2050, YYOTHERS, 0x68, 0x13b, 0x69, 0x13c,
563: 0x6a, 0x13d, 0x6b, 0x13e, 0x6c, 0x13f, 0x2051, YYOTHERS,
564: 0x67, 0x138, 0x68, 0x13b, 0x69, 0x13c, 0x6a, 0x13d,
565: 0x6b, 0x13e, 0x6c, 0x13f, 0x6d, 0x139, 0x6e, 0x13a,
566: 0x2052, YYOTHERS, 0x67, 0x138, 0x68, 0x13b, 0x69, 0x13c,
567: 0x6a, 0x13d, 0x6b, 0x13e, 0x6c, 0x13f, 0x6d, 0x139,
568: 0x6e, 0x13a, 0x6f, 0x137, 0x71, 0x136, 0x2053, YYOTHERS,
569: 0x67, 0x138, 0x68, 0x13b, 0x69, 0x13c, 0x6a, 0x13d,
570: 0x6b, 0x13e, 0x6c, 0x13f, 0x6d, 0x139, 0x6e, 0x13a,
571: 0x6f, 0x137, 0x2054, YYOTHERS, 0xbc, 0x131, 0xbd, 0x120,
572: 0x6000, YYOTHERS, 0xbe, 0x10d, 0x6000, YYOTHERS, 0x74, 0x13b,
573: 0x75, 0x148, 0x2043, YYOTHERS, 0x75, 0x148, 0x205e, YYOTHERS,
574: 0x67, 0x138, 0x68, 0x13b, 0x69, 0x13c, 0x6a, 0x13d,
575: 0x6b, 0x13e, 0x6c, 0x13f, 0x6d, 0x139, 0x6e, 0x13a,
576: 0x6f, 0x137, 0x70, 0x135, 0x71, 0x136, 0xbf, 0x131,
577: 0xc0, 0x11e, 0x6000, YYOTHERS, 0x67, 0x138, 0x68, 0x13b,
578: 0x69, 0x13c, 0x6a, 0x13d, 0x6b, 0x13e, 0x6c, 0x13f,
579: 0x6d, 0x139, 0x6e, 0x13a, 0x6f, 0x137, 0x70, 0x135,
580: 0x71, 0x136, 0xc1, 0x120, 0x6000, YYOTHERS, 0x74, 0x13b,
581: 0x75, 0x148, 0x2059, YYOTHERS, 0x201d, YYOTHERS, 0x200f, YYOTHERS,
582: 0x2016, YYOTHERS, 0x2018, YYOTHERS, 0xc2, 0x14d, 0x6000, YYOTHERS,
583: 0xc3, 0x14d, 0x6000, YYOTHERS, 0xc4, 0x131, 0xc5, 0x120,
584: 0x6000, YYOTHERS, 0x67, 0x138, 0x68, 0x13b, 0x69, 0x13c,
585: 0x6a, 0x13d, 0x6b, 0x13e, 0x6c, 0x13f, 0x6d, 0x139,
586: 0x6e, 0x13a, 0x6f, 0x137, 0x70, 0x135, 0x71, 0x136,
587: 0xc6, 0x120, 0x6000, YYOTHERS, 0x2025, YYOTHERS, 0x12, 0x101,
588: 0x13, 0x102, 0x15, 0x10c, 0xc8, 0x10d, 0x17, 0x140,
589: 0x18, 0x141, 0x19, 0x142, 0x1a, 0x143, 0x1b, 0x13c,
590: 0x1d, 0x148, 0x20, 0x144, 0x21, 0x146, 0x22, 0x126,
591: 0x23, 0x14a, 0x24, 0x14b, 0x25, 0x14c, 0x27, 0x147,
592: 0x6000, YYOTHERS, 0x2030, YYOTHERS, 0xca, 0x131, 0x6000, YYOTHERS,
593: 0x12, 0x101, 0x13, 0x102, 0x15, 0x10c, 0xcb, 0x10d,
594: 0x17, 0x140, 0x18, 0x141, 0x19, 0x142, 0x1a, 0x143,
595: 0x1b, 0x13c, 0x1d, 0x148, 0x20, 0x144, 0x21, 0x146,
596: 0x22, 0x126, 0x23, 0x14a, 0x24, 0x14b, 0x25, 0x14c,
597: 0x27, 0x147, 0x6000, YYOTHERS, 0x202b, YYOTHERS, 0xcd, 0x131,
598: 0x6000, YYOTHERS, 0x2060, YYOTHERS, 0x2058, YYOTHERS, 0x2005, YYOTHERS,
599: 0x2006, YYOTHERS, 0x2029, YYOTHERS, 0x2027, YYOTHERS, 0x67, 0x138,
600: 0x68, 0x13b, 0x69, 0x13c, 0x6a, 0x13d, 0x6b, 0x13e,
601: 0x6c, 0x13f, 0x6d, 0x139, 0x6e, 0x13a, 0x6f, 0x137,
602: 0x70, 0x135, 0x71, 0x136, 0xd0, 0x120, 0x6000, YYOTHERS,
603: 0xd1, 0x131, 0xd2, 0x120, 0x6000, YYOTHERS, 0x67, 0x138,
604: 0x68, 0x13b, 0x69, 0x13c, 0x6a, 0x13d, 0x6b, 0x13e,
605: 0x6c, 0x13f, 0x6d, 0x139, 0x6e, 0x13a, 0x6f, 0x137,
606: 0x70, 0x135, 0x71, 0x136, 0xd3, 0x120, 0x6000, YYOTHERS,
607: 0xd5, 0x131, 0xd6, 0x120, 0x6000, YYOTHERS, 0x67, 0x138,
608: 0x68, 0x13b, 0x69, 0x13c, 0x6a, 0x13d, 0x6b, 0x13e,
609: 0x6c, 0x13f, 0x6d, 0x139, 0x6e, 0x13a, 0x6f, 0x137,
610: 0x70, 0x135, 0x71, 0x136, 0xd7, 0x120, 0x6000, YYOTHERS,
611: 0x67, 0x138, 0x68, 0x13b, 0x69, 0x13c, 0x6a, 0x13d,
612: 0x6b, 0x13e, 0x6c, 0x13f, 0x6d, 0x139, 0x6e, 0x13a,
613: 0x6f, 0x137, 0x70, 0x135, 0x71, 0x136, 0xd9, 0x11e,
614: 0x6000, YYOTHERS, 0x67, 0x138, 0x68, 0x13b, 0x69, 0x13c,
615: 0x6a, 0x13d, 0x6b, 0x13e, 0x6c, 0x13f, 0x6d, 0x139,
616: 0x6e, 0x13a, 0x6f, 0x137, 0x70, 0x135, 0x71, 0x136,
617: 0xda, 0x120, 0x6000, YYOTHERS, 0x2028, YYOTHERS, 0x2033, YYOTHERS,
618: 0x2031, YYOTHERS, 0x67, 0x138, 0x68, 0x13b, 0x69, 0x13c,
619: 0x6a, 0x13d, 0x6b, 0x13e, 0x6c, 0x13f, 0x6d, 0x139,
620: 0x6e, 0x13a, 0x6f, 0x137, 0x70, 0x135, 0x71, 0x136,
621: 0xdc, 0x120, 0x6000, YYOTHERS, 0x202e, YYOTHERS, 0x202c, YYOTHERS,
622: 0x67, 0x138, 0x68, 0x13b, 0x69, 0x13c, 0x6a, 0x13d,
623: 0x6b, 0x13e, 0x6c, 0x13f, 0x6d, 0x139, 0x6e, 0x13a,
624: 0x6f, 0x137, 0x70, 0x135, 0x71, 0x136, 0xde, 0x120,
625: 0x6000, YYOTHERS, 0x205f, YYOTHERS, 0x202a, YYOTHERS, 0x67, 0x138,
626: 0x68, 0x13b, 0x69, 0x13c, 0x6a, 0x13d, 0x6b, 0x13e,
627: 0x6c, 0x13f, 0x6d, 0x139, 0x6e, 0x13a, 0x6f, 0x137,
628: 0x70, 0x135, 0x71, 0x136, 0xdf, 0x120, 0x6000, YYOTHERS,
629: 0x2032, YYOTHERS, 0x67, 0x138, 0x68, 0x13b, 0x69, 0x13c,
630: 0x6a, 0x13d, 0x6b, 0x13e, 0x6c, 0x13f, 0x6d, 0x139,
631: 0x6e, 0x13a, 0x6f, 0x137, 0x70, 0x135, 0x71, 0x136,
632: 0xe0, 0x120, 0x6000, YYOTHERS, 0x202d, YYOTHERS, 0x2034, YYOTHERS,
633: 0x202f, YYOTHERS
634: };
635:
636:
637: #define YYNOCHAR (-1000)
638: #define yyerrok yyerrflag=0
639: #define yyclearin yylval=YYNOCHAR
640: int yystack[YYMAXDEPTH];
641: YYSTYPE yyvstack[YYMAXDEPTH], *yyv;
642: int yychar;
643:
644: #ifdef YYDEBUG
645: int yydebug = 1; /* No sir, not in the BSS */
646: #include <stdio.h>
647: #endif
648:
649: short yyerrflag;
650: int *yys;
651:
652: yyparse()
653: {
654: register YYSTYPE *yypvt;
655: int act;
656: register unsigned *ip, yystate;
657: int pno;
658: yystate = 0;
659: yychar = YYNOCHAR;
660: yyv = &yyvstack[-1];
661: yys = &yystack[-1];
662:
663: stack:
664: if( ++yys >= &yystack[YYMAXDEPTH] ) {
665: write(2, "Stack overflow\n", 15);
666: exit(1);
667: }
668: *yys = yystate;
669: *++yyv = yyval;
670: #ifdef YYDEBUG
671: if( yydebug )
672: fprintf(stdout, "Stack state %d, char %d\n", yystate, yychar);
673: #endif
674:
675: read:
676: ip = &yyact[yypa[yystate]];
677: if( ip[1] != YYNOCHAR ) {
678: if( yychar == YYNOCHAR ) {
679: yychar = yylex();
680: #ifdef YYDEBUG
681: if( yydebug )
682: fprintf(stdout, "lex read char %d, val %d\n", yychar, yylval);
683: #endif
684: }
685: while (ip[1]!=YYNOCHAR) {
686: if (ip[1]==yychar)
687: break;
688: ip += 2;
689: }
690: }
691: act = ip[0];
692: switch( act>>YYACTSH ) {
693: case YYSHIFTACT:
694: if( ip[1]==YYNOCHAR )
695: goto YYerract;
696: if( yychar != -1 )
697: yychar = YYNOCHAR; /* dont throw away EOF */
698: yystate = act&YYAMASK;
699: yyval = yylval;
700: #ifdef YYDEBUG
701: if( yydebug )
702: fprintf(stdout, "shift %d\n", yystate);
703: #endif
704: if( yyerrflag )
705: --yyerrflag;
706: goto stack;
707:
708: case YYACCEPTACT:
709: #ifdef YYDEBUG
710: if( yydebug )
711: fprintf(stdout, "accept\n");
712: #endif
713: return(0);
714:
715: case YYERRACT:
716: YYerract:
717: switch (yyerrflag) {
718: case 0:
719: yyerror("Syntax error");
720:
721: case 1:
722: case 2:
723:
724: yyerrflag = 3;
725: while( yys >= & yystack[0] ) {
726: ip = &yyact[yypa[*yys]];
727: while( ip[1]!=YYNOCHAR )
728: ip += 2;
729: if( (*ip&~YYAMASK) == (YYSHIFTACT<<YYACTSH) ) {
730: yystate = *ip&YYAMASK;
731: goto stack;
732: }
733: #ifdef YYDEBUG
734: if( yydebug )
735: fprintf(stderr, "error recovery leaves state %d, uncovers %d\n", *yys, yys[-1]);
736: #endif
737: yys--;
738: yyv--;
739: }
740: #ifdef YYDEBUG
741: if( yydebug )
742: fprintf(stderr, "no shift on error; abort\n");
743: #endif
744: return(1);
745:
746: case 3:
747: #ifdef YYDEBUG
748: if( yydebug )
749: fprintf(stderr, "Error recovery clobbers char %o\n", yychar);
750: #endif
751: if( yychar==YYEOFVAL )
752: return(1);
753: yychar = YYNOCHAR;
754: goto read;
755: }
756:
757: case YYREDACT:
758: pno = act&YYAMASK;
759: #ifdef YYDEBUG
760: if( yydebug )
761: fprintf(stdout, "reduce %d\n", pno);
762: #endif
763: yypvt = yyv;
764: yyv -= yypn[pno];
765: yys -= yypn[pno];
766: yyval = yyv[1];
767: switch(pno) {
768:
769: case 3: {
770:
771: #line 352 "asm.y"
772: /* assembler command with parms */
773: docmd(yypvt[-3].p, yypvt[-2].o, yypvt[-1].p); }break;
774:
775: case 4: {
776:
777: #line 354 "asm.y"
778: /* a command with string parms */
779: docmd(yypvt[-3].p, yypvt[-2].o, yypvt[-1].p); }break;
780:
781: case 5: {
782:
783: #line 356 "asm.y"
784: /* command with a name & an expr */
785: ecmd(yypvt[-5].p, yypvt[-4].o, yypvt[-3].p, yypvt[-1].d); }break;
786:
787: case 6: {
788:
789: #line 359 "asm.y"
790:
791: ecmd(yypvt[-5].p, yypvt[-4].o, yypvt[-3].p, yypvt[-1].d); }break;
792:
793: case 7: {
794:
795: #line 361 "asm.y"
796:
797: ecmd(yypvt[-2].p, yypvt[-1].o, NULL, NULL); }break;
798:
799: case 8: {
800:
801: #line 363 "asm.y"
802: /* assembler command takes no parms */
803: docmd(yypvt[-2].p, yypvt[-1].o, (parm *)NULL); }break;
804:
805: case 9: {
806:
807: #line 365 "asm.y"
808: /* assembler command with data parm */
809: ncmd(yypvt[-3].p, yypvt[-2].o, yypvt[-1].d); }break;
810:
811: case 10: {
812:
813: #line 367 "asm.y"
814: /* data list */
815: dcmd(yypvt[-3].p, yypvt[-2].o, yypvt[-1].d); }break;
816:
817: case 11: {
818:
819: #line 369 "asm.y"
820: /* opcode operands */
821: buildind(yypvt[-3].p, yypvt[-2].o, yypvt[-1].e); }break;
822:
823: case 12: {
824:
825: #line 371 "asm.y"
826: /* built by rep instr */
827: buildind(yypvt[-3].p, yypvt[-2].o, NULL);
828: buildind(NULL, yypvt[-1].o, NULL ); }break;
829:
830: case 13: {
831:
832: #line 374 "asm.y"
833: /* label alone on line */
834: buildlab(yypvt[-1].p); }break;
835:
836: case 14: {
837:
838: #line 376 "asm.y"
839: /* syntax error */
840: if (bcnt > 0)
841: unmatched('[');
842: if (bcnt < 0)
843: unmatched(']');
844: if (pcnt > 0)
845: unmatched('(');
846: if (pcnt < 0)
847: unmatched(')');
848: yyerrok; }break;
849:
850: case 15: {
851:
852: #line 387 "asm.y"
853:
854: yyval.d = yypvt[-2].d;
855: yyval.d->next = yypvt[0].d; }break;
856:
857: case 16: {
858:
859: #line 390 "asm.y"
860:
861: yyval.d = yypvt[0].d; }break;
862:
863: case 17: {
864:
865: #line 392 "asm.y"
866:
867: yyval.d = NULL; }break;
868:
869: case 18: {
870:
871: #line 395 "asm.y"
872:
873: yyval.d = gitem('y');
874: yyval.d->d.y = yypvt[0].s; }break;
875:
876: case 19: {
877:
878: #line 398 "asm.y"
879:
880: yyval.d = gitem('d');
881: yyval.d->d.d = yypvt[0].dbl; }break;
882:
883: case 20: {
884:
885: #line 401 "asm.y"
886:
887: yyval.d = gitem('l');
888: yyval.d->d.l = yypvt[0].val; }break;
889:
890: case 21: {
891:
892: #line 404 "asm.y"
893:
894: yyval.d = gitem('s');
895: yyval.d->d.s = yypvt[0].t; }break;
896:
897: case 22: {
898:
899: #line 407 "asm.y"
900:
901: yyval.d = yypvt[0].d;
902: yyval.d->count = yypvt[-2].val; }break;
903:
904: case 23: {
905:
906: #line 411 "asm.y"
907: /* start parm list */
908: yyval.p = yypvt[0].p; }break;
909:
910: case 24: {
911:
912: #line 413 "asm.y"
913: /* chain parm list */
914: yyval.p = yypvt[-2].p;
915: yyval.p->next = yypvt[0].p; }break;
916:
917: case 25: {
918:
919: #line 416 "asm.y"
920:
921: yyval.p = NULL; }break;
922:
923: case 26: {
924:
925: #line 419 "asm.y"
926: /* start a parm */
927: yyval.p = (parm *)gcpy(yypvt[0].t, offset(parm, str)); }break;
928:
929: case 27: {
930:
931: #line 422 "asm.y"
932:
933: yyval.p = NULL; }break;
934:
935: case 28: {
936:
937: #line 424 "asm.y"
938:
939: yyval.p = (parm *)gcpy(yypvt[0].t, offset(parm, str)); }break;
940:
941: case 29: {
942:
943: #line 428 "asm.y"
944:
945: yyval.e = yypvt[-2].e;
946: yyval.e->next = yypvt[0].e; }break;
947:
948: case 30: {
949:
950: #line 431 "asm.y"
951:
952: yyval.e = yypvt[0].e; }break;
953:
954: case 31: {
955:
956: #line 433 "asm.y"
957:
958: lflags |= A_INDIR;
959: yyval.e = yypvt[0].e; }break;
960:
961: case 32: {
962:
963: #line 436 "asm.y"
964:
965: yyval.e = NULL; }break;
966:
967: case 33: {
968:
969: #line 439 "asm.y"
970:
971: yyval.e->sg = -1;
972: yyval.e = yypvt[0].e; }break;
973:
974: case 34: {
975:
976: #line 442 "asm.y"
977:
978: yyval.e = yypvt[0].e;
979: if (yypvt[-2].s->flag != SEG_REG)
980: regerror(yypvt[-2].s);
981: yyval.e->sg = yypvt[-2].s->loc; }break;
982:
983: case 35: {
984:
985: #line 449 "asm.y"
986:
987: yyval.e = qbild(0L, T_R, yypvt[0].s, NULL, 0L, NULL); }break;
988:
989: case 36: {
990:
991: #line 452 "asm.y"
992:
993: yyval.e = fbild(0L); }break;
994:
995: case 37: {
996:
997: #line 455 "asm.y"
998:
999: yyval.e = fbild(yypvt[-1].val); }break;
1000:
1001: case 38: {
1002:
1003: #line 458 "asm.y"
1004:
1005: yyval.e = qbild(0L, T_RI, yypvt[-1].s, NULL, 0L, NULL); }break;
1006:
1007: case 39: {
1008:
1009: #line 461 "asm.y"
1010:
1011: yyval.e = qbild(0L, T_RIS, yypvt[-3].s, NULL, yypvt[-1].val, NULL); }break;
1012:
1013: case 40: {
1014:
1015: #line 464 "asm.y"
1016:
1017: yyval.e = qbild(0L, T_RIS, yypvt[-3].s, NULL, yypvt[-1].val, NULL); }break;
1018:
1019: case 41: {
1020:
1021: #line 467 "asm.y"
1022:
1023: yyval.e = qbild(0L, T_RIX, yypvt[-3].s, yypvt[-1].s, 0L, NULL); }break;
1024:
1025: case 42: {
1026:
1027: #line 470 "asm.y"
1028:
1029: yyval.e = qbild(0L, T_RIXS, yypvt[-5].s, yypvt[-3].s, yypvt[-1].val, NULL); }break;
1030:
1031: case 43: {
1032:
1033: #line 473 "asm.y"
1034:
1035: yyval.e = qbild(yypvt[-3].val, T_RID, yypvt[-1].s, NULL, 0L, NULL); }break;
1036:
1037: case 44: {
1038:
1039: #line 476 "asm.y"
1040:
1041: yyval.e = qbild(yypvt[-5].val, T_RIDS, yypvt[-3].s, NULL, yypvt[-1].val, NULL); }break;
1042:
1043: case 45: {
1044:
1045: #line 479 "asm.y"
1046:
1047: yyval.e = qbild(yypvt[-6].val, T_RIDS, yypvt[-3].s, NULL, yypvt[-1].val, NULL); }break;
1048:
1049: case 46: {
1050:
1051: #line 482 "asm.y"
1052:
1053: yyval.e = qbild(yypvt[-5].val, T_RIXD, yypvt[-3].s, yypvt[-1].s, 0L, NULL); }break;
1054:
1055: case 47: {
1056:
1057: #line 485 "asm.y"
1058:
1059: yyval.e = qbild(yypvt[-7].val, T_RIXDS, yypvt[-5].s, yypvt[-3].s, yypvt[-1].val, NULL); }break;
1060:
1061: case 48: {
1062:
1063: #line 488 "asm.y"
1064:
1065: yyval.e = qbild(yypvt[-3].s->loc, T_RID, yypvt[-1].s, NULL, 0L, yypvt[-3].s); }break;
1066:
1067: case 49: {
1068:
1069: #line 491 "asm.y"
1070:
1071: yyval.e = qbild(yypvt[-5].s->loc, T_RIDS, yypvt[-3].s, NULL, yypvt[-1].val, yypvt[-5].s); }break;
1072:
1073: case 50: {
1074:
1075: #line 494 "asm.y"
1076:
1077: yyval.e = qbild(yypvt[-6].s->loc, T_RIDS, yypvt[-3].s, NULL, yypvt[-1].val, yypvt[-6].s); }break;
1078:
1079: case 51: {
1080:
1081: #line 497 "asm.y"
1082:
1083: yyval.e = qbild(yypvt[-5].s->loc, T_RIXD, yypvt[-3].s, yypvt[-1].s, 0L, yypvt[-5].s); }break;
1084:
1085: case 52: {
1086:
1087: #line 500 "asm.y"
1088:
1089: yyval.e = qbild(yypvt[-7].s->loc, T_RIXDS, yypvt[-5].s, yypvt[-3].s, yypvt[-1].val, yypvt[-7].s); }break;
1090:
1091: case 53: {
1092:
1093: #line 503 "asm.y"
1094:
1095: yyval.e = qbild(yypvt[0].s->loc, T_D, NULL, NULL, 0L, yypvt[0].s); }break;
1096:
1097: case 54: {
1098:
1099: #line 506 "asm.y"
1100:
1101: yyval.e = qbild(yypvt[0].val, T_D, NULL, NULL, 0L, NULL); }break;
1102:
1103: case 55: {
1104:
1105: #line 509 "asm.y"
1106:
1107: yyval.e = setImm(yypvt[0].val, (sym *)NULL); }break;
1108:
1109: case 56: {
1110:
1111: #line 512 "asm.y"
1112:
1113: yyval.e = setImm(yypvt[0].s->loc, yypvt[0].s); }break;
1114:
1115: case 57: {
1116:
1117: #line 518 "asm.y"
1118: yyval.s = yypvt[0].s; }break;
1119:
1120: case 58: {
1121:
1122: #line 519 "asm.y"
1123: yyval.s=yypvt[-1].s; }break;
1124:
1125: case 59: {
1126:
1127: #line 520 "asm.y"
1128: yyval.s = copySym(yypvt[-2].s); yyval.s->loc += yypvt[0].val; }break;
1129:
1130: case 60: {
1131:
1132: #line 521 "asm.y"
1133: yyval.s = copySym(yypvt[-2].s); yyval.s->loc -= yypvt[0].val; }break;
1134:
1135: case 61: {
1136:
1137: #line 522 "asm.y"
1138: yyval.s = copySym(yypvt[0].s); yyval.s->loc += yypvt[-2].val; }break;
1139:
1140: case 62: {
1141:
1142: #line 525 "asm.y"
1143:
1144: yyval.val = yypvt[0].val; }break;
1145:
1146: case 63: {
1147:
1148: #line 527 "asm.y"
1149:
1150: yyval.val = yypvt[-1].val; }break;
1151:
1152: case 64: {
1153:
1154: #line 529 "asm.y"
1155:
1156: ckseg(yypvt[-2].s, yypvt[0].s); yyval.val = yypvt[-2].s->loc - yypvt[0].s->loc; }break;
1157:
1158: case 65: {
1159:
1160: #line 531 "asm.y"
1161:
1162: ckseg(yypvt[-2].s, yypvt[0].s); yyval.val = compare((int)yypvt[-1].val, yypvt[-2].s->loc - yypvt[0].s->loc); }break;
1163:
1164: case 66: {
1165:
1166: #line 533 "asm.y"
1167:
1168: yyval.val = compare((int)yypvt[-1].val, yypvt[-2].val - yypvt[0].val); }break;
1169:
1170: case 67: {
1171:
1172: #line 535 "asm.y"
1173:
1174: yyval.val = compare((int)yypvt[-1].val, (long)strcmp(yypvt[-2].t, yypvt[0].t)); }break;
1175:
1176: case 68: {
1177:
1178: #line 537 "asm.y"
1179:
1180: yyval.val = fcompare((int)yypvt[-1].val, yypvt[-2].dbl - yypvt[0].dbl); }break;
1181:
1182: case 69: {
1183:
1184: #line 540 "asm.y"
1185:
1186: yyval.val = yypvt[0].s->size; }break;
1187:
1188: case 70: {
1189:
1190: #line 543 "asm.y"
1191:
1192: yyval.val = yypvt[0].s->loc; }break;
1193:
1194: case 71: {
1195:
1196: #line 546 "asm.y"
1197:
1198: yyval.val = yypvt[0].s->sg + 1; }break;
1199:
1200: case 72: {
1201:
1202: #line 549 "asm.y"
1203:
1204: yyval.val = yypvt[0].s->statement && (statement >= yypvt[0].s->statement); }break;
1205:
1206: case 73: {
1207:
1208: #line 551 "asm.y"
1209:
1210: yyval.val = 1; }break;
1211:
1212: case 74: {
1213:
1214: #line 553 "asm.y"
1215:
1216: yyval.val = parmCt(); }break;
1217:
1218: case 75: {
1219:
1220: #line 556 "asm.y"
1221:
1222: yyval.val = yypvt[-2].val + yypvt[0].val; }break;
1223:
1224: case 76: {
1225:
1226: #line 558 "asm.y"
1227:
1228: yyval.val = yypvt[-2].val - yypvt[0].val; }break;
1229:
1230: case 77: {
1231:
1232: #line 560 "asm.y"
1233:
1234: yyval.val = yypvt[-2].val * yypvt[0].val; }break;
1235:
1236: case 78: {
1237:
1238: #line 562 "asm.y"
1239:
1240: yyval.val = yypvt[-2].val / yypvt[0].val; }break;
1241:
1242: case 79: {
1243:
1244: #line 564 "asm.y"
1245:
1246: yyval.val = yypvt[-2].val % yypvt[0].val; }break;
1247:
1248: case 80: {
1249:
1250: #line 567 "asm.y"
1251:
1252: yyval.val = yypvt[-2].val << yypvt[0].val; }break;
1253:
1254: case 81: {
1255:
1256: #line 569 "asm.y"
1257:
1258: yyval.val = yypvt[-2].val >> yypvt[0].val; }break;
1259:
1260: case 82: {
1261:
1262: #line 573 "asm.y"
1263:
1264: yyval.val = yypvt[-2].val & yypvt[0].val; }break;
1265:
1266: case 83: {
1267:
1268: #line 575 "asm.y"
1269:
1270: yyval.val = yypvt[-2].val | yypvt[0].val; }break;
1271:
1272: case 84: {
1273:
1274: #line 577 "asm.y"
1275:
1276: yyval.val = yypvt[-2].val ^ yypvt[0].val; }break;
1277:
1278: case 85: {
1279:
1280: #line 579 "asm.y"
1281:
1282: yyval.val = - yypvt[0].val; }break;
1283:
1284: case 86: {
1285:
1286: #line 581 "asm.y"
1287:
1288: yyval.val = !yypvt[0].val; }break;
1289:
1290: case 87: {
1291:
1292: #line 583 "asm.y"
1293:
1294: yyval.val = ~yypvt[0].val; }break;
1295:
1296: case 88: {
1297:
1298: #line 586 "asm.y"
1299:
1300: yyval.val = (yypvt[-1].val > strlen(yypvt[-3].t)) ? 0 : yypvt[-3].t[(short)yypvt[-1].val]; }break;
1301:
1302: case 89: {
1303:
1304: #line 588 "asm.y"
1305:
1306: yyval.val = stringSearch(yypvt[-2].t, yypvt[0].t); }break;
1307:
1308: case 90: {
1309:
1310: #line 590 "asm.y"
1311:
1312: yyval.val = atol(yypvt[0].t); }break;
1313:
1314: case 91: {
1315:
1316: #line 592 "asm.y"
1317:
1318: yyval.val = yypvt[0].dbl; }break;
1319:
1320: case 92: {
1321:
1322: #line 595 "asm.y"
1323:
1324: yyval.t = gcpy(yypvt[0].t, 0); }break;
1325:
1326: case 93: {
1327:
1328: #line 597 "asm.y"
1329:
1330: yyval.t = yypvt[-1].t; }break;
1331:
1332: case 94: {
1333:
1334: #line 599 "asm.y"
1335:
1336: yyval.t = concat(yypvt[-2].t, yypvt[0].t); }break;
1337:
1338: case 95: {
1339:
1340: #line 601 "asm.y"
1341:
1342: yyval.t = substr(yypvt[-5].t, yypvt[-3].val, yypvt[-1].val); }break;
1343:
1344: case 96: {
1345:
1346: #line 603 "asm.y"
1347:
1348: yyval.t = substr(yypvt[-3].t, yypvt[-1].val, strlen(yypvt[-3].t) - yypvt[-1].val); }break;
1349:
1350: case 97: {
1351:
1352: #line 605 "asm.y"
1353:
1354: yyval.t = galloc(12);
1355: sprintf(yyval.t, "%ld", yypvt[0].val); }break;
1356:
1357: case 98: {
1358:
1359: #line 608 "asm.y"
1360:
1361: yyval.t = galloc(20);
1362: sprintf(yyval.t, "%g", yypvt[0].dbl); }break;
1363:
1364: case 99: {
1365:
1366: #line 613 "asm.y"
1367:
1368: yyval.dbl = yypvt[0].dbl; }break;
1369:
1370: case 100: {
1371:
1372: #line 615 "asm.y"
1373:
1374: yyval.dbl = yypvt[-1].dbl; }break;
1375:
1376: case 101: {
1377:
1378: #line 617 "asm.y"
1379:
1380: yyval.dbl = yypvt[-2].dbl + yypvt[0].dbl; }break;
1381:
1382: case 102: {
1383:
1384: #line 619 "asm.y"
1385:
1386: yyval.dbl = yypvt[-2].dbl - yypvt[0].dbl; }break;
1387:
1388: case 103: {
1389:
1390: #line 621 "asm.y"
1391:
1392: yyval.dbl = yypvt[-2].dbl * yypvt[0].dbl; }break;
1393:
1394: case 104: {
1395:
1396: #line 623 "asm.y"
1397:
1398: yyval.dbl = yypvt[-2].dbl / yypvt[0].dbl; }break;
1399:
1400: case 105: {
1401:
1402: #line 625 "asm.y"
1403:
1404: yyval.dbl = - yypvt[0].dbl; }break;
1405:
1406: case 106: {
1407:
1408: #line 627 "asm.y"
1409:
1410: yyval.dbl = strtod(yypvt[0].t, (char **)NULL); }break;
1411:
1412: case 107: {
1413:
1414: #line 629 "asm.y"
1415:
1416: yyval.dbl = yypvt[0].val; }break;
1417:
1418: }
1419: ip = &yygo[ yypgo[yypdnt[pno]] ];
1420: while( *ip!=*yys && *ip!=YYNOCHAR )
1421: ip += 2;
1422: yystate = ip[1];
1423: goto stack;
1424: }
1425: }
1426:
1427:
1428:
1429:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.