~ubuntu-branches/ubuntu/hoary/binutils/hoary

« back to all changes in this revision

Viewing changes to gas/itbl-parse.c

  • Committer: Bazaar Package Importer
  • Author(s): Martin Pitt
  • Date: 2005-03-18 13:07:52 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20050318130752-j4i37zgqclj53b94
Tags: 2.15-5ubuntu2
debian/rules: Call pkgstriptranslations if present (the package does not
use debhelper, thus it does not happen automatically).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* A Bison parser, made from itbl-parse.y
 
2
   by GNU bison 1.35.  */
 
3
 
 
4
#define YYBISON 1  /* Identify Bison output.  */
 
5
 
 
6
# define        DREG    257
 
7
# define        CREG    258
 
8
# define        GREG    259
 
9
# define        IMMED   260
 
10
# define        ADDR    261
 
11
# define        INSN    262
 
12
# define        NUM     263
 
13
# define        ID      264
 
14
# define        NL      265
 
15
# define        PNUM    266
 
16
 
 
17
#line 21 "itbl-parse.y"
 
18
 
 
19
 
 
20
/* 
 
21
 
 
22
Yacc grammar for instruction table entries.
 
23
 
 
24
=======================================================================
 
25
Original Instruction table specification document:
 
26
 
 
27
            MIPS Coprocessor Table Specification
 
28
            ====================================
 
29
 
 
30
This document describes the format of the MIPS coprocessor table.  The
 
31
table specifies a list of valid functions, data registers and control
 
32
registers that can be used in coprocessor instructions.  This list,
 
33
together with the coprocessor instruction classes listed below,
 
34
specifies the complete list of coprocessor instructions that will
 
35
be recognized and assembled by the GNU assembler.  In effect,
 
36
this makes the GNU assembler table-driven, where the table is
 
37
specified by the programmer.
 
38
 
 
39
The table is an ordinary text file that the GNU assembler reads when
 
40
it starts.  Using the information in the table, the assembler
 
41
generates an internal list of valid coprocessor registers and
 
42
functions.  The assembler uses this internal list in addition to the
 
43
standard MIPS registers and instructions which are built-in to the 
 
44
assembler during code generation.
 
45
 
 
46
To specify the coprocessor table when invoking the GNU assembler, use
 
47
the command line option "--itbl file", where file is the
 
48
complete name of the table, including path and extension.
 
49
 
 
50
Examples:
 
51
 
 
52
            gas -t cop.tbl test.s -o test.o
 
53
            gas -t /usr/local/lib/cop.tbl test.s -o test.o
 
54
            gas --itbl d:\gnu\data\cop.tbl test.s -o test.o
 
55
 
 
56
Only one table may be supplied during a single invocation of
 
57
the assembler.
 
58
 
 
59
 
 
60
Instruction classes
 
61
===================
 
62
 
 
63
Below is a list of the valid coprocessor instruction classes for
 
64
any given coprocessor "z".  These instructions are already recognized
 
65
by the assembler, and are listed here only for reference.
 
66
 
 
67
Class   format                        instructions
 
68
-------------------------------------------------
 
69
Class1:
 
70
        op base rt offset
 
71
                                                            LWCz rt,offset (base)
 
72
                                                            SWCz rt,offset (base)
 
73
Class2:
 
74
        COPz sub rt rd 0
 
75
                                                            MTCz rt,rd
 
76
                                                            MFCz rt,rd
 
77
                                                            CTCz rt,rd
 
78
                                                            CFCz rt,rd
 
79
Class3:
 
80
        COPz CO cofun
 
81
                                                            COPz cofun
 
82
Class4:
 
83
        COPz BC br offset
 
84
                                                            BCzT offset
 
85
                                                            BCzF offset
 
86
Class5:
 
87
        COPz sub rt rd 0
 
88
                                                            DMFCz rt,rd
 
89
                                                            DMTCz rt,rd
 
90
Class6:
 
91
        op base rt offset
 
92
                                                            LDCz rt,offset (base)
 
93
                                                            SDCz rt,offset (base)
 
94
Class7:
 
95
        COPz BC br offset
 
96
                                                            BCzTL offset
 
97
                                                            BCzFL offset
 
98
 
 
99
The coprocessor table defines coprocessor-specific registers that can
 
100
be used with all of the above classes of instructions, where
 
101
appropriate.  It also defines additional coprocessor-specific
 
102
functions for Class3 (COPz cofun) instructions, Thus, the table allows
 
103
the programmer to use convenient mnemonics and operands for these
 
104
functions, instead of the COPz mmenmonic and cofun operand.
 
105
 
 
106
The names of the MIPS general registers and their aliases are defined
 
107
by the assembler and will be recognized as valid register names by the
 
108
assembler when used (where allowed) in coprocessor instructions.
 
109
However, the names and values of all coprocessor data and control
 
110
register mnemonics must be specified in the coprocessor table.
 
111
 
 
112
 
 
113
Table Grammar
 
114
=============
 
115
 
 
116
Here is the grammar for the coprocessor table:
 
117
 
 
118
            table -> entry*
 
119
 
 
120
            entry -> [z entrydef] [comment] '\n'
 
121
 
 
122
            entrydef -> type name val
 
123
            entrydef -> 'insn' name val funcdef ; type of entry (instruction)
 
124
 
 
125
            z -> 'p'['0'..'3']               ; processor number 
 
126
            type -> ['dreg' | 'creg' | 'greg' ]      ; type of entry (register)
 
127
        ; 'dreg', 'creg' or 'greg' specifies a data, control, or general
 
128
        ;           register mnemonic, respectively
 
129
            name -> [ltr|dec]*               ; mnemonic of register/function
 
130
            val -> [dec|hex]                 ; register/function number (integer constant)
 
131
 
 
132
            funcdef -> frange flags fields
 
133
                                ; bitfield range for opcode
 
134
                                ; list of fields' formats
 
135
            fields -> field*
 
136
            field -> [','] ftype frange flags
 
137
            flags -> ['*' flagexpr]
 
138
            flagexpr -> '[' flagexpr ']'
 
139
            flagexpr -> val '|' flagexpr 
 
140
            ftype -> [ type | 'immed' | 'addr' ]
 
141
        ; 'immed' specifies an immediate value; see grammar for "val" above
 
142
                ; 'addr' specifies a C identifier; name of symbol to be resolved at 
 
143
        ;           link time
 
144
            frange -> ':' val '-' val   ; starting to ending bit positions, where
 
145
                                ; where 0 is least significant bit
 
146
            frange -> (null)            ; default range of 31-0 will be assumed
 
147
 
 
148
            comment -> [';'|'#'] [char]*
 
149
            char -> any printable character
 
150
            ltr -> ['a'..'z'|'A'..'Z'] 
 
151
            dec -> ['0'..'9']*                                       ; value in decimal
 
152
            hex -> '0x'['0'..'9' | 'a'..'f' | 'A'..'F']*        ; value in hexadecimal 
 
153
 
 
154
 
 
155
Examples
 
156
========
 
157
 
 
158
Example 1:
 
159
 
 
160
The table:
 
161
 
 
162
            p1 dreg d1 1             ; data register "d1" for COP1 has value 1
 
163
            p1 creg c3 3             ; ctrl register "c3" for COP1 has value 3
 
164
            p3 func fill 0x1f:24-20           ; function "fill" for COP3 has value 31 and 
 
165
                        ; no fields
 
166
 
 
167
will allow the assembler to accept the following coprocessor instructions:
 
168
 
 
169
            LWC1 d1,0x100 ($2)
 
170
            fill
 
171
 
 
172
Here, the general purpose register "$2", and instruction "LWC1", are standard 
 
173
mnemonics built-in to the MIPS assembler.  
 
174
 
 
175
 
 
176
Example 2:
 
177
 
 
178
The table:
 
179
 
 
180
            p3 dreg d3 3             ; data register "d3" for COP3 has value 3
 
181
            p3 creg c2 22            ; control register "c2" for COP3 has value 22
 
182
            p3 func fee 0x1f:24-20 dreg:17-13 creg:12-8 immed:7-0 
 
183
                ; function "fee" for COP3 has value 31, and 3 fields 
 
184
                ; consisting of a data register, a control register, 
 
185
                ; and an immediate value.
 
186
 
 
187
will allow the assembler to accept the following coprocessor instruction:
 
188
 
 
189
            fee d3,c2,0x1
 
190
 
 
191
and will emit the object code:
 
192
 
 
193
            31-26  25 24-20 19-18  17-13 12-8  7-0
 
194
            COPz   CO fun                     dreg  creg  immed
 
195
            010011 1  11111 00       00011 10110 00000001 
 
196
 
 
197
            0x4ff07601
 
198
 
 
199
 
 
200
Example 3:
 
201
 
 
202
The table:
 
203
 
 
204
            p3 dreg d3 3             ; data register "d3" for COP3 has value 3
 
205
            p3 creg c2 22            ; control register "c2" for COP3 has value 22
 
206
            p3 func fuu 0x01f00001 dreg:17-13 creg:12-8
 
207
 
 
208
will allow the assembler to accept the following coprocessor
 
209
instruction:
 
210
 
 
211
            fuu d3,c2
 
212
 
 
213
and will emit the object code:
 
214
 
 
215
            31-26  25 24-20 19-18  17-13 12-8  7-0
 
216
            COPz   CO fun                     dreg  creg  
 
217
            010011 1  11111 00       00011 10110 00000001 
 
218
 
 
219
            0x4ff07601
 
220
 
 
221
In this way, the programmer can force arbitrary bits of an instruction
 
222
to have predefined values.
 
223
 
 
224
=======================================================================
 
225
Additional notes:
 
226
 
 
227
Encoding of ranges:
 
228
To handle more than one bit position range within an instruction,
 
229
use 0s to mask out the ranges which don't apply.
 
230
May decide to modify the syntax to allow commas separate multiple 
 
231
ranges within an instruction (range','range).
 
232
 
 
233
Changes in grammar:
 
234
        The number of parms argument to the function entry
 
235
was deleted from the original format such that we now count the fields.
 
236
 
 
237
----
 
238
FIXME! should really change lexical analyzer 
 
239
to recognize 'dreg' etc. in context sensitive way.
 
240
Currently function names or mnemonics may be incorrectly parsed as keywords
 
241
 
 
242
FIXME! hex is ambiguous with any digit
 
243
 
 
244
*/
 
