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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [insight/] [sim/] [igen/] [gen.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 578 markom
/*  This file is part of the program psim.
2
 
3
    Copyright (C) 1994,1995,1996, Andrew Cagney <cagney@highland.com.au>
4
 
5
    This program is free software; you can redistribute it and/or modify
6
    it under the terms of the GNU General Public License as published by
7
    the Free Software Foundation; either version 2 of the License, or
8
    (at your option) any later version.
9
 
10
    This program is distributed in the hope that it will be useful,
11
    but WITHOUT ANY WARRANTY; without even the implied warranty of
12
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
    GNU General Public License for more details.
14
 
15
    You should have received a copy of the GNU General Public License
16
    along with this program; if not, write to the Free Software
17
    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
 
19
    */
20
 
21
 
22
typedef struct _opcode_field opcode_field;
23
struct _opcode_field {
24
  int word_nr;
25
  int first;
26
  int last;
27
  int is_boolean;
28
  int nr_opcodes;
29
  unsigned boolean_constant;
30
  opcode_field *parent;
31
};
32
 
33
typedef struct _opcode_bits opcode_bits;
34
struct _opcode_bits {
35
  int value;
36
  int first;
37
  int last;
38
  insn_field_entry *field;
39
  opcode_field *opcode;
40
  opcode_bits *next;
41
};
42
 
43
typedef struct _insn_opcodes insn_opcodes;
44
struct _insn_opcodes {
45
  opcode_field *opcode;
46
  insn_opcodes *next;
47
};
48
 
49
typedef struct _insn_list insn_list;
50
struct _insn_list {
51
  /* the instruction */
52
  insn_entry *insn;
53
  /* list of non constant bits that have been made constant */
54
  opcode_bits *expanded_bits;
55
  /* list of the various opcode field paths used to reach this
56
     instruction */
57
  insn_opcodes *opcodes;
58
  /* number of prefetched words for this instruction */
59
  int nr_prefetched_words;
60
  /* The semantic function list_entry corresponding to this insn */
61
  insn_list *semantic;
62
  /* linked list */
63
  insn_list *next;
64
};
65
 
66
/* forward */
67
typedef struct _gen_list gen_list;
68
 
69
typedef struct _gen_entry gen_entry;
70
struct _gen_entry {
71
 
72
  /* as an entry in a table */
73
  int word_nr;
74
  int opcode_nr;
75
  gen_entry *sibling;
76
  opcode_bits *expanded_bits;
77
  gen_entry *parent; /* parent has the opcode* data */
78
 
79
  /* as a table containing entries */
80
  decode_table *opcode_rule;
81
  opcode_field *opcode;
82
  int nr_prefetched_words;
83
  int nr_entries;
84
  gen_entry *entries;
85
 
86
  /* as both an entry and a table */
87
  int nr_insns;
88
  insn_list *insns;
89
 
90
  /* if siblings are being combined */
91
  gen_entry *combined_next;
92
  gen_entry *combined_parent;
93
 
94
  /* our top-of-tree */
95
  gen_list *top;
96
};
97
 
98
 
99
struct _gen_list {
100
  model_entry *model;
101
  insn_table *isa;
102
  gen_entry *table;
103
  gen_list *next;
104
};
105
 
106
 
107
typedef struct _gen_table gen_table;
108
struct _gen_table {
109
  /* list of all the instructions */
110
  insn_table *isa;
111
  /* list of all the semantic functions */
112
  decode_table *rules;
113
  /* list of all the generated instruction tables */
114
  gen_list *tables;
115
  /* list of all the semantic functions */
116
  int nr_semantics;
117
  insn_list *semantics;
118
};
119
 
120
 
121
extern gen_table *make_gen_tables
122
(insn_table *isa,
123
 decode_table *rules);
124
 
125
 
126
extern void gen_tables_expand_insns
127
(gen_table *gen);
128
 
129
extern void gen_tables_expand_semantics
130
(gen_table *gen);
131
 
132
extern int gen_entry_depth
133
(gen_entry *table);
134
 
135
 
136
 
137
/* Traverse the created data structure */
138
 
139
typedef void gen_entry_handler
140
(lf *file,
141
 gen_entry *entry,
142
 int depth,
143
 void *data);
144
 
145
extern void gen_entry_traverse_tree
146
(lf *file,
147
 gen_entry *table,
148
 int depth,
149
 gen_entry_handler *start,
150
 gen_entry_handler *leaf,
151
 gen_entry_handler *end,
152
 void *data);
153
 
154
 
155
 
156
/* Misc functions - actually in igen.c */
157
 
158
 
159
/* Cache functions: */
160
 
161
extern int print_icache_function_formal
162
(lf *file, int nr_prefetched_words);
163
 
164
extern int print_icache_function_actual
165
(lf *file, int nr_prefetched_words);
166
 
167
extern int print_icache_function_type
168
(lf *file);
169
 
170
extern int print_semantic_function_formal
171
(lf *file, int nr_prefetched_words);
172
 
173
extern int print_semantic_function_actual
174
(lf *file, int nr_prefetched_words);
175
 
176
extern int print_semantic_function_type
177
(lf *file);
178
 
179
extern int print_idecode_function_formal
180
(lf *file, int nr_prefetched_words);
181
 
182
extern int print_idecode_function_actual
183
(lf *file, int nr_prefetched_words);
184
 
185
typedef enum {
186
  function_name_prefix_semantics,
187
  function_name_prefix_idecode,
188
  function_name_prefix_itable,
189
  function_name_prefix_icache,
190
  function_name_prefix_engine,
191
  function_name_prefix_none
192
} lf_function_name_prefixes;
193
 
194
typedef enum {
195
  is_function_declaration = 0,
196
  is_function_definition = 1,
197
  is_function_variable,
198
} function_decl_type;
199
 
200
extern int print_function_name
201
(lf *file,
202
 const char *basename,
203
 const char *format_name,
204
 const char *model_name,
205
 opcode_bits *expanded_bits,
206
 lf_function_name_prefixes prefix);
207
 
208
extern void print_my_defines
209
(lf *file,
210
 const char *basename,
211
 const char *format_name,
212
 opcode_bits *expanded_bits);
213
 
214
extern void print_itrace
215
(lf *file,
216
 insn_entry *insn,
217
 int idecode);
218
 
219
extern void print_sim_engine_abort
220
(lf *file,
221
 const char *message);
222
 
223
 
224
extern void print_include (lf *file, igen_module module);
225
extern void print_include_inline  (lf *file, igen_module module);
226
extern void print_includes (lf *file);
227
 

powered by: WebSVN 2.1.0

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