Imported Upstream version 0.153
[platform/upstream/elfutils.git] / libcpu / i386_parse.c
1 /* A Bison parser, made by GNU Bison 2.5.  */
2
3 /* Bison implementation for Yacc-like parsers in C
4    
5       Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
6    
7    This program is free software: you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation, either version 3 of the License, or
10    (at your option) any later version.
11    
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16    
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 /* As a special exception, you may create a larger work that contains
21    part or all of the Bison parser skeleton and distribute that work
22    under terms of your choice, so long as that work isn't itself a
23    parser generator using the skeleton or a modified version thereof
24    as a parser skeleton.  Alternatively, if you modify or redistribute
25    the parser skeleton itself, you may (at your option) remove this
26    special exception, which will cause the skeleton and the resulting
27    Bison output files to be licensed under the GNU General Public
28    License without this special exception.
29    
30    This special exception was added by the Free Software Foundation in
31    version 2.2 of Bison.  */
32
33 /* C LALR(1) parser skeleton written by Richard Stallman, by
34    simplifying the original so-called "semantic" parser.  */
35
36 /* All symbols defined below should begin with yy or YY, to avoid
37    infringing on user name space.  This should be done even for local
38    variables, as they might otherwise be expanded by user macros.
39    There are some unavoidable exceptions within include files to
40    define necessary library symbols; they are noted "INFRINGES ON
41    USER NAME SPACE" below.  */
42
43 /* Identify Bison output.  */
44 #define YYBISON 1
45
46 /* Bison version.  */
47 #define YYBISON_VERSION "2.5"
48
49 /* Skeleton name.  */
50 #define YYSKELETON_NAME "yacc.c"
51
52 /* Pure parsers.  */
53 #define YYPURE 0
54
55 /* Push parsers.  */
56 #define YYPUSH 0
57
58 /* Pull parsers.  */
59 #define YYPULL 1
60
61 /* Using locations.  */
62 #define YYLSP_NEEDED 0
63
64 /* Substitute the variable and function names.  */
65 #define yyparse         i386_parse
66 #define yylex           i386_lex
67 #define yyerror         i386_error
68 #define yylval          i386_lval
69 #define yychar          i386_char
70 #define yydebug         i386_debug
71 #define yynerrs         i386_nerrs
72
73
74 /* Copy the first part of user declarations.  */
75
76 /* Line 268 of yacc.c  */
77 #line 1 "i386_parse.y"
78
79 /* Parser for i386 CPU description.
80    Copyright (C) 2004, 2005, 2007, 2008, 2009 Red Hat, Inc.
81    Written by Ulrich Drepper <drepper@redhat.com>, 2004.
82
83    Red Hat elfutils is free software; you can redistribute it and/or modify
84    it under the terms of the GNU General Public License as published by the
85    Free Software Foundation; version 2 of the License.
86
87    Red Hat elfutils is distributed in the hope that it will be useful, but
88    WITHOUT ANY WARRANTY; without even the implied warranty of
89    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
90    General Public License for more details.
91
92    You should have received a copy of the GNU General Public License along
93    with Red Hat elfutils; if not, write to the Free Software Foundation,
94    Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
95
96    Red Hat elfutils is an included package of the Open Invention Network.
97    An included package of the Open Invention Network is a package for which
98    Open Invention Network licensees cross-license their patents.  No patent
99    license is granted, either expressly or impliedly, by designation as an
100    included package.  Should you wish to participate in the Open Invention
101    Network licensing program, please visit www.openinventionnetwork.com
102    <http://www.openinventionnetwork.com>.  */
103
104 #ifdef HAVE_CONFIG_H
105 # include <config.h>
106 #endif
107
108 #include <assert.h>
109 #include <ctype.h>
110 #include <errno.h>
111 #include <error.h>
112 #include <inttypes.h>
113 #include <libintl.h>
114 #include <math.h>
115 #include <obstack.h>
116 #include <search.h>
117 #include <stdbool.h>
118 #include <stdio.h>
119 #include <stdlib.h>
120 #include <string.h>
121 #include <sys/param.h>
122
123 #include <system.h>
124
125 #define obstack_chunk_alloc xmalloc
126 #define obstack_chunk_free free
127
128 /* The error handler.  */
129 static void yyerror (const char *s);
130
131 extern int yylex (void);
132 extern int i386_lineno;
133 extern char *infname;
134
135
136 struct known_bitfield
137 {
138   char *name;
139   unsigned long int bits;
140   int tmp;
141 };
142
143
144 struct bitvalue
145 {
146   enum bittype { zeroone, field, failure } type;
147   union
148   {
149     unsigned int value;
150     struct known_bitfield *field;
151   };
152   struct bitvalue *next;
153 };
154
155
156 struct argname
157 {
158   enum nametype { string, nfield } type;
159   union
160   {
161     char *str;
162     struct known_bitfield *field;
163   };
164   struct argname *next;
165 };
166
167
168 struct argument
169 {
170   struct argname *name;
171   struct argument *next;
172 };
173
174
175 struct instruction
176 {
177   /* The byte encoding.  */
178   struct bitvalue *bytes;
179
180   /* Prefix possible.  */
181   int repe;
182   int rep;
183
184   /* Mnemonic.  */
185   char *mnemonic;
186
187   /* Suffix.  */
188   enum { suffix_none = 0, suffix_w, suffix_w0, suffix_W, suffix_tttn,
189          suffix_w1, suffix_W1, suffix_D } suffix;
190
191   /* Flag set if modr/m is used.  */
192   int modrm;
193
194   /* Operands.  */
195   struct operand
196   {
197     char *fct;
198     char *str;
199     int off1;
200     int off2;
201     int off3;
202   } operands[3];
203
204   struct instruction *next;
205 };
206
207
208 struct synonym
209 {
210   char *from;
211   char *to;
212 };
213
214
215 struct suffix
216 {
217   char *name;
218   int idx;
219 };
220
221
222 struct argstring
223 {
224   char *str;
225   int idx;
226   int off;
227 };
228
229
230 static struct known_bitfield ax_reg =
231   {
232     .name = "ax", .bits = 0, .tmp = 0
233   };
234
235 static struct known_bitfield dx_reg =
236   {
237     .name = "dx", .bits = 0, .tmp = 0
238   };
239
240 static struct known_bitfield di_reg =
241   {
242     .name = "es_di", .bits = 0, .tmp = 0
243   };
244
245 static struct known_bitfield si_reg =
246   {
247     .name = "ds_si", .bits = 0, .tmp = 0
248   };
249
250 static struct known_bitfield bx_reg =
251   {
252     .name = "ds_bx", .bits = 0, .tmp = 0
253   };
254
255
256 static int bitfield_compare (const void *p1, const void *p2);
257 static void new_bitfield (char *name, unsigned long int num);
258 static void check_bits (struct bitvalue *value);
259 static int check_duplicates (struct bitvalue *val);
260 static int check_argsdef (struct bitvalue *bitval, struct argument *args);
261 static int check_bitsused (struct bitvalue *bitval,
262                            struct known_bitfield *suffix,
263                            struct argument *args);
264 static struct argname *combine (struct argname *name);
265 static void fillin_arg (struct bitvalue *bytes, struct argname *name,
266                         struct instruction *instr, int n);
267 static void find_numbers (void);
268 static int compare_syn (const void *p1, const void *p2);
269 static int compare_suf (const void *p1, const void *p2);
270 static void instrtable_out (void);
271 #if 0
272 static void create_mnemonic_table (void);
273 #endif
274
275 static void *bitfields;
276 static struct instruction *instructions;
277 static size_t ninstructions;
278 static void *synonyms;
279 static void *suffixes;
280 static int nsuffixes;
281 static void *mnemonics;
282 size_t nmnemonics;
283 extern FILE *outfile;
284
285 /* Number of bits used mnemonics.  */
286 #if 0
287 static size_t best_mnemonic_bits;
288 #endif
289
290
291 /* Line 268 of yacc.c  */
292 #line 293 "i386_parse.c"
293
294 /* Enabling traces.  */
295 #ifndef YYDEBUG
296 # define YYDEBUG 0
297 #endif
298
299 /* Enabling verbose error messages.  */
300 #ifdef YYERROR_VERBOSE
301 # undef YYERROR_VERBOSE
302 # define YYERROR_VERBOSE 1
303 #else
304 # define YYERROR_VERBOSE 0
305 #endif
306
307 /* Enabling the token table.  */
308 #ifndef YYTOKEN_TABLE
309 # define YYTOKEN_TABLE 0
310 #endif
311
312
313 /* Tokens.  */
314 #ifndef YYTOKENTYPE
315 # define YYTOKENTYPE
316    /* Put the tokens into the symbol table, so that GDB and other debuggers
317       know about them.  */
318    enum yytokentype {
319      kMASK = 258,
320      kPREFIX = 259,
321      kSUFFIX = 260,
322      kSYNONYM = 261,
323      kID = 262,
324      kNUMBER = 263,
325      kPERCPERC = 264,
326      kBITFIELD = 265,
327      kCHAR = 266,
328      kSPACE = 267
329    };
330 #endif
331 /* Tokens.  */
332 #define kMASK 258
333 #define kPREFIX 259
334 #define kSUFFIX 260
335 #define kSYNONYM 261
336 #define kID 262
337 #define kNUMBER 263
338 #define kPERCPERC 264
339 #define kBITFIELD 265
340 #define kCHAR 266
341 #define kSPACE 267
342
343
344
345
346 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
347 typedef union YYSTYPE
348 {
349
350 /* Line 293 of yacc.c  */
351 #line 214 "i386_parse.y"
352
353   unsigned long int num;
354   char *str;
355   char ch;
356   struct known_bitfield *field;
357   struct bitvalue *bit;
358   struct argname *name;
359   struct argument *arg;
360
361
362
363 /* Line 293 of yacc.c  */
364 #line 365 "i386_parse.c"
365 } YYSTYPE;
366 # define YYSTYPE_IS_TRIVIAL 1
367 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
368 # define YYSTYPE_IS_DECLARED 1
369 #endif
370
371
372 /* Copy the second part of user declarations.  */
373
374
375 /* Line 343 of yacc.c  */
376 #line 377 "i386_parse.c"
377
378 #ifdef short
379 # undef short
380 #endif
381
382 #ifdef YYTYPE_UINT8
383 typedef YYTYPE_UINT8 yytype_uint8;
384 #else
385 typedef unsigned char yytype_uint8;
386 #endif
387
388 #ifdef YYTYPE_INT8
389 typedef YYTYPE_INT8 yytype_int8;
390 #elif (defined __STDC__ || defined __C99__FUNC__ \
391      || defined __cplusplus || defined _MSC_VER)
392 typedef signed char yytype_int8;
393 #else
394 typedef short int yytype_int8;
395 #endif
396
397 #ifdef YYTYPE_UINT16
398 typedef YYTYPE_UINT16 yytype_uint16;
399 #else
400 typedef unsigned short int yytype_uint16;
401 #endif
402
403 #ifdef YYTYPE_INT16
404 typedef YYTYPE_INT16 yytype_int16;
405 #else
406 typedef short int yytype_int16;
407 #endif
408
409 #ifndef YYSIZE_T
410 # ifdef __SIZE_TYPE__
411 #  define YYSIZE_T __SIZE_TYPE__
412 # elif defined size_t
413 #  define YYSIZE_T size_t
414 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
415      || defined __cplusplus || defined _MSC_VER)
416 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
417 #  define YYSIZE_T size_t
418 # else
419 #  define YYSIZE_T unsigned int
420 # endif
421 #endif
422
423 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
424
425 #ifndef YY_
426 # if defined YYENABLE_NLS && YYENABLE_NLS
427 #  if ENABLE_NLS
428 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
429 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
430 #  endif
431 # endif
432 # ifndef YY_
433 #  define YY_(msgid) msgid
434 # endif
435 #endif
436
437 /* Suppress unused-variable warnings by "using" E.  */
438 #if ! defined lint || defined __GNUC__
439 # define YYUSE(e) ((void) (e))
440 #else
441 # define YYUSE(e) /* empty */
442 #endif
443
444 /* Identity function, used to suppress warnings about constant conditions.  */
445 #ifndef lint
446 # define YYID(n) (n)
447 #else
448 #if (defined __STDC__ || defined __C99__FUNC__ \
449      || defined __cplusplus || defined _MSC_VER)
450 static int
451 YYID (int yyi)
452 #else
453 static int
454 YYID (yyi)
455     int yyi;
456 #endif
457 {
458   return yyi;
459 }
460 #endif
461
462 #if ! defined yyoverflow || YYERROR_VERBOSE
463
464 /* The parser invokes alloca or malloc; define the necessary symbols.  */
465
466 # ifdef YYSTACK_USE_ALLOCA
467 #  if YYSTACK_USE_ALLOCA
468 #   ifdef __GNUC__
469 #    define YYSTACK_ALLOC __builtin_alloca
470 #   elif defined __BUILTIN_VA_ARG_INCR
471 #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
472 #   elif defined _AIX
473 #    define YYSTACK_ALLOC __alloca
474 #   elif defined _MSC_VER
475 #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
476 #    define alloca _alloca
477 #   else
478 #    define YYSTACK_ALLOC alloca
479 #    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
480      || defined __cplusplus || defined _MSC_VER)
481 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
482 #     ifndef EXIT_SUCCESS
483 #      define EXIT_SUCCESS 0
484 #     endif
485 #    endif
486 #   endif
487 #  endif
488 # endif
489
490 # ifdef YYSTACK_ALLOC
491    /* Pacify GCC's `empty if-body' warning.  */
492 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
493 #  ifndef YYSTACK_ALLOC_MAXIMUM
494     /* The OS might guarantee only one guard page at the bottom of the stack,
495        and a page size can be as small as 4096 bytes.  So we cannot safely
496        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
497        to allow for a few compiler-allocated temporary stack slots.  */
498 #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
499 #  endif
500 # else
501 #  define YYSTACK_ALLOC YYMALLOC
502 #  define YYSTACK_FREE YYFREE
503 #  ifndef YYSTACK_ALLOC_MAXIMUM
504 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
505 #  endif
506 #  if (defined __cplusplus && ! defined EXIT_SUCCESS \
507        && ! ((defined YYMALLOC || defined malloc) \
508              && (defined YYFREE || defined free)))
509 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
510 #   ifndef EXIT_SUCCESS
511 #    define EXIT_SUCCESS 0
512 #   endif
513 #  endif
514 #  ifndef YYMALLOC
515 #   define YYMALLOC malloc
516 #   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
517      || defined __cplusplus || defined _MSC_VER)
518 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
519 #   endif
520 #  endif
521 #  ifndef YYFREE
522 #   define YYFREE free
523 #   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
524      || defined __cplusplus || defined _MSC_VER)
525 void free (void *); /* INFRINGES ON USER NAME SPACE */
526 #   endif
527 #  endif
528 # endif
529 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
530
531
532 #if (! defined yyoverflow \
533      && (! defined __cplusplus \
534          || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
535
536 /* A type that is properly aligned for any stack member.  */
537 union yyalloc
538 {
539   yytype_int16 yyss_alloc;
540   YYSTYPE yyvs_alloc;
541 };
542
543 /* The size of the maximum gap between one aligned stack and the next.  */
544 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
545
546 /* The size of an array large to enough to hold all stacks, each with
547    N elements.  */
548 # define YYSTACK_BYTES(N) \
549      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
550       + YYSTACK_GAP_MAXIMUM)
551
552 # define YYCOPY_NEEDED 1
553
554 /* Relocate STACK from its old location to the new one.  The
555    local variables YYSIZE and YYSTACKSIZE give the old and new number of
556    elements in the stack, and YYPTR gives the new location of the
557    stack.  Advance YYPTR to a properly aligned location for the next
558    stack.  */
559 # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
560     do                                                                  \
561       {                                                                 \
562         YYSIZE_T yynewbytes;                                            \
563         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
564         Stack = &yyptr->Stack_alloc;                                    \
565         yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
566         yyptr += yynewbytes / sizeof (*yyptr);                          \
567       }                                                                 \
568     while (YYID (0))
569
570 #endif
571
572 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
573 /* Copy COUNT objects from FROM to TO.  The source and destination do
574    not overlap.  */
575 # ifndef YYCOPY
576 #  if defined __GNUC__ && 1 < __GNUC__
577 #   define YYCOPY(To, From, Count) \
578       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
579 #  else
580 #   define YYCOPY(To, From, Count)              \
581       do                                        \
582         {                                       \
583           YYSIZE_T yyi;                         \
584           for (yyi = 0; yyi < (Count); yyi++)   \
585             (To)[yyi] = (From)[yyi];            \
586         }                                       \
587       while (YYID (0))
588 #  endif
589 # endif
590 #endif /* !YYCOPY_NEEDED */
591
592 /* YYFINAL -- State number of the termination state.  */
593 #define YYFINAL  12
594 /* YYLAST -- Last index in YYTABLE.  */
595 #define YYLAST   37
596
597 /* YYNTOKENS -- Number of terminals.  */
598 #define YYNTOKENS  18
599 /* YYNNTS -- Number of nonterminals.  */
600 #define YYNNTS  14
601 /* YYNRULES -- Number of rules.  */
602 #define YYNRULES  32
603 /* YYNRULES -- Number of states.  */
604 #define YYNSTATES  49
605
606 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
607 #define YYUNDEFTOK  2
608 #define YYMAXUTOK   267
609
610 #define YYTRANSLATE(YYX)                                                \
611   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
612
613 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
614 static const yytype_uint8 yytranslate[] =
615 {
616        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
617       13,     2,     2,     2,     2,     2,     2,     2,     2,     2,
618        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
619        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
620        2,     2,     2,     2,    15,     2,     2,     2,    16,    17,
621        2,     2,     2,     2,     2,     2,     2,     2,    14,     2,
622        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
623        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
624        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
625        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
626        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
627        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
628        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
629        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
630        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
631        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
632        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
633        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
634        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
635        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
636        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
637        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
638        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
639        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
640        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
641        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
642        5,     6,     7,     8,     9,    10,    11,    12
643 };
644
645 #if YYDEBUG
646 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
647    YYRHS.  */
648 static const yytype_uint8 yyprhs[] =
649 {
650        0,     0,     3,     8,    12,    14,    18,    21,    24,    28,
651       29,    33,    35,    42,    43,    45,    46,    50,    52,    55,
652       57,    59,    61,    63,    66,    67,    71,    73,    76,    78,
653       80,    82,    84
654 };
655
656 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
657 static const yytype_int8 yyrhs[] =
658 {
659       19,     0,    -1,    20,     9,    13,    22,    -1,    20,    13,
660       21,    -1,    21,    -1,     3,    10,     8,    -1,     4,    10,
661       -1,     5,    10,    -1,     6,    10,    10,    -1,    -1,    22,
662       13,    23,    -1,    23,    -1,    25,    14,    24,     7,    24,
663       28,    -1,    -1,    10,    -1,    -1,    25,    15,    26,    -1,
664       26,    -1,    26,    27,    -1,    27,    -1,    16,    -1,    17,
665       -1,    10,    -1,    12,    29,    -1,    -1,    29,    15,    30,
666       -1,    30,    -1,    30,    31,    -1,    31,    -1,    10,    -1,
667       11,    -1,     7,    -1,    14,    -1
668 };
669
670 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
671 static const yytype_uint16 yyrline[] =
672 {
673        0,   244,   244,   254,   255,   258,   260,   262,   264,   276,
674      279,   280,   283,   366,   369,   385,   388,   398,   405,   413,
675      417,   424,   431,   453,   456,   459,   469,   477,   485,   488,
676      520,   529,   536
677 };
678 #endif
679
680 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
681 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
682    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
683 static const char *const yytname[] =
684 {
685   "$end", "error", "$undefined", "kMASK", "kPREFIX", "kSUFFIX",
686   "kSYNONYM", "kID", "kNUMBER", "kPERCPERC", "kBITFIELD", "kCHAR",
687   "kSPACE", "'\\n'", "':'", "','", "'0'", "'1'", "$accept", "spec",
688   "masks", "mask", "instrs", "instr", "bitfieldopt", "bytes", "byte",
689   "bit", "optargs", "args", "arg", "argcomp", 0
690 };
691 #endif
692
693 # ifdef YYPRINT
694 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
695    token YYLEX-NUM.  */
696 static const yytype_uint16 yytoknum[] =
697 {
698        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
699      265,   266,   267,    10,    58,    44,    48,    49
700 };
701 # endif
702
703 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
704 static const yytype_uint8 yyr1[] =
705 {
706        0,    18,    19,    20,    20,    21,    21,    21,    21,    21,
707       22,    22,    23,    23,    24,    24,    25,    25,    26,    26,
708       27,    27,    27,    28,    28,    29,    29,    30,    30,    31,
709       31,    31,    31
710 };
711
712 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
713 static const yytype_uint8 yyr2[] =
714 {
715        0,     2,     4,     3,     1,     3,     2,     2,     3,     0,
716        3,     1,     6,     0,     1,     0,     3,     1,     2,     1,
717        1,     1,     1,     2,     0,     3,     1,     2,     1,     1,
718        1,     1,     1
719 };
720
721 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
722    Performed when YYTABLE doesn't specify something else to do.  Zero
723    means the default is an error.  */
724 static const yytype_uint8 yydefact[] =
725 {
726        9,     0,     0,     0,     0,     0,     0,     4,     0,     6,
727        7,     0,     1,     0,     9,     5,     8,    13,     3,    22,
728       20,    21,     2,    11,     0,    17,    19,    13,    15,     0,
729       18,    10,    14,     0,    16,    15,    24,     0,    12,    31,
730       29,    30,    32,    23,    26,    28,     0,    27,    25
731 };
732
733 /* YYDEFGOTO[NTERM-NUM].  */
734 static const yytype_int8 yydefgoto[] =
735 {
736       -1,     5,     6,     7,    22,    23,    33,    24,    25,    26,
737       38,    43,    44,    45
738 };
739
740 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
741    STATE-NUM.  */
742 #define YYPACT_NINF -35
743 static const yytype_int8 yypact[] =
744 {
745       12,     9,    10,    11,    13,    22,    -2,   -35,    16,   -35,
746      -35,    15,   -35,    14,    12,   -35,   -35,    -4,   -35,   -35,
747      -35,   -35,    17,   -35,   -12,    -4,   -35,    -4,    18,    -4,
748      -35,   -35,   -35,    19,    -4,    18,    20,    -6,   -35,   -35,
749      -35,   -35,   -35,    21,    -6,   -35,    -6,   -35,    -6
750 };
751
752 /* YYPGOTO[NTERM-NUM].  */
753 static const yytype_int8 yypgoto[] =
754 {
755      -35,   -35,   -35,    23,   -35,     2,    -1,   -35,     4,   -25,
756      -35,   -35,   -15,   -34
757 };
758
759 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
760    positive, shift that token.  If negative, reduce the rule which
761    number is the opposite.  If YYTABLE_NINF, syntax error.  */
762 #define YYTABLE_NINF -1
763 static const yytype_uint8 yytable[] =
764 {
765       30,    39,    28,    29,    40,    41,    19,    13,    42,    30,
766       47,    14,    20,    21,    47,     1,     2,     3,     4,     8,
767        9,    10,    12,    11,    15,    16,    35,    17,    32,    31,
768       27,    48,    37,    34,    36,     0,    46,    18
769 };
770
771 #define yypact_value_is_default(yystate) \
772   ((yystate) == (-35))
773
774 #define yytable_value_is_error(yytable_value) \
775   YYID (0)
776
777 static const yytype_int8 yycheck[] =
778 {
779       25,     7,    14,    15,    10,    11,    10,     9,    14,    34,
780       44,    13,    16,    17,    48,     3,     4,     5,     6,    10,
781       10,    10,     0,    10,     8,    10,     7,    13,    10,    27,
782       13,    46,    12,    29,    35,    -1,    15,    14
783 };
784
785 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
786    symbol of state STATE-NUM.  */
787 static const yytype_uint8 yystos[] =
788 {
789        0,     3,     4,     5,     6,    19,    20,    21,    10,    10,
790       10,    10,     0,     9,    13,     8,    10,    13,    21,    10,
791       16,    17,    22,    23,    25,    26,    27,    13,    14,    15,
792       27,    23,    10,    24,    26,     7,    24,    12,    28,     7,
793       10,    11,    14,    29,    30,    31,    15,    31,    30
794 };
795
796 #define yyerrok         (yyerrstatus = 0)
797 #define yyclearin       (yychar = YYEMPTY)
798 #define YYEMPTY         (-2)
799 #define YYEOF           0
800
801 #define YYACCEPT        goto yyacceptlab
802 #define YYABORT         goto yyabortlab
803 #define YYERROR         goto yyerrorlab
804
805
806 /* Like YYERROR except do call yyerror.  This remains here temporarily
807    to ease the transition to the new meaning of YYERROR, for GCC.
808    Once GCC version 2 has supplanted version 1, this can go.  However,
809    YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
810    in Bison 2.4.2's NEWS entry, where a plan to phase it out is
811    discussed.  */
812
813 #define YYFAIL          goto yyerrlab
814 #if defined YYFAIL
815   /* This is here to suppress warnings from the GCC cpp's
816      -Wunused-macros.  Normally we don't worry about that warning, but
817      some users do, and we want to make it easy for users to remove
818      YYFAIL uses, which will produce warnings from Bison 2.5.  */
819 #endif
820
821 #define YYRECOVERING()  (!!yyerrstatus)
822
823 #define YYBACKUP(Token, Value)                                  \
824 do                                                              \
825   if (yychar == YYEMPTY && yylen == 1)                          \
826     {                                                           \
827       yychar = (Token);                                         \
828       yylval = (Value);                                         \
829       YYPOPSTACK (1);                                           \
830       goto yybackup;                                            \
831     }                                                           \
832   else                                                          \
833     {                                                           \
834       yyerror (YY_("syntax error: cannot back up")); \
835       YYERROR;                                                  \
836     }                                                           \
837 while (YYID (0))
838
839
840 #define YYTERROR        1
841 #define YYERRCODE       256
842
843
844 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
845    If N is 0, then set CURRENT to the empty location which ends
846    the previous symbol: RHS[0] (always defined).  */
847
848 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
849 #ifndef YYLLOC_DEFAULT
850 # define YYLLOC_DEFAULT(Current, Rhs, N)                                \
851     do                                                                  \
852       if (YYID (N))                                                    \
853         {                                                               \
854           (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
855           (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
856           (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
857           (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
858         }                                                               \
859       else                                                              \
860         {                                                               \
861           (Current).first_line   = (Current).last_line   =              \
862             YYRHSLOC (Rhs, 0).last_line;                                \
863           (Current).first_column = (Current).last_column =              \
864             YYRHSLOC (Rhs, 0).last_column;                              \
865         }                                                               \
866     while (YYID (0))
867 #endif
868
869
870 /* This macro is provided for backward compatibility. */
871
872 #ifndef YY_LOCATION_PRINT
873 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
874 #endif
875
876
877 /* YYLEX -- calling `yylex' with the right arguments.  */
878
879 #ifdef YYLEX_PARAM
880 # define YYLEX yylex (YYLEX_PARAM)
881 #else
882 # define YYLEX yylex ()
883 #endif
884
885 /* Enable debugging if requested.  */
886 #if YYDEBUG
887
888 # ifndef YYFPRINTF
889 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
890 #  define YYFPRINTF fprintf
891 # endif
892
893 # define YYDPRINTF(Args)                        \
894 do {                                            \
895   if (yydebug)                                  \
896     YYFPRINTF Args;                             \
897 } while (YYID (0))
898
899 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
900 do {                                                                      \
901   if (yydebug)                                                            \
902     {                                                                     \
903       YYFPRINTF (stderr, "%s ", Title);                                   \
904       yy_symbol_print (stderr,                                            \
905                   Type, Value); \
906       YYFPRINTF (stderr, "\n");                                           \
907     }                                                                     \
908 } while (YYID (0))
909
910
911 /*--------------------------------.
912 | Print this symbol on YYOUTPUT.  |
913 `--------------------------------*/
914
915 /*ARGSUSED*/
916 #if (defined __STDC__ || defined __C99__FUNC__ \
917      || defined __cplusplus || defined _MSC_VER)
918 static void
919 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
920 #else
921 static void
922 yy_symbol_value_print (yyoutput, yytype, yyvaluep)
923     FILE *yyoutput;
924     int yytype;
925     YYSTYPE const * const yyvaluep;
926 #endif
927 {
928   if (!yyvaluep)
929     return;
930 # ifdef YYPRINT
931   if (yytype < YYNTOKENS)
932     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
933 # else
934   YYUSE (yyoutput);
935 # endif
936   switch (yytype)
937     {
938       default:
939         break;
940     }
941 }
942
943
944 /*--------------------------------.
945 | Print this symbol on YYOUTPUT.  |
946 `--------------------------------*/
947
948 #if (defined __STDC__ || defined __C99__FUNC__ \
949      || defined __cplusplus || defined _MSC_VER)
950 static void
951 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
952 #else
953 static void
954 yy_symbol_print (yyoutput, yytype, yyvaluep)
955     FILE *yyoutput;
956     int yytype;
957     YYSTYPE const * const yyvaluep;
958 #endif
959 {
960   if (yytype < YYNTOKENS)
961     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
962   else
963     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
964
965   yy_symbol_value_print (yyoutput, yytype, yyvaluep);
966   YYFPRINTF (yyoutput, ")");
967 }
968
969 /*------------------------------------------------------------------.
970 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
971 | TOP (included).                                                   |
972 `------------------------------------------------------------------*/
973
974 #if (defined __STDC__ || defined __C99__FUNC__ \
975      || defined __cplusplus || defined _MSC_VER)
976 static void
977 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
978 #else
979 static void
980 yy_stack_print (yybottom, yytop)
981     yytype_int16 *yybottom;
982     yytype_int16 *yytop;
983 #endif
984 {
985   YYFPRINTF (stderr, "Stack now");
986   for (; yybottom <= yytop; yybottom++)
987     {
988       int yybot = *yybottom;
989       YYFPRINTF (stderr, " %d", yybot);
990     }
991   YYFPRINTF (stderr, "\n");
992 }
993
994 # define YY_STACK_PRINT(Bottom, Top)                            \
995 do {                                                            \
996   if (yydebug)                                                  \
997     yy_stack_print ((Bottom), (Top));                           \
998 } while (YYID (0))
999
1000
1001 /*------------------------------------------------.
1002 | Report that the YYRULE is going to be reduced.  |
1003 `------------------------------------------------*/
1004
1005 #if (defined __STDC__ || defined __C99__FUNC__ \
1006      || defined __cplusplus || defined _MSC_VER)
1007 static void
1008 yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
1009 #else
1010 static void
1011 yy_reduce_print (yyvsp, yyrule)
1012     YYSTYPE *yyvsp;
1013     int yyrule;
1014 #endif
1015 {
1016   int yynrhs = yyr2[yyrule];
1017   int yyi;
1018   unsigned long int yylno = yyrline[yyrule];
1019   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
1020              yyrule - 1, yylno);
1021   /* The symbols being reduced.  */
1022   for (yyi = 0; yyi < yynrhs; yyi++)
1023     {
1024       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
1025       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
1026                        &(yyvsp[(yyi + 1) - (yynrhs)])
1027                                        );
1028       YYFPRINTF (stderr, "\n");
1029     }
1030 }
1031
1032 # define YY_REDUCE_PRINT(Rule)          \
1033 do {                                    \
1034   if (yydebug)                          \
1035     yy_reduce_print (yyvsp, Rule); \
1036 } while (YYID (0))
1037
1038 /* Nonzero means print parse trace.  It is left uninitialized so that
1039    multiple parsers can coexist.  */
1040 int yydebug;
1041 #else /* !YYDEBUG */
1042 # define YYDPRINTF(Args)
1043 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
1044 # define YY_STACK_PRINT(Bottom, Top)
1045 # define YY_REDUCE_PRINT(Rule)
1046 #endif /* !YYDEBUG */
1047
1048
1049 /* YYINITDEPTH -- initial size of the parser's stacks.  */
1050 #ifndef YYINITDEPTH
1051 # define YYINITDEPTH 200
1052 #endif
1053
1054 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1055    if the built-in stack extension method is used).
1056
1057    Do not make this value too large; the results are undefined if
1058    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
1059    evaluated with infinite-precision integer arithmetic.  */
1060
1061 #ifndef YYMAXDEPTH
1062 # define YYMAXDEPTH 10000
1063 #endif
1064
1065
1066 #if YYERROR_VERBOSE
1067
1068 # ifndef yystrlen
1069 #  if defined __GLIBC__ && defined _STRING_H
1070 #   define yystrlen strlen
1071 #  else
1072 /* Return the length of YYSTR.  */
1073 #if (defined __STDC__ || defined __C99__FUNC__ \
1074      || defined __cplusplus || defined _MSC_VER)
1075 static YYSIZE_T
1076 yystrlen (const char *yystr)
1077 #else
1078 static YYSIZE_T
1079 yystrlen (yystr)
1080     const char *yystr;
1081 #endif
1082 {
1083   YYSIZE_T yylen;
1084   for (yylen = 0; yystr[yylen]; yylen++)
1085     continue;
1086   return yylen;
1087 }
1088 #  endif
1089 # endif
1090
1091 # ifndef yystpcpy
1092 #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
1093 #   define yystpcpy stpcpy
1094 #  else
1095 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1096    YYDEST.  */
1097 #if (defined __STDC__ || defined __C99__FUNC__ \
1098      || defined __cplusplus || defined _MSC_VER)
1099 static char *
1100 yystpcpy (char *yydest, const char *yysrc)
1101 #else
1102 static char *
1103 yystpcpy (yydest, yysrc)
1104     char *yydest;
1105     const char *yysrc;
1106 #endif
1107 {
1108   char *yyd = yydest;
1109   const char *yys = yysrc;
1110
1111   while ((*yyd++ = *yys++) != '\0')
1112     continue;
1113
1114   return yyd - 1;
1115 }
1116 #  endif
1117 # endif
1118
1119 # ifndef yytnamerr
1120 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
1121    quotes and backslashes, so that it's suitable for yyerror.  The
1122    heuristic is that double-quoting is unnecessary unless the string
1123    contains an apostrophe, a comma, or backslash (other than
1124    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
1125    null, do not copy; instead, return the length of what the result
1126    would have been.  */
1127 static YYSIZE_T
1128 yytnamerr (char *yyres, const char *yystr)
1129 {
1130   if (*yystr == '"')
1131     {
1132       YYSIZE_T yyn = 0;
1133       char const *yyp = yystr;
1134
1135       for (;;)
1136         switch (*++yyp)
1137           {
1138           case '\'':
1139           case ',':
1140             goto do_not_strip_quotes;
1141
1142           case '\\':
1143             if (*++yyp != '\\')
1144               goto do_not_strip_quotes;
1145             /* Fall through.  */
1146           default:
1147             if (yyres)
1148               yyres[yyn] = *yyp;
1149             yyn++;
1150             break;
1151
1152           case '"':
1153             if (yyres)
1154               yyres[yyn] = '\0';
1155             return yyn;
1156           }
1157     do_not_strip_quotes: ;
1158     }
1159
1160   if (! yyres)
1161     return yystrlen (yystr);
1162
1163   return yystpcpy (yyres, yystr) - yyres;
1164 }
1165 # endif
1166
1167 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
1168    about the unexpected token YYTOKEN for the state stack whose top is
1169    YYSSP.
1170
1171    Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
1172    not large enough to hold the message.  In that case, also set
1173    *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
1174    required number of bytes is too large to store.  */
1175 static int
1176 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
1177                 yytype_int16 *yyssp, int yytoken)
1178 {
1179   YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
1180   YYSIZE_T yysize = yysize0;
1181   YYSIZE_T yysize1;
1182   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
1183   /* Internationalized format string. */
1184   const char *yyformat = 0;
1185   /* Arguments of yyformat. */
1186   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
1187   /* Number of reported tokens (one for the "unexpected", one per
1188      "expected"). */
1189   int yycount = 0;
1190
1191   /* There are many possibilities here to consider:
1192      - Assume YYFAIL is not used.  It's too flawed to consider.  See
1193        <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
1194        for details.  YYERROR is fine as it does not invoke this
1195        function.
1196      - If this state is a consistent state with a default action, then
1197        the only way this function was invoked is if the default action
1198        is an error action.  In that case, don't check for expected
1199        tokens because there are none.
1200      - The only way there can be no lookahead present (in yychar) is if
1201        this state is a consistent state with a default action.  Thus,
1202        detecting the absence of a lookahead is sufficient to determine
1203        that there is no unexpected or expected token to report.  In that
1204        case, just report a simple "syntax error".
1205      - Don't assume there isn't a lookahead just because this state is a
1206        consistent state with a default action.  There might have been a
1207        previous inconsistent state, consistent state with a non-default
1208        action, or user semantic action that manipulated yychar.
1209      - Of course, the expected token list depends on states to have
1210        correct lookahead information, and it depends on the parser not
1211        to perform extra reductions after fetching a lookahead from the
1212        scanner and before detecting a syntax error.  Thus, state merging
1213        (from LALR or IELR) and default reductions corrupt the expected
1214        token list.  However, the list is correct for canonical LR with
1215        one exception: it will still contain any token that will not be
1216        accepted due to an error action in a later state.
1217   */
1218   if (yytoken != YYEMPTY)
1219     {
1220       int yyn = yypact[*yyssp];
1221       yyarg[yycount++] = yytname[yytoken];
1222       if (!yypact_value_is_default (yyn))
1223         {
1224           /* Start YYX at -YYN if negative to avoid negative indexes in
1225              YYCHECK.  In other words, skip the first -YYN actions for
1226              this state because they are default actions.  */
1227           int yyxbegin = yyn < 0 ? -yyn : 0;
1228           /* Stay within bounds of both yycheck and yytname.  */
1229           int yychecklim = YYLAST - yyn + 1;
1230           int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1231           int yyx;
1232
1233           for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1234             if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
1235                 && !yytable_value_is_error (yytable[yyx + yyn]))
1236               {
1237                 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
1238                   {
1239                     yycount = 1;
1240                     yysize = yysize0;
1241                     break;
1242                   }
1243                 yyarg[yycount++] = yytname[yyx];
1244                 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
1245                 if (! (yysize <= yysize1
1246                        && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
1247                   return 2;
1248                 yysize = yysize1;
1249               }
1250         }
1251     }
1252
1253   switch (yycount)
1254     {
1255 # define YYCASE_(N, S)                      \
1256       case N:                               \
1257         yyformat = S;                       \
1258       break
1259       YYCASE_(0, YY_("syntax error"));
1260       YYCASE_(1, YY_("syntax error, unexpected %s"));
1261       YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
1262       YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
1263       YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
1264       YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
1265 # undef YYCASE_
1266     }
1267
1268   yysize1 = yysize + yystrlen (yyformat);
1269   if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
1270     return 2;
1271   yysize = yysize1;
1272
1273   if (*yymsg_alloc < yysize)
1274     {
1275       *yymsg_alloc = 2 * yysize;
1276       if (! (yysize <= *yymsg_alloc
1277              && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
1278         *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
1279       return 1;
1280     }
1281
1282   /* Avoid sprintf, as that infringes on the user's name space.
1283      Don't have undefined behavior even if the translation
1284      produced a string with the wrong number of "%s"s.  */
1285   {
1286     char *yyp = *yymsg;
1287     int yyi = 0;
1288     while ((*yyp = *yyformat) != '\0')
1289       if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
1290         {
1291           yyp += yytnamerr (yyp, yyarg[yyi++]);
1292           yyformat += 2;
1293         }
1294       else
1295         {
1296           yyp++;
1297           yyformat++;
1298         }
1299   }
1300   return 0;
1301 }
1302 #endif /* YYERROR_VERBOSE */
1303
1304 /*-----------------------------------------------.
1305 | Release the memory associated to this symbol.  |
1306 `-----------------------------------------------*/
1307
1308 /*ARGSUSED*/
1309 #if (defined __STDC__ || defined __C99__FUNC__ \
1310      || defined __cplusplus || defined _MSC_VER)
1311 static void
1312 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
1313 #else
1314 static void
1315 yydestruct (yymsg, yytype, yyvaluep)
1316     const char *yymsg;
1317     int yytype;
1318     YYSTYPE *yyvaluep;
1319 #endif
1320 {
1321   YYUSE (yyvaluep);
1322
1323   if (!yymsg)
1324     yymsg = "Deleting";
1325   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
1326
1327   switch (yytype)
1328     {
1329
1330       default:
1331         break;
1332     }
1333 }
1334
1335
1336 /* Prevent warnings from -Wmissing-prototypes.  */
1337 #ifdef YYPARSE_PARAM
1338 #if defined __STDC__ || defined __cplusplus
1339 int yyparse (void *YYPARSE_PARAM);
1340 #else
1341 int yyparse ();
1342 #endif
1343 #else /* ! YYPARSE_PARAM */
1344 #if defined __STDC__ || defined __cplusplus
1345 int yyparse (void);
1346 #else
1347 int yyparse ();
1348 #endif
1349 #endif /* ! YYPARSE_PARAM */
1350
1351
1352 /* The lookahead symbol.  */
1353 int yychar;
1354
1355 /* The semantic value of the lookahead symbol.  */
1356 YYSTYPE yylval;
1357
1358 /* Number of syntax errors so far.  */
1359 int yynerrs;
1360
1361
1362 /*----------.
1363 | yyparse.  |
1364 `----------*/
1365
1366 #ifdef YYPARSE_PARAM
1367 #if (defined __STDC__ || defined __C99__FUNC__ \
1368      || defined __cplusplus || defined _MSC_VER)
1369 int
1370 yyparse (void *YYPARSE_PARAM)
1371 #else
1372 int
1373 yyparse (YYPARSE_PARAM)
1374     void *YYPARSE_PARAM;
1375 #endif
1376 #else /* ! YYPARSE_PARAM */
1377 #if (defined __STDC__ || defined __C99__FUNC__ \
1378      || defined __cplusplus || defined _MSC_VER)
1379 int
1380 yyparse (void)
1381 #else
1382 int
1383 yyparse ()
1384
1385 #endif
1386 #endif
1387 {
1388     int yystate;
1389     /* Number of tokens to shift before error messages enabled.  */
1390     int yyerrstatus;
1391
1392     /* The stacks and their tools:
1393        `yyss': related to states.
1394        `yyvs': related to semantic values.
1395
1396        Refer to the stacks thru separate pointers, to allow yyoverflow
1397        to reallocate them elsewhere.  */
1398
1399     /* The state stack.  */
1400     yytype_int16 yyssa[YYINITDEPTH];
1401     yytype_int16 *yyss;
1402     yytype_int16 *yyssp;
1403
1404     /* The semantic value stack.  */
1405     YYSTYPE yyvsa[YYINITDEPTH];
1406     YYSTYPE *yyvs;
1407     YYSTYPE *yyvsp;
1408
1409     YYSIZE_T yystacksize;
1410
1411   int yyn;
1412   int yyresult;
1413   /* Lookahead token as an internal (translated) token number.  */
1414   int yytoken;
1415   /* The variables used to return semantic value and location from the
1416      action routines.  */
1417   YYSTYPE yyval;
1418
1419 #if YYERROR_VERBOSE
1420   /* Buffer for error messages, and its allocated size.  */
1421   char yymsgbuf[128];
1422   char *yymsg = yymsgbuf;
1423   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
1424 #endif
1425
1426 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
1427
1428   /* The number of symbols on the RHS of the reduced rule.
1429      Keep to zero when no symbol should be popped.  */
1430   int yylen = 0;
1431
1432   yytoken = 0;
1433   yyss = yyssa;
1434   yyvs = yyvsa;
1435   yystacksize = YYINITDEPTH;
1436
1437   YYDPRINTF ((stderr, "Starting parse\n"));
1438
1439   yystate = 0;
1440   yyerrstatus = 0;
1441   yynerrs = 0;
1442   yychar = YYEMPTY; /* Cause a token to be read.  */
1443
1444   /* Initialize stack pointers.
1445      Waste one element of value and location stack
1446      so that they stay on the same level as the state stack.
1447      The wasted elements are never initialized.  */
1448   yyssp = yyss;
1449   yyvsp = yyvs;
1450
1451   goto yysetstate;
1452
1453 /*------------------------------------------------------------.
1454 | yynewstate -- Push a new state, which is found in yystate.  |
1455 `------------------------------------------------------------*/
1456  yynewstate:
1457   /* In all cases, when you get here, the value and location stacks
1458      have just been pushed.  So pushing a state here evens the stacks.  */
1459   yyssp++;
1460
1461  yysetstate:
1462   *yyssp = yystate;
1463
1464   if (yyss + yystacksize - 1 <= yyssp)
1465     {
1466       /* Get the current used size of the three stacks, in elements.  */
1467       YYSIZE_T yysize = yyssp - yyss + 1;
1468
1469 #ifdef yyoverflow
1470       {
1471         /* Give user a chance to reallocate the stack.  Use copies of
1472            these so that the &'s don't force the real ones into
1473            memory.  */
1474         YYSTYPE *yyvs1 = yyvs;
1475         yytype_int16 *yyss1 = yyss;
1476
1477         /* Each stack pointer address is followed by the size of the
1478            data in use in that stack, in bytes.  This used to be a
1479            conditional around just the two extra args, but that might
1480            be undefined if yyoverflow is a macro.  */
1481         yyoverflow (YY_("memory exhausted"),
1482                     &yyss1, yysize * sizeof (*yyssp),
1483                     &yyvs1, yysize * sizeof (*yyvsp),
1484                     &yystacksize);
1485
1486         yyss = yyss1;
1487         yyvs = yyvs1;
1488       }
1489 #else /* no yyoverflow */
1490 # ifndef YYSTACK_RELOCATE
1491       goto yyexhaustedlab;
1492 # else
1493       /* Extend the stack our own way.  */
1494       if (YYMAXDEPTH <= yystacksize)
1495         goto yyexhaustedlab;
1496       yystacksize *= 2;
1497       if (YYMAXDEPTH < yystacksize)
1498         yystacksize = YYMAXDEPTH;
1499
1500       {
1501         yytype_int16 *yyss1 = yyss;
1502         union yyalloc *yyptr =
1503           (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1504         if (! yyptr)
1505           goto yyexhaustedlab;
1506         YYSTACK_RELOCATE (yyss_alloc, yyss);
1507         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
1508 #  undef YYSTACK_RELOCATE
1509         if (yyss1 != yyssa)
1510           YYSTACK_FREE (yyss1);
1511       }
1512 # endif
1513 #endif /* no yyoverflow */
1514
1515       yyssp = yyss + yysize - 1;
1516       yyvsp = yyvs + yysize - 1;
1517
1518       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1519                   (unsigned long int) yystacksize));
1520
1521       if (yyss + yystacksize - 1 <= yyssp)
1522         YYABORT;
1523     }
1524
1525   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1526
1527   if (yystate == YYFINAL)
1528     YYACCEPT;
1529
1530   goto yybackup;
1531
1532 /*-----------.
1533 | yybackup.  |
1534 `-----------*/
1535 yybackup:
1536
1537   /* Do appropriate processing given the current state.  Read a
1538      lookahead token if we need one and don't already have one.  */
1539
1540   /* First try to decide what to do without reference to lookahead token.  */
1541   yyn = yypact[yystate];
1542   if (yypact_value_is_default (yyn))
1543     goto yydefault;
1544
1545   /* Not known => get a lookahead token if don't already have one.  */
1546
1547   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
1548   if (yychar == YYEMPTY)
1549     {
1550       YYDPRINTF ((stderr, "Reading a token: "));
1551       yychar = YYLEX;
1552     }
1553
1554   if (yychar <= YYEOF)
1555     {
1556       yychar = yytoken = YYEOF;
1557       YYDPRINTF ((stderr, "Now at end of input.\n"));
1558     }
1559   else
1560     {
1561       yytoken = YYTRANSLATE (yychar);
1562       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
1563     }
1564
1565   /* If the proper action on seeing token YYTOKEN is to reduce or to
1566      detect an error, take that action.  */
1567   yyn += yytoken;
1568   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1569     goto yydefault;
1570   yyn = yytable[yyn];
1571   if (yyn <= 0)
1572     {
1573       if (yytable_value_is_error (yyn))
1574         goto yyerrlab;
1575       yyn = -yyn;
1576       goto yyreduce;
1577     }
1578
1579   /* Count tokens shifted since error; after three, turn off error
1580      status.  */
1581   if (yyerrstatus)
1582     yyerrstatus--;
1583
1584   /* Shift the lookahead token.  */
1585   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
1586
1587   /* Discard the shifted token.  */
1588   yychar = YYEMPTY;
1589
1590   yystate = yyn;
1591   *++yyvsp = yylval;
1592
1593   goto yynewstate;
1594
1595
1596 /*-----------------------------------------------------------.
1597 | yydefault -- do the default action for the current state.  |
1598 `-----------------------------------------------------------*/
1599 yydefault:
1600   yyn = yydefact[yystate];
1601   if (yyn == 0)
1602     goto yyerrlab;
1603   goto yyreduce;
1604
1605
1606 /*-----------------------------.
1607 | yyreduce -- Do a reduction.  |
1608 `-----------------------------*/
1609 yyreduce:
1610   /* yyn is the number of a rule to reduce with.  */
1611   yylen = yyr2[yyn];
1612
1613   /* If YYLEN is nonzero, implement the default value of the action:
1614      `$$ = $1'.
1615
1616      Otherwise, the following line sets YYVAL to garbage.
1617      This behavior is undocumented and Bison
1618      users should not rely upon it.  Assigning to YYVAL
1619      unconditionally makes the parser a bit smaller, and it avoids a
1620      GCC warning that YYVAL may be used uninitialized.  */
1621   yyval = yyvsp[1-yylen];
1622
1623
1624   YY_REDUCE_PRINT (yyn);
1625   switch (yyn)
1626     {
1627         case 2:
1628
1629 /* Line 1806 of yacc.c  */
1630 #line 245 "i386_parse.y"
1631     {
1632                       if (error_message_count != 0)
1633                         error (EXIT_FAILURE, 0,
1634                                "terminated due to previous error");
1635
1636                       instrtable_out ();
1637                     }
1638     break;
1639
1640   case 5:
1641
1642 /* Line 1806 of yacc.c  */
1643 #line 259 "i386_parse.y"
1644     { new_bitfield ((yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].num)); }
1645     break;
1646
1647   case 6:
1648
1649 /* Line 1806 of yacc.c  */
1650 #line 261 "i386_parse.y"
1651     { new_bitfield ((yyvsp[(2) - (2)].str), -1); }
1652     break;
1653
1654   case 7:
1655
1656 /* Line 1806 of yacc.c  */
1657 #line 263 "i386_parse.y"
1658     { new_bitfield ((yyvsp[(2) - (2)].str), -2); }
1659     break;
1660
1661   case 8:
1662
1663 /* Line 1806 of yacc.c  */
1664 #line 265 "i386_parse.y"
1665     {
1666                       struct synonym *newp = xmalloc (sizeof (*newp));
1667                       newp->from = (yyvsp[(2) - (3)].str);
1668                       newp->to = (yyvsp[(3) - (3)].str);
1669                       if (tfind (newp, &synonyms, compare_syn) != NULL)
1670                         error (0, 0,
1671                                "%d: duplicate definition for synonym '%s'",
1672                                i386_lineno, (yyvsp[(2) - (3)].str));
1673                       else if (tsearch ( newp, &synonyms, compare_syn) == NULL)
1674                         error (EXIT_FAILURE, 0, "tsearch");
1675                     }
1676     break;
1677
1678   case 12:
1679
1680 /* Line 1806 of yacc.c  */
1681 #line 284 "i386_parse.y"
1682     {
1683                       if ((yyvsp[(3) - (6)].field) != NULL && strcmp ((yyvsp[(3) - (6)].field)->name, "RE") != 0
1684                           && strcmp ((yyvsp[(3) - (6)].field)->name, "R") != 0)
1685                         {
1686                           error (0, 0, "%d: only 'R' and 'RE' prefix allowed",
1687                                  i386_lineno - 1);
1688                         }
1689                       if (check_duplicates ((yyvsp[(1) - (6)].bit)) == 0
1690                           && check_argsdef ((yyvsp[(1) - (6)].bit), (yyvsp[(6) - (6)].arg)) == 0
1691                           && check_bitsused ((yyvsp[(1) - (6)].bit), (yyvsp[(5) - (6)].field), (yyvsp[(6) - (6)].arg)) == 0)
1692                         {
1693                           struct instruction *newp = xcalloc (sizeof (*newp),
1694                                                               1);
1695                           if ((yyvsp[(3) - (6)].field) != NULL)
1696                             {
1697                               if (strcmp ((yyvsp[(3) - (6)].field)->name, "RE") == 0)
1698                                 newp->repe = 1;
1699                               else if (strcmp ((yyvsp[(3) - (6)].field)->name, "R") == 0)
1700                                 newp->rep = 1;
1701                             }
1702
1703                           newp->bytes = (yyvsp[(1) - (6)].bit);
1704                           newp->mnemonic = (yyvsp[(4) - (6)].str);
1705                           if (newp->mnemonic != (void *) -1l
1706                               && tfind ((yyvsp[(4) - (6)].str), &mnemonics,
1707                                         (comparison_fn_t) strcmp) == NULL)
1708                             {
1709                               if (tsearch ((yyvsp[(4) - (6)].str), &mnemonics,
1710                                            (comparison_fn_t) strcmp) == NULL)
1711                                 error (EXIT_FAILURE, errno, "tsearch");
1712                               ++nmnemonics;
1713                             }
1714
1715                           if ((yyvsp[(5) - (6)].field) != NULL)
1716                             {
1717                               if (strcmp ((yyvsp[(5) - (6)].field)->name, "w") == 0)
1718                                 newp->suffix = suffix_w;
1719                               else if (strcmp ((yyvsp[(5) - (6)].field)->name, "w0") == 0)
1720                                 newp->suffix = suffix_w0;
1721                               else if (strcmp ((yyvsp[(5) - (6)].field)->name, "tttn") == 0)
1722                                 newp->suffix = suffix_tttn;
1723                               else if (strcmp ((yyvsp[(5) - (6)].field)->name, "w1") == 0)
1724                                 newp->suffix = suffix_w1;
1725                               else if (strcmp ((yyvsp[(5) - (6)].field)->name, "W") == 0)
1726                                 newp->suffix = suffix_W;
1727                               else if (strcmp ((yyvsp[(5) - (6)].field)->name, "W1") == 0)
1728                                 newp->suffix = suffix_W1;
1729                               else if (strcmp ((yyvsp[(5) - (6)].field)->name, "D") == 0)
1730                                 newp->suffix = suffix_D;
1731                               else
1732                                 error (EXIT_FAILURE, 0,
1733                                        "%s: %d: unknown suffix '%s'",
1734                                        infname, i386_lineno - 1, (yyvsp[(5) - (6)].field)->name);
1735
1736                               struct suffix search = { .name = (yyvsp[(5) - (6)].field)->name };
1737                               if (tfind (&search, &suffixes, compare_suf)
1738                                   == NULL)
1739                                 {
1740                                   struct suffix *ns = xmalloc (sizeof (*ns));
1741                                   ns->name = (yyvsp[(5) - (6)].field)->name;
1742                                   ns->idx = ++nsuffixes;
1743                                   if (tsearch (ns, &suffixes, compare_suf)
1744                                       == NULL)
1745                                     error (EXIT_FAILURE, errno, "tsearch");
1746                                 }
1747                             }
1748
1749                           struct argument *args = (yyvsp[(6) - (6)].arg);
1750                           int n = 0;
1751                           while (args != NULL)
1752                             {
1753                               fillin_arg ((yyvsp[(1) - (6)].bit), args->name, newp, n);
1754
1755                               args = args->next;
1756                               ++n;
1757                             }
1758
1759                           newp->next = instructions;
1760                           instructions = newp;
1761                           ++ninstructions;
1762                         }
1763                     }
1764     break;
1765
1766   case 14:
1767
1768 /* Line 1806 of yacc.c  */
1769 #line 370 "i386_parse.y"
1770     {
1771                       struct known_bitfield search;
1772                       search.name = (yyvsp[(1) - (1)].str);
1773                       struct known_bitfield **res;
1774                       res = tfind (&search, &bitfields, bitfield_compare);
1775                       if (res == NULL)
1776                         {
1777                           error (0, 0, "%d: unknown bitfield '%s'",
1778                                  i386_lineno, search.name);
1779                           (yyval.field) = NULL;
1780                         }
1781                       else
1782                         (yyval.field) = *res;
1783                     }
1784     break;
1785
1786   case 15:
1787
1788 /* Line 1806 of yacc.c  */
1789 #line 385 "i386_parse.y"
1790     { (yyval.field) = NULL; }
1791     break;
1792
1793   case 16:
1794
1795 /* Line 1806 of yacc.c  */
1796 #line 389 "i386_parse.y"
1797     {
1798                       check_bits ((yyvsp[(3) - (3)].bit));
1799
1800                       struct bitvalue *runp = (yyvsp[(1) - (3)].bit);
1801                       while (runp->next != NULL)
1802                         runp = runp->next;
1803                       runp->next = (yyvsp[(3) - (3)].bit);
1804                       (yyval.bit) = (yyvsp[(1) - (3)].bit);
1805                     }
1806     break;
1807
1808   case 17:
1809
1810 /* Line 1806 of yacc.c  */
1811 #line 399 "i386_parse.y"
1812     {
1813                       check_bits ((yyvsp[(1) - (1)].bit));
1814                       (yyval.bit) = (yyvsp[(1) - (1)].bit);
1815                     }
1816     break;
1817
1818   case 18:
1819
1820 /* Line 1806 of yacc.c  */
1821 #line 406 "i386_parse.y"
1822     {
1823                       struct bitvalue *runp = (yyvsp[(1) - (2)].bit);
1824                       while (runp->next != NULL)
1825                         runp = runp->next;
1826                       runp->next = (yyvsp[(2) - (2)].bit);
1827                       (yyval.bit) = (yyvsp[(1) - (2)].bit);
1828                     }
1829     break;
1830
1831   case 19:
1832
1833 /* Line 1806 of yacc.c  */
1834 #line 414 "i386_parse.y"
1835     { (yyval.bit) = (yyvsp[(1) - (1)].bit); }
1836     break;
1837
1838   case 20:
1839
1840 /* Line 1806 of yacc.c  */
1841 #line 418 "i386_parse.y"
1842     {
1843                       (yyval.bit) = xmalloc (sizeof (struct bitvalue));
1844                       (yyval.bit)->type = zeroone;
1845                       (yyval.bit)->value = 0;
1846                       (yyval.bit)->next = NULL;
1847                     }
1848     break;
1849
1850   case 21:
1851
1852 /* Line 1806 of yacc.c  */
1853 #line 425 "i386_parse.y"
1854     {
1855                       (yyval.bit) = xmalloc (sizeof (struct bitvalue));
1856                       (yyval.bit)->type = zeroone;
1857                       (yyval.bit)->value = 1;
1858                       (yyval.bit)->next = NULL;
1859                     }
1860     break;
1861
1862   case 22:
1863
1864 /* Line 1806 of yacc.c  */
1865 #line 432 "i386_parse.y"
1866     {
1867                       (yyval.bit) = xmalloc (sizeof (struct bitvalue));
1868                       struct known_bitfield search;
1869                       search.name = (yyvsp[(1) - (1)].str);
1870                       struct known_bitfield **res;
1871                       res = tfind (&search, &bitfields, bitfield_compare);
1872                       if (res == NULL)
1873                         {
1874                           error (0, 0, "%d: unknown bitfield '%s'",
1875                                  i386_lineno, search.name);
1876                           (yyval.bit)->type = failure;
1877                         }
1878                       else
1879                         {
1880                           (yyval.bit)->type = field;
1881                           (yyval.bit)->field = *res;
1882                         }
1883                       (yyval.bit)->next = NULL;
1884                     }
1885     break;
1886
1887   case 23:
1888
1889 /* Line 1806 of yacc.c  */
1890 #line 454 "i386_parse.y"
1891     { (yyval.arg) = (yyvsp[(2) - (2)].arg); }
1892     break;
1893
1894   case 24:
1895
1896 /* Line 1806 of yacc.c  */
1897 #line 456 "i386_parse.y"
1898     { (yyval.arg) = NULL; }
1899     break;
1900
1901   case 25:
1902
1903 /* Line 1806 of yacc.c  */
1904 #line 460 "i386_parse.y"
1905     {
1906                       struct argument *runp = (yyvsp[(1) - (3)].arg);
1907                       while (runp->next != NULL)
1908                         runp = runp->next;
1909                       runp->next = xmalloc (sizeof (struct argument));
1910                       runp->next->name = combine ((yyvsp[(3) - (3)].name));
1911                       runp->next->next = NULL;
1912                       (yyval.arg) = (yyvsp[(1) - (3)].arg);
1913                     }
1914     break;
1915
1916   case 26:
1917
1918 /* Line 1806 of yacc.c  */
1919 #line 470 "i386_parse.y"
1920     {
1921                       (yyval.arg) = xmalloc (sizeof (struct argument));
1922                       (yyval.arg)->name = combine ((yyvsp[(1) - (1)].name));
1923                       (yyval.arg)->next = NULL;
1924                     }
1925     break;
1926
1927   case 27:
1928
1929 /* Line 1806 of yacc.c  */
1930 #line 478 "i386_parse.y"
1931     {
1932                       struct argname *runp = (yyvsp[(1) - (2)].name);
1933                       while (runp->next != NULL)
1934                         runp = runp->next;
1935                       runp->next = (yyvsp[(2) - (2)].name);
1936                       (yyval.name) = (yyvsp[(1) - (2)].name);
1937                     }
1938     break;
1939
1940   case 28:
1941
1942 /* Line 1806 of yacc.c  */
1943 #line 486 "i386_parse.y"
1944     { (yyval.name) = (yyvsp[(1) - (1)].name); }
1945     break;
1946
1947   case 29:
1948
1949 /* Line 1806 of yacc.c  */
1950 #line 489 "i386_parse.y"
1951     {
1952                       (yyval.name) = xmalloc (sizeof (struct argname));
1953                       (yyval.name)->type = nfield;
1954                       (yyval.name)->next = NULL;
1955
1956                       struct known_bitfield search;
1957                       search.name = (yyvsp[(1) - (1)].str);
1958                       struct known_bitfield **res;
1959                       res = tfind (&search, &bitfields, bitfield_compare);
1960                       if (res == NULL)
1961                         {
1962                           if (strcmp ((yyvsp[(1) - (1)].str), "ax") == 0)
1963                             (yyval.name)->field = &ax_reg;
1964                           else if (strcmp ((yyvsp[(1) - (1)].str), "dx") == 0)
1965                             (yyval.name)->field = &dx_reg;
1966                           else if (strcmp ((yyvsp[(1) - (1)].str), "es_di") == 0)
1967                             (yyval.name)->field = &di_reg;
1968                           else if (strcmp ((yyvsp[(1) - (1)].str), "ds_si") == 0)
1969                             (yyval.name)->field = &si_reg;
1970                           else if (strcmp ((yyvsp[(1) - (1)].str), "ds_bx") == 0)
1971                             (yyval.name)->field = &bx_reg;
1972                           else
1973                             {
1974                               error (0, 0, "%d: unknown bitfield '%s'",
1975                                      i386_lineno, search.name);
1976                               (yyval.name)->field = NULL;
1977                             }
1978                         }
1979                       else
1980                         (yyval.name)->field = *res;
1981                     }
1982     break;
1983
1984   case 30:
1985
1986 /* Line 1806 of yacc.c  */
1987 #line 521 "i386_parse.y"
1988     {
1989                       (yyval.name) = xmalloc (sizeof (struct argname));
1990                       (yyval.name)->type = string;
1991                       (yyval.name)->next = NULL;
1992                       (yyval.name)->str = xmalloc (2);
1993                       (yyval.name)->str[0] = (yyvsp[(1) - (1)].ch);
1994                       (yyval.name)->str[1] = '\0';
1995                     }
1996     break;
1997
1998   case 31:
1999
2000 /* Line 1806 of yacc.c  */
2001 #line 530 "i386_parse.y"
2002     {
2003                       (yyval.name) = xmalloc (sizeof (struct argname));
2004                       (yyval.name)->type = string;
2005                       (yyval.name)->next = NULL;
2006                       (yyval.name)->str = (yyvsp[(1) - (1)].str);
2007                     }
2008     break;
2009
2010   case 32:
2011
2012 /* Line 1806 of yacc.c  */
2013 #line 537 "i386_parse.y"
2014     {
2015                       (yyval.name) = xmalloc (sizeof (struct argname));
2016                       (yyval.name)->type = string;
2017                       (yyval.name)->next = NULL;
2018                       (yyval.name)->str = xmalloc (2);
2019                       (yyval.name)->str[0] = ':';
2020                       (yyval.name)->str[1] = '\0';
2021                     }
2022     break;
2023
2024
2025
2026 /* Line 1806 of yacc.c  */
2027 #line 2028 "i386_parse.c"
2028       default: break;
2029     }
2030   /* User semantic actions sometimes alter yychar, and that requires
2031      that yytoken be updated with the new translation.  We take the
2032      approach of translating immediately before every use of yytoken.
2033      One alternative is translating here after every semantic action,
2034      but that translation would be missed if the semantic action invokes
2035      YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
2036      if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
2037      incorrect destructor might then be invoked immediately.  In the
2038      case of YYERROR or YYBACKUP, subsequent parser actions might lead
2039      to an incorrect destructor call or verbose syntax error message
2040      before the lookahead is translated.  */
2041   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
2042
2043   YYPOPSTACK (yylen);
2044   yylen = 0;
2045   YY_STACK_PRINT (yyss, yyssp);
2046
2047   *++yyvsp = yyval;
2048
2049   /* Now `shift' the result of the reduction.  Determine what state
2050      that goes to, based on the state we popped back to and the rule
2051      number reduced by.  */
2052
2053   yyn = yyr1[yyn];
2054
2055   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
2056   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
2057     yystate = yytable[yystate];
2058   else
2059     yystate = yydefgoto[yyn - YYNTOKENS];
2060
2061   goto yynewstate;
2062
2063
2064 /*------------------------------------.
2065 | yyerrlab -- here on detecting error |
2066 `------------------------------------*/
2067 yyerrlab:
2068   /* Make sure we have latest lookahead translation.  See comments at
2069      user semantic actions for why this is necessary.  */
2070   yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
2071
2072   /* If not already recovering from an error, report this error.  */
2073   if (!yyerrstatus)
2074     {
2075       ++yynerrs;
2076 #if ! YYERROR_VERBOSE
2077       yyerror (YY_("syntax error"));
2078 #else
2079 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
2080                                         yyssp, yytoken)
2081       {
2082         char const *yymsgp = YY_("syntax error");
2083         int yysyntax_error_status;
2084         yysyntax_error_status = YYSYNTAX_ERROR;
2085         if (yysyntax_error_status == 0)
2086           yymsgp = yymsg;
2087         else if (yysyntax_error_status == 1)
2088           {
2089             if (yymsg != yymsgbuf)
2090               YYSTACK_FREE (yymsg);
2091             yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
2092             if (!yymsg)
2093               {
2094                 yymsg = yymsgbuf;
2095                 yymsg_alloc = sizeof yymsgbuf;
2096                 yysyntax_error_status = 2;
2097               }
2098             else
2099               {
2100                 yysyntax_error_status = YYSYNTAX_ERROR;
2101                 yymsgp = yymsg;
2102               }
2103           }
2104         yyerror (yymsgp);
2105         if (yysyntax_error_status == 2)
2106           goto yyexhaustedlab;
2107       }
2108 # undef YYSYNTAX_ERROR
2109 #endif
2110     }
2111
2112
2113
2114   if (yyerrstatus == 3)
2115     {
2116       /* If just tried and failed to reuse lookahead token after an
2117          error, discard it.  */
2118
2119       if (yychar <= YYEOF)
2120         {
2121           /* Return failure if at end of input.  */
2122           if (yychar == YYEOF)
2123             YYABORT;
2124         }
2125       else
2126         {
2127           yydestruct ("Error: discarding",
2128                       yytoken, &yylval);
2129           yychar = YYEMPTY;
2130         }
2131     }
2132
2133   /* Else will try to reuse lookahead token after shifting the error
2134      token.  */
2135   goto yyerrlab1;
2136
2137
2138 /*---------------------------------------------------.
2139 | yyerrorlab -- error raised explicitly by YYERROR.  |
2140 `---------------------------------------------------*/
2141 yyerrorlab:
2142
2143   /* Pacify compilers like GCC when the user code never invokes
2144      YYERROR and the label yyerrorlab therefore never appears in user
2145      code.  */
2146   if (/*CONSTCOND*/ 0)
2147      goto yyerrorlab;
2148
2149   /* Do not reclaim the symbols of the rule which action triggered
2150      this YYERROR.  */
2151   YYPOPSTACK (yylen);
2152   yylen = 0;
2153   YY_STACK_PRINT (yyss, yyssp);
2154   yystate = *yyssp;
2155   goto yyerrlab1;
2156
2157
2158 /*-------------------------------------------------------------.
2159 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
2160 `-------------------------------------------------------------*/
2161 yyerrlab1:
2162   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
2163
2164   for (;;)
2165     {
2166       yyn = yypact[yystate];
2167       if (!yypact_value_is_default (yyn))
2168         {
2169           yyn += YYTERROR;
2170           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
2171             {
2172               yyn = yytable[yyn];
2173               if (0 < yyn)
2174                 break;
2175             }
2176         }
2177
2178       /* Pop the current state because it cannot handle the error token.  */
2179       if (yyssp == yyss)
2180         YYABORT;
2181
2182
2183       yydestruct ("Error: popping",
2184                   yystos[yystate], yyvsp);
2185       YYPOPSTACK (1);
2186       yystate = *yyssp;
2187       YY_STACK_PRINT (yyss, yyssp);
2188     }
2189
2190   *++yyvsp = yylval;
2191
2192
2193   /* Shift the error token.  */
2194   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
2195
2196   yystate = yyn;
2197   goto yynewstate;
2198
2199
2200 /*-------------------------------------.
2201 | yyacceptlab -- YYACCEPT comes here.  |
2202 `-------------------------------------*/
2203 yyacceptlab:
2204   yyresult = 0;
2205   goto yyreturn;
2206
2207 /*-----------------------------------.
2208 | yyabortlab -- YYABORT comes here.  |
2209 `-----------------------------------*/
2210 yyabortlab:
2211   yyresult = 1;
2212   goto yyreturn;
2213
2214 #if !defined(yyoverflow) || YYERROR_VERBOSE
2215 /*-------------------------------------------------.
2216 | yyexhaustedlab -- memory exhaustion comes here.  |
2217 `-------------------------------------------------*/
2218 yyexhaustedlab:
2219   yyerror (YY_("memory exhausted"));
2220   yyresult = 2;
2221   /* Fall through.  */
2222 #endif
2223
2224 yyreturn:
2225   if (yychar != YYEMPTY)
2226     {
2227       /* Make sure we have latest lookahead translation.  See comments at
2228          user semantic actions for why this is necessary.  */
2229       yytoken = YYTRANSLATE (yychar);
2230       yydestruct ("Cleanup: discarding lookahead",
2231                   yytoken, &yylval);
2232     }
2233   /* Do not reclaim the symbols of the rule which action triggered
2234      this YYABORT or YYACCEPT.  */
2235   YYPOPSTACK (yylen);
2236   YY_STACK_PRINT (yyss, yyssp);
2237   while (yyssp != yyss)
2238     {
2239       yydestruct ("Cleanup: popping",
2240                   yystos[*yyssp], yyvsp);
2241       YYPOPSTACK (1);
2242     }
2243 #ifndef yyoverflow
2244   if (yyss != yyssa)
2245     YYSTACK_FREE (yyss);
2246 #endif
2247 #if YYERROR_VERBOSE
2248   if (yymsg != yymsgbuf)
2249     YYSTACK_FREE (yymsg);
2250 #endif
2251   /* Make sure YYID is used.  */
2252   return YYID (yyresult);
2253 }
2254
2255
2256
2257 /* Line 2067 of yacc.c  */
2258 #line 547 "i386_parse.y"
2259
2260
2261 static void
2262 yyerror (const char *s)
2263 {
2264   error (0, 0, gettext ("while reading i386 CPU description: %s at line %d"),
2265          gettext (s), i386_lineno);
2266 }
2267
2268
2269 static int
2270 bitfield_compare (const void *p1, const void *p2)
2271 {
2272   struct known_bitfield *f1 = (struct known_bitfield *) p1;
2273   struct known_bitfield *f2 = (struct known_bitfield *) p2;
2274
2275   return strcmp (f1->name, f2->name);
2276 }
2277
2278
2279 static void
2280 new_bitfield (char *name, unsigned long int num)
2281 {
2282   struct known_bitfield *newp = xmalloc (sizeof (struct known_bitfield));
2283   newp->name = name;
2284   newp->bits = num;
2285   newp->tmp = 0;
2286
2287   if (tfind (newp, &bitfields, bitfield_compare) != NULL)
2288     {
2289       error (0, 0, "%d: duplicated definition of bitfield '%s'",
2290              i386_lineno, name);
2291       free (name);
2292       return;
2293     }
2294
2295   if (tsearch (newp, &bitfields, bitfield_compare) == NULL)
2296     error (EXIT_FAILURE, errno, "%d: cannot insert new bitfield '%s'",
2297            i386_lineno, name);
2298 }
2299
2300
2301 /* Check that the number of bits is a multiple of 8.  */
2302 static void
2303 check_bits (struct bitvalue *val)
2304 {
2305   struct bitvalue *runp = val;
2306   unsigned int total = 0;
2307
2308   while (runp != NULL)
2309     {
2310       if (runp->type == zeroone)
2311         ++total;
2312       else if (runp->field == NULL)
2313         /* No sense doing anything, the field is not known.  */
2314         return;
2315       else
2316         total += runp->field->bits;
2317
2318       runp = runp->next;
2319     }
2320
2321   if (total % 8 != 0)
2322     {
2323       struct obstack os;
2324       obstack_init (&os);
2325
2326       while (val != NULL)
2327         {
2328           if (val->type == zeroone)
2329             obstack_printf (&os, "%u", val->value);
2330           else
2331             obstack_printf (&os, "{%s}", val->field->name);
2332           val = val->next;
2333         }
2334       obstack_1grow (&os, '\0');
2335
2336       error (0, 0, "%d: field '%s' not a multiple of 8 bits in size",
2337              i386_lineno, (char *) obstack_finish (&os));
2338
2339       obstack_free (&os, NULL);
2340     }
2341 }
2342
2343
2344 static int
2345 check_duplicates (struct bitvalue *val)
2346 {
2347   static int testcnt;
2348   ++testcnt;
2349
2350   int result = 0;
2351   while (val != NULL)
2352     {
2353       if (val->type == field && val->field != NULL)
2354         {
2355           if (val->field->tmp == testcnt)
2356             {
2357               error (0, 0, "%d: bitfield '%s' used more than once",
2358                      i386_lineno - 1, val->field->name);
2359               result = 1;
2360             }
2361           val->field->tmp = testcnt;
2362         }
2363
2364       val = val->next;
2365     }
2366
2367   return result;
2368 }
2369
2370
2371 static int
2372 check_argsdef (struct bitvalue *bitval, struct argument *args)
2373 {
2374   int result = 0;
2375
2376   while (args != NULL)
2377     {
2378       for (struct argname *name = args->name; name != NULL; name = name->next)
2379         if (name->type == nfield && name->field != NULL
2380             && name->field != &ax_reg && name->field != &dx_reg
2381             && name->field != &di_reg && name->field != &si_reg
2382             && name->field != &bx_reg)
2383           {
2384             struct bitvalue *runp = bitval;
2385
2386             while (runp != NULL)
2387               if (runp->type == field && runp->field == name->field)
2388                 break;
2389               else
2390                 runp = runp->next;
2391
2392             if (runp == NULL)
2393               {
2394                 error (0, 0, "%d: unknown bitfield '%s' used in output format",
2395                        i386_lineno - 1, name->field->name);
2396                 result = 1;
2397               }
2398           }
2399
2400       args = args->next;
2401     }
2402
2403   return result;
2404 }
2405
2406
2407 static int
2408 check_bitsused (struct bitvalue *bitval, struct known_bitfield *suffix,
2409                 struct argument *args)
2410 {
2411   int result = 0;
2412
2413   while (bitval != NULL)
2414     {
2415       if (bitval->type == field && bitval->field != NULL
2416           && bitval->field != suffix
2417           /* {w} is handled special.  */
2418           && strcmp (bitval->field->name, "w") != 0)
2419         {
2420           struct argument *runp;
2421           for (runp = args; runp != NULL; runp = runp->next)
2422             {
2423               struct argname *name = runp->name;
2424
2425               while (name != NULL)
2426                 if (name->type == nfield && name->field == bitval->field)
2427                   break;
2428                 else
2429                   name = name->next;
2430
2431               if (name != NULL)
2432                 break;
2433             }
2434
2435 #if 0
2436           if (runp == NULL)
2437             {
2438               error (0, 0, "%d: bitfield '%s' not used",
2439                      i386_lineno - 1, bitval->field->name);
2440               result = 1;
2441             }
2442 #endif
2443         }
2444
2445       bitval = bitval->next;
2446     }
2447
2448   return result;
2449 }
2450
2451
2452 static struct argname *
2453 combine (struct argname *name)
2454 {
2455   struct argname *last_str = NULL;
2456   for (struct argname *runp = name; runp != NULL; runp = runp->next)
2457     {
2458       if (runp->type == string)
2459         {
2460           if (last_str == NULL)
2461             last_str = runp;
2462           else
2463             {
2464               last_str->str = xrealloc (last_str->str,
2465                                         strlen (last_str->str)
2466                                         + strlen (runp->str) + 1);
2467               strcat (last_str->str, runp->str);
2468               last_str->next = runp->next;
2469             }
2470         }
2471       else
2472         last_str = NULL;
2473     }
2474   return name;
2475 }
2476
2477
2478 #define obstack_grow_str(ob, str) obstack_grow (ob, str, strlen (str))
2479
2480
2481 static void
2482 fillin_arg (struct bitvalue *bytes, struct argname *name,
2483             struct instruction *instr, int n)
2484 {
2485   static struct obstack ob;
2486   static int initialized;
2487   if (! initialized)
2488     {
2489       initialized = 1;
2490       obstack_init (&ob);
2491     }
2492
2493   struct argname *runp = name;
2494   int cnt = 0;
2495   while (runp != NULL)
2496     {
2497       /* We ignore strings in the function name.  */
2498       if (runp->type == string)
2499         {
2500           if (instr->operands[n].str != NULL)
2501             error (EXIT_FAILURE, 0,
2502                    "%d: cannot have more than one string parameter",
2503                    i386_lineno - 1);
2504
2505           instr->operands[n].str = runp->str;
2506         }
2507       else
2508         {
2509           assert (runp->type == nfield);
2510
2511           /* Construct the function name.  */
2512           if (cnt++ > 0)
2513             obstack_1grow (&ob, '$');
2514
2515           if (runp->field == NULL)
2516             /* Add some string which contains invalid characters.  */
2517             obstack_grow_str (&ob, "!!!INVALID!!!");
2518           else
2519             {
2520               char *fieldname = runp->field->name;
2521
2522               struct synonym search = { .from = fieldname };
2523
2524               struct synonym **res = tfind (&search, &synonyms, compare_syn);
2525               if (res != NULL)
2526                 fieldname = (*res)->to;
2527
2528               obstack_grow_str (&ob, fieldname);
2529             }
2530
2531           /* Now compute the bit offset of the field.  */
2532           struct bitvalue *b = bytes;
2533           int bitoff = 0;
2534           if (runp->field != NULL)
2535             while (b != NULL)
2536               {
2537                 if (b->type == field && b->field != NULL)
2538                   {
2539                     if (strcmp (b->field->name, runp->field->name) == 0)
2540                       break;
2541                     bitoff += b->field->bits;
2542                   }
2543                 else
2544                   ++bitoff;
2545
2546                 b = b->next;
2547               }
2548           if (instr->operands[n].off1 == 0)
2549             instr->operands[n].off1 = bitoff;
2550           else if (instr->operands[n].off2 == 0)
2551             instr->operands[n].off2 = bitoff;
2552           else if (instr->operands[n].off3 == 0)
2553             instr->operands[n].off3 = bitoff;
2554           else
2555             error (EXIT_FAILURE, 0,
2556                    "%d: cannot have more than three fields in parameter",
2557                    i386_lineno - 1);
2558
2559           if  (runp->field != NULL
2560                && strncasecmp (runp->field->name, "mod", 3) == 0)
2561             instr->modrm = 1;
2562         }
2563
2564       runp = runp->next;
2565     }
2566   if (obstack_object_size (&ob) == 0)
2567     obstack_grow_str (&ob, "string");
2568   obstack_1grow (&ob, '\0');
2569   char *fct = obstack_finish (&ob);
2570
2571   instr->operands[n].fct = fct;
2572 }
2573
2574
2575 #if 0
2576 static void
2577 nameout (const void *nodep, VISIT value, int level)
2578 {
2579   if (value == leaf || value == postorder)
2580     printf ("  %s\n", *(const char **) nodep);
2581 }
2582 #endif
2583
2584
2585 static int
2586 compare_argstring (const void *p1, const void *p2)
2587 {
2588   const struct argstring *a1 = (const struct argstring *) p1;
2589   const struct argstring *a2 = (const struct argstring *) p2;
2590
2591   return strcmp (a1->str, a2->str);
2592 }
2593
2594
2595 static int maxoff[3][3];
2596 static int minoff[3][3] = { { 1000, 1000, 1000 },
2597                             { 1000, 1000, 1000 },
2598                             { 1000, 1000, 1000 } };
2599 static int nbitoff[3][3];
2600 static void *fct_names[3];
2601 static int nbitfct[3];
2602 static int nbitsuf;
2603 static void *strs[3];
2604 static int nbitstr[3];
2605 static int total_bits = 2;      // Already counted the rep/repe bits.
2606
2607 static void
2608 find_numbers (void)
2609 {
2610   int nfct_names[3] = { 0, 0, 0 };
2611   int nstrs[3] = { 0, 0, 0 };
2612
2613   /* We reverse the order of the instruction list while processing it.
2614      Later phases need it in the order in which the input file has
2615      them.  */
2616   struct instruction *reversed = NULL;
2617
2618   struct instruction *runp = instructions;
2619   while (runp != NULL)
2620     {
2621       for (int i = 0; i < 3; ++i)
2622         if (runp->operands[i].fct != NULL)
2623           {
2624             struct argstring search = { .str = runp->operands[i].fct };
2625             if (tfind (&search, &fct_names[i], compare_argstring) == NULL)
2626               {
2627                 struct argstring *newp = xmalloc (sizeof (*newp));
2628                 newp->str = runp->operands[i].fct;
2629                 newp->idx = 0;
2630                 if (tsearch (newp, &fct_names[i], compare_argstring) == NULL)
2631                   error (EXIT_FAILURE, errno, "tsearch");
2632                 ++nfct_names[i];
2633               }
2634
2635             if (runp->operands[i].str != NULL)
2636               {
2637                 search.str = runp->operands[i].str;
2638                 if (tfind (&search, &strs[i], compare_argstring) == NULL)
2639                   {
2640                     struct argstring *newp = xmalloc (sizeof (*newp));
2641                     newp->str = runp->operands[i].str;
2642                     newp->idx = 0;
2643                     if (tsearch (newp, &strs[i], compare_argstring) == NULL)
2644                       error (EXIT_FAILURE, errno, "tsearch");
2645                     ++nstrs[i];
2646                   }
2647               }
2648
2649             maxoff[i][0] = MAX (maxoff[i][0], runp->operands[i].off1);
2650             maxoff[i][1] = MAX (maxoff[i][1], runp->operands[i].off2);
2651             maxoff[i][2] = MAX (maxoff[i][2], runp->operands[i].off3);
2652
2653             if (runp->operands[i].off1 > 0)
2654               minoff[i][0] = MIN (minoff[i][0], runp->operands[i].off1);
2655             if (runp->operands[i].off2 > 0)
2656               minoff[i][1] = MIN (minoff[i][1], runp->operands[i].off2);
2657             if (runp->operands[i].off3 > 0)
2658               minoff[i][2] = MIN (minoff[i][2], runp->operands[i].off3);
2659           }
2660
2661       struct instruction *old = runp;
2662       runp = runp->next;
2663
2664       old->next = reversed;
2665       reversed = old;
2666     }
2667   instructions = reversed;
2668
2669   int d;
2670   int c;
2671   for (int i = 0; i < 3; ++i)
2672     {
2673       // printf ("min1 = %d, min2 = %d, min3 = %d\n", minoff[i][0], minoff[i][1], minoff[i][2]);
2674       // printf ("max1 = %d, max2 = %d, max3 = %d\n", maxoff[i][0], maxoff[i][1], maxoff[i][2]);
2675
2676       if (minoff[i][0] == 1000)
2677         nbitoff[i][0] = 0;
2678       else
2679         {
2680           nbitoff[i][0] = 1;
2681           d = maxoff[i][0] - minoff[i][0];
2682           c = 1;
2683           while (c < d)
2684             {
2685               ++nbitoff[i][0];
2686               c *= 2;
2687             }
2688           total_bits += nbitoff[i][0];
2689         }
2690
2691       if (minoff[i][1] == 1000)
2692         nbitoff[i][1] = 0;
2693       else
2694         {
2695           nbitoff[i][1] = 1;
2696           d = maxoff[i][1] - minoff[i][1];
2697           c = 1;
2698           while (c < d)
2699             {
2700               ++nbitoff[i][1];
2701               c *= 2;
2702             }
2703           total_bits += nbitoff[i][1];
2704         }
2705
2706       if (minoff[i][2] == 1000)
2707         nbitoff[i][2] = 0;
2708       else
2709         {
2710           nbitoff[i][2] = 1;
2711           d = maxoff[i][2] - minoff[i][2];
2712           c = 1;
2713           while (c < d)
2714             {
2715               ++nbitoff[i][2];
2716               c *= 2;
2717             }
2718           total_bits += nbitoff[i][2];
2719         }
2720       // printf ("off1 = %d, off2 = %d, off3 = %d\n", nbitoff[i][0], nbitoff[i][1], nbitoff[i][2]);
2721
2722       nbitfct[i] = 1;
2723       d = nfct_names[i];
2724       c = 1;
2725       while (c < d)
2726         {
2727           ++nbitfct[i];
2728           c *= 2;
2729         }
2730       total_bits += nbitfct[i];
2731       // printf ("%d fct[%d], %d bits\n", nfct_names[i], i, nbitfct[i]);
2732
2733       if (nstrs[i] != 0)
2734         {
2735           nbitstr[i] = 1;
2736           d = nstrs[i];
2737           c = 1;
2738           while (c < d)
2739             {
2740               ++nbitstr[i];
2741               c *= 2;
2742             }
2743           total_bits += nbitstr[i];
2744         }
2745
2746       // twalk (fct_names[i], nameout);
2747     }
2748
2749   nbitsuf = 0;
2750   d = nsuffixes;
2751   c = 1;
2752   while (c < d)
2753     {
2754       ++nbitsuf;
2755       c *= 2;
2756     }
2757   total_bits += nbitsuf;
2758   // printf ("%d suffixes, %d bits\n", nsuffixes, nbitsuf);
2759 }
2760
2761
2762 static int
2763 compare_syn (const void *p1, const void *p2)
2764 {
2765   const struct synonym *s1 = (const struct synonym *) p1;
2766   const struct synonym *s2 = (const struct synonym *) p2;
2767
2768   return strcmp (s1->from, s2->from);
2769 }
2770
2771
2772 static int
2773 compare_suf (const void *p1, const void *p2)
2774 {
2775   const struct suffix *s1 = (const struct suffix *) p1;
2776   const struct suffix *s2 = (const struct suffix *) p2;
2777
2778   return strcmp (s1->name, s2->name);
2779 }
2780
2781
2782 static int count_op_str;
2783 static int off_op_str;
2784 static void
2785 print_op_str (const void *nodep, VISIT value,
2786               int level __attribute__ ((unused)))
2787 {
2788   if (value == leaf || value == postorder)
2789     {
2790       const char *str = (*(struct argstring **) nodep)->str;
2791       fprintf (outfile, "%s\n  \"%s",
2792                count_op_str == 0 ? "" : "\\0\"", str);
2793       (*(struct argstring **) nodep)->idx = ++count_op_str;
2794       (*(struct argstring **) nodep)->off = off_op_str;
2795       off_op_str += strlen (str) + 1;
2796     }
2797 }
2798
2799
2800 static void
2801 print_op_str_idx (const void *nodep, VISIT value,
2802                   int level __attribute__ ((unused)))
2803 {
2804   if (value == leaf || value == postorder)
2805     printf ("  %d,\n", (*(struct argstring **) nodep)->off);
2806 }
2807
2808
2809 static void
2810 print_op_fct (const void *nodep, VISIT value,
2811               int level __attribute__ ((unused)))
2812 {
2813   if (value == leaf || value == postorder)
2814     {
2815       fprintf (outfile, "  FCT_%s,\n", (*(struct argstring **) nodep)->str);
2816       (*(struct argstring **) nodep)->idx = ++count_op_str;
2817     }
2818 }
2819
2820
2821 #if NMNES < 2
2822 # error "bogus NMNES value"
2823 #endif
2824
2825 static void
2826 instrtable_out (void)
2827 {
2828   find_numbers ();
2829
2830 #if 0
2831   create_mnemonic_table ();
2832
2833   fprintf (outfile, "#define MNEMONIC_BITS %zu\n", best_mnemonic_bits);
2834 #else
2835   fprintf (outfile, "#define MNEMONIC_BITS %ld\n",
2836            lrint (ceil (log2 (NMNES))));
2837 #endif
2838   fprintf (outfile, "#define SUFFIX_BITS %d\n", nbitsuf);
2839   for (int i = 0; i < 3; ++i)
2840     {
2841       fprintf (outfile, "#define FCT%d_BITS %d\n", i + 1, nbitfct[i]);
2842       if (nbitstr[i] != 0)
2843         fprintf (outfile, "#define STR%d_BITS %d\n", i + 1, nbitstr[i]);
2844       fprintf (outfile, "#define OFF%d_1_BITS %d\n", i + 1, nbitoff[i][0]);
2845       fprintf (outfile, "#define OFF%d_1_BIAS %d\n", i + 1, minoff[i][0]);
2846       if (nbitoff[i][1] != 0)
2847         {
2848           fprintf (outfile, "#define OFF%d_2_BITS %d\n", i + 1, nbitoff[i][1]);
2849           fprintf (outfile, "#define OFF%d_2_BIAS %d\n", i + 1, minoff[i][1]);
2850         }
2851       if (nbitoff[i][2] != 0)
2852         {
2853           fprintf (outfile, "#define OFF%d_3_BITS %d\n", i + 1, nbitoff[i][2]);
2854           fprintf (outfile, "#define OFF%d_3_BIAS %d\n", i + 1, minoff[i][2]);
2855         }
2856     }
2857
2858   fputs ("\n#include <i386_data.h>\n\n", outfile);
2859
2860
2861 #define APPEND(a, b) APPEND_ (a, b)
2862 #define APPEND_(a, b) a##b
2863 #define EMIT_SUFFIX(suf) \
2864   fprintf (outfile, "#define suffix_%s %d\n", #suf, APPEND (suffix_, suf))
2865   EMIT_SUFFIX (none);
2866   EMIT_SUFFIX (w);
2867   EMIT_SUFFIX (w0);
2868   EMIT_SUFFIX (W);
2869   EMIT_SUFFIX (tttn);
2870   EMIT_SUFFIX (D);
2871   EMIT_SUFFIX (w1);
2872   EMIT_SUFFIX (W1);
2873
2874   fputc_unlocked ('\n', outfile);
2875
2876   for (int i = 0; i < 3; ++i)
2877     {
2878       /* Functions.  */
2879       count_op_str = 0;
2880       fprintf (outfile, "static const opfct_t op%d_fct[] =\n{\n  NULL,\n",
2881                i + 1);
2882       twalk (fct_names[i], print_op_fct);
2883       fputs ("};\n", outfile);
2884
2885       /* The operand strings.  */
2886       if (nbitstr[i] != 0)
2887         {
2888           count_op_str = 0;
2889           off_op_str = 0;
2890           fprintf (outfile, "static const char op%d_str[] =", i + 1);
2891           twalk (strs[i], print_op_str);
2892           fputs ("\";\n", outfile);
2893
2894           fprintf (outfile, "static const uint8_t op%d_str_idx[] = {\n",
2895                    i + 1);
2896           twalk (strs[i], print_op_str_idx);
2897           fputs ("};\n", outfile);
2898         }
2899     }
2900
2901
2902   fputs ("static const struct instr_enc instrtab[] =\n{\n", outfile);
2903   struct instruction *instr;
2904   for (instr = instructions; instr != NULL; instr = instr->next)
2905     {
2906       fputs ("  {", outfile);
2907       if (instr->mnemonic == (void *) -1l)
2908         fputs (" .mnemonic = MNE_INVALID,", outfile);
2909       else
2910         fprintf (outfile, " .mnemonic = MNE_%s,", instr->mnemonic);
2911       fprintf (outfile, " .rep = %d,", instr->rep);
2912       fprintf (outfile, " .repe = %d,", instr->repe);
2913       fprintf (outfile, " .suffix = %d,", instr->suffix);
2914       fprintf (outfile, " .modrm = %d,", instr->modrm);
2915
2916       for (int i = 0; i < 3; ++i)
2917         {
2918           int idx = 0;
2919           if (instr->operands[i].fct != NULL)
2920             {
2921               struct argstring search = { .str = instr->operands[i].fct };
2922               struct argstring **res = tfind (&search, &fct_names[i],
2923                                               compare_argstring);
2924               assert (res != NULL);
2925               idx = (*res)->idx;
2926             }
2927           fprintf (outfile, " .fct%d = %d,", i + 1, idx);
2928
2929           idx = 0;
2930           if (instr->operands[i].str != NULL)
2931             {
2932               struct argstring search = { .str = instr->operands[i].str };
2933               struct argstring **res = tfind (&search, &strs[i],
2934                                               compare_argstring);
2935               assert (res != NULL);
2936               idx = (*res)->idx;
2937             }
2938           if (nbitstr[i] != 0)
2939             fprintf (outfile, " .str%d = %d,", i + 1, idx);
2940
2941           fprintf (outfile, " .off%d_1 = %d,", i + 1,
2942                    MAX (0, instr->operands[i].off1 - minoff[i][0]));
2943
2944           if (nbitoff[i][1] != 0)
2945             fprintf (outfile, " .off%d_2 = %d,", i + 1,
2946                      MAX (0, instr->operands[i].off2 - minoff[i][1]));
2947
2948           if (nbitoff[i][2] != 0)
2949             fprintf (outfile, " .off%d_3 = %d,", i + 1,
2950                      MAX (0, instr->operands[i].off3 - minoff[i][2]));
2951         }
2952
2953       fputs (" },\n", outfile);
2954     }
2955   fputs ("};\n", outfile);
2956
2957   fputs ("static const uint8_t match_data[] =\n{\n", outfile);
2958   size_t cnt = 0;
2959   for (instr = instructions; instr != NULL; instr = instr->next, ++cnt)
2960     {
2961       /* First count the number of bytes.  */
2962       size_t totalbits = 0;
2963       size_t zerobits = 0;
2964       bool leading_p = true;
2965       size_t leadingbits = 0;
2966       struct bitvalue *b = instr->bytes;
2967       while (b != NULL)
2968         {
2969           if (b->type == zeroone)
2970             {
2971               ++totalbits;
2972               zerobits = 0;
2973               if (leading_p)
2974                 ++leadingbits;
2975             }
2976           else
2977             {
2978               totalbits += b->field->bits;
2979               /* We must always count the mod/rm byte.  */
2980               if (strncasecmp (b->field->name, "mod", 3) == 0)
2981                 zerobits = 0;
2982               else
2983                 zerobits += b->field->bits;
2984               leading_p = false;
2985             }
2986           b = b->next;
2987         }
2988       size_t nbytes = (totalbits - zerobits + 7) / 8;
2989       assert (nbytes > 0);
2990       size_t leadingbytes = leadingbits / 8;
2991
2992       fprintf (outfile, "  %#zx,", nbytes | (leadingbytes << 4));
2993
2994       /* Now create the mask and byte values.  */
2995       uint8_t byte = 0;
2996       uint8_t mask = 0;
2997       int nbits = 0;
2998       b = instr->bytes;
2999       while (b != NULL)
3000         {
3001           if (b->type == zeroone)
3002             {
3003               byte = (byte << 1) | b->value;
3004               mask = (mask << 1) | 1;
3005               if (++nbits == 8)
3006                 {
3007                   if (leadingbytes > 0)
3008                     {
3009                       assert (mask == 0xff);
3010                       fprintf (outfile, " %#" PRIx8 ",", byte);
3011                       --leadingbytes;
3012                     }
3013                   else
3014                     fprintf (outfile, " %#" PRIx8 ", %#" PRIx8 ",",
3015                              mask, byte);
3016                   byte = mask = nbits = 0;
3017                   if (--nbytes == 0)
3018                     break;
3019                 }
3020             }
3021           else
3022             {
3023               assert (leadingbytes == 0);
3024
3025               unsigned long int remaining = b->field->bits;
3026               while (nbits + remaining > 8)
3027                 {
3028                   fprintf (outfile, " %#" PRIx8 ", %#" PRIx8 ",",
3029                            mask << (8 - nbits), byte << (8 - nbits));
3030                   remaining = nbits + remaining - 8;
3031                   byte = mask = nbits = 0;
3032                   if (--nbytes == 0)
3033                     break;
3034                 }
3035               byte <<= remaining;
3036               mask <<= remaining;
3037               nbits += remaining;
3038               if (nbits == 8)
3039                 {
3040                   fprintf (outfile, " %#" PRIx8 ", %#" PRIx8 ",", mask, byte);
3041                   byte = mask = nbits = 0;
3042                   if (--nbytes == 0)
3043                     break;
3044                 }
3045             }
3046           b = b->next;
3047         }
3048
3049       fputc_unlocked ('\n', outfile);
3050     }
3051   fputs ("};\n", outfile);
3052 }
3053
3054
3055 #if 0
3056 static size_t mnemonic_maxlen;
3057 static size_t mnemonic_minlen;
3058 static size_t
3059 which_chars (const char *str[], size_t nstr)
3060 {
3061   char used_char[256];
3062   memset (used_char, '\0', sizeof (used_char));
3063   mnemonic_maxlen = 0;
3064   mnemonic_minlen = 10000;
3065   for (size_t cnt = 0; cnt < nstr; ++cnt)
3066     {
3067       const unsigned char *cp = (const unsigned char *) str[cnt];
3068       mnemonic_maxlen = MAX (mnemonic_maxlen, strlen ((char *) cp));
3069       mnemonic_minlen = MIN (mnemonic_minlen, strlen ((char *) cp));
3070       do
3071         used_char[*cp++] = 1;
3072       while (*cp != '\0');
3073     }
3074   size_t nused_char = 0;
3075   for (size_t cnt = 0; cnt < 256; ++cnt)
3076     if (used_char[cnt] != 0)
3077       ++nused_char;
3078   return nused_char;
3079 }
3080
3081
3082 static const char **mnemonic_strs;
3083 static size_t nmnemonic_strs;
3084 static void
3085 add_mnemonics (const void *nodep, VISIT value,
3086                int level __attribute__ ((unused)))
3087 {
3088   if (value == leaf || value == postorder)
3089     mnemonic_strs[nmnemonic_strs++] = *(const char **) nodep;
3090 }
3091
3092
3093 struct charfreq
3094 {
3095   char ch;
3096   int freq;
3097 };
3098 static struct charfreq pfxfreq[256];
3099 static struct charfreq sfxfreq[256];
3100
3101
3102 static int
3103 compare_freq (const void *p1, const void *p2)
3104 {
3105   const struct charfreq *c1 = (const struct charfreq *) p1;
3106   const struct charfreq *c2 = (const struct charfreq *) p2;
3107
3108   if (c1->freq > c2->freq)
3109     return -1;
3110   if (c1->freq < c2->freq)
3111     return 1;
3112   return 0;
3113 }
3114
3115
3116 static size_t
3117 compute_pfxfreq (const char *str[], size_t nstr)
3118 {
3119   memset (pfxfreq, '\0', sizeof (pfxfreq));
3120
3121   for (size_t i = 0; i < nstr; ++i)
3122     pfxfreq[i].ch = i;
3123
3124   for (size_t i = 0; i < nstr; ++i)
3125     ++pfxfreq[*((const unsigned char *) str[i])].freq;
3126
3127   qsort (pfxfreq, 256, sizeof (struct charfreq), compare_freq);
3128
3129   size_t n = 0;
3130   while (n < 256 && pfxfreq[n].freq != 0)
3131     ++n;
3132   return n;
3133 }
3134
3135
3136 struct strsnlen
3137 {
3138   const char *str;
3139   size_t len;
3140 };
3141
3142 static size_t
3143 compute_sfxfreq (size_t nstr, struct strsnlen *strsnlen)
3144 {
3145   memset (sfxfreq, '\0', sizeof (sfxfreq));
3146
3147   for (size_t i = 0; i < nstr; ++i)
3148     sfxfreq[i].ch = i;
3149
3150   for (size_t i = 0; i < nstr; ++i)
3151     ++sfxfreq[((const unsigned char *) strchrnul (strsnlen[i].str, '\0'))[-1]].freq;
3152
3153   qsort (sfxfreq, 256, sizeof (struct charfreq), compare_freq);
3154
3155   size_t n = 0;
3156   while (n < 256 && sfxfreq[n].freq != 0)
3157     ++n;
3158   return n;
3159 }
3160
3161
3162 static void
3163 create_mnemonic_table (void)
3164 {
3165   mnemonic_strs = xmalloc (nmnemonics * sizeof (char *));
3166
3167   twalk (mnemonics, add_mnemonics);
3168
3169   (void) which_chars (mnemonic_strs, nmnemonic_strs);
3170
3171   size_t best_so_far = 100000000;
3172   char *best_prefix = NULL;
3173   char *best_suffix = NULL;
3174   char *best_table = NULL;
3175   size_t best_table_size = 0;
3176   size_t best_table_bits = 0;
3177   size_t best_prefix_bits = 0;
3178
3179   /* We can precompute the prefix characters.  */
3180   size_t npfx_char = compute_pfxfreq (mnemonic_strs, nmnemonic_strs);
3181
3182   /* Compute best size for string representation including explicit NUL.  */
3183   for (size_t pfxbits = 0; (1u << pfxbits) < 2 * npfx_char; ++pfxbits)
3184     {
3185       char prefix[1 << pfxbits];
3186       size_t i;
3187       for (i = 0; i < (1u << pfxbits) - 1; ++i)
3188         prefix[i] = pfxfreq[i].ch;
3189       prefix[i] = '\0';
3190
3191       struct strsnlen strsnlen[nmnemonic_strs];
3192
3193       for (i = 0; i < nmnemonic_strs; ++i)
3194         {
3195           if (strchr (prefix, *mnemonic_strs[i]) != NULL)
3196             strsnlen[i].str = mnemonic_strs[i] + 1;
3197           else
3198             strsnlen[i].str = mnemonic_strs[i];
3199           strsnlen[i].len = strlen (strsnlen[i].str);
3200         }
3201
3202       /* With the prefixes gone, try to combine strings.  */
3203       size_t nstrsnlen = 1;
3204       for (i = 1; i < nmnemonic_strs; ++i)
3205         {
3206           size_t j;
3207           for (j = 0; j < nstrsnlen; ++j)
3208             if (strsnlen[i].len > strsnlen[j].len
3209                 && strcmp (strsnlen[j].str,
3210                            strsnlen[i].str + (strsnlen[i].len
3211                                               - strsnlen[j].len)) == 0)
3212               {
3213                 strsnlen[j] = strsnlen[i];
3214                 break;
3215               }
3216             else if (strsnlen[i].len < strsnlen[j].len
3217                      && strcmp (strsnlen[i].str,
3218                                 strsnlen[j].str + (strsnlen[j].len
3219                                                    - strsnlen[i].len)) == 0)
3220               break;
3221 ;
3222           if (j == nstrsnlen)
3223               strsnlen[nstrsnlen++] = strsnlen[i];
3224         }
3225
3226       size_t nsfx_char = compute_sfxfreq (nstrsnlen, strsnlen);
3227
3228       for (size_t sfxbits = 0; (1u << sfxbits) < 2 * nsfx_char; ++sfxbits)
3229         {
3230           char suffix[1 << sfxbits];
3231
3232           for (i = 0; i < (1u << sfxbits) - 1; ++i)
3233             suffix[i] = sfxfreq[i].ch;
3234           suffix[i] = '\0';
3235
3236           size_t newlen[nstrsnlen];
3237
3238           for (i = 0; i < nstrsnlen; ++i)
3239             if (strchr (suffix, strsnlen[i].str[strsnlen[i].len - 1]) != NULL)
3240               newlen[i] = strsnlen[i].len - 1;
3241             else
3242               newlen[i] = strsnlen[i].len;
3243
3244           char charused[256];
3245           memset (charused, '\0', sizeof (charused));
3246           size_t ncharused = 0;
3247
3248           const char *tablestr[nstrsnlen];
3249           size_t ntablestr = 1;
3250           tablestr[0] = strsnlen[0].str;
3251           size_t table = newlen[0] + 1;
3252           for (i = 1; i < nstrsnlen; ++i)
3253             {
3254               size_t j;
3255               for (j = 0; j < ntablestr; ++j)
3256                 if (newlen[i] > newlen[j]
3257                     && memcmp (tablestr[j],
3258                                strsnlen[i].str + (newlen[i] - newlen[j]),
3259                                newlen[j]) == 0)
3260                   {
3261                     table += newlen[i] - newlen[j];
3262                     tablestr[j] = strsnlen[i].str;
3263                     newlen[j] = newlen[i];
3264                     break;
3265                   }
3266                 else if (newlen[i] < newlen[j]
3267                      && memcmp (strsnlen[i].str,
3268                                 tablestr[j] + (newlen[j] - newlen[i]),
3269                                 newlen[i]) == 0)
3270                   break;
3271
3272               if (j == ntablestr)
3273                 {
3274                   table += newlen[i] + 1;
3275                   tablestr[ntablestr] = strsnlen[i].str;
3276                   newlen[ntablestr] = newlen[i];
3277
3278                   ++ntablestr;
3279                 }
3280
3281               for (size_t x = 0; x < newlen[j]; ++x)
3282                 if (charused[((const unsigned char *) tablestr[j])[x]]++ == 0)
3283                   ++ncharused;
3284             }
3285
3286           size_t ncharused_bits = 0;
3287           i = 1;
3288           while (i < ncharused)
3289             {
3290               i *= 2;
3291               ++ncharused_bits;
3292             }
3293
3294           size_t table_bits = 0;
3295           i = 1;
3296           while (i < table)
3297             {
3298               i *= 2;
3299               ++table_bits;
3300             }
3301
3302           size_t mnemonic_bits = table_bits + pfxbits + sfxbits;
3303           size_t new_total = (((table + 7) / 8) * ncharused_bits + ncharused
3304                               + (pfxbits == 0 ? 0 : (1 << pfxbits) - 1)
3305                               + (sfxbits == 0 ? 0 : (1 << sfxbits) - 1)
3306                               + (((total_bits + mnemonic_bits + 7) / 8)
3307                                  * ninstructions));
3308
3309           if (new_total < best_so_far)
3310             {
3311               best_so_far = new_total;
3312               best_mnemonic_bits = mnemonic_bits;
3313
3314               free (best_suffix);
3315               best_suffix = xstrdup (suffix);
3316
3317               free (best_prefix);
3318               best_prefix = xstrdup (prefix);
3319               best_prefix_bits = pfxbits;
3320
3321               best_table_size = table;
3322               best_table_bits = table_bits;
3323               char *cp = best_table = xrealloc (best_table, table);
3324               for (i = 0; i < ntablestr; ++i)
3325                 {
3326                   assert (cp + newlen[i] + 1 <= best_table + table);
3327                   cp = mempcpy (cp, tablestr[i], newlen[i]);
3328                   *cp++ = '\0';
3329                 }
3330               assert (cp == best_table + table);
3331             }
3332         }
3333     }
3334
3335   fputs ("static const char mnemonic_table[] =\n\"", outfile);
3336   for (size_t i = 0; i < best_table_size; ++i)
3337     {
3338       if (((i + 1) % 60) == 0)
3339         fputs ("\"\n\"", outfile);
3340       if (!isascii (best_table[i]) || !isprint (best_table[i]))
3341         fprintf (outfile, "\\%03o", best_table[i]);
3342       else
3343         fputc (best_table[i], outfile);
3344     }
3345   fputs ("\";\n", outfile);
3346
3347   if (best_prefix[0] != '\0')
3348     fprintf (outfile,
3349              "static const char prefix[%zu] = \"%s\";\n"
3350              "#define PREFIXCHAR_BITS %zu\n",
3351              strlen (best_prefix), best_prefix, best_prefix_bits);
3352   else
3353     fputs ("#define NO_PREFIX\n", outfile);
3354
3355   if (best_suffix[0] != '\0')
3356     fprintf (outfile, "static const char suffix[%zu] = \"%s\";\n",
3357              strlen (best_suffix), best_suffix);
3358   else
3359     fputs ("#define NO_SUFFIX\n", outfile);
3360
3361   for (size_t i = 0; i < nmnemonic_strs; ++i)
3362     {
3363       const char *mne = mnemonic_strs[i];
3364
3365       size_t pfxval = 0;
3366       char *cp = strchr (best_prefix, *mne);
3367       if (cp != NULL)
3368         {
3369           pfxval = 1 + (cp - best_prefix);
3370           ++mne;
3371         }
3372
3373       size_t l = strlen (mne);
3374
3375       size_t sfxval = 0;
3376       cp = strchr (best_suffix, mne[l - 1]);
3377       if (cp != NULL)
3378         {
3379           sfxval = 1 + (cp - best_suffix);
3380           --l;
3381         }
3382
3383       char *off = memmem (best_table, best_table_size, mne, l);
3384       while (off[l] != '\0')
3385         {
3386           off = memmem (off + 1, best_table_size, mne, l);
3387           assert (off != NULL);
3388         }
3389
3390       fprintf (outfile, "#define MNE_%s %#zx\n",
3391                mnemonic_strs[i],
3392                (off - best_table)
3393                + ((pfxval + (sfxval << best_prefix_bits)) << best_table_bits));
3394     }
3395 }
3396 #endif
3397