1 /* The IGEN simulator generator for GDB, the GNU Debugger.
3 Copyright 2002-2019 Free Software Foundation, Inc.
5 Contributed by Andrew Cagney.
7 This file is part of GDB.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
23 /* Instruction decode table:
31 ":" [ <constant-field-names> ]
33 ":" [ <format-names> ]
36 ":" [ <path> { "," <path> } ]
38 ":" [ "!" ] <special-value>
44 <path> ::= <int> "," <int> ;;
55 <reserved-options> ::= "zero-reserved" ;
56 <gen-options> ::= "array" | "switch" | "padded-switch" | "goto-switch" ;
57 <optimize-options> ::= "duplicate" | "combine"
58 <decode-options> ::= "normal" | "boolean" ;
59 <search-options> ::= "constants" | "variables" | "mixed"
64 The instruction decode table contains rules that dictate how igen
65 is going to firstly break down the opcode table and secondly
67 The table that follows is used by gen to construct a decision tree
68 that can identify each possible instruction. Gen then outputs this
69 decision tree as (according to config) a table or switch statement
70 as the function idecode.
72 In parallel to this, as mentioned above, WITH_EXPANDED_SEMANTICS
73 determines of the semantic functions themselves should be expanded
79 Range of bits (within the instruction) that should be searched for
80 an instruction field. Within such ranges, gen looks for opcodes
81 (constants), registers (strings) and reserved bits (slash) and
82 according to the rules that follows includes or excludes them from
83 a possible instruction field.
88 If an instruction field was found, enlarge the field size so that
89 it is forced to at least include bits starting from <force_first>
90 (<force_last>). To stop this occuring, use <force_first> = <last>
91 + 1 and <force_last> = <first> - 1.
95 Treat `/' (reserved) fields as a constant (zero) instead of
96 variable when looking for an instruction field.
100 Treat any contained register (string) fields as constant when
101 determining the instruction field. For the instruction decode (and
102 controled by IDECODE_EXPAND_SEMANTICS) this forces the expansion of
103 what would otherwize be non constant bits of an instruction.
107 Should this table be expanded using a switch statement (val 1) and
108 if so, should it be padded with entries so as to force the compiler
109 to generate a jump table (val 2). Or a branch table (val 3).
116 Special rule to fine tune how specific (or groups) of instructions
117 are expanded. The applicability of the rule is determined by
119 <special_mask> != 0 && (instruction> & <special_mask>) == <special_value>
121 Where <instruction> is obtained by looking only at constant fields
122 with in an instructions spec. When determining an expansion, the
123 rule is only considered when a node contains a single instruction.
124 <special_rule> can be any of:
126 0: for this instruction, expand by earlier rules
127 1: expand bits <force_low> .. <force_hi> only
128 2: boolean expansion of only zero/non-zero cases
129 3: boolean expansion of equality of special constant
155 decode_cond_mask_field,
156 decode_cond_value_field,
157 decode_cond_word_nr_field,
158 nr_decode_cond_fields,
161 typedef struct _decode_path decode_path;
168 typedef struct _decode_path_list decode_path_list;
169 struct _decode_path_list
172 decode_path_list *next;
176 typedef struct _decode_cond decode_cond;
180 int mask[max_insn_bit_size];
181 int value[max_insn_bit_size];
189 decode_find_constants,
196 decode_options_field,
199 decode_force_first_field,
200 decode_force_last_field,
201 decode_constant_field_names_field,
202 decode_word_nr_field,
203 decode_format_names_field,
204 decode_model_names_field,
207 min_nr_decode_fields = decode_last_field + 1,
211 typedef struct _decode_table decode_table;
215 decode_special_type type;
217 decode_search_type search;
222 filter *constant_field_names;
227 int with_zero_reserved;
230 /* conditions on the rule being applied */
231 decode_path_list *paths;
232 filter *format_names;
234 decode_cond *conditions;
239 extern decode_table *load_decode_table (char *file_name);
241 extern int decode_table_max_word_nr (decode_table *rule);
243 extern void dump_decode_rule
244 (lf *file, char *prefix, decode_table *rule, char *suffix);