245
 
 
246
#include <stdio.h>
 
247
#include "itbl-ops.h"
 
248
 
 
249
/* #define DEBUG */
 
250
 
 
251
#ifdef DEBUG
 
252
#ifndef DBG_LVL
 
253
#define DBG_LVL 1
 
254
#endif
 
255
#else
 
256
#define DBG_LVL 0
 
257
#endif
 
258
 
 
259
#if DBG_LVL >= 1
 
260
#define DBG(x) printf x
 
261
#else
 
262
#define DBG(x) 
 
263
#endif
 
264
 
 
265
#if DBG_LVL >= 2
 
266
#define DBGL2(x) printf x
 
267
#else
 
268
#define DBGL2(x) 
 
269
#endif
 
270
 
 
271
static int sbit, ebit;
 
272
static struct itbl_entry *insn=0;
 
273
extern int insntbl_line;
 
274
int yyparse PARAMS ((void));
 
275
int yylex PARAMS ((void));
 
276
static int yyerror PARAMS ((const char *));
 
277
 
 
278
 
 
279
#line 283 "itbl-parse.y"
 
280
#ifndef YYSTYPE
 
281
typedef union 
 
282
  {
 
283
    char *str;
 
284
    int num;
 
285
    int processor;
 
286
    unsigned long val;
 
287
  } yystype;
 
288
# define YYSTYPE yystype
 
289
# define YYSTYPE_IS_TRIVIAL 1
 
290
#endif
 
291
#ifndef YYDEBUG
 
292
# define YYDEBUG 0
 
293
#endif
 
294
 
 
295
 
 
296
 
 
297
#define YYFINAL         51
 
298
#define YYFLAG          -32768
 
299
#define YYNTBASE        20
 
300
 
 
301
/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
 
302
#define YYTRANSLATE(x) ((unsigned)(x) <= 266 ? yytranslate[x] : 34)
 
303
 
 
304
/* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
 
305
static const char yytranslate[] =
 
306
{
 
307
       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
308
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
309
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
310
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
311
       2,     2,    17,     2,    13,    19,     2,     2,     2,     2,
 
312
       2,     2,     2,     2,     2,     2,     2,     2,    18,     2,
 
313
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
314
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
315
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
316
       2,    15,     2,    16,     2,     2,     2,     2,     2,     2,
 
317
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
318
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
319
       2,     2,     2,     2,    14,     2,     2,     2,     2,     2,
 
320
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
321
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
322
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
323
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
324
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
325
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
326
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
327
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
328
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
329
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
330
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
331
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
332
       2,     2,     2,     2,     2,     2,     1,     3,     4,     5,
 
333
       6,     7,     8,     9,    10,    11,    12
 
334
};
 
335
 
 
336
#if YYDEBUG
 
337
static const short yyprhs[] =
 
338
{
 
339
       0,     0,     2,     5,     6,    12,    13,    23,    25,    28,
 
340
      32,    35,    36,    38,    40,    42,    46,    50,    54,    56,
 
341
      59,    60,    65,    66,    68,    70,    72,    74,    76,    78
 
342
};
 
343
static const short yyrhs[] =
 
344
{
 
345
      21,     0,    22,    21,     0,     0,    30,    31,    32,    33,
 
346
      11,     0,     0,    30,     8,    32,    33,    29,    28,    23,
 
347
      24,    11,     0,    11,     0,     1,    11,     0,    13,    26,
 
348
      24,     0,    26,    24,     0,     0,    31,     0,     7,     0,
 
349
       6,     0,    25,    29,    28,     0,     9,    14,    27,     0,
 
350
      15,    27,    16,     0,     9,     0,    17,    27,     0,     0,
 
351
      18,     9,    19,     9,     0,     0,    12,     0,     3,     0,
 
352
       4,     0,     5,     0,    10,     0,     9,     0,     9,     0
 
353
};
 
354
 
 
355
#endif
 
356
 
 
357
#if YYDEBUG
 
358
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
 
359
static const short yyrline[] =
 
360
{
 
361
       0,   300,   304,   306,   309,   316,   316,   325,   326,   329,
 
362
     331,   332,   335,   341,   346,   353,   362,   367,   371,   377,
 
363
     383,   389,   396,   403,   411,   417,   422,   429,   437,   445
 
364
};
 
365
#endif
 
366
 
 
367
 
 
368
#if (YYDEBUG) || defined YYERROR_VERBOSE
 
369
 
 
370
/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
 
371
static const char *const yytname[] =
 
372
{
 
373
  "$", "error", "$undefined.", "DREG", "CREG", "GREG", "IMMED", "ADDR", 
 
374
  "INSN", "NUM", "ID", "NL", "PNUM", "','", "'|'", "'['", "']'", "'*'", 
 
375
  "':'", "'-'", "insntbl", "entrys", "entry", "@1", "fieldspecs", "ftype", 
 
376
  "fieldspec", "flagexpr", "flags", "range", "pnum", "regtype", "name", 
 
377
  "value", 0
 
378
};
 
379
#endif
 
380
 
 
381
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
 
382
static const short yyr1[] =
 
383
{
 
384
       0,    20,    21,    21,    22,    23,    22,    22,    22,    24,
 
385
      24,    24,    25,    25,    25,    26,    27,    27,    27,    28,
 
386
      28,    29,    29,    30,    31,    31,    31,    32,    34,    33
 
387
};
 
388
 
 
389
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
 
390
static const short yyr2[] =
 
391
{
 
392
       0,     1,     2,     0,     5,     0,     9,     1,     2,     3,
 
393
       2,     0,     1,     1,     1,     3,     3,     3,     1,     2,
 
394
       0,     4,     0,     1,     1,     1,     1,     1,     1,     1
 
395
};
 
396
 
 
397
/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
 
398
   doesn't specify something else to do.  Zero means the default is an
 
399
   error. */
 
