OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-binutils/] [binutils-2.19.1/] [gas/] [m68k-parse.c] - Blame information for rev 6

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 6 jlechner
/* A Bison parser, made by GNU Bison 2.1.  */
2
 
3
/* Skeleton parser for Yacc-like parsing with Bison,
4
   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
5
 
6
   This program is free software; you can redistribute it and/or modify
7
   it under the terms of the GNU General Public License as published by
8
   the Free Software Foundation; either version 2, or (at your option)
9
   any later version.
10
 
11
   This program is distributed in the hope that it will be useful,
12
   but WITHOUT ANY WARRANTY; without even the implied warranty of
13
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
   GNU General Public License for more details.
15
 
16
   You should have received a copy of the GNU General Public License
17
   along with this program; if not, write to the Free Software
18
   Foundation, Inc., 51 Franklin Street, Fifth Floor,
19
   Boston, MA 02110-1301, USA.  */
20
 
21
/* As a special exception, when this file is copied by Bison into a
22
   Bison output file, you may use that output file without restriction.
23
   This special exception was added by the Free Software Foundation
24
   in version 1.24 of Bison.  */
25
 
26
/* Written by Richard Stallman by simplifying the original so called
27
   ``semantic'' parser.  */
28
 
29
/* All symbols defined below should begin with yy or YY, to avoid
30
   infringing on user name space.  This should be done even for local
31
   variables, as they might otherwise be expanded by user macros.
32
   There are some unavoidable exceptions within include files to
33
   define necessary library symbols; they are noted "INFRINGES ON
34
   USER NAME SPACE" below.  */
35
 
36
/* Identify Bison output.  */
37
#define YYBISON 1
38
 
39
/* Bison version.  */
40
#define YYBISON_VERSION "2.1"
41
 
42
/* Skeleton name.  */
43
#define YYSKELETON_NAME "yacc.c"
44
 
45
/* Pure parsers.  */
46
#define YYPURE 0
47
 
48
/* Using locations.  */
49
#define YYLSP_NEEDED 0
50
 
51
 
52
 
53
/* Tokens.  */
54
#ifndef YYTOKENTYPE
55
# define YYTOKENTYPE
56
   /* Put the tokens into the symbol table, so that GDB and other debuggers
57
      know about them.  */
58
   enum yytokentype {
59
     DR = 258,
60
     AR = 259,
61
     FPR = 260,
62
     FPCR = 261,
63
     LPC = 262,
64
     ZAR = 263,
65
     ZDR = 264,
66
     LZPC = 265,
67
     CREG = 266,
68
     INDEXREG = 267,
69
     EXPR = 268
70
   };
71
#endif
72
/* Tokens.  */
73
#define DR 258
74
#define AR 259
75
#define FPR 260
76
#define FPCR 261
77
#define LPC 262
78
#define ZAR 263
79
#define ZDR 264
80
#define LZPC 265
81
#define CREG 266
82
#define INDEXREG 267
83
#define EXPR 268
84
 
85
 
86
 
87
 
88
/* Copy the first part of user declarations.  */
89
#line 28 "m68k-parse.y"
90
 
91
 
92
#include "as.h"
93
#include "tc-m68k.h"
94
#include "m68k-parse.h"
95
#include "safe-ctype.h"
96
 
97
/* Remap normal yacc parser interface names (yyparse, yylex, yyerror,
98
   etc), as well as gratuitously global symbol names If other parser
99
   generators (bison, byacc, etc) produce additional global names that
100
   conflict at link time, then those parser generators need to be
101
   fixed instead of adding those names to this list.  */
102
 
103
#define yymaxdepth m68k_maxdepth
104
#define yyparse m68k_parse
105
#define yylex   m68k_lex
106
#define yyerror m68k_error
107
#define yylval  m68k_lval
108
#define yychar  m68k_char
109
#define yydebug m68k_debug
110
#define yypact  m68k_pact       
111
#define yyr1    m68k_r1                 
112
#define yyr2    m68k_r2                 
113
#define yydef   m68k_def                
114
#define yychk   m68k_chk                
115
#define yypgo   m68k_pgo                
116
#define yyact   m68k_act                
117
#define yyexca  m68k_exca
118
#define yyerrflag m68k_errflag
119
#define yynerrs m68k_nerrs
120
#define yyps    m68k_ps
121
#define yypv    m68k_pv
122
#define yys     m68k_s
123
#define yy_yys  m68k_yys
124
#define yystate m68k_state
125
#define yytmp   m68k_tmp
126
#define yyv     m68k_v
127
#define yy_yyv  m68k_yyv
128
#define yyval   m68k_val
129
#define yylloc  m68k_lloc
130
#define yyreds  m68k_reds               /* With YYDEBUG defined */
131
#define yytoks  m68k_toks               /* With YYDEBUG defined */
132
#define yylhs   m68k_yylhs
133
#define yylen   m68k_yylen
134
#define yydefred m68k_yydefred
135
#define yydgoto m68k_yydgoto
136
#define yysindex m68k_yysindex
137
#define yyrindex m68k_yyrindex
138
#define yygindex m68k_yygindex
139
#define yytable  m68k_yytable
140
#define yycheck  m68k_yycheck
141
 
142
#ifndef YYDEBUG
143
#define YYDEBUG 1
144
#endif
145
 
146
/* Internal functions.  */
147
 
148
static enum m68k_register m68k_reg_parse (char **);
149
static int yylex (void);
150
static void yyerror (const char *);
151
 
152
/* The parser sets fields pointed to by this global variable.  */
153
static struct m68k_op *op;
154
 
155
 
156
 
157
/* Enabling traces.  */
158
#ifndef YYDEBUG
159
# define YYDEBUG 0
160
#endif
161
 
162
/* Enabling verbose error messages.  */
163
#ifdef YYERROR_VERBOSE
164
# undef YYERROR_VERBOSE
165
# define YYERROR_VERBOSE 1
166
#else
167
# define YYERROR_VERBOSE 0
168
#endif
169
 
170
/* Enabling the token table.  */
171
#ifndef YYTOKEN_TABLE
172
# define YYTOKEN_TABLE 0
173
#endif
174
 
175
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
176
#line 96 "m68k-parse.y"
177
typedef union YYSTYPE {
178
  struct m68k_indexreg indexreg;
179
  enum m68k_register reg;
180
  struct m68k_exp exp;
181
  unsigned long mask;
182
  int onereg;
183
  int trailing_ampersand;
184
} YYSTYPE;
185
/* Line 196 of yacc.c.  */
186
#line 187 "m68k-parse.c"
187
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
188
# define YYSTYPE_IS_DECLARED 1
189
# define YYSTYPE_IS_TRIVIAL 1
190
#endif
191
 
192
 
193
 
194
/* Copy the second part of user declarations.  */
195
 
196
 
197
/* Line 219 of yacc.c.  */
198
#line 199 "m68k-parse.c"
199
 
200
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
201
# define YYSIZE_T __SIZE_TYPE__
202
#endif
203
#if ! defined (YYSIZE_T) && defined (size_t)
204
# define YYSIZE_T size_t
205
#endif
206
#if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
207
# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
208
# define YYSIZE_T size_t
209
#endif
210
#if ! defined (YYSIZE_T)
211
# define YYSIZE_T unsigned int
212
#endif
213
 
214
#ifndef YY_
215
# if YYENABLE_NLS
216
#  if ENABLE_NLS
217
#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
218
#   define YY_(msgid) dgettext ("bison-runtime", msgid)
219
#  endif
220
# endif
221
# ifndef YY_
222
#  define YY_(msgid) msgid
223
# endif
224
#endif
225
 
226
#if ! defined (yyoverflow) || YYERROR_VERBOSE
227
 
228
/* The parser invokes alloca or malloc; define the necessary symbols.  */
229
 
230
# ifdef YYSTACK_USE_ALLOCA
231
#  if YYSTACK_USE_ALLOCA
232
#   ifdef __GNUC__
233
#    define YYSTACK_ALLOC __builtin_alloca
234
#   else
235
#    define YYSTACK_ALLOC alloca
236
#    if defined (__STDC__) || defined (__cplusplus)
237
#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
238
#     define YYINCLUDED_STDLIB_H
239
#    endif
240
#   endif
241
#  endif
242
# endif
243
 
244
# ifdef YYSTACK_ALLOC
245
   /* Pacify GCC's `empty if-body' warning. */
246
#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
247
#  ifndef YYSTACK_ALLOC_MAXIMUM
248
    /* The OS might guarantee only one guard page at the bottom of the stack,
249
       and a page size can be as small as 4096 bytes.  So we cannot safely
250
       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
251
       to allow for a few compiler-allocated temporary stack slots.  */
252
#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */
253
#  endif
254
# else
255
#  define YYSTACK_ALLOC YYMALLOC
256
#  define YYSTACK_FREE YYFREE
257
#  ifndef YYSTACK_ALLOC_MAXIMUM
258
#   define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
259
#  endif
260
#  ifdef __cplusplus
261
extern "C" {
262
#  endif
263
#  ifndef YYMALLOC
264
#   define YYMALLOC malloc
265
#   if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \
266
        && (defined (__STDC__) || defined (__cplusplus)))
267
void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
268
#   endif
269
#  endif
270
#  ifndef YYFREE
271
#   define YYFREE free
272
#   if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \
273
        && (defined (__STDC__) || defined (__cplusplus)))
274
void free (void *); /* INFRINGES ON USER NAME SPACE */
275
#   endif
276
#  endif
277
#  ifdef __cplusplus
278
}
279
#  endif
280
# endif
281
#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
282
 
283
 
