Lines Matching +full:1 +full:- +full:3
4 #define YYDEBUG 1
10 #define IN_EXPR_Y 1
12 #include "expr-bison.h"
18 %parse-param { double *final_val }
19 %parse-param { struct expr_parse_ctx *ctx }
20 %parse-param { bool compute_ids }
21 %parse-param {void *scanner}
22 %lex-param {void* scanner}
50 %left '-' '+'
75 /* During computing ids, does val represent a constant (non-BOTTOM) value? */
126 * If we're not computing ids or $1 and $3 are constants, compute the new
128 * ids for non-constants union the set of IDs that must be computed.
150 ctx->ids = ids__union($1.ids, ctx->ids);
153 *final_val = $1.val;
159 if (fpclassify($3.val) == FP_ZERO) {
166 ids__free($1.ids);
167 ids__free($3.ids);
168 } else if (!compute_ids || is_const($3.val)) {
171 * ids are being computed and the IF expr is a non-zero
174 $$.val = $1.val;
175 $$.ids = $1.ids;
176 ids__free($3.ids);
178 } else if ($1.val == $5.val) {
183 $$.val = $1.val;
185 ids__free($1.ids);
186 ids__free($3.ids);
193 $$ = union_expr($1, union_expr($3, $5));
201 $$.val = $1;
204 | ID { $$ = handle_id(ctx, $1, compute_ids, /*source_count=*/false); }
205 | SOURCE_COUNT '(' ID ')' { $$ = handle_id(ctx, $3, compute_ids, /*source_count=*/true); }
208 $$.val = expr__has_event(ctx, compute_ids, $3);
210 free($3);
214 $$.val = expr__strcmp_cpuid_str(ctx, compute_ids, $3);
216 free($3);
220 if (is_const($1.val) && is_const($3.val)) {
221 assert($1.ids == NULL);
222 assert($3.ids == NULL);
224 $$.val = (fpclassify($1.val) == FP_ZERO && fpclassify($3.val) == FP_ZERO) ? 0 : 1;
225 } else if (is_const($1.val)) {
226 assert($1.ids == NULL);
227 if (fpclassify($1.val) == FP_ZERO) {
228 $$ = $3;
230 $$.val = 1;
232 ids__free($3.ids);
234 } else if (is_const($3.val)) {
235 assert($3.ids == NULL);
236 if (fpclassify($3.val) == FP_ZERO) {
237 $$ = $1;
239 $$.val = 1;
241 ids__free($1.ids);
244 $$ = union_expr($1, $3);
249 if (is_const($1.val) && is_const($3.val)) {
250 assert($1.ids == NULL);
251 assert($3.ids == NULL);
252 $$.val = (fpclassify($1.val) != FP_ZERO && fpclassify($3.val) != FP_ZERO) ? 1 : 0;
254 } else if (is_const($1.val)) {
255 assert($1.ids == NULL);
256 if (fpclassify($1.val) != FP_ZERO) {
257 $$ = $3;
261 ids__free($3.ids);
263 } else if (is_const($3.val)) {
264 assert($3.ids == NULL);
265 if (fpclassify($3.val) != FP_ZERO) {
266 $$ = $1;
270 ids__free($1.ids);
273 $$ = union_expr($1, $3);
278 if (is_const($1.val) && is_const($3.val)) {
279 assert($1.ids == NULL);
280 assert($3.ids == NULL);
281 $$.val = (fpclassify($1.val) == FP_ZERO) != (fpclassify($3.val) == FP_ZERO) ? 1 : 0;
284 $$ = union_expr($1, $3);
287 | expr '<' expr { BINARY_OP($$, <, $1, $3); }
288 | expr '>' expr { BINARY_OP($$, >, $1, $3); }
289 | expr '+' expr { BINARY_OP($$, +, $1, $3); }
290 | expr '-' expr { BINARY_OP($$, -, $1, $3); }
291 | expr '*' expr { BINARY_OP($$, *, $1, $3); }
294 if (fpclassify($3.val) == FP_ZERO) {
296 assert($3.ids == NULL);
298 ids__free($1.ids);
301 } else if (!compute_ids || (is_const($1.val) && is_const($3.val))) {
302 assert($1.ids == NULL);
303 assert($3.ids == NULL);
304 $$.val = $1.val / $3.val;
308 $$ = union_expr($1, $3);
313 if (fpclassify($3.val) == FP_ZERO) {
316 } else if (!compute_ids || (is_const($1.val) && is_const($3.val))) {
317 assert($1.ids == NULL);
318 assert($3.ids == NULL);
319 $$.val = (long)$1.val % (long)$3.val;
323 $$ = union_expr($1, $3);
336 ids__free($3.ids);
337 } else if (!compute_ids || (is_const($3.val) && is_const($5.val))) {
338 assert($3.ids == NULL);
340 $$.val = $3.val / $5.val;
344 $$ = union_expr($3, $5);
347 | '-' expr %prec NEG
349 $$.val = -$2.val;
359 $$.val = $3.val < $5.val ? $3.val : $5.val;
362 $$ = union_expr($3, $5);
368 $$.val = $3.val > $5.val ? $3.val : $5.val;
371 $$ = union_expr($3, $5);
376 $$.val = $1;