400
static const short yydefact[] =
 
401
{
 
402
       0,     0,     7,    23,     1,     0,     0,     8,     2,    24,
 
403
      25,    26,     0,     0,    27,     0,     0,    29,    22,     0,
 
404
       0,    20,     4,     0,     0,     5,     0,    18,     0,    19,
 
405
      11,    21,     0,     0,    14,    13,     0,     0,    22,    11,
 
406
      12,    16,    17,    11,     6,    20,    10,     9,    15,     0,
 
407
       0,     0
 
408
};
 
409
 
 
410
static const short yydefgoto[] =
 
411
{
 
412
      49,     4,     5,    30,    37,    38,    39,    29,    25,    21,
 
413
       6,    40,    15,    18
 
414
};
 
415
 
 
416
static const short yypact[] =
 
417
{
 
418
       0,    -9,-32768,-32768,-32768,     0,    12,-32768,-32768,-32768,
 
419
  -32768,-32768,     3,     3,-32768,     9,     9,-32768,    -8,     8,
 
420
      19,    15,-32768,    10,    -6,-32768,    24,    20,    -6,-32768,
 
421
       1,-32768,    -6,    21,-32768,-32768,    18,    25,    -8,     1,
 
422
  -32768,-32768,-32768,     1,-32768,    15,-32768,-32768,-32768,    35,
 
423
      38,-32768
 
424
};
 
425
 
 
426
static const short yypgoto[] =
 
427
{
 
428
  -32768,    34,-32768,-32768,   -13,-32768,     4,    -1,    -4,     5,
 
429
  -32768,    36,    31,    29
 
430
};
 
431
 
 
432
 
 
433
#define YYLAST          45
 
434
 
 
435
 
 
436
static const short yytable[] =
 
437
{
 
438
      -3,     1,     7,    27,     9,    10,    11,    34,    35,    28,
 
439
      20,     2,     3,    14,    36,     9,    10,    11,    17,    22,
 
440
      12,     9,    10,    11,    34,    35,    46,    33,    23,    26,
 
441
      47,    41,    24,    31,    32,    50,    44,    42,    51,     8,
 
442
      43,    48,    13,    45,    16,    19
 
443
};
 
444
 
 
445
static const short yycheck[] =
 
446
{
 
447
       0,     1,    11,     9,     3,     4,     5,     6,     7,    15,
 
448
      18,    11,    12,    10,    13,     3,     4,     5,     9,    11,
 
449
       8,     3,     4,     5,     6,     7,    39,    28,     9,    19,
 
450
      43,    32,    17,     9,    14,     0,    11,    16,     0,     5,
 
451
      36,    45,     6,    38,    13,    16
 
452
};
 
453
/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
 
454
#line 3 "/usr/share/bison-1.35/bison.simple"
 
455
 
 
456
/* Skeleton output parser for bison,
 
457
 
 
458
   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software
 
459
   Foundation, Inc.
 
460
 
 
461
   This program is free software; you can redistribute it and/or modify
 
462
   it under the terms of the GNU General Public License as published by
 
463
   the Free Software Foundation; either version 2, or (at your option)
 
464
   any later version.
 
465
 
 
466
   This program is distributed in the hope that it will be useful,
 
467
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
468
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
469
   GNU General Public License for more details.
 
470
 
 
471
   You should have received a copy of the GNU General Public License
 
472
   along with this program; if not, write to the Free Software
 
473
   Foundation, Inc., 59 Temple Place - Suite 330,
 
474
   Boston, MA 02111-1307, USA.  */
 
475
 
 
476
/* As a special exception, when this file is copied by Bison into a
 
477
   Bison output file, you may use that output file without restriction.
 
478
   This special exception was added by the Free Software Foundation
 
479
   in version 1.24 of Bison.  */
 
480
 
 
481
/* This is the parser code that is written into each bison parser when
 
482
   the %semantic_parser declaration is not specified in the grammar.
 
483
   It was written by Richard Stallman by simplifying the hairy parser
 
484
   used when %semantic_parser is specified.  */
 
485
 
 
486
/* All symbols defined below should begin with yy or YY, to avoid
 
487
   infringing on user name space.  This should be done even for local
 
488
   variables, as they might otherwise be expanded by user macros.
 
489
   There are some unavoidable exceptions within include files to
 
490
   define necessary library symbols; they are noted "INFRINGES ON
 
491
   USER NAME SPACE" below.  */
 
492
 
 
493
#if ! defined (yyoverflow) || defined (YYERROR_VERBOSE)
 
494
 
 
495
/* The parser invokes alloca or malloc; define the necessary symbols.  */
 
496
 
 
497
# if YYSTACK_USE_ALLOCA
 
498
#  define YYSTACK_ALLOC alloca
 
499
# else
 
500
#  ifndef YYSTACK_USE_ALLOCA
 
501
#   if defined (alloca) || defined (_ALLOCA_H)
 
502
#    define YYSTACK_ALLOC alloca
 
503
#   else
 
504
#    ifdef __GNUC__
 
505
#     define YYSTACK_ALLOC __builtin_alloca
 
506
#    endif
 
507
#   endif
 
508
#  endif
 
509
# endif
 
510
 
 
511
# ifdef YYSTACK_ALLOC
 
512
   /* Pacify GCC's `empty if-body' warning. */
 
513
#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
 
514
# else
 
515
#  if defined (__STDC__) || defined (__cplusplus)
 
516
#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
 
517
#   define YYSIZE_T size_t
 
518
#  endif
 
519
#  define YYSTACK_ALLOC malloc
 
520
#  define YYSTACK_FREE free
 
521
# endif
 
522
#endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */
 
523
 
 
524
 
 
525
#if (! defined (yyoverflow) \
 
526
     && (! defined (__cplusplus) \
 
527
         || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
 
528
 
 
529
/* A type that is properly aligned for any stack member.  */
 
530
union yyalloc
 
531
{
 
532
  short yyss;
 
533
  YYSTYPE yyvs;
 
534
# if YYLSP_NEEDED
 
535
  YYLTYPE yyls;
 
536
# endif
 
537
};
 
538
 
 
539
/* The size of the maximum gap between one aligned stack and the next.  */
 
540
# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
 
541
 
 
542
/* The size of an array large to enough to hold all stacks, each with
 
543
   N elements.  */
 
544
# if YYLSP_NEEDED
 
545
#  define YYSTACK_BYTES(N) \
 
546
     ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE))      \
 
547
      + 2 * YYSTACK_GAP_MAX)
 
548
# else
 
549
#  define YYSTACK_BYTES(N) \
 
550
     ((N) * (sizeof (short) + sizeof (YYSTYPE))                         \
 
551
      + YYSTACK_GAP_MAX)
 
552
# endif
 
553
 
 
554
/* Copy COUNT objects from FROM to TO.  The source and destination do
 
555
   not overlap.  */
 
556
# ifndef YYCOPY
 
557
#  if 1 < __GNUC__
 
558
#   define YYCOPY(To, From, Count) \
 
559
      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
 
560
#  else
 
561
#   define YYCOPY(To, From, Count)              \
 
562
      do                                        \
 