284
#if (! defined (yyoverflow) \
285
     && (! defined (__cplusplus) \
286
         || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
287
 
288
/* A type that is properly aligned for any stack member.  */
289
union yyalloc
290
{
291
  short int yyss;
292
  YYSTYPE yyvs;
293
  };
294
 
295
/* The size of the maximum gap between one aligned stack and the next.  */
296
# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
297
 
298
/* The size of an array large to enough to hold all stacks, each with
299
   N elements.  */
300
# define YYSTACK_BYTES(N) \
301
     ((N) * (sizeof (short int) + sizeof (YYSTYPE))                     \
302
      + YYSTACK_GAP_MAXIMUM)
303
 
304
/* Copy COUNT objects from FROM to TO.  The source and destination do
305
   not overlap.  */
306
# ifndef YYCOPY
307
#  if defined (__GNUC__) && 1 < __GNUC__
308
#   define YYCOPY(To, From, Count) \
309
      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
310
#  else
311
#   define YYCOPY(To, From, Count)              \
312
      do                                        \
313
        {                                       \
314
          YYSIZE_T yyi;                         \
315
          for (yyi = 0; yyi < (Count); yyi++)    \
316
            (To)[yyi] = (From)[yyi];            \
317
        }                                       \
318
      while (0)
319
#  endif
320
# endif
321
 
322
/* Relocate STACK from its old location to the new one.  The
323
   local variables YYSIZE and YYSTACKSIZE give the old and new number of
324
   elements in the stack, and YYPTR gives the new location of the
325
   stack.  Advance YYPTR to a properly aligned location for the next
326
   stack.  */
327
# define YYSTACK_RELOCATE(Stack)                                        \
328
    do                                                                  \
329
      {                                                                 \
330
        YYSIZE_T yynewbytes;                                            \
331
        YYCOPY (&yyptr->Stack, Stack, yysize);                          \
332
        Stack = &yyptr->Stack;                                          \
333
        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
334
        yyptr += yynewbytes / sizeof (*yyptr);                          \
335
      }                                                                 \
336
    while (0)
337
 
338
#endif
339
 
340
#if defined (__STDC__) || defined (__cplusplus)
341
   typedef signed char yysigned_char;
342
#else
343
   typedef short int yysigned_char;
344
#endif
345
 
346
/* YYFINAL -- State number of the termination state. */
347
#define YYFINAL  44
348
/* YYLAST -- Last index in YYTABLE.  */
349
#define YYLAST   215
350
 
351
/* YYNTOKENS -- Number of terminals. */
352
#define YYNTOKENS  27
353
/* YYNNTS -- Number of nonterminals. */
354
#define YYNNTS  21
355
/* YYNRULES -- Number of rules. */
356
#define YYNRULES  89
357
/* YYNRULES -- Number of states. */
358
#define YYNSTATES  180
359
 
360
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
361
#define YYUNDEFTOK  2
362
#define YYMAXUTOK   268
363
 
364
#define YYTRANSLATE(YYX)                                                \
365
  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
366
 
367
/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
368
static const unsigned char yytranslate[] =
369
{
370
       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
371
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
372
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
373
       2,     2,     2,     2,     2,    17,     2,     2,    14,     2,
374
      18,    19,     2,    20,    22,    21,     2,    26,     2,     2,
375
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
376
      15,     2,    16,     2,    25,     2,     2,     2,     2,     2,
377
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
378
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
379
       2,    23,     2,    24,     2,     2,     2,     2,     2,     2,
380
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
381
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
382
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
383
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
384
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
385
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
386
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
387
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
388
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
389
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
390
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
391
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
392
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
393
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
394
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
395
       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
396
       5,     6,     7,     8,     9,    10,    11,    12,    13
397
};
398
 
399
#if YYDEBUG
400
/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
401
   YYRHS.  */
402
static const unsigned short int yyprhs[] =
403
{
404
       0,     0,     3,     5,     8,    11,    12,    14,    17,    20,
405
      22,    24,    26,    28,    30,    32,    35,    38,    40,    44,
406
      49,    54,    60,    66,    71,    75,    79,    83,    91,    99,
407
     106,   112,   119,   125,   132,   138,   144,   149,   159,   167,
408
     176,   183,   194,   203,   214,   223,   232,   235,   239,   243,
409
     249,   256,   267,   277,   288,   290,   292,   294,   296,   298,
410
     300,   302,   304,   306,   308,   310,   312,   314,   316,   317,
411
     319,   321,   323,   324,   327,   328,   331,   332,   335,   337,
412
     341,   345,   347,   349,   353,   357,   361,   363,   365,   367
413
};
414
 
415
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
416
static const yysigned_char yyrhs[] =
417
{
418
      28,     0,    -1,    30,    -1,    31,    29,    -1,    32,    29,
419
      -1,    -1,    14,    -1,    15,    15,    -1,    16,    16,    -1,
420
       3,    -1,     4,    -1,     5,    -1,     6,    -1,    11,    -1,
421
      13,    -1,    17,    13,    -1,    14,    13,    -1,    44,    -1,
422
      18,     4,    19,    -1,    18,     4,    19,    20,    -1,    21,
423
      18,     4,    19,    -1,    18,    13,    22,    38,    19,    -1,
424
      18,    38,    22,    13,    19,    -1,    13,    18,    38,    19,
425
      -1,    18,     7,    19,    -1,    18,     8,    19,    -1,    18,
426
      10,    19,    -1,    18,    13,    22,    38,    22,    33,    19,
427
      -1,    18,    13,    22,    38,    22,    40,    19,    -1,    18,
428
      13,    22,    34,    41,    19,    -1,    18,    34,    22,    13,
429
      19,    -1,    13,    18,    38,    22,    33,    19,    -1,    18,
430
      38,    22,    33,    19,    -1,    13,    18,    38,    22,    40,
431
      19,    -1,    18,    38,    22,    40,    19,    -1,    13,    18,
432
      34,    41,    19,    -1,    18,    34,    41,    19,    -1,    18,
433
      23,    13,    41,    24,    22,    33,    42,    19,    -1,    18,
434
      23,    13,    41,    24,    42,    19,    -1,    18,    23,    38,
435
      24,    22,    33,    42,    19,    -1,    18,    23,    38,    24,
436
      42,    19,    -1,    18,    23,    13,    22,    38,    22,    33,
437
      24,    42,    19,    -1,    18,    23,    38,    22,    33,    24,
438
      42,    19,    -1,    18,    23,    13,    22,    38,    22,    40,
439
      24,    42,    19,    -1,    18,    23,    38,    22,    40,    24,
440
      42,    19,    -1,    18,    23,    43,    34,    41,    24,    42,
441
      19,    -1,    39,    25,    -1,    39,    25,    20,    -1,    39,
442
      25,    21,    -1,    39,    25,    18,    13,    19,    -1,    39,
443
      25,    18,    43,    33,    19,    -1,    39,    25,    18,    13,
444
      19,    25,    18,    43,    33,    19,    -1,    39,    25,    18,
445
      13,    19,    25,    18,    13,    19,    -1,    39,    25,    18,
446
      43,    33,    19,    25,    18,    13,    19,    -1,    12,    -1,
447
      35,    -1,    12,    -1,    36,    -1,    36,    -1,     4,    -1,
448
       8,    -1,     3,    -1,     9,    -1,     4,    -1,     7,    -1,
449
      37,    -1,    10,    -1,     8,    -1,    -1,    38,    -1,     7,
450
      -1,    10,    -1,    -1,    22,    38,    -1,    -1,    22,    13,
451
      -1,    -1,    13,    22,    -1,    46,    -1,    46,    26,    45,
452
      -1,    47,    26,    45,    -1,    47,    -1,    46,    -1,    46,
453
      26,    45,    -1,    47,    26,    45,    -1,    47,    21,    47,
454
      -1,     3,    -1,     4,    -1,     5,    -1,     6,    -1
455
};
456
 
457
/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
458
static const unsigned short int yyrline[] =
459
{
460
       0,   121,   121,   122,   126,   135,   136,   143,   148,   153,
461
     158,   163,   168,   173,   178,   183,   188,   193,   206,   211,
462
     216,   221,   231,   241,   251,   256,   261,   266,   273,   284,
463
     291,   297,   304,   310,   321,   331,   338,   344,   352,   359,
464
     366,   372,   380,   387,   399,   410,   423,   431,   439,   447,
465
     457,   464,   472,   479,   493,   494,   507,   508,   520,   521,
466
     522,   528,   529,   535,   536,   543,   544,   545,   552,   555,
467
     561,   562,   569,   572,   582,   586,   596,   600,   609,   610,
468
     614,   626,   630,   631,   635,   642,   652,   656,   660,   664
469
};
470
#endif
471
 
472
#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
473
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
474
   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
475
static const char *const yytname[] =
476
{
477
  "$end", "error", "$undefined", "DR", "AR", "FPR", "FPCR", "LPC", "ZAR",
478
  "ZDR", "LZPC", "CREG", "INDEXREG", "EXPR", "'&'", "'<'", "'>'", "'#'",
479
  "'('", "')'", "'+'", "'-'", "','", "'['", "']'", "'@'", "'/'", "$accept",
480
  "operand", "optional_ampersand", "generic_operand", "motorola_operand",
481
  "mit_operand", "zireg", "zdireg", "zadr", "zdr", "apc", "zapc",
482
  "optzapc", "zpc", "optczapc", "optcexpr", "optexprc", "reglist",
483
  "ireglist", "reglistpair", "reglistreg", 0
484
};
485
#endif
486
 
487
# ifdef YYPRINT
488
/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
489
   token YYLEX-NUM.  */
490
static const unsigned short int yytoknum[] =
491
{
492
       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
493
     265,   266,   267,   268,    38,    60,    62,    35,    40,    41,
494
      43,    45,    44,    91,    93,    64,    47
495
};
496
# endif
497
 
498
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
499
static const unsigned char yyr1[] =
500
{
501
       0,    27,    28,    28,    28,    29,    29,    30,    30,    30,
502
      30,    30,    30,    30,    30,    30,    30,    30,    31,    31,
503
      31,    31,    31,    31,    31,    31,    31,    31,    31,    31,
504
      31,    31,    31,    31,    31,    31,    31,    31,    31,    31,
505
      31,    31,    31,    31,    31,    31,    32,    32,    32,    32,
506
      32,    32,    32,    32,    33,    33,    34,    34,    35,    35,
507
      35,    36,    36,    37,    37,    38,    38,    38,    39,    39,
508
      40,    40,    41,    41,    42,    42,    43,    43,    44,    44,
509
      44,    45,    45,    45,    45,    46,    47,    47,    47,    47
510
};
511
 
512
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
513
static const unsigned char yyr2[] =
514
{
515
       0,     2,     1,     2,     2,     0,     1,     2,     2,     1,
516
       1,     1,     1,     1,     1,     2,     2,     1,     3,     4,
517
       4,     5,     5,     4,     3,     3,     3,     7,     7,     6,
518
       5,     6,     5,     6,     5,     5,     4,     9,     7,     8,
519
       6,    10,     8,    10,     8,     8,     2,     3,     3,     5,
520
       6,    10,     9,    10,     1,     1,     1,     1,     1,     1,
521
       1,     1,     1,     1,     1,     1,     1,     1,     0,     1,
522
       1,     1,     0,     2,     0,     2,     0,     2,     1,     3,
523
       3,     1,     1,     3,     3,     3,     1,     1,     1,     1
524
};
525
 
526
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
527
   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
528
   means the default is an error.  */
529
static const unsigned char yydefact[] =
530
{
531
      68,    86,    87,    88,    89,    64,    67,    66,    13,    14,
532
       0,     0,     0,     0,     0,     0,     0,     2,     5,     5,
533
      65,    69,     0,    17,    78,     0,     0,    16,     7,     8,
534
      15,    61,    63,    64,    67,    62,    66,    56,     0,    76,
535
      72,    57,     0,     0,     1,     6,     3,     4,    46,     0,
536
       0,     0,    63,    72,     0,    18,    24,    25,    26,     0,
537
      72,     0,     0,     0,     0,     0,     0,    76,    47,    48,
538
      86,    87,    88,    89,    79,    82,    81,    85,    80,     0,
539
       0,    23,     0,    19,    72,     0,    77,     0,     0,    74,
540
      72,     0,    73,    36,    59,    70,    60,    71,    54,     0,
541
       0,    55,    58,     0,    20,     0,     0,     0,     0,    35,
542
       0,     0,     0,    21,     0,    73,    74,     0,     0,     0,
543
       0,     0,    30,    22,    32,    34,    49,    77,     0,    83,
544
      84,    31,    33,    29,     0,     0,     0,     0,     0,    74,
545
      74,    75,    74,    40,    74,     0,    50,    27,    28,     0,
546
       0,    74,    38,     0,     0,     0,     0,     0,    76,     0,
547
      74,    74,     0,    42,    44,    39,    45,     0,     0,     0,
548
       0,     0,    37,    52,     0,     0,    41,    43,    51,    53
549
};
550
 
551
/* YYDEFGOTO[NTERM-NUM]. */
552
static const yysigned_char yydefgoto[] =
553
{
554
      -1,    16,    46,    17,    18,    19,   100,    40,   101,   102,
555
      20,    92,    22,   103,    64,   120,    62,    23,    74,    75,
556
      76
557
};
558
 
559
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
560
   STATE-NUM.  */
561
#define YYPACT_NINF -98
562
static const short int yypact[] =
563
{
564
      89,    14,     9,    31,    35,   -98,   -98,   -98,   -98,     0,
565
      36,    42,    28,    56,    63,    67,    90,   -98,    75,    75,
566
     -98,   -98,    86,   -98,    96,   -15,   123,   -98,   -98,   -98,
567
     -98,   -98,    97,   115,   119,   -98,   120,   -98,   122,    16,
568
     126,   -98,   127,   157,   -98,   -98,   -98,   -98,    19,   154,
569
     154,   154,   -98,   140,    29,   144,   -98,   -98,   -98,   123,
570
     141,    99,    18,    70,   147,   105,   148,   152,   -98,   -98,
571
     -98,   -98,   -98,   -98,   -98,   142,   -13,   -98,   -98,   146,
572
     150,   -98,   133,   -98,   140,    60,   146,   149,   133,   153,
573
     140,   151,   -98,   -98,   -98,   -98,   -98,   -98,   -98,   155,
574
     158,   -98,   -98,   159,   -98,    62,   143,   154,   154,   -98,
575
     160,   161,   162,   -98,   133,   163,   164,   165,   166,   116,
576
     168,   167,   -98,   -98,   -98,   -98,   169,   -98,   173,   -98,
577
     -98,   -98,   -98,   -98,   174,   176,   133,   116,   177,   175,
578
     175,   -98,   175,   -98,   175,   170,   178,   -98,   -98,   180,
579
     181,   175,   -98,   171,   179,   182,   183,   187,   186,   189,
580
     175,   175,   190,   -98,   -98,   -98,   -98,    79,   143,   195,
581
     191,   192,   -98,   -98,   193,   194,   -98,   -98,   -98,   -98
582
};
583
 
584
/* YYPGOTO[NTERM-NUM].  */
585
static const short int yypgoto[] =
586
{
587
     -98,   -98,   196,   -98,   -98,   -98,   -81,     6,   -98,    -9,
588
     -98,     2,   -98,   -78,   -38,   -97,   -67,   -98,   -48,   172,
589
      12
590
};
591
 
592
/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
593
   positive, shift that token.  If negative, reduce the rule which
594
   number is the opposite.  If zero, do what YYDEFACT says.
595
   If YYTABLE_NINF, syntax error.  */
596
#define YYTABLE_NINF -64
597
static const short int yytable[] =
598
{
599
     106,   110,    21,    78,   111,    41,    50,   117,    50,   -10,
600
     118,    51,    25,   108,    -9,    80,    42,    41,    26,   138,
601
      52,    31,    87,     5,     6,   128,     7,    35,    54,    60,
602
      37,   -11,    53,   134,   -63,   -12,   135,    67,   142,    68,
603
      69,    61,   154,   155,    29,   156,   112,   157,    81,    27,
604
      41,    82,   121,    41,   162,   149,   151,    28,   150,   129,
605
     130,    85,    77,   170,   171,    84,    31,    32,    90,    30,
606
      33,    34,    35,    36,    52,    37,    38,     5,     6,   113,
607
       7,   126,   114,    91,   127,    43,    39,   174,   115,    45,
608
      44,   168,     1,     2,     3,     4,     5,     6,   173,     7,
609
       8,   127,     9,    10,    11,    12,    13,    14,    31,    94,
610
      15,    48,    95,    96,    35,    97,    55,    98,    99,    31,
611
      94,    88,    49,    89,    96,    35,    31,    52,    98,   141,
612
       5,     6,    35,     7,    56,    37,    31,    94,    57,    58,
613
      95,    96,    35,    97,    59,    98,    31,    94,    63,    65,
614
      52,    96,    35,     5,     6,    98,     7,    70,    71,    72,
615
      73,    66,    79,    86,    83,   105,    93,   104,   107,   109,
616
     122,     0,    24,   116,   123,   119,     0,   124,   125,   131,
617
     132,   133,     0,     0,   141,   136,   137,   143,   158,   139,
618
     140,   144,   146,   147,   145,   148,   152,   153,   163,   167,
619
       0,   164,   165,   159,   160,   161,   166,   169,   175,   172,
620
     176,   177,   178,   179,     0,    47
621
};
622
 
623
static const short int yycheck[] =
624
{
625
      67,    82,     0,    51,    82,    14,    21,    88,    21,     0,
626
      88,    26,     0,    26,     0,    53,    14,    26,    18,   116,
627
       4,     3,    60,     7,     8,   106,    10,     9,    26,    13,
628
      12,     0,    26,   114,    25,     0,   114,    18,   119,    20,
629
      21,    39,   139,   140,    16,   142,    84,   144,    19,    13,
630
      59,    22,    90,    62,   151,   136,   137,    15,   136,   107,
631
     108,    59,    50,   160,   161,    59,     3,     4,    62,    13,
632
       7,     8,     9,    10,     4,    12,    13,     7,     8,    19,
633
      10,    19,    22,    13,    22,    18,    23,   168,    86,    14,
634
       0,   158,     3,     4,     5,     6,     7,     8,    19,    10,
635
      11,    22,    13,    14,    15,    16,    17,    18,     3,     4,
636
      21,    25,     7,     8,     9,    10,    19,    12,    13,     3,
637
       4,    22,    26,    24,     8,     9,     3,     4,    12,    13,
638
       7,     8,     9,    10,    19,    12,     3,     4,    19,    19,
639
       7,     8,     9,    10,    22,    12,     3,     4,    22,    22,
640
       4,     8,     9,     7,     8,    12,    10,     3,     4,     5,
641
       6,     4,    22,    22,    20,    13,    19,    19,    26,    19,
642
      19,    -1,     0,    24,    19,    22,    -1,    19,    19,    19,
643
      19,    19,    -1,    -1,    13,    22,    22,    19,    18,    24,
644
      24,    24,    19,    19,    25,    19,    19,    22,    19,    13,
645
      -1,    19,    19,    25,    24,    24,    19,    18,    13,    19,
646
      19,    19,    19,    19,    -1,    19
647
};
648
 
649
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
650
   symbol of state STATE-NUM.  */
651
static const unsigned char yystos[] =
652
{
653
       0,     3,     4,     5,     6,     7,     8,    10,    11,    13,
654
      14,    15,    16,    17,    18,    21,    28,    30,    31,    32,
655
      37,    38,    39,    44,    46,    47,    18,    13,    15,    16,
656
      13,     3,     4,     7,     8,     9,    10,    12,    13,    23,
657
      34,    36,    38,    18,     0,    14,    29,    29,    25,    26,
658
      21,    26,     4,    34,    38,    19,    19,    19,    19,    22,
659
      13,    38,    43,    22,    41,    22,     4,    18,    20,    21,
660
       3,     4,     5,     6,    45,    46,    47,    47,    45,    22,
661
      41,    19,    22,    20,    34,    38,    22,    41,    22,    24,
662
      34,    13,    38,    19,     4,     7,     8,    10,    12,    13,
663
      33,    35,    36,    40,    19,    13,    43,    26,    26,    19,
664
      33,    40,    41,    19,    22,    38,    24,    33,    40,    22,
665
      42,    41,    19,    19,    19,    19,    19,    22,    33,    45,
666
      45,    19,    19,    19,    33,    40,    22,    22,    42,    24,
667
      24,    13,    33,    19,    24,    25,    19,    19,    19,    33,
668
      40,    33,    19,    22,    42,    42,    42,    42,    18,    25,
669
      24,    24,    42,    19,    19,    19,    19,    13,    43,    18,
670
      42,    42,    19,    19,    33,    13,    19,    19,    19,    19
671
};
672
 
673
#define yyerrok         (yyerrstatus = 0)
674
#define yyclearin       (yychar = YYEMPTY)
675
#define YYEMPTY         (-2)
676
#define YYEOF           0
677
 
678
#define YYACCEPT        goto yyacceptlab
679
#define YYABORT         goto yyabortlab
680
#define YYERROR         goto yyerrorlab
681
 
682
 
683
/* Like YYERROR except do call yyerror.  This remains here temporarily
684
   to ease the transition to the new meaning of YYERROR, for GCC.
685
   Once GCC version 2 has supplanted version 1, this can go.  */
686
 
687
#define YYFAIL          goto yyerrlab
688
 
689
#define YYRECOVERING()  (!!yyerrstatus)
690
 
691
#define YYBACKUP(Token, Value)                                  \
692
do                                                              \
693
  if (yychar == YYEMPTY && yylen == 1)                          \
694
    {                                                           \
695
      yychar = (Token);                                         \
696
      yylval = (Value);                                         \
697
      yytoken = YYTRANSLATE (yychar);                           \
698
      YYPOPSTACK;                                               \
699
      goto yybackup;                                            \
700
    }                                                           \
701
  else                                                          \
702
    {                                                           \
703
      yyerror (YY_("syntax error: cannot back up")); \
704
      YYERROR;                                                  \
705
    }                                                           \
706
while (0)
707
 
708
 
709
#define YYTERROR        1
710
#define YYERRCODE       256
711
 
712
 
713
/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
714
   If N is 0, then set CURRENT to the empty location which ends
715
   the previous symbol: RHS[0] (always defined).  */
716
 
717
#define YYRHSLOC(Rhs, K) ((Rhs)[K])
718
#ifndef YYLLOC_DEFAULT
719
# define YYLLOC_DEFAULT(Current, Rhs, N)                                \
720
    do                                                                  \
721
      if (N)                                                            \
722
        {                                                               \
723
          (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
724
          (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
725
          (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
726
          (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
727
        }                                                               \
728
      else                                                              \
729
        {                                                               \
730
          (Current).first_line   = (Current).last_line   =              \
731
            YYRHSLOC (Rhs, 0).last_line;                         \
732
          (Current).first_column = (Current).last_column =              \
733
            YYRHSLOC (Rhs, 0).last_column;                               \
734
        }                                                               \
735
    while (0)
736
#endif
737
 
738
 
739
/* YY_LOCATION_PRINT -- Print the location on the stream.
740
   This macro was not mandated originally: define only if we know
741
   we won't break user code: when these are the locations we know.  */
742
 
743
#ifndef YY_LOCATION_PRINT
744
# if YYLTYPE_IS_TRIVIAL
745
#  define YY_LOCATION_PRINT(File, Loc)                  \
746
     fprintf (File, "%d.%d-%d.%d",                      \
747
              (Loc).first_line, (Loc).first_column,     \
748
              (Loc).last_line,  (Loc).last_column)
749
# else
750
#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
751
# endif
752
#endif
753
 
754
 
755
/* YYLEX -- calling `yylex' with the right arguments.  */
756
 
757
#ifdef YYLEX_PARAM
758
# define YYLEX yylex (YYLEX_PARAM)
759
#else
760
# define YYLEX yylex ()
761
#endif
762
 
763
/* Enable debugging if requested.  */
764
#if YYDEBUG
765
 
766
# ifndef YYFPRINTF
767
#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
768
#  define YYFPRINTF fprintf
769
# endif
770
 
771
# define YYDPRINTF(Args)                        \
772
do {                                            \
773
  if (yydebug)                                  \
774
    YYFPRINTF Args;                             \
775
} while (0)
776
 
777
# define YY_SYMBOL_PRINT(Title, Type, Value, Location)          \
778
do {                                                            \
779
  if (yydebug)                                                  \
780
    {                                                           \
781
      YYFPRINTF (stderr, "%s ", Title);                         \
782
      yysymprint (stderr,                                       \
783
                  Type, Value); \
784
      YYFPRINTF (stderr, "\n");                                 \
785
    }                                                           \
786
} while (0)
787
 
788
/*------------------------------------------------------------------.
789
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
790
| TOP (included).                                                   |
791
`------------------------------------------------------------------*/
792
 
793
#if defined (__STDC__) || defined (__cplusplus)
794
static void
795
yy_stack_print (short int *bottom, short int *top)
796
#else
797
static void
798
yy_stack_print (bottom, top)
799
    short int *bottom;
800
    short int *top;
801
#endif
802
{
803
  YYFPRINTF (stderr, "Stack now");
804
  for (/* Nothing. */; bottom <= top; ++bottom)
805
    YYFPRINTF (stderr, " %d", *bottom);
806
  YYFPRINTF (stderr, "\n");
807
}
808
 
809
# define YY_STACK_PRINT(Bottom, Top)                            \
810
do {                                                            \
811
  if (yydebug)                                                  \
812
    yy_stack_print ((Bottom), (Top));                           \
813
} while (0)
814
 
815
 
816
/*------------------------------------------------.
817
| Report that the YYRULE is going to be reduced.  |
818
`------------------------------------------------*/
819
 
820
#if defined (__STDC__) || defined (__cplusplus)
821
static void
822
yy_reduce_print (int yyrule)
823
#else
824
static void
825
yy_reduce_print (yyrule)
826
    int yyrule;
827
#endif
828
{
829
  int yyi;
830
  unsigned long int yylno = yyrline[yyrule];
831
  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
832
             yyrule - 1, yylno);
833
  /* Print the symbols being reduced, and their result.  */
834
  for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
835
    YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
836
  YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
837
}
838
 
839
# define YY_REDUCE_PRINT(Rule)          \
840
do {                                    \
841
  if (yydebug)                          \
842
    yy_reduce_print (Rule);             \
843
} while (0)
844
 
845
/* Nonzero means print parse trace.  It is left uninitialized so that
846
   multiple parsers can coexist.  */
847
int yydebug;
848
#else /* !YYDEBUG */
849
# define YYDPRINTF(Args)
850
# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
851
# define YY_STACK_PRINT(Bottom, Top)
852
# define YY_REDUCE_PRINT(Rule)
853
#endif /* !YYDEBUG */
854
 
855
 
856
/* YYINITDEPTH -- initial size of the parser's stacks.  */
857
#ifndef YYINITDEPTH
858
# define YYINITDEPTH 200
859
#endif
860
 
861
/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
862
   if the built-in stack extension method is used).
863
 
864
   Do not make this value too large; the results are undefined if
865
   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
866
   evaluated with infinite-precision integer arithmetic.  */
867
 
868
#ifndef YYMAXDEPTH
869
# define YYMAXDEPTH 10000
870
#endif
871
 
872
 
873
 
874
#if YYERROR_VERBOSE
875
 
876
# ifndef yystrlen
877
#  if defined (__GLIBC__) && defined (_STRING_H)
878
#   define yystrlen strlen
879
#  else
880
/* Return the length of YYSTR.  */
881
static YYSIZE_T
882
#   if defined (__STDC__) || defined (__cplusplus)
883
yystrlen (const char *yystr)
884
#   else
885
yystrlen (yystr)
886
     const char *yystr;
887
#   endif
888
{
889
  const char *yys = yystr;
890
 
891
  while (*yys++ != '\0')
892
    continue;
893
 
894
  return yys - yystr - 1;
895
}
896
#  endif
897
# endif
898
 
899
# ifndef yystpcpy
900
#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
901
#   define yystpcpy stpcpy
902
#  else
903
/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
904
   YYDEST.  */
905
static char *
906
#   if defined (__STDC__) || defined (__cplusplus)
907
yystpcpy (char *yydest, const char *yysrc)
908
#   else
909
yystpcpy (yydest, yysrc)
910
     char *yydest;
911
     const char *yysrc;
912
#   endif
913
{
914
  char *yyd = yydest;
915
  const char *yys = yysrc;
916
 
917
  while ((*yyd++ = *yys++) != '\0')
918
    continue;
919
 
920
  return yyd - 1;
921
}
922
#  endif
923
# endif
924
 
925
# ifndef yytnamerr
926
/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
927
   quotes and backslashes, so that it's suitable for yyerror.  The
928
   heuristic is that double-quoting is unnecessary unless the string
929
   contains an apostrophe, a comma, or backslash (other than
930
   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
931
   null, do not copy; instead, return the length of what the result
932
   would have been.  */
933
static YYSIZE_T
934
yytnamerr (char *yyres, const char *yystr)
935
{
936
  if (*yystr == '"')
937
    {
938
      size_t yyn = 0;
939
      char const *yyp = yystr;
940
 
941
      for (;;)
942
        switch (*++yyp)
943
          {
944
          case '\'':
945
          case ',':
946
            goto do_not_strip_quotes;
947
 
948
          case '\\':
949
            if (*++yyp != '\\')
950
              goto do_not_strip_quotes;
951
            /* Fall through.  */
952
          default:
953
            if (yyres)
954
              yyres[yyn] = *yyp;
955
            yyn++;
956
            break;
957
 
958
          case '"':
959
            if (yyres)
960
              yyres[yyn] = '\0';
961
            return yyn;
962
          }
963
    do_not_strip_quotes: ;
964
    }
965
 
966
  if (! yyres)
967
    return yystrlen (yystr);
968
 
969
  return yystpcpy (yyres, yystr) - yyres;
970
}
971
# endif
972
 
973
#endif /* YYERROR_VERBOSE */
974
 
975
 
976
 
977
#if YYDEBUG
978
/*--------------------------------.
979
| Print this symbol on YYOUTPUT.  |
980
`--------------------------------*/
981
 
982
#if defined (__STDC__) || defined (__cplusplus)
983
static void
984
yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
985
#else
986
static void
987
yysymprint (yyoutput, yytype, yyvaluep)
988
    FILE *yyoutput;
989
    int yytype;
990
    YYSTYPE *yyvaluep;
991
#endif
992
{
993
  /* Pacify ``unused variable'' warnings.  */
994
  (void) yyvaluep;
995
 
996
  if (yytype < YYNTOKENS)
997
    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
998
  else
999
    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
1000
 
1001
 
1002
# ifdef YYPRINT
1003
  if (yytype < YYNTOKENS)
1004
    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
1005
# endif
1006
  switch (yytype)
1007
    {
1008
      default:
1009
        break;
1010
    }
1011
  YYFPRINTF (yyoutput, ")");
1012
}
1013
 
1014
#endif /* ! YYDEBUG */
1015
/*-----------------------------------------------.
1016
| Release the memory associated to this symbol.  |
1017
`-----------------------------------------------*/
1018
 
1019
#if defined (__STDC__) || defined (__cplusplus)
1020
static void
1021
yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
1022
#else
1023
static void
1024
yydestruct (yymsg, yytype, yyvaluep)
1025
    const char *yymsg;
1026
    int yytype;
1027
    YYSTYPE *yyvaluep;
1028
#endif
1029
{
1030
  /* Pacify ``unused variable'' warnings.  */
1031
  (void) yyvaluep;
1032
 
1033
  if (!yymsg)
1034
    yymsg = "Deleting";
1035
  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
1036
 
1037
  switch (yytype)
1038
    {
1039
 
1040
      default:
1041
        break;
1042
    }
1043
}
1044
 
1045
 
1046
/* Prevent warnings from -Wmissing-prototypes.  */
1047
 
1048
#ifdef YYPARSE_PARAM
1049
# if defined (__STDC__) || defined (__cplusplus)
1050
int yyparse (void *YYPARSE_PARAM);
1051
# else
1052
int yyparse ();
1053
# endif
1054
#else /* ! YYPARSE_PARAM */
1055
#if defined (__STDC__) || defined (__cplusplus)
1056
int yyparse (void);
1057
#else
1058
int yyparse ();
1059
#endif
1060
#endif /* ! YYPARSE_PARAM */
1061
 
1062
 
1063
 
1064
/* The look-ahead symbol.  */
1065
int yychar;
1066
 
1067
/* The semantic value of the look-ahead symbol.  */
1068
YYSTYPE yylval;
1069
 
1070
/* Number of syntax errors so far.  */
1071
int yynerrs;
1072
 
1073
 
1074
 
1075
/*----------.
1076
| yyparse.  |
1077
`----------*/
1078
 
1079
#ifdef YYPARSE_PARAM
1080
# if defined (__STDC__) || defined (__cplusplus)
1081
int yyparse (void *YYPARSE_PARAM)
1082
# else
1083
int yyparse (YYPARSE_PARAM)
1084
  void *YYPARSE_PARAM;
1085
# endif
1086
#else /* ! YYPARSE_PARAM */
1087
#if defined (__STDC__) || defined (__cplusplus)
1088
int
1089
yyparse (void)
1090
#else
1091
int
1092
yyparse ()
1093
    ;
1094
#endif
1095
#endif
1096
{
1097
 
1098
  int yystate;
1099
  int yyn;
1100
  int yyresult;
1101
  /* Number of tokens to shift before error messages enabled.  */
1102
  int yyerrstatus;
1103
  /* Look-ahead token as an internal (translated) token number.  */
1104
  int yytoken = 0;
1105
 
1106
  /* Three stacks and their tools:
1107
     `yyss': related to states,
1108
     `yyvs': related to semantic values,
1109
     `yyls': related to locations.
1110
 
1111
     Refer to the stacks thru separate pointers, to allow yyoverflow
1112
     to reallocate them elsewhere.  */
1113
 
1114
  /* The state stack.  */
1115
  short int yyssa[YYINITDEPTH];
1116
  short int *yyss = yyssa;
1117
  short int *yyssp;
1118
 
1119
  /* The semantic value stack.  */
1120
  YYSTYPE yyvsa[YYINITDEPTH];
1121
  YYSTYPE *yyvs = yyvsa;
1122
  YYSTYPE *yyvsp;
1123
 
1124
 
1125
 
1126
#define YYPOPSTACK   (yyvsp--, yyssp--)
1127
 
1128
  YYSIZE_T yystacksize = YYINITDEPTH;
1129
 
1130
  /* The variables used to return semantic value and location from the
1131
     action routines.  */
1132
  YYSTYPE yyval;
1133
 
1134
 
1135
  /* When reducing, the number of symbols on the RHS of the reduced
1136
     rule.  */
1137
  int yylen;
1138
 
1139
  YYDPRINTF ((stderr, "Starting parse\n"));
1140
 
1141
  yystate = 0;
1142
  yyerrstatus = 0;
1143
  yynerrs = 0;
1144
  yychar = YYEMPTY;             /* Cause a token to be read.  */
1145
 
1146
  /* Initialize stack pointers.
1147
     Waste one element of value and location stack
1148
     so that they stay on the same level as the state stack.
1149
     The wasted elements are never initialized.  */
1150
 
1151
  yyssp = yyss;
1152
  yyvsp = yyvs;
1153
 
1154
  goto yysetstate;
1155
 
1156
/*------------------------------------------------------------.
1157
| yynewstate -- Push a new state, which is found in yystate.  |
1158
`------------------------------------------------------------*/
1159
 yynewstate:
1160
  /* In all cases, when you get here, the value and location stacks
1161
     have just been pushed. so pushing a state here evens the stacks.
1162
     */
1163
  yyssp++;
1164
 
1165
 yysetstate:
1166
  *yyssp = yystate;
1167
 
1168
  if (yyss + yystacksize - 1 <= yyssp)
1169
    {
1170
      /* Get the current used size of the three stacks, in elements.  */
1171
      YYSIZE_T yysize = yyssp - yyss + 1;
1172
 
1173
#ifdef yyoverflow
1174
      {
1175
        /* Give user a chance to reallocate the stack. Use copies of
1176
           these so that the &'s don't force the real ones into
1177
           memory.  */
1178
        YYSTYPE *yyvs1 = yyvs;
1179
        short int *yyss1 = yyss;
1180
 
1181
 
1182
        /* Each stack pointer address is followed by the size of the
1183
           data in use in that stack, in bytes.  This used to be a
1184
           conditional around just the two extra args, but that might
1185
           be undefined if yyoverflow is a macro.  */
1186
        yyoverflow (YY_("memory exhausted"),
1187
                    &yyss1, yysize * sizeof (*yyssp),
1188
                    &yyvs1, yysize * sizeof (*yyvsp),
1189
 
1190
                    &yystacksize);
1191
 
1192
        yyss = yyss1;
1193
        yyvs = yyvs1;
1194
      }
1195
#else /* no yyoverflow */
1196
# ifndef YYSTACK_RELOCATE
1197
      goto yyexhaustedlab;
1198
# else
1199
      /* Extend the stack our own way.  */
1200
      if (YYMAXDEPTH <= yystacksize)
1201
        goto yyexhaustedlab;
1202
      yystacksize *= 2;
1203
      if (YYMAXDEPTH < yystacksize)
1204
        yystacksize = YYMAXDEPTH;
1205
 
1206
      {
1207
        short int *yyss1 = yyss;
1208
        union yyalloc *yyptr =
1209
          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1210
        if (! yyptr)
1211
          goto yyexhaustedlab;
1212
        YYSTACK_RELOCATE (yyss);
1213
        YYSTACK_RELOCATE (yyvs);
1214
 
1215
#  undef YYSTACK_RELOCATE
1216
        if (yyss1 != yyssa)
1217
          YYSTACK_FREE (yyss1);
1218
      }
1219
# endif
1220
#endif /* no yyoverflow */
1221
 
1222
      yyssp = yyss + yysize - 1;
1223
      yyvsp = yyvs + yysize - 1;
1224
 
1225
 
1226
      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1227
                  (unsigned long int) yystacksize));
1228
 
1229
      if (yyss + yystacksize - 1 <= yyssp)
1230
        YYABORT;
1231
    }
1232
 
1233
  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1234
 
1235
  goto yybackup;
1236
 
1237
/*-----------.
1238
| yybackup.  |
1239
`-----------*/
1240
yybackup:
1241
 
1242
/* Do appropriate processing given the current state.  */
1243
/* Read a look-ahead token if we need one and don't already have one.  */
1244
/* yyresume: */
1245
 
1246
  /* First try to decide what to do without reference to look-ahead token.  */
1247
 
1248
  yyn = yypact[yystate];
1249
  if (yyn == YYPACT_NINF)
1250
    goto yydefault;
1251
 
1252
  /* Not known => get a look-ahead token if don't already have one.  */
1253
 
1254
  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
1255
  if (yychar == YYEMPTY)
1256
    {
1257
      YYDPRINTF ((stderr, "Reading a token: "));
1258
      yychar = YYLEX;
1259
    }
1260
 
1261
  if (yychar <= YYEOF)
1262
    {
1263
      yychar = yytoken = YYEOF;
1264
      YYDPRINTF ((stderr, "Now at end of input.\n"));
1265
    }
1266
  else
1267
    {
1268
      yytoken = YYTRANSLATE (yychar);
1269
      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
1270
    }
1271
 
1272
  /* If the proper action on seeing token YYTOKEN is to reduce or to
1273
     detect an error, take that action.  */
1274
  yyn += yytoken;
1275
  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1276
    goto yydefault;
1277
  yyn = yytable[yyn];
1278
  if (yyn <= 0)
1279
    {
1280
      if (yyn == 0 || yyn == YYTABLE_NINF)
1281
        goto yyerrlab;
1282
      yyn = -yyn;
1283
      goto yyreduce;
1284
    }
1285
 
1286
  if (yyn == YYFINAL)
1287
    YYACCEPT;
1288
 
1289
  /* Shift the look-ahead token.  */
1290
  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
1291
 
1292
  /* Discard the token being shifted unless it is eof.  */
1293
  if (yychar != YYEOF)
1294
    yychar = YYEMPTY;
1295
 
1296
  *++yyvsp = yylval;
1297
 
1298
 
1299
  /* Count tokens shifted since error; after three, turn off error
1300
     status.  */
1301
  if (yyerrstatus)
1302
    yyerrstatus--;
1303
 
1304
  yystate = yyn;
1305
  goto yynewstate;
1306
 
1307
 
1308
/*-----------------------------------------------------------.
1309
| yydefault -- do the default action for the current state.  |
1310
`-----------------------------------------------------------*/
1311
yydefault:
1312
  yyn = yydefact[yystate];
1313
  if (yyn == 0)
1314
    goto yyerrlab;
1315
  goto yyreduce;
1316
 
1317
 
1318
/*-----------------------------.
1319
| yyreduce -- Do a reduction.  |
1320
`-----------------------------*/
1321
yyreduce:
1322
  /* yyn is the number of a rule to reduce with.  */
1323
  yylen = yyr2[yyn];
1324
 
1325
  /* If YYLEN is nonzero, implement the default value of the action:
1326
     `$$ = $1'.
1327
 
1328
     Otherwise, the following line sets YYVAL to garbage.
1329
     This behavior is undocumented and Bison
1330
     users should not rely upon it.  Assigning to YYVAL
1331
     unconditionally makes the parser a bit smaller, and it avoids a
1332
     GCC warning that YYVAL may be used uninitialized.  */
1333
  yyval = yyvsp[1-yylen];
1334
 
1335
 
1336
  YY_REDUCE_PRINT (yyn);
1337
  switch (yyn)
1338
    {
1339
        case 3:
1340
#line 123 "m68k-parse.y"
1341
    {
1342
                  op->trailing_ampersand = (yyvsp[0].trailing_ampersand);
1343
                }
1344
    break;
1345
 
1346
  case 4:
1347
#line 127 "m68k-parse.y"
1348
    {
1349
                  op->trailing_ampersand = (yyvsp[0].trailing_ampersand);
1350
                }
1351
    break;
1352
 
1353
  case 5:
1354
#line 135 "m68k-parse.y"
1355
    { (yyval.trailing_ampersand) = 0; }
1356
    break;
1357
 
1358
  case 6:
1359
#line 137 "m68k-parse.y"
1360
    { (yyval.trailing_ampersand) = 1; }
1361
    break;
1362
 
1363
  case 7:
1364
#line 144 "m68k-parse.y"
1365
    {
1366
                  op->mode = LSH;
1367
                }
1368
    break;
1369
 
1370
  case 8:
1371
#line 149 "m68k-parse.y"
1372
    {
1373
                  op->mode = RSH;
1374
                }
1375
    break;
1376
 
1377
  case 9:
1378
#line 154 "m68k-parse.y"
1379
    {
1380
                  op->mode = DREG;
1381
                  op->reg = (yyvsp[0].reg);
1382
                }
1383
    break;
1384
 
1385
  case 10:
1386
#line 159 "m68k-parse.y"
1387
    {
1388
                  op->mode = AREG;
1389
                  op->reg = (yyvsp[0].reg);
1390
                }
1391
    break;
1392
 
1393
  case 11:
1394
#line 164 "m68k-parse.y"
1395
    {
1396
                  op->mode = FPREG;
1397
                  op->reg = (yyvsp[0].reg);
1398
                }
1399
    break;
1400
 
1401
  case 12:
1402
#line 169 "m68k-parse.y"
1403
    {
1404
                  op->mode = CONTROL;
1405
                  op->reg = (yyvsp[0].reg);
1406
                }
1407
    break;
1408
 
1409
  case 13:
1410
#line 174 "m68k-parse.y"
1411
    {
1412
                  op->mode = CONTROL;
1413
                  op->reg = (yyvsp[0].reg);
1414
                }
1415
    break;
1416
 
1417
  case 14:
1418
#line 179 "m68k-parse.y"
1419
    {
1420
                  op->mode = ABSL;
1421
                  op->disp = (yyvsp[0].exp);
1422
                }
1423
    break;
1424
 
1425
  case 15:
1426
#line 184 "m68k-parse.y"
1427
    {
1428
                  op->mode = IMMED;
1429
                  op->disp = (yyvsp[0].exp);
1430
                }
1431
    break;
1432
 
1433
  case 16:
1434
#line 189 "m68k-parse.y"
1435
    {
1436
                  op->mode = IMMED;
1437
                  op->disp = (yyvsp[0].exp);
1438
                }
1439
    break;
1440
 
1441
  case 17:
1442
#line 194 "m68k-parse.y"
1443
    {
1444
                  op->mode = REGLST;
1445
                  op->mask = (yyvsp[0].mask);
1446
                }
1447
    break;
1448
 
1449
  case 18:
1450
#line 207 "m68k-parse.y"
1451
    {
1452
                  op->mode = AINDR;
1453
                  op->reg = (yyvsp[-1].reg);
1454
                }
1455
    break;
1456
 
1457
  case 19:
1458
#line 212 "m68k-parse.y"
1459
    {
1460
                  op->mode = AINC;
1461
                  op->reg = (yyvsp[-2].reg);
1462
                }
1463
    break;
1464
 
1465
  case 20:
1466
#line 217 "m68k-parse.y"
1467
    {
1468
                  op->mode = ADEC;
1469
                  op->reg = (yyvsp[-1].reg);
1470
                }
1471
    break;
1472
 
1473
  case 21:
1474
#line 222 "m68k-parse.y"
1475
    {
1476
                  op->reg = (yyvsp[-1].reg);
1477
                  op->disp = (yyvsp[-3].exp);
1478
                  if (((yyvsp[-1].reg) >= ZADDR0 && (yyvsp[-1].reg) <= ZADDR7)
1479
                      || (yyvsp[-1].reg) == ZPC)
1480
                    op->mode = BASE;
1481
                  else
1482
                    op->mode = DISP;
1483
                }
1484
    break;
1485
 
1486
  case 22:
1487
#line 232 "m68k-parse.y"
1488
    {
1489
                  op->reg = (yyvsp[-3].reg);
1490
                  op->disp = (yyvsp[-1].exp);
1491
                  if (((yyvsp[-3].reg) >= ZADDR0 && (yyvsp[-3].reg) <= ZADDR7)
1492
                      || (yyvsp[-3].reg) == ZPC)
1493
                    op->mode = BASE;
1494
                  else
1495
                    op->mode = DISP;
1496
                }
1497
    break;
1498
 
1499
  case 23:
1500
#line 242 "m68k-parse.y"
1501
    {
1502
                  op->reg = (yyvsp[-1].reg);
1503
                  op->disp = (yyvsp[-3].exp);
1504
                  if (((yyvsp[-1].reg) >= ZADDR0 && (yyvsp[-1].reg) <= ZADDR7)
1505
                      || (yyvsp[-1].reg) == ZPC)
1506
                    op->mode = BASE;
1507
                  else
1508
                    op->mode = DISP;
1509
                }
1510
    break;
1511
 
1512
  case 24:
1513
#line 252 "m68k-parse.y"
1514
    {
1515
                  op->mode = DISP;
1516
                  op->reg = (yyvsp[-1].reg);
1517
                }
1518
    break;
1519
 
1520
  case 25:
1521
#line 257 "m68k-parse.y"
1522
    {
1523
                  op->mode = BASE;
1524
                  op->reg = (yyvsp[-1].reg);
1525
                }
1526
    break;
1527
 
1528
  case 26:
1529
#line 262 "m68k-parse.y"
1530
    {
1531
                  op->mode = BASE;
1532
                  op->reg = (yyvsp[-1].reg);
1533
                }
1534
    break;
1535
 
1536
  case 27:
1537
#line 267 "m68k-parse.y"
1538
    {
1539
                  op->mode = BASE;
1540
                  op->reg = (yyvsp[-3].reg);
1541
                  op->disp = (yyvsp[-5].exp);
1542
                  op->index = (yyvsp[-1].indexreg);
1543
                }
1544
    break;
1545
 
1546
  case 28:
1547
#line 274 "m68k-parse.y"
1548
    {
1549
                  if ((yyvsp[-3].reg) == PC || (yyvsp[-3].reg) == ZPC)
1550
                    yyerror (_("syntax error"));
1551
                  op->mode = BASE;
1552
                  op->reg = (yyvsp[-1].reg);
1553
                  op->disp = (yyvsp[-5].exp);
1554
                  op->index.reg = (yyvsp[-3].reg);
1555
                  op->index.size = SIZE_UNSPEC;
1556
                  op->index.scale = 1;
1557
                }
1558
    break;
1559
 
1560
  case 29:
1561
#line 285 "m68k-parse.y"
1562
    {
1563
                  op->mode = BASE;
1564
                  op->reg = (yyvsp[-1].reg);
1565
                  op->disp = (yyvsp[-4].exp);
1566
                  op->index = (yyvsp[-2].indexreg);
1567
                }
1568
    break;
1569
 
1570
  case 30:
1571
#line 292 "m68k-parse.y"
1572
    {
1573
                  op->mode = BASE;
1574
                  op->disp = (yyvsp[-1].exp);
1575
                  op->index = (yyvsp[-3].indexreg);
1576
                }
1577
    break;
1578
 
1579
  case 31:
1580
#line 298 "m68k-parse.y"
1581
    {
1582
                  op->mode = BASE;
1583
                  op->reg = (yyvsp[-3].reg);
1584
                  op->disp = (yyvsp[-5].exp);
1585
                  op->index = (yyvsp[-1].indexreg);
1586
                }
1587
    break;
1588
 
1589
  case 32:
1590
#line 305 "m68k-parse.y"
1591
    {
1592
                  op->mode = BASE;
1593
                  op->reg = (yyvsp[-3].reg);
1594
                  op->index = (yyvsp[-1].indexreg);
1595
                }
1596
    break;
1597
 
1598
  case 33:
1599
#line 311 "m68k-parse.y"
1600
    {
1601
                  if ((yyvsp[-3].reg) == PC || (yyvsp[-3].reg) == ZPC)
1602
                    yyerror (_("syntax error"));
1603
                  op->mode = BASE;
1604
                  op->reg = (yyvsp[-1].reg);
1605
                  op->disp = (yyvsp[-5].exp);
1606
                  op->index.reg = (yyvsp[-3].reg);
1607
                  op->index.size = SIZE_UNSPEC;
1608
                  op->index.scale = 1;
1609
                }
1610
    break;
1611
 
1612
  case 34:
1613
#line 322 "m68k-parse.y"
1614
    {
1615
                  if ((yyvsp[-3].reg) == PC || (yyvsp[-3].reg) == ZPC)
1616
                    yyerror (_("syntax error"));
1617
                  op->mode = BASE;
1618
                  op->reg = (yyvsp[-1].reg);
1619
                  op->index.reg = (yyvsp[-3].reg);
1620
                  op->index.size = SIZE_UNSPEC;
1621
                  op->index.scale = 1;
1622
                }
1623
    break;
1624
 
1625
  case 35:
1626
#line 332 "m68k-parse.y"
1627
    {
1628
                  op->mode = BASE;
1629
                  op->reg = (yyvsp[-1].reg);
1630
                  op->disp = (yyvsp[-4].exp);
1631
                  op->index = (yyvsp[-2].indexreg);
1632
                }
1633
    break;
1634
 
1635
  case 36:
1636
#line 339 "m68k-parse.y"
1637
    {
1638
                  op->mode = BASE;
1639
                  op->reg = (yyvsp[-1].reg);
1640
                  op->index = (yyvsp[-2].indexreg);
1641
                }
1642
    break;
1643
 
1644
  case 37:
1645
#line 345 "m68k-parse.y"
1646
    {
1647
                  op->mode = POST;
1648
                  op->reg = (yyvsp[-5].reg);
1649
                  op->disp = (yyvsp[-6].exp);
1650
                  op->index = (yyvsp[-2].indexreg);
1651
                  op->odisp = (yyvsp[-1].exp);
1652
                }
1653
    break;
1654
 
1655
  case 38:
1656
#line 353 "m68k-parse.y"
1657
    {
1658
                  op->mode = POST;
1659
                  op->reg = (yyvsp[-3].reg);
1660
                  op->disp = (yyvsp[-4].exp);
1661
                  op->odisp = (yyvsp[-1].exp);
1662
                }
1663
    break;
1664
 
1665
  case 39:
1666
#line 360 "m68k-parse.y"
1667
    {
1668
                  op->mode = POST;
1669
                  op->reg = (yyvsp[-5].reg);
1670
                  op->index = (yyvsp[-2].indexreg);
1671
                  op->odisp = (yyvsp[-1].exp);
1672
                }
1673
    break;
1674
 
1675
  case 40:
1676
#line 367 "m68k-parse.y"
1677
    {
1678
                  op->mode = POST;
1679
                  op->reg = (yyvsp[-3].reg);
1680
                  op->odisp = (yyvsp[-1].exp);
1681
                }
1682
    break;
1683
 
1684
  case 41:
1685
#line 373 "m68k-parse.y"
1686
    {
1687
                  op->mode = PRE;
1688
                  op->reg = (yyvsp[-5].reg);
1689
                  op->disp = (yyvsp[-7].exp);
1690
                  op->index = (yyvsp[-3].indexreg);
1691
                  op->odisp = (yyvsp[-1].exp);
1692
                }
1693
    break;
1694
 
1695
  case 42:
1696
#line 381 "m68k-parse.y"
1697
    {
1698
                  op->mode = PRE;
1699
                  op->reg = (yyvsp[-5].reg);
1700
                  op->index = (yyvsp[-3].indexreg);
1701
                  op->odisp = (yyvsp[-1].exp);
1702
                }
1703
    break;
1704
 
1705
  case 43:
1706
#line 388 "m68k-parse.y"
1707
    {
1708
                  if ((yyvsp[-5].reg) == PC || (yyvsp[-5].reg) == ZPC)
1709
                    yyerror (_("syntax error"));
1710
                  op->mode = PRE;
1711
                  op->reg = (yyvsp[-3].reg);
1712
                  op->disp = (yyvsp[-7].exp);
1713
                  op->index.reg = (yyvsp[-5].reg);
1714
                  op->index.size = SIZE_UNSPEC;
1715
                  op->index.scale = 1;
1716
                  op->odisp = (yyvsp[-1].exp);
1717
                }
1718
    break;
1719
 
1720
  case 44:
1721
#line 400 "m68k-parse.y"
1722
    {
1723
                  if ((yyvsp[-5].reg) == PC || (yyvsp[-5].reg) == ZPC)
1724
                    yyerror (_("syntax error"));
1725
                  op->mode = PRE;
1726
                  op->reg = (yyvsp[-3].reg);
1727
                  op->index.reg = (yyvsp[-5].reg);
1728
                  op->index.size = SIZE_UNSPEC;
1729
                  op->index.scale = 1;
1730
                  op->odisp = (yyvsp[-1].exp);
1731
                }
1732
    break;
1733
 
1734
  case 45:
1735
#line 411 "m68k-parse.y"
1736
    {
1737
                  op->mode = PRE;
1738
                  op->reg = (yyvsp[-3].reg);
1739
                  op->disp = (yyvsp[-5].exp);
1740
                  op->index = (yyvsp[-4].indexreg);
1741
                  op->odisp = (yyvsp[-1].exp);
1742
                }
1743
    break;
1744
 
1745
  case 46:
1746
#line 424 "m68k-parse.y"
1747
    {
1748
                  /* We use optzapc to avoid a shift/reduce conflict.  */
1749
                  if ((yyvsp[-1].reg) < ADDR0 || (yyvsp[-1].reg) > ADDR7)
1750
                    yyerror (_("syntax error"));
1751
                  op->mode = AINDR;
1752
                  op->reg = (yyvsp[-1].reg);
1753
                }
1754
    break;
1755
 
1756
  case 47:
1757
#line 432 "m68k-parse.y"
1758
    {
1759
                  /* We use optzapc to avoid a shift/reduce conflict.  */
1760
                  if ((yyvsp[-2].reg) < ADDR0 || (yyvsp[-2].reg) > ADDR7)
1761
                    yyerror (_("syntax error"));
1762
                  op->mode = AINC;
1763
                  op->reg = (yyvsp[-2].reg);
1764
                }
1765
    break;
1766
 
1767
  case 48:
1768
#line 440 "m68k-parse.y"
1769
    {
1770
                  /* We use optzapc to avoid a shift/reduce conflict.  */
1771
                  if ((yyvsp[-2].reg) < ADDR0 || (yyvsp[-2].reg) > ADDR7)
1772
                    yyerror (_("syntax error"));
1773
                  op->mode = ADEC;
1774
                  op->reg = (yyvsp[-2].reg);
1775
                }
1776
    break;
1777
 
1778
  case 49:
1779
#line 448 "m68k-parse.y"
1780
    {
1781
                  op->reg = (yyvsp[-4].reg);
1782
                  op->disp = (yyvsp[-1].exp);
1783
                  if (((yyvsp[-4].reg) >= ZADDR0 && (yyvsp[-4].reg) <= ZADDR7)
1784
                      || (yyvsp[-4].reg) == ZPC)
1785
                    op->mode = BASE;
1786
                  else
1787
                    op->mode = DISP;
1788
                }
1789
    break;
1790
 
1791
  case 50:
1792
#line 458 "m68k-parse.y"
1793
    {
1794
                  op->mode = BASE;
1795
                  op->reg = (yyvsp[-5].reg);
1796
                  op->disp = (yyvsp[-2].exp);
1797
                  op->index = (yyvsp[-1].indexreg);
1798
                }
1799
    break;
1800
 
1801
  case 51:
1802
#line 465 "m68k-parse.y"
1803
    {
1804
                  op->mode = POST;
1805
                  op->reg = (yyvsp[-9].reg);
1806
                  op->disp = (yyvsp[-6].exp);
1807
                  op->index = (yyvsp[-1].indexreg);
1808
                  op->odisp = (yyvsp[-2].exp);
1809
                }
1810
    break;
1811
 
1812
  case 52:
1813
#line 473 "m68k-parse.y"
1814
    {
1815
                  op->mode = POST;
1816
                  op->reg = (yyvsp[-8].reg);
1817
                  op->disp = (yyvsp[-5].exp);
1818
                  op->odisp = (yyvsp[-1].exp);
1819
                }
1820
    break;
1821
 
1822
  case 53:
1823
#line 480 "m68k-parse.y"
1824
    {
1825
                  op->mode = PRE;
1826
                  op->reg = (yyvsp[-9].reg);
1827
                  op->disp = (yyvsp[-6].exp);
1828
                  op->index = (yyvsp[-5].indexreg);
1829
                  op->odisp = (yyvsp[-1].exp);
1830
                }
1831
    break;
1832
 
1833
  case 55:
1834
#line 495 "m68k-parse.y"
1835
    {
1836
                  (yyval.indexreg).reg = (yyvsp[0].reg);
1837
                  (yyval.indexreg).size = SIZE_UNSPEC;
1838
                  (yyval.indexreg).scale = 1;
1839
                }
1840
    break;
1841
 
1842
  case 57:
1843
#line 509 "m68k-parse.y"
1844
    {
1845
                  (yyval.indexreg).reg = (yyvsp[0].reg);
1846
                  (yyval.indexreg).size = SIZE_UNSPEC;
1847
                  (yyval.indexreg).scale = 1;
1848
                }
1849
    break;
1850
 
1851
  case 68:
1852
#line 552 "m68k-parse.y"
1853
    {
1854
                  (yyval.reg) = ZADDR0;
1855
                }
1856
    break;
1857
 
1858
  case 72:
1859
#line 569 "m68k-parse.y"
1860
    {
1861
                  (yyval.reg) = ZADDR0;
1862
                }
1863
    break;
1864
 
1865
  case 73:
1866
#line 573 "m68k-parse.y"
1867
    {
1868
                  (yyval.reg) = (yyvsp[0].reg);
1869
                }
1870
    break;
1871
 
1872
  case 74:
1873
#line 582 "m68k-parse.y"
1874
    {
1875
                  (yyval.exp).exp.X_op = O_absent;
1876
                  (yyval.exp).size = SIZE_UNSPEC;
1877
                }
1878
    break;
1879
 
1880
  case 75:
1881
#line 587 "m68k-parse.y"
1882
    {
1883
                  (yyval.exp) = (yyvsp[0].exp);
1884
                }
1885
    break;
1886
 
1887
  case 76:
1888
#line 596 "m68k-parse.y"
1889
    {
1890
                  (yyval.exp).exp.X_op = O_absent;
1891
                  (yyval.exp).size = SIZE_UNSPEC;
1892
                }
1893
    break;
1894
 
1895
  case 77:
1896
#line 601 "m68k-parse.y"
1897
    {
1898
                  (yyval.exp) = (yyvsp[-1].exp);
1899
                }
1900
    break;
1901
 
1902
  case 79:
1903
#line 611 "m68k-parse.y"
1904
    {
1905
                  (yyval.mask) = (yyvsp[-2].mask) | (yyvsp[0].mask);
1906
                }
1907
    break;
1908
 
1909
  case 80:
1910
#line 615 "m68k-parse.y"
1911
    {
1912
                  (yyval.mask) = (1 << (yyvsp[-2].onereg)) | (yyvsp[0].mask);
1913
                }
1914
    break;
1915
 
1916
  case 81:
1917
#line 627 "m68k-parse.y"
1918
    {
1919
                  (yyval.mask) = 1 << (yyvsp[0].onereg);
1920
                }
1921
    break;
1922
 
1923
  case 83:
1924
#line 632 "m68k-parse.y"
1925
    {
1926
                  (yyval.mask) = (yyvsp[-2].mask) | (yyvsp[0].mask);
1927
                }
1928
    break;
1929
 
1930
  case 84:
1931
#line 636 "m68k-parse.y"
1932
    {
1933
                  (yyval.mask) = (1 << (yyvsp[-2].onereg)) | (yyvsp[0].mask);
1934
                }
1935
    break;
1936
 
1937
  case 85:
1938
#line 643 "m68k-parse.y"
1939
    {
1940
                  if ((yyvsp[-2].onereg) <= (yyvsp[0].onereg))
1941
                    (yyval.mask) = (1 << ((yyvsp[0].onereg) + 1)) - 1 - ((1 << (yyvsp[-2].onereg)) - 1);
1942
                  else
1943
                    (yyval.mask) = (1 << ((yyvsp[-2].onereg) + 1)) - 1 - ((1 << (yyvsp[0].onereg)) - 1);
1944
                }
1945
    break;
1946
 
1947
  case 86:
1948
#line 653 "m68k-parse.y"
1949
    {
1950
                  (yyval.onereg) = (yyvsp[0].reg) - DATA0;
1951
                }
1952
    break;
1953
 
1954
  case 87:
1955
#line 657 "m68k-parse.y"
1956
    {
1957
                  (yyval.onereg) = (yyvsp[0].reg) - ADDR0 + 8;
1958
                }
1959
    break;
1960
 
1961
  case 88:
1962
#line 661 "m68k-parse.y"
1963
    {
1964
                  (yyval.onereg) = (yyvsp[0].reg) - FP0 + 16;
1965
                }
1966
    break;
1967
 
1968
  case 89:
1969
#line 665 "m68k-parse.y"
1970
    {
1971
                  if ((yyvsp[0].reg) == FPI)
1972
                    (yyval.onereg) = 24;
1973
                  else if ((yyvsp[0].reg) == FPS)
1974
                    (yyval.onereg) = 25;
1975
                  else
1976
                    (yyval.onereg) = 26;
1977
                }
1978
    break;
1979
 
1980
 
1981
      default: break;
1982
    }
1983
 
1984
/* Line 1126 of yacc.c.  */
1985
#line 1986 "m68k-parse.c"
1986
 
1987
  yyvsp -= yylen;
1988
  yyssp -= yylen;
1989
 
1990
 
1991
  YY_STACK_PRINT (yyss, yyssp);
1992
 
1993
  *++yyvsp = yyval;
1994
 
1995
 
1996
  /* Now `shift' the result of the reduction.  Determine what state
1997
     that goes to, based on the state we popped back to and the rule
1998
     number reduced by.  */
1999
 
2000
  yyn = yyr1[yyn];
2001
 
2002
  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
2003
  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
2004
    yystate = yytable[yystate];
2005
  else
2006
    yystate = yydefgoto[yyn - YYNTOKENS];
2007
 
2008
  goto yynewstate;
2009
 
2010
 
2011
/*------------------------------------.
2012
| yyerrlab -- here on detecting error |
2013
`------------------------------------*/
2014
yyerrlab:
2015
  /* If not already recovering from an error, report this error.  */
2016
  if (!yyerrstatus)
2017
    {
2018
      ++yynerrs;
2019
#if YYERROR_VERBOSE
2020
      yyn = yypact[yystate];
2021
 
2022
      if (YYPACT_NINF < yyn && yyn < YYLAST)
2023
        {
2024
          int yytype = YYTRANSLATE (yychar);
2025
          YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
2026
          YYSIZE_T yysize = yysize0;
2027
          YYSIZE_T yysize1;
2028
          int yysize_overflow = 0;
2029
          char *yymsg = 0;
2030
#         define YYERROR_VERBOSE_ARGS_MAXIMUM 5
2031
          char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
2032
          int yyx;
2033
 
2034
#if 0
2035
          /* This is so xgettext sees the translatable formats that are
2036
             constructed on the fly.  */
2037
          YY_("syntax error, unexpected %s");
2038
          YY_("syntax error, unexpected %s, expecting %s");
2039
          YY_("syntax error, unexpected %s, expecting %s or %s");
2040
          YY_("syntax error, unexpected %s, expecting %s or %s or %s");
2041
          YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
2042
#endif
2043
          char *yyfmt;
2044
          char const *yyf;
2045
          static char const yyunexpected[] = "syntax error, unexpected %s";
2046
          static char const yyexpecting[] = ", expecting %s";
2047
          static char const yyor[] = " or %s";
2048
          char yyformat[sizeof yyunexpected
2049
                        + sizeof yyexpecting - 1
2050
                        + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
2051
                           * (sizeof yyor - 1))];
2052
          char const *yyprefix = yyexpecting;
2053
 
2054
          /* Start YYX at -YYN if negative to avoid negative indexes in
2055
             YYCHECK.  */
2056
          int yyxbegin = yyn < 0 ? -yyn : 0;
2057
 
2058
          /* Stay within bounds of both yycheck and yytname.  */
2059
          int yychecklim = YYLAST - yyn;
2060
          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
2061
          int yycount = 1;
2062
 
2063
          yyarg[0] = yytname[yytype];
2064
          yyfmt = yystpcpy (yyformat, yyunexpected);
2065
 
2066
          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
2067
            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
2068
              {
2069
                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
2070
                  {
2071
                    yycount = 1;
2072
                    yysize = yysize0;
2073
                    yyformat[sizeof yyunexpected - 1] = '\0';
2074
                    break;
2075
                  }
2076
                yyarg[yycount++] = yytname[yyx];
2077
                yysize1 = yysize + yytnamerr (0, yytname[yyx]);
2078
                yysize_overflow |= yysize1 < yysize;
2079
                yysize = yysize1;
2080
                yyfmt = yystpcpy (yyfmt, yyprefix);
2081
                yyprefix = yyor;
2082
              }
2083
 
2084
          yyf = YY_(yyformat);
2085
          yysize1 = yysize + yystrlen (yyf);
2086
          yysize_overflow |= yysize1 < yysize;
2087
          yysize = yysize1;
2088
 
2089
          if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
2090
            yymsg = (char *) YYSTACK_ALLOC (yysize);
2091
          if (yymsg)
2092
            {
2093
              /* Avoid sprintf, as that infringes on the user's name space.
2094
                 Don't have undefined behavior even if the translation
2095
                 produced a string with the wrong number of "%s"s.  */
2096
              char *yyp = yymsg;
2097
              int yyi = 0;
2098
              while ((*yyp = *yyf))
2099
                {
2100
                  if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
2101
                    {
2102
                      yyp += yytnamerr (yyp, yyarg[yyi++]);
2103
                      yyf += 2;
2104
                    }
2105
                  else
2106
                    {
2107
                      yyp++;
2108
                      yyf++;
2109
                    }
2110
                }
2111
              yyerror (yymsg);
2112
              YYSTACK_FREE (yymsg);
2113
            }
2114
          else
2115
            {
2116
              yyerror (YY_("syntax error"));
2117
              goto yyexhaustedlab;
2118
            }
2119
        }
2120
      else
2121
#endif /* YYERROR_VERBOSE */
2122
        yyerror (YY_("syntax error"));
2123
    }
2124
 
2125
 
2126
 
2127
  if (yyerrstatus == 3)
2128
    {
2129
      /* If just tried and failed to reuse look-ahead token after an
2130
         error, discard it.  */
2131
 
2132
      if (yychar <= YYEOF)
2133
        {
2134
          /* Return failure if at end of input.  */
2135
          if (yychar == YYEOF)
2136
            YYABORT;
2137
        }
2138
      else
2139
        {
2140
          yydestruct ("Error: discarding", yytoken, &yylval);
2141
          yychar = YYEMPTY;
2142
        }
2143
    }
2144
 
2145
  /* Else will try to reuse look-ahead token after shifting the error
2146
     token.  */
2147
  goto yyerrlab1;
2148
 
2149
 
2150
/*---------------------------------------------------.
2151
| yyerrorlab -- error raised explicitly by YYERROR.  |
2152
`---------------------------------------------------*/
2153
yyerrorlab:
2154
 
2155
  /* Pacify compilers like GCC when the user code never invokes
2156
     YYERROR and the label yyerrorlab therefore never appears in user
2157
     code.  */
2158
  if (0)
2159
     goto yyerrorlab;
2160
 
2161
yyvsp -= yylen;
2162
  yyssp -= yylen;
2163
  yystate = *yyssp;
2164
  goto yyerrlab1;
2165
 
2166
 
2167
/*-------------------------------------------------------------.
2168
| yyerrlab1 -- common code for both syntax error and YYERROR.  |
2169
`-------------------------------------------------------------*/
2170
yyerrlab1:
2171
  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
2172
 
2173
  for (;;)
2174
    {
2175
      yyn = yypact[yystate];
2176
      if (yyn != YYPACT_NINF)
2177
        {
2178
          yyn += YYTERROR;
2179
          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
2180
            {
2181
              yyn = yytable[yyn];
2182
              if (0 < yyn)
2183
                break;
2184
            }
2185
        }
2186
 
2187
      /* Pop the current state because it cannot handle the error token.  */
2188
      if (yyssp == yyss)
2189
        YYABORT;
2190
 
2191
 
2192
      yydestruct ("Error: popping", yystos[yystate], yyvsp);
2193
      YYPOPSTACK;
2194
      yystate = *yyssp;
2195
      YY_STACK_PRINT (yyss, yyssp);
2196
    }
2197
 
2198
  if (yyn == YYFINAL)
2199
    YYACCEPT;
2200
 
2201
  *++yyvsp = yylval;
2202
 
2203
 
2204
  /* Shift the error token. */
2205
  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
2206
 
2207
  yystate = yyn;
2208
  goto yynewstate;
2209
 
2210
 
2211
/*-------------------------------------.
2212
| yyacceptlab -- YYACCEPT comes here.  |
2213
`-------------------------------------*/
2214
yyacceptlab:
2215
  yyresult = 0;
2216
  goto yyreturn;
2217
 
2218
/*-----------------------------------.
2219
| yyabortlab -- YYABORT comes here.  |
2220
`-----------------------------------*/
2221
yyabortlab:
2222
  yyresult = 1;
2223
  goto yyreturn;
2224
 
2225
#ifndef yyoverflow
2226
/*-------------------------------------------------.
2227
| yyexhaustedlab -- memory exhaustion comes here.  |
2228
`-------------------------------------------------*/
2229
yyexhaustedlab:
2230
  yyerror (YY_("memory exhausted"));
2231
  yyresult = 2;
2232
  /* Fall through.  */
2233
#endif
2234
 
2235
yyreturn:
2236
  if (yychar != YYEOF && yychar != YYEMPTY)
2237
     yydestruct ("Cleanup: discarding lookahead",
2238
                 yytoken, &yylval);
2239
  while (yyssp != yyss)
2240
    {
2241
      yydestruct ("Cleanup: popping",
2242
                  yystos[*yyssp], yyvsp);
2243
      YYPOPSTACK;
2244
    }
2245
#ifndef yyoverflow
2246
  if (yyss != yyssa)
2247
    YYSTACK_FREE (yyss);
2248
#endif
2249
  return yyresult;
2250
}
2251
 
2252
 
2253
#line 675 "m68k-parse.y"
2254
 
2255
 
2256
/* The string to parse is stored here, and modified by yylex.  */
2257
 
2258
static char *str;
2259
 
2260
/* The original string pointer.  */
2261
 
2262
static char *strorig;
2263
 
2264
/* If *CCP could be a register, return the register number and advance
2265
   *CCP.  Otherwise don't change *CCP, and return 0.  */
2266
 
2267
static enum m68k_register
2268
m68k_reg_parse (ccp)
2269
     register char **ccp;
2270
{
2271
  char *start = *ccp;
2272
  char c;
2273
  char *p;
2274
  symbolS *symbolp;
2275
 
2276
  if (flag_reg_prefix_optional)
2277
    {
2278
      if (*start == REGISTER_PREFIX)
2279
        start++;
2280
      p = start;
2281
    }
2282
  else
2283
    {
2284
      if (*start != REGISTER_PREFIX)
2285
        return 0;
2286
      p = start + 1;
2287
    }
2288
 
2289
  if (! is_name_beginner (*p))
2290
    return 0;
2291
 
2292
  p++;
2293
  while (is_part_of_name (*p) && *p != '.' && *p != ':' && *p != '*')
2294
    p++;
2295
 
2296
  c = *p;
2297
  *p = 0;
2298
  symbolp = symbol_find (start);
2299
  *p = c;
2300
 
2301
  if (symbolp != NULL && S_GET_SEGMENT (symbolp) == reg_section)
2302
    {
2303
      *ccp = p;
2304
      return S_GET_VALUE (symbolp);
2305
    }
2306
 
2307
  /* In MRI mode, something like foo.bar can be equated to a register
2308
     name.  */
2309
  while (flag_mri && c == '.')
2310
    {
2311
      ++p;
2312
      while (is_part_of_name (*p) && *p != '.' && *p != ':' && *p != '*')
2313
        p++;
2314
      c = *p;
2315
      *p = '\0';
2316
      symbolp = symbol_find (start);
2317
      *p = c;
2318
      if (symbolp != NULL && S_GET_SEGMENT (symbolp) == reg_section)
2319
        {
2320
          *ccp = p;
2321
          return S_GET_VALUE (symbolp);
2322
        }
2323
    }
2324
 
2325
  return 0;
2326
}
2327
 
2328
/* The lexer.  */
2329
 
2330
static int
2331
yylex ()
2332
{
2333
  enum m68k_register reg;
2334
  char *s;
2335
  int parens;
2336
  int c = 0;
2337
  int tail = 0;
2338
  char *hold;
2339
 
2340
  if (*str == ' ')
2341
    ++str;
2342
 
2343
  if (*str == '\0')
2344
    return 0;
2345
 
2346
  /* Various special characters are just returned directly.  */
2347
  switch (*str)
2348
    {
2349
    case '@':
2350
      /* In MRI mode, this can be the start of an octal number.  */
2351
      if (flag_mri)
2352
        {
2353
          if (ISDIGIT (str[1])
2354
              || ((str[1] == '+' || str[1] == '-')
2355
                  && ISDIGIT (str[2])))
2356
            break;
2357
        }
2358
      /* Fall through.  */
2359
    case '#':
2360
    case '&':
2361
    case ',':
2362
    case ')':
2363
    case '/':
2364
    case '[':
2365
    case ']':
2366
    case '<':
2367
    case '>':
2368
      return *str++;
2369
    case '+':
2370
      /* It so happens that a '+' can only appear at the end of an
2371
         operand, or if it is trailed by an '&'(see mac load insn).
2372
         If it appears anywhere else, it must be a unary.  */
2373
      if (str[1] == '\0' || (str[1] == '&' && str[2] == '\0'))
2374
        return *str++;
2375
      break;
2376
    case '-':
2377
      /* A '-' can only appear in -(ar), rn-rn, or ar@-.  If it
2378
         appears anywhere else, it must be a unary minus on an
2379
         expression, unless it it trailed by a '&'(see mac load insn).  */
2380
      if (str[1] == '\0' || (str[1] == '&' && str[2] == '\0'))
2381
        return *str++;
2382
      s = str + 1;
2383
      if (*s == '(')
2384
        ++s;
2385
      if (m68k_reg_parse (&s) != 0)
2386
        return *str++;
2387
      break;
2388
    case '(':
2389
      /* A '(' can only appear in `(reg)', `(expr,...', `([', `@(', or
2390
         `)('.  If it appears anywhere else, it must be starting an
2391
         expression.  */
2392
      if (str[1] == '['
2393
          || (str > strorig
2394
              && (str[-1] == '@'
2395
                  || str[-1] == ')')))
2396
        return *str++;
2397
      s = str + 1;
2398
      if (m68k_reg_parse (&s) != 0)
2399
        return *str++;
2400
      /* Check for the case of '(expr,...' by scanning ahead.  If we
2401
         find a comma outside of balanced parentheses, we return '('.
2402
         If we find an unbalanced right parenthesis, then presumably
2403
         the '(' really starts an expression.  */
2404
      parens = 0;
2405
      for (s = str + 1; *s != '\0'; s++)
2406
        {
2407
          if (*s == '(')
2408
            ++parens;
2409
          else if (*s == ')')
2410
            {
2411
              if (parens == 0)
2412
                break;
2413
              --parens;
2414
            }
2415
          else if (*s == ',' && parens == 0)
2416
            {
2417
              /* A comma can not normally appear in an expression, so
2418
                 this is a case of '(expr,...'.  */
2419
              return *str++;
2420
            }
2421
        }
2422
    }
2423
 
2424
  /* See if it's a register.  */
2425
 
2426
  reg = m68k_reg_parse (&str);
2427
  if (reg != 0)
2428
    {
2429
      int ret;
2430
 
2431
      yylval.reg = reg;
2432
 
2433
      if (reg >= DATA0 && reg <= DATA7)
2434
        ret = DR;
2435
      else if (reg >= ADDR0 && reg <= ADDR7)
2436
        ret = AR;
2437
      else if (reg >= FP0 && reg <= FP7)
2438
        return FPR;
2439
      else if (reg == FPI
2440
               || reg == FPS
2441
               || reg == FPC)
2442
        return FPCR;
2443
      else if (reg == PC)
2444
        return LPC;
2445
      else if (reg >= ZDATA0 && reg <= ZDATA7)
2446
        ret = ZDR;
2447
      else if (reg >= ZADDR0 && reg <= ZADDR7)
2448
        ret = ZAR;
2449
      else if (reg == ZPC)
2450
        return LZPC;
2451
      else
2452
        return CREG;
2453
 
2454
      /* If we get here, we have a data or address register.  We
2455
         must check for a size or scale; if we find one, we must
2456
         return INDEXREG.  */
2457
 
2458
      s = str;
2459
 
2460
      if (*s != '.' && *s != ':' && *s != '*')
2461
        return ret;
2462
 
2463
      yylval.indexreg.reg = reg;
2464
 
2465
      if (*s != '.' && *s != ':')
2466
        yylval.indexreg.size = SIZE_UNSPEC;
2467
      else
2468
        {
2469
          ++s;
2470
          switch (*s)
2471
            {
2472
            case 'w':
2473
            case 'W':
2474
              yylval.indexreg.size = SIZE_WORD;
2475
              ++s;
2476
              break;
2477
            case 'l':
2478
            case 'L':
2479
              yylval.indexreg.size = SIZE_LONG;
2480
              ++s;
2481
              break;
2482
            default:
2483
              yyerror (_("illegal size specification"));
2484
              yylval.indexreg.size = SIZE_UNSPEC;
2485
              break;
2486
            }
2487
        }
2488
 
2489
      yylval.indexreg.scale = 1;
2490
 
2491
      if (*s == '*' || *s == ':')
2492
        {
2493
          expressionS scale;
2494
 
2495
          ++s;
2496
 
2497
          hold = input_line_pointer;
2498
          input_line_pointer = s;
2499
          expression (&scale);
2500
          s = input_line_pointer;
2501
          input_line_pointer = hold;
2502
 
2503
          if (scale.X_op != O_constant)
2504
            yyerror (_("scale specification must resolve to a number"));
2505
          else
2506
            {
2507
              switch (scale.X_add_number)
2508
                {
2509
                case 1:
2510
                case 2:
2511
                case 4:
2512
                case 8:
2513
                  yylval.indexreg.scale = scale.X_add_number;
2514
                  break;
2515
                default:
2516
                  yyerror (_("invalid scale value"));
2517
                  break;
2518
                }
2519
            }
2520
        }
2521
 
2522
      str = s;
2523
 
2524
      return INDEXREG;
2525
    }
2526
 
2527
  /* It must be an expression.  Before we call expression, we need to
2528
     look ahead to see if there is a size specification.  We must do
2529
     that first, because otherwise foo.l will be treated as the symbol
2530
     foo.l, rather than as the symbol foo with a long size
2531
     specification.  The grammar requires that all expressions end at
2532
     the end of the operand, or with ',', '(', ']', ')'.  */
2533
 
2534
  parens = 0;
2535
  for (s = str; *s != '\0'; s++)
2536
    {
2537
      if (*s == '(')
2538
        {
2539
          if (parens == 0
2540
              && s > str
2541
              && (s[-1] == ')' || ISALNUM (s[-1])))
2542
            break;
2543
          ++parens;
2544
        }
2545
      else if (*s == ')')
2546
        {
2547
          if (parens == 0)
2548
            break;
2549
          --parens;
2550
        }
2551
      else if (parens == 0
2552
               && (*s == ',' || *s == ']'))
2553
        break;
2554
    }
2555
 
2556
  yylval.exp.size = SIZE_UNSPEC;
2557
  if (s <= str + 2
2558
      || (s[-2] != '.' && s[-2] != ':'))
2559
    tail = 0;
2560
  else
2561
    {
2562
      switch (s[-1])
2563
        {
2564
        case 's':
2565
        case 'S':
2566
        case 'b':
2567
        case 'B':
2568
          yylval.exp.size = SIZE_BYTE;
2569
          break;
2570
        case 'w':
2571
        case 'W':
2572
          yylval.exp.size = SIZE_WORD;
2573
          break;
2574
        case 'l':
2575
        case 'L':
2576
          yylval.exp.size = SIZE_LONG;
2577
          break;
2578
        default:
2579
          break;
2580
        }
2581
      if (yylval.exp.size != SIZE_UNSPEC)
2582
        tail = 2;
2583
    }
2584
 
2585
#ifdef OBJ_ELF
2586
  {
2587
    /* Look for @PLTPC, etc.  */
2588
    char *cp;
2589
 
2590
    yylval.exp.pic_reloc = pic_none;
2591
    cp = s - tail;
2592
    if (cp - 6 > str && cp[-6] == '@')
2593
      {
2594
        if (strncmp (cp - 6, "@PLTPC", 6) == 0)
2595
          {
2596
            yylval.exp.pic_reloc = pic_plt_pcrel;
2597
            tail += 6;
2598
          }
2599
        else if (strncmp (cp - 6, "@GOTPC", 6) == 0)
2600
          {
2601
            yylval.exp.pic_reloc = pic_got_pcrel;
2602
            tail += 6;
2603
          }
2604
      }
2605
    else if (cp - 4 > str && cp[-4] == '@')
2606
      {
2607
        if (strncmp (cp - 4, "@PLT", 4) == 0)
2608
          {
2609
            yylval.exp.pic_reloc = pic_plt_off;
2610
            tail += 4;
2611
          }
2612
        else if (strncmp (cp - 4, "@GOT", 4) == 0)
2613
          {
2614
            yylval.exp.pic_reloc = pic_got_off;
2615
            tail += 4;
2616
          }
2617
      }
2618
  }
2619
#endif
2620
 
2621
  if (tail != 0)
2622
    {
2623
      c = s[-tail];
2624
      s[-tail] = 0;
2625
    }
2626
 
2627
  hold = input_line_pointer;
2628
  input_line_pointer = str;
2629
  expression (&yylval.exp.exp);
2630
  str = input_line_pointer;
2631
  input_line_pointer = hold;
2632
 
2633
  if (tail != 0)
2634
    {
2635
      s[-tail] = c;
2636
      str = s;
2637
    }
2638
 
2639
  return EXPR;
2640
}
2641
 
2642
/* Parse an m68k operand.  This is the only function which is called
2643
   from outside this file.  */
2644
 
2645
int
2646
m68k_ip_op (s, oparg)
2647
     char *s;
2648
     struct m68k_op *oparg;
2649
{
2650
  memset (oparg, 0, sizeof *oparg);
2651
  oparg->error = NULL;
2652
  oparg->index.reg = ZDATA0;
2653
  oparg->index.scale = 1;
2654
  oparg->disp.exp.X_op = O_absent;
2655
  oparg->odisp.exp.X_op = O_absent;
2656
 
2657
  str = strorig = s;
2658
  op = oparg;
2659
 
2660
  return yyparse ();
2661
}
2662
 
2663
/* The error handler.  */
2664
 
2665
static void
2666
yyerror (s)
2667
     const char *s;
2668
{
2669
  op->error = s;
2670
}
2671
 
2672
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.