1#ifndef BACKENDS_P4TOOLS_MODULES_SMITH_COMMON_PROBABILITIES_H_
2#define BACKENDS_P4TOOLS_MODULES_SMITH_COMMON_PROBABILITIES_H_
6static struct Probabilities {
8 uint16_t ASSIGNMENTORMETHODCALLSTATEMENT_ASSIGN = 75;
9 uint16_t ASSIGNMENTORMETHODCALLSTATEMENT_METHOD_CALL = 25;
11 uint16_t ASSIGNMENTORMETHODCALLSTATEMENT_ASSIGN_BIT = 100;
12 uint16_t ASSIGNMENTORMETHODCALLSTATEMENT_ASSIGN_STRUCTLIKE = 0;
14 uint16_t ASSIGNMENTORMETHODCALLSTATEMENT_METHOD_ACTION = 44;
15 uint16_t ASSIGNMENTORMETHODCALLSTATEMENT_METHOD_FUNCTION = 45;
16 uint16_t ASSIGNMENTORMETHODCALLSTATEMENT_METHOD_TABLE = 10;
17 uint16_t ASSIGNMENTORMETHODCALLSTATEMENT_METHOD_CTRL = 5;
18 uint16_t ASSIGNMENTORMETHODCALLSTATEMENT_METHOD_BUILT_IN = 1;
21 uint16_t STATEMENT_SWITCH = 5;
22 uint16_t STATEMENT_ASSIGNMENTORMETHODCALL = 85;
23 uint16_t STATEMENT_IF = 3;
24 uint16_t STATEMENT_RETURN = 2;
25 uint16_t STATEMENT_EXIT = 0;
26 uint16_t STATEMENT_BLOCK = 2;
28 uint16_t STATEMENT_FOR = 1;
29 uint16_t STATEMENT_FOR_IN = 1;
32 uint16_t SCOPE_LVAL_PATH = 90;
33 uint16_t SCOPE_LVAL_SLICE = 10;
36 uint16_t STATEMENTORDECLARATION_VAR = 10;
37 uint16_t STATEMENTORDECLARATION_CONSTANT = 10;
38 uint16_t STATEMENTORDECLARATION_STATEMENT = 80;
41 uint16_t EXPRESSION_BIT_UNARY_NEG = 20;
42 uint16_t EXPRESSION_BIT_UNARY_CMPL = 20;
43 uint16_t EXPRESSION_BIT_UNARY_CAST = 10;
44 uint16_t EXPRESSION_BIT_UNARY_FUNCTION = 50;
46 uint16_t EXPRESSION_BIT_BINARY_MUL = 5;
47 uint16_t EXPRESSION_BIT_BINARY_DIV = 5;
48 uint16_t EXPRESSION_BIT_BINARY_MOD = 5;
49 uint16_t EXPRESSION_BIT_BINARY_ADD = 10;
50 uint16_t EXPRESSION_BIT_BINARY_SUB = 10;
51 uint16_t EXPRESSION_BIT_BINARY_ADDSAT = 10;
52 uint16_t EXPRESSION_BIT_BINARY_SUBSAT = 10;
53 uint16_t EXPRESSION_BIT_BINARY_LSHIFT = 5;
54 uint16_t EXPRESSION_BIT_BINARY_RSHIFT = 5;
55 uint16_t EXPRESSION_BIT_BINARY_BAND = 10;
56 uint16_t EXPRESSION_BIT_BINARY_BOR = 10;
57 uint16_t EXPRESSION_BIT_BINARY_BXOR = 10;
58 uint16_t EXPRESSION_BIT_BINARY_CONCAT = 5;
60 uint16_t EXPRESSION_BIT_BINARY_SLICE = 50;
61 uint16_t EXPRESSION_BIT_BINARY_MUX = 50;
63 uint16_t EXPRESSION_BIT_VAR = 20;
64 uint16_t EXPRESSION_BIT_INT_LITERAL = 5;
65 uint16_t EXPRESSION_BIT_BIT_LITERAL = 25;
66 uint16_t EXPRESSION_BIT_UNARY = 10;
67 uint16_t EXPRESSION_BIT_BINARY = 20;
68 uint16_t EXPRESSION_BIT_TERNARY = 10;
71 uint16_t EXPRESSION_INT_UNARY_NEG = 20;
72 uint16_t EXPRESSION_INT_UNARY_CMPL = 20;
73 uint16_t EXPRESSION_INT_UNARY_FUNCTION = 50;
75 uint16_t EXPRESSION_INT_BINARY_MUL = 5;
76 uint16_t EXPRESSION_INT_BINARY_DIV = 5;
77 uint16_t EXPRESSION_INT_BINARY_MOD = 5;
78 uint16_t EXPRESSION_INT_BINARY_ADD = 10;
79 uint16_t EXPRESSION_INT_BINARY_SUB = 10;
80 uint16_t EXPRESSION_INT_BINARY_LSHIFT = 0;
81 uint16_t EXPRESSION_INT_BINARY_RSHIFT = 0;
82 uint16_t EXPRESSION_INT_BINARY_BAND = 10;
83 uint16_t EXPRESSION_INT_BINARY_BOR = 10;
84 uint16_t EXPRESSION_INT_BINARY_BXOR = 10;
86 uint16_t EXPRESSION_INT_BINARY_MUX = 50;
88 uint16_t EXPRESSION_INT_VAR = 20;
89 uint16_t EXPRESSION_INT_INT_LITERAL = 5;
90 uint16_t EXPRESSION_INT_UNARY = 10;
91 uint16_t EXPRESSION_INT_BINARY = 20;
94 uint16_t EXPRESSION_BOOLEAN_VAR = 15;
95 uint16_t EXPRESSION_BOOLEAN_LITERAL = 20;
96 uint16_t EXPRESSION_BOOLEAN_NOT = 35;
97 uint16_t EXPRESSION_BOOLEAN_LAND = 5;
98 uint16_t EXPRESSION_BOOLEAN_LOR = 5;
99 uint16_t EXPRESSION_BOOLEAN_CMP = 10;
100 uint16_t EXPRESSION_BOOLEAN_FUNCTION = 5;
101 uint16_t EXPRESSION_BOOLEAN_BUILT_IN = 5;
103 uint16_t EXPRESSION_BOOLEAN_CMP_EQU = 50;
104 uint16_t EXPRESSION_BOOLEAN_CMP_NEQ = 50;
107 uint16_t EXPRESSION_STRUCT_VAR = 50;
108 uint16_t EXPRESSION_STRUCT_LITERAL = 30;
109 uint16_t EXPRESSION_STRUCT_FUNCTION = 20;
112 uint16_t P4STATE_TRANSITION_ACCEPT = 50;
113 uint16_t P4STATE_TRANSITION_REJECT = 10;
114 uint16_t P4STATE_TRANSITION_STATE = 30;
115 uint16_t P4STATE_TRANSITION_SELECT = 10;
117 uint16_t BASETYPE_BIT = 50;
118 uint16_t BASETYPE_SIGNED_BIT = 0;
119 uint16_t BASETYPE_VARBIT = 0;
120 uint16_t BASETYPE_INT = 10;
121 uint16_t BASETYPE_ERROR = 0;
122 uint16_t BASETYPE_BOOL = 10;
123 uint16_t BASETYPE_STRING = 0;
124 uint16_t DERIVED_ENUM = 0;
125 uint16_t DERIVED_HEADER = 5;
126 uint16_t DERIVED_HEADER_STACK = 2;
127 uint16_t DERIVED_STRUCT = 5;
128 uint16_t DERIVED_HEADER_UNION = 0;
129 uint16_t DERIVED_TUPLE = 0;
130 uint16_t TYPE_VOID = 0;
131 uint16_t TYPE_MATCH_KIND = 0;
134 uint16_t CONSTANTDECLARATION_TYPE_BASE = 80;
135 uint16_t CONSTANTDECLARATION_TYPE_STRUCT = 0;
137 uint16_t CONSTANTDECLARATION_BASETYPE_BIT = BASETYPE_BIT;
138 uint16_t CONSTANTDECLARATION_BASETYPE_SIGNED_BIT = BASETYPE_SIGNED_BIT;
139 uint16_t CONSTANTDECLARATION_BASETYPE_VARBIT = BASETYPE_VARBIT;
140 uint16_t CONSTANTDECLARATION_BASETYPE_INT = BASETYPE_INT;
141 uint16_t CONSTANTDECLARATION_BASETYPE_ERROR = BASETYPE_ERROR;
142 uint16_t CONSTANTDECLARATION_BASETYPE_BOOL = BASETYPE_BOOL;
143 uint16_t CONSTANTDECLARATION_BASETYPE_STRING = BASETYPE_STRING;
144 uint16_t CONSTANTDECLARATION_DERIVED_ENUM = DERIVED_ENUM;
145 uint16_t CONSTANTDECLARATION_DERIVED_HEADER = DERIVED_HEADER;
146 uint16_t CONSTANTDECLARATION_DERIVED_HEADER_STACK = 0;
147 uint16_t CONSTANTDECLARATION_DERIVED_STRUCT = DERIVED_STRUCT;
148 uint16_t CONSTANTDECLARATION_DERIVED_HEADER_UNION = DERIVED_HEADER_UNION;
149 uint16_t CONSTANTDECLARATION_DERIVED_TUPLE = DERIVED_TUPLE;
150 uint16_t CONSTANTDECLARATION_TYPE_VOID = TYPE_VOID;
151 uint16_t CONSTANTDECLARATION_TYPE_MATCH_KIND = TYPE_MATCH_KIND;
154 uint16_t FUNCTIONDECLARATION_TYPE_BASE = 90;
155 uint16_t FUNCTIONDECLARATION_TYPE_STRUCT = 9;
157 uint16_t FUNCTIONDECLARATION_BASETYPE_BIT = BASETYPE_BIT;
158 uint16_t FUNCTIONDECLARATION_BASETYPE_SIGNED_BIT = BASETYPE_SIGNED_BIT;
159 uint16_t FUNCTIONDECLARATION_BASETYPE_VARBIT = BASETYPE_VARBIT;
160 uint16_t FUNCTIONDECLARATION_BASETYPE_INT = 0;
161 uint16_t FUNCTIONDECLARATION_BASETYPE_ERROR = BASETYPE_ERROR;
162 uint16_t FUNCTIONDECLARATION_BASETYPE_BOOL = BASETYPE_BOOL;
163 uint16_t FUNCTIONDECLARATION_BASETYPE_STRING = BASETYPE_STRING;
164 uint16_t FUNCTIONDECLARATION_DERIVED_ENUM = DERIVED_ENUM;
165 uint16_t FUNCTIONDECLARATION_DERIVED_HEADER = DERIVED_HEADER;
167 uint16_t FUNCTIONDECLARATION_DERIVED_HEADER_STACK = 0;
168 uint16_t FUNCTIONDECLARATION_DERIVED_STRUCT = DERIVED_STRUCT;
169 uint16_t FUNCTIONDECLARATION_DERIVED_HEADER_UNION = DERIVED_HEADER_UNION;
170 uint16_t FUNCTIONDECLARATION_DERIVED_TUPLE = DERIVED_TUPLE;
171 uint16_t FUNCTIONDECLARATION_TYPE_VOID = 1;
172 uint16_t FUNCTIONDECLARATION_TYPE_MATCH_KIND = TYPE_MATCH_KIND;
175 uint16_t HEADERTYPEDECLARATION_FIELD_BASE = 100;
176 uint16_t HEADERTYPEDECLARATION_FIELD_STRUCT = 0;
178 uint16_t HEADERTYPEDECLARATION_BASETYPE_BIT = BASETYPE_BIT;
179 uint16_t HEADERTYPEDECLARATION_BASETYPE_SIGNED_BIT = BASETYPE_SIGNED_BIT;
180 uint16_t HEADERTYPEDECLARATION_BASETYPE_VARBIT = BASETYPE_VARBIT;
181 uint16_t HEADERTYPEDECLARATION_BASETYPE_INT = 0;
182 uint16_t HEADERTYPEDECLARATION_BASETYPE_ERROR = BASETYPE_ERROR;
183 uint16_t HEADERTYPEDECLARATION_BASETYPE_BOOL = 0;
184 uint16_t HEADERTYPEDECLARATION_BASETYPE_STRING = BASETYPE_STRING;
185 uint16_t HEADERTYPEDECLARATION_DERIVED_ENUM = DERIVED_ENUM;
186 uint16_t HEADERTYPEDECLARATION_DERIVED_HEADER = 0;
187 uint16_t HEADERTYPEDECLARATION_DERIVED_HEADER_STACK = 0;
189 uint16_t HEADERTYPEDECLARATION_DERIVED_STRUCT = 0;
190 uint16_t HEADERTYPEDECLARATION_DERIVED_HEADER_UNION = 0;
191 uint16_t HEADERTYPEDECLARATION_DERIVED_TUPLE = 0;
192 uint16_t HEADERTYPEDECLARATION_TYPE_VOID = 0;
193 uint16_t HEADERTYPEDECLARATION_TYPE_MATCH_KIND = 0;
196 uint16_t PARAMETER_DIR_IN = 33;
197 uint16_t PARAMETER_DIR_OUT = 33;
198 uint16_t PARAMETER_DIR_INOUT = 33;
200 uint16_t PARAMETER_BASETYPE_BIT = BASETYPE_BIT;
201 uint16_t PARAMETER_BASETYPE_SIGNED_BIT = BASETYPE_SIGNED_BIT;
202 uint16_t PARAMETER_BASETYPE_VARBIT = BASETYPE_VARBIT;
203 uint16_t PARAMETER_BASETYPE_INT = 0;
204 uint16_t PARAMETER_BASETYPE_ERROR = BASETYPE_ERROR;
205 uint16_t PARAMETER_BASETYPE_BOOL = 0;
206 uint16_t PARAMETER_BASETYPE_STRING = BASETYPE_STRING;
207 uint16_t PARAMETER_DERIVED_ENUM = DERIVED_ENUM;
208 uint16_t PARAMETER_DERIVED_HEADER = DERIVED_HEADER;
209 uint16_t PARAMETER_DERIVED_HEADER_STACK = 0;
210 uint16_t PARAMETER_DERIVED_STRUCT = DERIVED_STRUCT;
211 uint16_t PARAMETER_DERIVED_HEADER_UNION = DERIVED_HEADER_UNION;
212 uint16_t PARAMETER_DERIVED_TUPLE = DERIVED_TUPLE;
213 uint16_t PARAMETER_TYPE_VOID = TYPE_VOID;
214 uint16_t PARAMETER_TYPE_MATCH_KIND = TYPE_MATCH_KIND;
217 uint16_t PARAMETER_NONEDIR_BASETYPE_BIT = PARAMETER_BASETYPE_BIT;
218 uint16_t PARAMETER_NONEDIR_BASETYPE_SIGNED_BIT = PARAMETER_BASETYPE_SIGNED_BIT;
219 uint16_t PARAMETER_NONEDIR_BASETYPE_VARBIT = PARAMETER_BASETYPE_VARBIT;
220 uint16_t PARAMETER_NONEDIR_BASETYPE_INT = PARAMETER_BASETYPE_INT;
221 uint16_t PARAMETER_NONEDIR_BASETYPE_ERROR = PARAMETER_BASETYPE_ERROR;
222 uint16_t PARAMETER_NONEDIR_BASETYPE_BOOL = PARAMETER_BASETYPE_BOOL;
223 uint16_t PARAMETER_NONEDIR_BASETYPE_STRING = PARAMETER_BASETYPE_STRING;
224 uint16_t PARAMETER_NONEDIR_DERIVED_ENUM = PARAMETER_DERIVED_ENUM;
225 uint16_t PARAMETER_NONEDIR_DERIVED_HEADER = PARAMETER_DERIVED_HEADER;
226 uint16_t PARAMETER_NONEDIR_DERIVED_HEADER_STACK = PARAMETER_DERIVED_HEADER_STACK;
227 uint16_t PARAMETER_NONEDIR_DERIVED_HEADER_UNION = DERIVED_HEADER_UNION;
228 uint16_t PARAMETER_NONEDIR_DERIVED_STRUCT = DERIVED_STRUCT;
229 uint16_t PARAMETER_NONEDIR_DERIVED_TUPLE = DERIVED_TUPLE;
230 uint16_t PARAMETER_NONEDIR_TYPE_VOID = TYPE_VOID;
231 uint16_t PARAMETER_NONEDIR_TYPE_MATCH_KIND = TYPE_MATCH_KIND;
234 uint16_t STRUCTTYPEDECLARATION_FIELD_BASE = 75;
235 uint16_t STRUCTTYPEDECLARATION_FIELD_STRUCT = 25;
236 uint16_t STRUCTTYPEDECLARATION_FIELD_STACK = 0;
238 uint16_t STRUCTTYPEDECLARATION_HEADERS_HEADER = 90;
239 uint16_t STRUCTTYPEDECLARATION_HEADERS_STACK = 10;
241 uint16_t STRUCTTYPEDECLARATION_BASETYPE_BIT = BASETYPE_BIT;
242 uint16_t STRUCTTYPEDECLARATION_BASETYPE_SIGNED_BIT = BASETYPE_SIGNED_BIT;
243 uint16_t STRUCTTYPEDECLARATION_BASETYPE_VARBIT = BASETYPE_VARBIT;
244 uint16_t STRUCTTYPEDECLARATION_BASETYPE_INT = 0;
245 uint16_t STRUCTTYPEDECLARATION_BASETYPE_ERROR = BASETYPE_ERROR;
246 uint16_t STRUCTTYPEDECLARATION_BASETYPE_BOOL = BASETYPE_BOOL;
247 uint16_t STRUCTTYPEDECLARATION_BASETYPE_STRING = BASETYPE_STRING;
248 uint16_t STRUCTTYPEDECLARATION_DERIVED_ENUM = DERIVED_ENUM;
249 uint16_t STRUCTTYPEDECLARATION_DERIVED_HEADER = DERIVED_HEADER;
250 uint16_t STRUCTTYPEDECLARATION_DERIVED_HEADER_STACK = DERIVED_HEADER_STACK;
251 uint16_t STRUCTTYPEDECLARATION_DERIVED_STRUCT = DERIVED_STRUCT;
252 uint16_t STRUCTTYPEDECLARATION_DERIVED_HEADER_UNION = DERIVED_HEADER_UNION;
253 uint16_t STRUCTTYPEDECLARATION_DERIVED_TUPLE = DERIVED_TUPLE;
254 uint16_t STRUCTTYPEDECLARATION_TYPE_VOID = 0;
255 uint16_t STRUCTTYPEDECLARATION_TYPE_MATCH_KIND = 0;
257 uint16_t TYPEDECLARATION_HEADER = 75;
258 uint16_t TYPEDECLARATION_STRUCT = 25;
259 uint16_t TYPEDECLARATION_UNION = 0;
262 uint16_t TYPEDEFDECLARATION_BASE = 75;
263 uint16_t TYPEDEFDECLARATION_STRUCTLIKE = 25;
264 uint16_t TYPEDEFDECLARATION_STACK = 0;
266 uint16_t TYPEDEFDECLARATION_BASETYPE_BIT = BASETYPE_BIT;
267 uint16_t TYPEDEFDECLARATION_BASETYPE_SIGNED_BIT = BASETYPE_SIGNED_BIT;
268 uint16_t TYPEDEFDECLARATION_BASETYPE_VARBIT = BASETYPE_VARBIT;
269 uint16_t TYPEDEFDECLARATION_BASETYPE_INT = 0;
270 uint16_t TYPEDEFDECLARATION_BASETYPE_ERROR = BASETYPE_ERROR;
271 uint16_t TYPEDEFDECLARATION_BASETYPE_BOOL = 0;
272 uint16_t TYPEDEFDECLARATION_BASETYPE_STRING = BASETYPE_STRING;
273 uint16_t TYPEDEFDECLARATION_DERIVED_ENUM = DERIVED_ENUM;
274 uint16_t TYPEDEFDECLARATION_DERIVED_HEADER = DERIVED_HEADER;
275 uint16_t TYPEDEFDECLARATION_DERIVED_HEADER_STACK = DERIVED_HEADER_STACK;
276 uint16_t TYPEDEFDECLARATION_STRUCT = DERIVED_STRUCT;
277 uint16_t TYPEDEFDECLARATION_HEADER_UNION = DERIVED_HEADER_UNION;
278 uint16_t TYPEDEFDECLARATION_TUPLE = DERIVED_TUPLE;
279 uint16_t TYPEDEFDECLARATION_TYPE_VOID = TYPE_VOID;
280 uint16_t TYPEDEFDECLARATION_TYPE_MATCH_KIND = TYPE_MATCH_KIND;
283 uint16_t VARIABLEDECLARATION_TYPE_BASE = 80;
284 uint16_t VARIABLEDECLARATION_TYPE_STRUCT = 15;
285 uint16_t VARIABLEDECLARATION_TYPE_STACK = 5;
287 uint16_t VARIABLEDECLARATION_BASETYPE_BIT = BASETYPE_BIT;
288 uint16_t VARIABLEDECLARATION_BASETYPE_SIGNED_BIT = BASETYPE_SIGNED_BIT;
289 uint16_t VARIABLEDECLARATION_BASETYPE_VARBIT = BASETYPE_VARBIT;
290 uint16_t VARIABLEDECLARATION_BASETYPE_INT = 0;
291 uint16_t VARIABLEDECLARATION_BASETYPE_ERROR = BASETYPE_ERROR;
292 uint16_t VARIABLEDECLARATION_BASETYPE_BOOL = BASETYPE_BOOL;
293 uint16_t VARIABLEDECLARATION_BASETYPE_STRING = BASETYPE_STRING;
294 uint16_t VARIABLEDECLARATION_DERIVED_ENUM = DERIVED_ENUM;
295 uint16_t VARIABLEDECLARATION_DERIVED_HEADER = DERIVED_HEADER;
296 uint16_t VARIABLEDECLARATION_DERIVED_HEADER_STACK = DERIVED_HEADER_STACK;
297 uint16_t VARIABLEDECLARATION_DERIVED_STRUCT = DERIVED_STRUCT;
298 uint16_t VARIABLEDECLARATION_DERIVED_HEADER_UNION = DERIVED_HEADER_UNION;
299 uint16_t VARIABLEDECLARATION_DERIVED_TUPLE = DERIVED_TUPLE;
300 uint16_t VARIABLEDECLARATION_TYPE_VOID = TYPE_VOID;
301 uint16_t VARIABLEDECLARATION_TYPE_MATCH_KIND = TYPE_MATCH_KIND;
304static struct Declarations {
306 uint16_t MIN_TYPE = 1;
307 uint16_t MAX_TYPE = 8;
310 uint16_t BLOCKSTATEMENT_MIN_STAT = 3;
311 uint16_t BLOCKSTATEMENT_MAX_STAT = 10;
314 uint16_t MIN_CALLABLES = 0;
315 uint16_t MAX_CALLABLES = 4;
318 uint16_t MIN_VAR = 0;
319 uint16_t MAX_VAR = 5;
321 uint16_t MIN_INSTANCE = 0;
322 uint16_t MAX_INSTANCE = 2;
324 uint16_t MIN_ACTION = 0;
325 uint16_t MAX_ACTION = 2;
327 uint16_t MIN_TABLE = 0;
328 uint16_t MAX_TABLE = 3;