563
        {                                       \
 
564
          register YYSIZE_T yyi;                \
 
565
          for (yyi = 0; yyi < (Count); yyi++)   \
 
566
            (To)[yyi] = (From)[yyi];            \
 
567
        }                                       \
 
568
      while (0)
 
569
#  endif
 
570
# endif
 
571
 
 
572
/* Relocate STACK from its old location to the new one.  The
 
573
   local variables YYSIZE and YYSTACKSIZE give the old and new number of
 
574
   elements in the stack, and YYPTR gives the new location of the
 
575
   stack.  Advance YYPTR to a properly aligned location for the next
 
576
   stack.  */
 
577
# define YYSTACK_RELOCATE(Stack)                                        \
 
578
    do                                                                  \
 
579
      {                                                                 \
 
580
        YYSIZE_T yynewbytes;                                            \
 
581
        YYCOPY (&yyptr->Stack, Stack, yysize);                          \
 
582
        Stack = &yyptr->Stack;                                          \
 
583
        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX;   \
 
584
        yyptr += yynewbytes / sizeof (*yyptr);                          \
 
585
      }                                                                 \
 
586
    while (0)
 
587
 
 
588
#endif
 
589
 
 
590
 
 
591
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
 
592
# define YYSIZE_T __SIZE_TYPE__
 
593
#endif
 
594
#if ! defined (YYSIZE_T) && defined (size_t)
 
595
# define YYSIZE_T size_t
 
596
#endif
 
597
#if ! defined (YYSIZE_T)
 
598
# if defined (__STDC__) || defined (__cplusplus)
 
599
#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 
600
#  define YYSIZE_T size_t
 
601
# endif
 
602
#endif
 
603
#if ! defined (YYSIZE_T)
 
604
# define YYSIZE_T unsigned int
 
605
#endif
 
606
 
 
607
#define yyerrok         (yyerrstatus = 0)
 
608
#define yyclearin       (yychar = YYEMPTY)
 
609
#define YYEMPTY         -2
 
610
#define YYEOF           0
 
611
#define YYACCEPT        goto yyacceptlab
 
612
#define YYABORT         goto yyabortlab
 
613
#define YYERROR         goto yyerrlab1
 
614
/* Like YYERROR except do call yyerror.  This remains here temporarily
 
615
   to ease the transition to the new meaning of YYERROR, for GCC.
 
616
   Once GCC version 2 has supplanted version 1, this can go.  */
 
617
#define YYFAIL          goto yyerrlab
 
618
#define YYRECOVERING()  (!!yyerrstatus)
 
619
#define YYBACKUP(Token, Value)                                  \
 
620
do                                                              \
 
621
  if (yychar == YYEMPTY && yylen == 1)                          \
 
622
    {                                                           \
 
623
      yychar = (Token);                                         \
 
624
      yylval = (Value);                                         \
 
625
      yychar1 = YYTRANSLATE (yychar);                           \
 
626
      YYPOPSTACK;                                               \
 
627
      goto yybackup;                                            \
 
628
    }                                                           \
 
629
  else                                                          \
 
630
    {                                                           \
 
631
      yyerror ("syntax error: cannot back up");                 \
 
632
      YYERROR;                                                  \
 
633
    }                                                           \
 
634
while (0)
 
635
 
 
636
#define YYTERROR        1
 
637
#define YYERRCODE       256
 
638
 
 
639
 
 
640
/* YYLLOC_DEFAULT -- Compute the default location (before the actions
 
641
   are run).
 
642
 
 
643
   When YYLLOC_DEFAULT is run, CURRENT is set the location of the
 
644
   first token.  By default, to implement support for ranges, extend
 
645
   its range to the last symbol.  */
 
646
 
 
647
#ifndef YYLLOC_DEFAULT
 
648
# define YYLLOC_DEFAULT(Current, Rhs, N)        \
 
649
   Current.last_line   = Rhs[N].last_line;      \
 
650
   Current.last_column = Rhs[N].last_column;
 
651
#endif
 
652
 
 
653
 
 
654
/* YYLEX -- calling `yylex' with the right arguments.  */
 
655
 
 
656
#if YYPURE
 
657
# if YYLSP_NEEDED
 
658
#  ifdef YYLEX_PARAM
 
659
#   define YYLEX                yylex (&yylval, &yylloc, YYLEX_PARAM)
 
660
#  else
 
661
#   define YYLEX                yylex (&yylval, &yylloc)
 
662
#  endif
 
663
# else /* !YYLSP_NEEDED */
 
664
#  ifdef YYLEX_PARAM
 
665
#   define YYLEX                yylex (&yylval, YYLEX_PARAM)
 
666
#  else
 
667
#   define YYLEX                yylex (&yylval)
 
668
#  endif
 
669
# endif /* !YYLSP_NEEDED */
 
670
#else /* !YYPURE */
 
671
# define YYLEX                  yylex ()
 
672
#endif /* !YYPURE */
 
673
 
 
674
 
 
675
/* Enable debugging if requested.  */
 
676
#if YYDEBUG
 
677
 
 
678
# ifndef YYFPRINTF
 
679
#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
 
680
#  define YYFPRINTF fprintf
 
681
# endif
 
682
 
 
683
# define YYDPRINTF(Args)                        \
 
684
do {                                            \
 
685
  if (yydebug)                                  \
 
686
    YYFPRINTF Args;                             \
 
687
} while (0)
 
688
/* Nonzero means print parse trace.  It is left uninitialized so that
 
689
   multiple parsers can coexist.  */
 
690
int yydebug;
 
691
#else /* !YYDEBUG */
 
692
# define YYDPRINTF(Args)
 
693
#endif /* !YYDEBUG */
 
694
 
 
695
/* YYINITDEPTH -- initial size of the parser's stacks.  */
 
696
#ifndef YYINITDEPTH
 
697
# define YYINITDEPTH 200
 
698
#endif
 
699
 
 
700
/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
 
701
   if the built-in stack extension method is used).
 
702
 
 
703
   Do not make this value too large; the results are undefined if
 
704
   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
 
705
   evaluated with infinite-precision integer arithmetic.  */
 
706
 
 
707
#if YYMAXDEPTH == 0
 
708
# undef YYMAXDEPTH
 
709
#endif
 
710
 
 
711
#ifndef YYMAXDEPTH
 
712
# define YYMAXDEPTH 10000
 
713
#endif
 
714
 
 
715
#ifdef YYERROR_VERBOSE
 
716
 
 
717
# ifndef yystrlen
 
718
#  if defined (__GLIBC__) && defined (_STRING_H)
 
719
#   define yystrlen strlen
 
720
#  else
 
721
/* Return the length of YYSTR.  */
 
722
static YYSIZE_T
 
723
#   if defined (__STDC__) || defined (__cplusplus)
 
724
yystrlen (const char *yystr)
 
725
#   else
 
726
yystrlen (yystr)
 
727
     const char *yystr;
 
728
#   endif
 
729
{
 
730
  register const char *yys = yystr;
 
731
 
 
732
  while (*yys++ != '\0')
 
733
    continue;
 
734
 
 
735
  return yys - yystr - 1;
 
736
}
 
737
#  endif
 
738
# endif
 
739
 
 
740
# ifndef yystpcpy
 
741
#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
 
742
#   define yystpcpy stpcpy
 
743
#  else
 
744
/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
 
745
   YYDEST.  */
 
746
static char *
 
747
#   if defined (__STDC__) || defined (__cplusplus)
 
748
yystpcpy (char *yydest, const char *yysrc)
 
749
#   else
 
750
yystpcpy (yydest, yysrc)
 
751
     char *yydest;
 
752
     const char *yysrc;
 
753
#   endif
 
754
{
 
755
  register char *yyd = yydest;
 
756
  register const char *yys = yysrc;
 
757
 
 
758
  while ((*yyd++ = *yys++) != '\0')
 
759
    continue;
 
760
 
 
761
  return yyd - 1;
 
762
}
 
763
#  endif
 
764
# endif
 
765
#endif
 
766
 
 
767
#line 315 "/usr/share/bison-1.35/bison.simple"
 
768
 
 
769
 
 
770
/* The user can define YYPARSE_PARAM as the name of an argument to be passed
 
771
   into yyparse.  The argument should have type void *.
 
772
   It should actually point to an object.
 
773
   Grammar actions can access the variable by casting it
 
774
   to the proper pointer type.  */
 
775
 
 
776
#ifdef YYPARSE_PARAM
 
777
# if defined (__STDC__) || defined (__cplusplus)
 
778
#  define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
 
779
#  define YYPARSE_PARAM_DECL
 
780
# else
 
781
#  define YYPARSE_PARAM_ARG YYPARSE_PARAM
 
782
#  define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
 
783
# endif
 
784
#else /* !YYPARSE_PARAM */
 
785
# define YYPARSE_PARAM_ARG
 
786
# define YYPARSE_PARAM_DECL
 
787
#endif /* !YYPARSE_PARAM */
 
788
 
 
789
/* Prevent warning if -Wstrict-prototypes.  */
 
790
#ifdef __GNUC__
 
791
# ifdef YYPARSE_PARAM
 
792
int yyparse (void *);
 
793
# else
 
794
int yyparse (void);
 
795
# endif
 
796
#endif
 
797
 
 
798
/* YY_DECL_VARIABLES -- depending whether we use a pure parser,
 
799
   variables are global, or local to YYPARSE.  */
 
800
 
 
801
#define YY_DECL_NON_LSP_VARIABLES                       \
 
802
/* The lookahead symbol.  */                            \
 
803
int yychar;                                             \
 
804
                                                        \
 
805
/* The semantic value of the lookahead symbol. */       \
 
806
YYSTYPE yylval;                                         \
 
807
                                                        \
 
808
/* Number of parse errors so far.  */                   \
 
809
int yynerrs;
 
810
 
 
811
#if YYLSP_NEEDED
 
812
# define YY_DECL_VARIABLES                      \
 
813
YY_DECL_NON_LSP_VARIABLES                       \
 
814
                                                \
 
815
/* Location data for the lookahead symbol.  */  \
 
816
YYLTYPE yylloc;
 
817
#else
 
818
# define YY_DECL_VARIABLES                      \
 
819
YY_DECL_NON_LSP_VARIABLES
 
820
#endif
 
821
 
 
822
 
 
823
/* If nonreentrant, generate the variables here. */
 
824
 
 
825
#if !YYPURE
 
826
YY_DECL_VARIABLES
 
827
#endif  /* !YYPURE */
 
828
 
 
829
int
 
830
yyparse (YYPARSE_PARAM_ARG)
 
831
     YYPARSE_PARAM_DECL
 
832
{
 
833
  /* If reentrant, generate the variables here. */
 
834
#if YYPURE
 
835
  YY_DECL_VARIABLES
 
836
#endif  /* !YYPURE */
 
837
 
 
838
  register int yystate;
 
839
  register int yyn;
 
840
  int yyresult;
 
841
  /* Number of tokens to shift before error messages enabled.  */
 
842
  int yyerrstatus;
 
843
  /* Lookahead token as an internal (translated) token number.  */
 
844
  int yychar1 = 0;
 
845
 
 
846
  /* Three stacks and their tools:
 
847
     `yyss': related to states,
 
848
     `yyvs': related to semantic values,
 
849
     `yyls': related to locations.
 
850
 
 
851
     Refer to the stacks thru separate pointers, to allow yyoverflow
 
852
     to reallocate them elsewhere.  */
 
853
 
 
854
  /* The state stack. */
 
855
  short yyssa[YYINITDEPTH];
 
856
  short *yyss = yyssa;
 
857
  register short *yyssp;
 
858
 
 
859
  /* The semantic value stack.  */
 
860
  YYSTYPE yyvsa[YYINITDEPTH];
 
861
  YYSTYPE *yyvs = yyvsa;
 
862
  register YYSTYPE *yyvsp;
 
863
 
 
864
#if YYLSP_NEEDED
 
865
  /* The location stack.  */
 
866
  YYLTYPE yylsa[YYINITDEPTH];
 
867
  YYLTYPE *yyls = yylsa;
 
868
  YYLTYPE *yylsp;
 
869
#endif
 
870
 
 
871
#if YYLSP_NEEDED
 
872
# define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
 
873
#else
 
874
# define YYPOPSTACK   (yyvsp--, yyssp--)
 
875
#endif
 
876
 
 
877
  YYSIZE_T yystacksize = YYINITDEPTH;
 
878
 
 
879
 
 
880
  /* The variables used to return semantic value and location from the
 
881
     action routines.  */
 
882
  YYSTYPE yyval;
 
883
#if YYLSP_NEEDED
 
884
  YYLTYPE yyloc;
 
885
#endif
 
886
 
 
887
  /* When reducing, the number of symbols on the RHS of the reduced
 
888
     rule. */
 
889
  int yylen;
 
890
 
 
891
  YYDPRINTF ((stderr, "Starting parse\n"));
 
892
 
 
893
  yystate = 0;
 
894
  yyerrstatus = 0;
 
895
  yynerrs = 0;
 
896
  yychar = YYEMPTY;             /* Cause a token to be read.  */
 
897
 
 
898
  /* Initialize stack pointers.
 
899
     Waste one element of value and location stack
 
900
     so that they stay on the same level as the state stack.
 
901
     The wasted elements are never initialized.  */
 
902
 
 
903
  yyssp = yyss;
 
904
  yyvsp = yyvs;
 
905
#if YYLSP_NEEDED
 
906
  yylsp = yyls;
 
907
#endif
 
908
  goto yysetstate;
 
909
 
 
910
/*------------------------------------------------------------.
 
911
| yynewstate -- Push a new state, which is found in yystate.  |
 
912
`------------------------------------------------------------*/
 
913
 yynewstate:
 
914
  /* In all cases, when you get here, the value and location stacks
 
915
     have just been pushed. so pushing a state here evens the stacks.
 
916
     */
 
917
  yyssp++;
 
918
 
 
919
 yysetstate:
 
920
  *yyssp = yystate;
 
921
 
 
922
  if (yyssp >= yyss + yystacksize - 1)
 
923
    {
 
924
      /* Get the current used size of the three stacks, in elements.  */
 
925
      YYSIZE_T yysize = yyssp - yyss + 1;
 
926
 
 
927
#ifdef yyoverflow
 
928
      {
 
929
        /* Give user a chance to reallocate the stack. Use copies of
 
930
           these so that the &'s don't force the real ones into
 
931
           memory.  */
 
932
        YYSTYPE *yyvs1 = yyvs;
 
933
        short *yyss1 = yyss;
 
934
 
 
935
        /* Each stack pointer address is followed by the size of the
 
936
           data in use in that stack, in bytes.  */
 
937
# if YYLSP_NEEDED
 
938
        YYLTYPE *yyls1 = yyls;
 
939
        /* This used to be a conditional around just the two extra args,
 
940
           but that might be undefined if yyoverflow is a macro.  */
 
941
        yyoverflow ("parser stack overflow",
 
942
                    &yyss1, yysize * sizeof (*yyssp),
 
943
                    &yyvs1, yysize * sizeof (*yyvsp),
 
944
                    &yyls1, yysize * sizeof (*yylsp),
 
945
                    &yystacksize);
 
946
        yyls = yyls1;
 
947
# else
 
948
        yyoverflow ("parser stack overflow",
 
949
                    &yyss1, yysize * sizeof (*yyssp),
 
950
                    &yyvs1, yysize * sizeof (*yyvsp),
 
951
                    &yystacksize);
 
952
# endif
 
953
        yyss = yyss1;
 
954
        yyvs = yyvs1;
 
955
      }
 
956
#else /* no yyoverflow */
 
957
# ifndef YYSTACK_RELOCATE
 
958
      goto yyoverflowlab;
 
959
# else
 
960
      /* Extend the stack our own way.  */
 
961
      if (yystacksize >= YYMAXDEPTH)
 
962
        goto yyoverflowlab;
 
963
      yystacksize *= 2;
 
964
      if (yystacksize > YYMAXDEPTH)
 
965
        yystacksize = YYMAXDEPTH;
 
966
 
 
967
      {
 
968
        short *yyss1 = yyss;
 
969
        union yyalloc *yyptr =
 
970
          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
 
971
        if (! yyptr)
 
972
          goto yyoverflowlab;
 
973
        YYSTACK_RELOCATE (yyss);
 
974
        YYSTACK_RELOCATE (yyvs);
 
975
# if YYLSP_NEEDED
 
976
        YYSTACK_RELOCATE (yyls);
 
977
# endif
 
978
# undef YYSTACK_RELOCATE
 
979
        if (yyss1 != yyssa)
 
980
          YYSTACK_FREE (yyss1);
 
981
      }
 
982
# endif
 
983
#endif /* no yyoverflow */
 
984
 
 
985
      yyssp = yyss + yysize - 1;
 
986
      yyvsp = yyvs + yysize - 1;
 
987
#if YYLSP_NEEDED
 
988
      yylsp = yyls + yysize - 1;
 
989
#endif
 
990
 
 
991
      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
 
992
                  (unsigned long int) yystacksize));
 
993
 
 
994
      if (yyssp >= yyss + yystacksize - 1)
 
995
        YYABORT;
 
996
    }
 
997
 
 
998
  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
 
999
 
 
1000
  goto yybackup;
 
1001
 
 
1002
 
 
1003
/*-----------.
 
1004
| yybackup.  |
 
1005
`-----------*/
 
1006
yybackup:
 
1007
 
 
1008
/* Do appropriate processing given the current state.  */
 
1009
/* Read a lookahead token if we need one and don't already have one.  */
 
1010
/* yyresume: */
 
1011
 
 
1012
  /* First try to decide what to do without reference to lookahead token.  */
 
1013
 
 
1014
  yyn = yypact[yystate];
 
1015
  if (yyn == YYFLAG)
 
1016
    goto yydefault;
 
1017
 
 
1018
  /* Not known => get a lookahead token if don't already have one.  */
 
1019
 
 
1020
  /* yychar is either YYEMPTY or YYEOF
 
1021
     or a valid token in external form.  */
 
1022
 
 
1023
  if (yychar == YYEMPTY)
 
1024
    {
 
1025
      YYDPRINTF ((stderr, "Reading a token: "));
 
1026
      yychar = YYLEX;
 
1027
    }
 
1028
 
 
1029
  /* Convert token to internal form (in yychar1) for indexing tables with */
 
1030
 
 
1031
  if (yychar <= 0)              /* This means end of input. */
 
1032
    {
 
1033
      yychar1 = 0;
 
1034
      yychar = YYEOF;           /* Don't call YYLEX any more */
 
1035
 
 
1036
      YYDPRINTF ((stderr, "Now at end of input.\n"));
 
1037
    }
 
1038
  else
 
1039
    {
 
1040
      yychar1 = YYTRANSLATE (yychar);
 
1041
 
 
1042
#if YYDEBUG
 
1043
     /* We have to keep this `#if YYDEBUG', since we use variables
 
1044
        which are defined only if `YYDEBUG' is set.  */
 
1045
      if (yydebug)
 
1046
        {
 
1047
          YYFPRINTF (stderr, "Next token is %d (%s",
 
1048
                     yychar, yytname[yychar1]);
 
1049
          /* Give the individual parser a way to print the precise
 
1050
             meaning of a token, for further debugging info.  */
 
1051
# ifdef YYPRINT
 
1052
          YYPRINT (stderr, yychar, yylval);
 
1053
# endif
 
1054
          YYFPRINTF (stderr, ")\n");
 
1055
        }
 
1056
#endif
 
1057
    }
 
1058
 
 
1059
  yyn += yychar1;
 
1060
  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
 
1061
    goto yydefault;
 
1062
 
 
1063
  yyn = yytable[yyn];
 
1064
 
 
1065
  /* yyn is what to do for this token type in this state.
 
1066
     Negative => reduce, -yyn is rule number.
 
1067
     Positive => shift, yyn is new state.
 
1068
       New state is final state => don't bother to shift,
 
1069
       just return success.
 
1070
     0, or most negative number => error.  */
 
1071
 
 
1072
  if (yyn < 0)
 
1073
    {
 
1074
      if (yyn == YYFLAG)
 
1075
        goto yyerrlab;
 
1076
      yyn = -yyn;
 
1077
      goto yyreduce;
 
1078
    }
 
1079
  else if (yyn == 0)
 
1080
    goto yyerrlab;
 
1081
 
 
1082
  if (yyn == YYFINAL)
 
1083
    YYACCEPT;
 
1084
 
 
1085
  /* Shift the lookahead token.  */
 
1086
  YYDPRINTF ((stderr, "Shifting token %d (%s), ",
 
1087
              yychar, yytname[yychar1]));
 
1088
 
 
1089
  /* Discard the token being shifted unless it is eof.  */
 
1090
  if (yychar != YYEOF)
 
1091
    yychar = YYEMPTY;
 
1092
 
 
1093
  *++yyvsp = yylval;
 
1094
#if YYLSP_NEEDED
 
1095
  *++yylsp = yylloc;
 
1096
#endif
 
1097
 
 
1098
  /* Count tokens shifted since error; after three, turn off error
 
1099
     status.  */
 
1100
  if (yyerrstatus)
 
1101
    yyerrstatus--;
 
1102
 
 
1103
  yystate = yyn;
 
1104
  goto yynewstate;
 
1105
 
 
1106
 
 
1107
/*-----------------------------------------------------------.
 
1108
| yydefault -- do the default action for the current state.  |
 
1109
`-----------------------------------------------------------*/
 
1110
yydefault:
 
1111
  yyn = yydefact[yystate];
 
1112
  if (yyn == 0)
 
1113
    goto yyerrlab;
 
1114
  goto yyreduce;
 
1115
 
 
1116
 
 
1117
/*-----------------------------.
 
1118
| yyreduce -- Do a reduction.  |
 
1119
`-----------------------------*/
 
1120
yyreduce:
 
1121
  /* yyn is the number of a rule to reduce with.  */
 
1122
  yylen = yyr2[yyn];
 
1123
 
 
1124
  /* If YYLEN is nonzero, implement the default value of the action:
 
1125
     `$$ = $1'.
 
1126
 
 
1127
     Otherwise, the following line sets YYVAL to the semantic value of
 
1128
     the lookahead token.  This behavior is undocumented and Bison
 
1129
     users should not rely upon it.  Assigning to YYVAL
 
1130
     unconditionally makes the parser a bit smaller, and it avoids a
 
1131
     GCC warning that YYVAL may be used uninitialized.  */
 
1132
  yyval = yyvsp[1-yylen];
 
1133
 
 
1134
#if YYLSP_NEEDED
 
1135
  /* Similarly for the default location.  Let the user run additional
 
1136
     commands if for instance locations are ranges.  */
 
1137
  yyloc = yylsp[1-yylen];
 
1138
  YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
 
1139
#endif
 
1140
 
 
1141
#if YYDEBUG
 
1142
  /* We have to keep this `#if YYDEBUG', since we use variables which
 
1143
     are defined only if `YYDEBUG' is set.  */
 
1144
  if (yydebug)
 
1145
    {
 
1146
      int yyi;
 
1147
 
 
1148
      YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
 
1149
                 yyn, yyrline[yyn]);
 
1150
 
 
1151
      /* Print the symbols being reduced, and their result.  */
 
1152
      for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++)
 
1153
        YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
 
1154
      YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
 
1155
    }
 
1156
#endif
 
1157
 
 
1158
  switch (yyn) {
 
1159
 
 
1160
case 4:
 
1161
#line 311 "itbl-parse.y"
 
1162
{
 
1163
            DBG (("line %d: entry pnum=%d type=%d name=%s value=x%x\n", 
 
1164
                    insntbl_line, yyvsp[-4].num, yyvsp[-3].num, yyvsp[-2].str, yyvsp[-1].val));
 
1165
            itbl_add_reg (yyvsp[-4].num, yyvsp[-3].num, yyvsp[-2].str, yyvsp[-1].val);
 
1166
          }
 
1167
    break;
 
1168
case 5:
 
1169
#line 317 "itbl-parse.y"
 
1170
{
 
1171
            DBG (("line %d: entry pnum=%d type=INSN name=%s value=x%x",
 
1172
                    insntbl_line, yyvsp[-5].num, yyvsp[-3].str, yyvsp[-2].val));
 
1173
            DBG ((" sbit=%d ebit=%d flags=0x%x\n", sbit, ebit, yyvsp[0].val));
 
1174
            insn=itbl_add_insn (yyvsp[-5].num, yyvsp[-3].str, yyvsp[-2].val, sbit, ebit, yyvsp[0].val);
 
1175
          }
 
1176
    break;
 
1177
case 6:
 
1178
#line 324 "itbl-parse.y"
 
1179
{}
 
1180
    break;
 
1181
case 12:
 
1182
#line 337 "itbl-parse.y"
 
1183
{
 
1184
            DBGL2 (("ftype\n"));
 
1185
            yyval.num = yyvsp[0].num;
 
1186
          }
 
1187
    break;
 
1188
case 13:
 
1189
#line 342 "itbl-parse.y"
 
1190
{
 
1191
            DBGL2 (("addr\n"));
 
1192
            yyval.num = ADDR;
 
1193
          }
 
1194
    break;
 
1195
case 14:
 
1196
#line 347 "itbl-parse.y"
 
1197
{
 
1198
            DBGL2 (("immed\n"));
 
1199
            yyval.num = IMMED;
 
1200
          }
 
1201
    break;
 
1202
case 15:
 
1203
#line 355 "itbl-parse.y"
 
1204
{
 
1205
            DBG (("line %d: field type=%d sbit=%d ebit=%d, flags=0x%x\n", 
 
1206
                    insntbl_line, yyvsp[-2].num, sbit, ebit, yyvsp[0].val));
 
1207
            itbl_add_operand (insn, yyvsp[-2].num, sbit, ebit, yyvsp[0].val);
 
1208
          }
 
1209
    break;
 
1210
case 16:
 
1211
#line 364 "itbl-parse.y"
 
1212
{
 
1213
            yyval.val = yyvsp[-2].num | yyvsp[0].val;
 
1214
          }
 
1215
    break;
 
1216
case 17:
 
1217
#line 368 "itbl-parse.y"
 
1218
{
 
1219
            yyval.val = yyvsp[-1].val;
 
1220
          }
 
1221
    break;
 
1222
case 18:
 
1223
#line 372 "itbl-parse.y"
 
1224
{
 
1225
            yyval.val = yyvsp[0].num;
 
1226
          }
 
1227
    break;
 
1228
case 19:
 
1229
#line 379 "itbl-parse.y"
 
1230
{
 
1231
            DBGL2 (("flags=%d\n", yyvsp[0].val));
 
1232
            yyval.val = yyvsp[0].val;
 
1233
          }
 
1234
    break;
 
1235
case 20:
 
1236
#line 384 "itbl-parse.y"
 
1237
{
 
1238
            yyval.val = 0;
 
1239
          }
 
1240
    break;
 
1241
case 21:
 
1242
#line 391 "itbl-parse.y"
 
1243
{
 
1244
            DBGL2 (("range %d %d\n", yyvsp[-2].num, yyvsp[0].num));
 
1245
            sbit = yyvsp[-2].num;
 
1246
            ebit = yyvsp[0].num;
 
1247
          }
 
1248
    break;
 
1249
case 22:
 
1250
#line 397 "itbl-parse.y"
 
1251
{
 
1252
            sbit = 31;
 
1253
            ebit = 0;
 
1254
          }
 
1255
    break;
 
1256
case 23:
 
1257
#line 405 "itbl-parse.y"
 
1258
{
 
1259
            DBGL2 (("pnum=%d\n",yyvsp[0].num));
 
1260
            yyval.num = yyvsp[0].num;
 
1261
          }
 
1262
    break;
 
1263
case 24:
 
1264
#line 413 "itbl-parse.y"
 
1265
{
 
1266
            DBGL2 (("dreg\n"));
 
1267
            yyval.num = DREG;
 
1268
          }
 
1269
    break;
 
1270
case 25:
 
1271
#line 418 "itbl-parse.y"
 
1272
{
 
1273
            DBGL2 (("creg\n"));
 
1274
            yyval.num = CREG;
 
1275
          }
 
1276
    break;
 
1277
case 26:
 
1278
#line 423 "itbl-parse.y"
 
1279
{
 
1280
            DBGL2 (("greg\n"));
 
1281
            yyval.num = GREG;
 
1282
          }
 
1283
    break;
 
1284
case 27:
 
1285
#line 431 "itbl-parse.y"
 
1286
{
 
1287
            DBGL2 (("name=%s\n",yyvsp[0].str));
 
1288
            yyval.str = yyvsp[0].str; 
 
1289
          }
 
1290
    break;
 
1291
case 28:
 
1292
#line 439 "itbl-parse.y"
 
1293
{
 
1294
            DBGL2 (("num=%d\n",yyvsp[0].num));
 
1295
            yyval.num = yyvsp[0].num;
 
1296
          }
 
1297
    break;
 
1298
case 29:
 
1299
#line 447 "itbl-parse.y"
 
1300
{
 
1301
            DBGL2 (("val=x%x\n",yyvsp[0].num));
 
1302
            yyval.val = yyvsp[0].num;
 
1303
          }
 
1304
    break;
 
1305
}
 
1306
 
 
1307
#line 705 "/usr/share/bison-1.35/bison.simple"
 
1308
 
 
1309
 
 
1310
  yyvsp -= yylen;
 
1311
  yyssp -= yylen;
 
1312
#if YYLSP_NEEDED
 
1313
  yylsp -= yylen;
 
1314
#endif
 
1315
 
 
1316
#if YYDEBUG
 
1317
  if (yydebug)
 
1318
    {
 
1319
      short *yyssp1 = yyss - 1;
 
1320
      YYFPRINTF (stderr, "state stack now");
 
1321
      while (yyssp1 != yyssp)
 
1322
        YYFPRINTF (stderr, " %d", *++yyssp1);
 
1323
      YYFPRINTF (stderr, "\n");
 
1324
    }
 
1325
#endif
 
1326
 
 
1327
  *++yyvsp = yyval;
 
1328
#if YYLSP_NEEDED
 
1329
  *++yylsp = yyloc;
 
1330
#endif
 
1331
 
 
1332
  /* Now `shift' the result of the reduction.  Determine what state
 
1333
     that goes to, based on the state we popped back to and the rule
 
1334
     number reduced by.  */
 
1335
 
 
1336
  yyn = yyr1[yyn];
 
1337
 
 
1338
  yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
 
1339
  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
 
1340
    yystate = yytable[yystate];
 
1341
  else
 
1342
    yystate = yydefgoto[yyn - YYNTBASE];
 
1343
 
 
1344
  goto yynewstate;
 
1345
 
 
1346
 
 
1347
/*------------------------------------.
 
1348
| yyerrlab -- here on detecting error |
 
1349
`------------------------------------*/
 
1350
yyerrlab:
 
1351
  /* If not already recovering from an error, report this error.  */
 
1352
  if (!yyerrstatus)
 
1353
    {
 
1354
      ++yynerrs;
 
1355
 
 
1356
#ifdef YYERROR_VERBOSE
 
1357
      yyn = yypact[yystate];
 
1358
 
 
1359
      if (yyn > YYFLAG && yyn < YYLAST)
 
1360
        {
 
1361
          YYSIZE_T yysize = 0;
 
1362
          char *yymsg;
 
1363
          int yyx, yycount;
 
1364
 
 
1365
          yycount = 0;
 
1366
          /* Start YYX at -YYN if negative to avoid negative indexes in
 
1367
             YYCHECK.  */
 
1368
          for (yyx = yyn < 0 ? -yyn : 0;
 
1369
               yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
 
1370
            if (yycheck[yyx + yyn] == yyx)
 
1371
              yysize += yystrlen (yytname[yyx]) + 15, yycount++;
 
1372
          yysize += yystrlen ("parse error, unexpected ") + 1;
 
1373
          yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);
 
1374
          yymsg = (char *) YYSTACK_ALLOC (yysize);
 
1375
          if (yymsg != 0)
 
1376
            {
 
1377
              char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
 
1378
              yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);
 
1379
 
 
1380
              if (yycount < 5)
 
1381
                {
 
1382
                  yycount = 0;
 
1383
                  for (yyx = yyn < 0 ? -yyn : 0;
 
1384
                       yyx < (int) (sizeof (yytname) / sizeof (char *));
 
1385
                       yyx++)
 
1386
                    if (yycheck[yyx + yyn] == yyx)
 
1387
                      {
 
1388
                        const char *yyq = ! yycount ? ", expecting " : " or ";
 
1389
                        yyp = yystpcpy (yyp, yyq);
 
1390
                        yyp = yystpcpy (yyp, yytname[yyx]);
 
1391
                        yycount++;
 
1392
                      }
 
1393
                }
 
1394
              yyerror (yymsg);
 
1395
              YYSTACK_FREE (yymsg);
 
1396
            }
 
1397
          else
 
1398
            yyerror ("parse error; also virtual memory exhausted");
 
1399
        }
 
1400
      else
 
1401
#endif /* defined (YYERROR_VERBOSE) */
 
1402
        yyerror ("parse error");
 
1403
    }
 
1404
  goto yyerrlab1;
 
1405
 
 
1406
 
 
1407
/*--------------------------------------------------.
 
1408
| yyerrlab1 -- error raised explicitly by an action |
 
1409
`--------------------------------------------------*/
 
1410
yyerrlab1:
 
1411
  if (yyerrstatus == 3)
 
1412
    {
 
1413
      /* If just tried and failed to reuse lookahead token after an
 
1414
         error, discard it.  */
 
1415
 
 
1416
      /* return failure if at end of input */
 
1417
      if (yychar == YYEOF)
 
1418
        YYABORT;
 
1419
      YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
 
1420
                  yychar, yytname[yychar1]));
 
1421
      yychar = YYEMPTY;
 
1422
    }
 
1423
 
 
1424
  /* Else will try to reuse lookahead token after shifting the error
 
1425
     token.  */
 
1426
 
 
1427
  yyerrstatus = 3;              /* Each real token shifted decrements this */
 
1428
 
 
1429
  goto yyerrhandle;
 
1430
 
 
1431
 
 
1432
/*-------------------------------------------------------------------.
 
1433
| yyerrdefault -- current state does not do anything special for the |
 
1434
| error token.                                                       |
 
1435
`-------------------------------------------------------------------*/
 
1436
yyerrdefault:
 
1437
#if 0
 
1438
  /* This is wrong; only states that explicitly want error tokens
 
1439
     should shift them.  */
 
1440
 
 
1441
  /* If its default is to accept any token, ok.  Otherwise pop it.  */
 
1442
  yyn = yydefact[yystate];
 
1443
  if (yyn)
 
1444
    goto yydefault;
 
1445
#endif
 
1446
 
 
1447
 
 
1448
/*---------------------------------------------------------------.
 
1449
| yyerrpop -- pop the current state because it cannot handle the |
 
1450
| error token                                                    |
 
1451
`---------------------------------------------------------------*/
 
1452
yyerrpop:
 
1453
  if (yyssp == yyss)
 
1454
    YYABORT;
 
1455
  yyvsp--;
 
1456
  yystate = *--yyssp;
 
1457
#if YYLSP_NEEDED
 
1458
  yylsp--;
 
1459
#endif
 
1460
 
 
1461
#if YYDEBUG
 
1462
  if (yydebug)
 
1463
    {
 
1464
      short *yyssp1 = yyss - 1;
 
1465
      YYFPRINTF (stderr, "Error: state stack now");
 
1466
      while (yyssp1 != yyssp)
 
1467
        YYFPRINTF (stderr, " %d", *++yyssp1);
 
1468
      YYFPRINTF (stderr, "\n");
 
1469
    }
 
1470
#endif
 
1471
 
 
1472
/*--------------.
 
1473
| yyerrhandle.  |
 
1474
`--------------*/
 
1475
yyerrhandle:
 
1476
  yyn = yypact[yystate];
 
1477
  if (yyn == YYFLAG)
 
1478
    goto yyerrdefault;
 
1479
 
 
1480
  yyn += YYTERROR;
 
1481
  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
 
1482
    goto yyerrdefault;
 
1483
 
 
1484
  yyn = yytable[yyn];
 
1485
  if (yyn < 0)
 
1486
    {
 
1487
      if (yyn == YYFLAG)
 
1488
        goto yyerrpop;
 
1489
      yyn = -yyn;
 
1490
      goto yyreduce;
 
1491
    }
 
1492
  else if (yyn == 0)
 
1493
    goto yyerrpop;
 
1494
 
 
1495
  if (yyn == YYFINAL)
 
1496
    YYACCEPT;
 
1497
 
 
1498
  YYDPRINTF ((stderr, "Shifting error token, "));
 
1499
 
 
1500
  *++yyvsp = yylval;
 
1501
#if YYLSP_NEEDED
 
1502
  *++yylsp = yylloc;
 
1503
#endif
 
1504
 
 
1505
  yystate = yyn;
 
1506
  goto yynewstate;
 
1507
 
 
1508
 
 
1509
/*-------------------------------------.
 
1510
| yyacceptlab -- YYACCEPT comes here.  |
 
1511
`-------------------------------------*/
 
1512
yyacceptlab:
 
1513
  yyresult = 0;
 
1514
  goto yyreturn;
 
1515
 
 
1516
/*-----------------------------------.
 
1517
| yyabortlab -- YYABORT comes here.  |
 
1518
`-----------------------------------*/
 
1519
yyabortlab:
 
1520
  yyresult = 1;
 
1521
  goto yyreturn;
 
1522
 
 
1523
/*---------------------------------------------.
 
1524
| yyoverflowab -- parser overflow comes here.  |
 
1525
`---------------------------------------------*/
 
1526
yyoverflowlab:
 
1527
  yyerror ("parser stack overflow");
 
1528
  yyresult = 2;
 
1529
  /* Fall through.  */
 
1530
 
 
1531
yyreturn:
 
1532
#ifndef yyoverflow
 
1533
  if (yyss != yyssa)
 
1534
    YYSTACK_FREE (yyss);
 
1535
#endif
 
1536
  return yyresult;
 
1537
}
 
1538
#line 452 "itbl-parse.y"
 
1539
 
 
1540
 
 
1541
static int
 
1542
yyerror (msg)
 
1543
     const char *msg;
 
1544
{
 
1545
  printf ("line %d: %s\n", insntbl_line, msg);
 
1546
  return 0;
 
1547
}