9621 Make createtxg and guid properties public
[unleashed.git] / usr / src / cmd / geniconvtbl / itm_comp.y
blob580211788c04e6026ec50ac40416fc569bb54a8f
1 %{
2 /*
3 * CDDL HEADER START
5 * The contents of this file are subject to the terms of the
6 * Common Development and Distribution License, Version 1.0 only
7 * (the "License"). You may not use this file except in compliance
8 * with the License.
10 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
11 * or http://www.opensolaris.org/os/licensing.
12 * See the License for the specific language governing permissions
13 * and limitations under the License.
15 * When distributing Covered Code, include this CDDL HEADER in each
16 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
17 * If applicable, add the following below this CDDL HEADER, with the
18 * fields enclosed by brackets "[]" replaced with your own identifying
19 * information: Portions Copyright [yyyy] [name of copyright owner]
21 * CDDL HEADER END
23 * Copyright (c) 1999 by Sun Microsystems, Inc.
24 * All rights reserved.
27 #pragma ident "%Z%%M% %I% %E% SMI"
29 #include <stdio.h>
30 #include <stdlib.h>
31 #include <ctype.h>
32 #include <libintl.h>
33 #include <errno.h>
35 #include "iconv_tm.h"
36 #include "itmcomp.h"
37 #include "itm_util.h"
41 %start itm_def
43 %union yystacktype
45 int intval;
47 itm_num_t num;
48 itm_data_t *name;
49 itm_data_t *data;
51 itm_tbl_hdr_t *tbl_hdr;
52 itm_direc_t *direc_unit;
53 itm_expr_t *expr;
55 itmc_action_t action;
56 itmc_obj_t *obj;
57 itmc_map_t *map_list;
58 itmc_ref_t *itmc_ref;
59 itmc_map_attr_t *map_attr;
62 %type <intval> itm_def
63 %type <obj> def_element_list
64 %type <tbl_hdr> def_element
66 %type <tbl_hdr> direction
67 %type <obj> direction_unit_list
68 %type <obj> direction_unit
70 %type <action> action
72 %type <itmc_ref> condition
73 %type <obj> condition_list
74 %type <obj> condition_expr
76 %type <obj> range_list
77 %type <obj> range_pair
79 %type <obj> escseq_list
80 %type <obj> escseq
82 %type <tbl_hdr> map
83 %type <map_list> map_list
84 %type <map_list> map_pair
85 %type <map_attr> map_attribute
86 %type <intval> map_resultlen
87 %type <map_attr> map_type
88 %type <name> map_type_names
90 %type <tbl_hdr> operation
91 %type <obj> op_list
92 %type <obj> op_unit
93 %type <obj> op_if_else
95 %type <data> name
97 %type <expr> expr
98 %type <expr> itm_in
100 %token <name> ITMNAME
101 %token <name> NAME
102 %token <name> MAPTYPE_NAME
103 %token <data> HEXADECIMAL
104 %token <num> DECIMAL
106 %token ITM_DEFAULT
107 %token ITM_IDENTICAL
109 %token BETWEEN
110 %token BREAK
111 %token CONDITION
112 %token DIRECTION
113 %token DISCARD
114 %token ERROR
115 %token ITM_ELSE
116 %token ITM_INIT
117 %token ITM_FALSE
118 %token ITM_IF
119 %token ITM_IN
120 %token ITM_INSIZE
121 %token NOP
122 %token OPERATION
123 %token ITM_OUT
124 %token ITM_OUTSIZE
125 %token PRINTCHR
126 %token PRINTHD
127 %token PRINTINT
128 %token MAP
129 %token RESET
130 %token RETURN
131 %token ITM_TRUE
132 %token ESCAPESEQ
133 %token MAPTYPE
134 %token RESULTLEN
137 %token MAPTYPE_AUTO
138 %token MAPTYPE_INDEX
139 %token MAPTYPE_DENSE
140 %token MAPTYPE_HASH
141 %token MAPTYPE_BINARY
143 %token ELLIPSES
144 %token CBO CBC
145 %token SBO SBC
146 %token PO PC
147 %token SC
148 %token COMMA
149 %token COLON
151 %right ASSIGN
152 %left LOR
153 %left LAND
154 %left OR
155 %left XOR
156 %left AND
157 %left EQ NE
158 %left LT LE GT GE
159 %left SHL SHR
160 %left PLUS MINUS
161 %left MUL DIV MOD
162 %right NOT NEG UMINUS
166 itm_def
167 : ITMNAME CBO def_element_list CBC
169 itm_def_process($1);
173 def_element_list
174 : def_element SC
176 TRACE_MESSAGE('y', ("def_element_list: def_element ;\n"));
177 $$ = NULL;
179 | def_element_list def_element SC
181 TRACE_MESSAGE('y',
182 ("def_element_list: def_element_list def_element ;\n"));
183 $$ = NULL;
187 def_element
188 : direction
190 TRACE_MESSAGE('y', ("def_element: direction\n"));
191 (void) obj_register(ITMC_OBJ_DIREC, (itm_data_t *)($1->name.itm_ptr),
192 $1, $1->size,
193 NULL, OBJ_REG_TAIL);
194 $$ = $1;
196 | condition
198 TRACE_MESSAGE('y', ("def_element: condition\n"));
199 $$ = (itm_tbl_hdr_t *)($1->referencee);
201 | map
203 TRACE_MESSAGE('y', ("def_element: map\n"));
204 if (NULL != $1) {
205 (void) obj_register(ITMC_OBJ_MAP,
206 (itm_data_t *)($1->name.itm_ptr),
207 $1, $1->size,
208 NULL, OBJ_REG_TAIL);
210 $$ = $1;
212 | operation
214 TRACE_MESSAGE('y', ("def_element: operation\n"));
215 (void) obj_register(ITMC_OBJ_OP, (itm_data_t *)($1->name.itm_ptr),
216 $1, $1->size,
217 NULL, OBJ_REG_TAIL);
218 $$ = $1;
222 direction
223 : DIRECTION name CBO direction_unit_list CBC
225 TRACE_MESSAGE('y', ("direction name (direction_unit_list)\n"));
226 $$ = obj_table(ITM_TBL_DIREC, $2,
227 $4, sizeof (itm_direc_t));
229 | DIRECTION CBO direction_unit_list CBC
231 TRACE_MESSAGE('y', ("direction name (direction_unit_list)\n"));
232 $$ = obj_table(ITM_TBL_DIREC, NULL,
233 $3, sizeof (itm_direc_t));
237 direction_unit_list
238 : direction_unit
240 TRACE_MESSAGE('y', ("direction_unit_list: direction_unit\n"));
241 $$ = obj_list_append(NULL, $1);
243 | direction_unit_list direction_unit
245 TRACE_MESSAGE('y', ("direction_unit_list: "
246 "direction_unit_list direction_unit\n"));
247 $$ = obj_list_append($1, $2);
251 direction_unit
252 : condition action SC
254 TRACE_MESSAGE('y', ("direction_unit: condition action ;\n"));
255 $$ = direction_unit($1, NULL, &($2), NULL);
257 | condition name SC
259 itm_direc_t *direc;
260 TRACE_MESSAGE('y', ("direction_unit: condition NAME ;\n"));
261 $$ = direction_unit($1, NULL, NULL, $2);
263 | name action SC
265 itm_direc_t *direc;
266 TRACE_MESSAGE('y', ("direction_unit: NAME action ;\n"));
267 $$ = direction_unit(NULL, $1, &($2), NULL);
269 | name name SC
271 itm_direc_t *direc;
272 TRACE_MESSAGE('y', ("direction_unit: NAME NAME ;\n"));
273 $$ = direction_unit(NULL, $1, NULL, $2);
275 | ITM_TRUE action SC
277 itm_direc_t *direc;
278 $$ = direction_unit(NULL, NULL, &($2), NULL);
280 | ITM_TRUE name SC
282 itm_direc_t *direc;
283 TRACE_MESSAGE('y', ("direction_unit: TRUE NAME ;\n"));
284 $$ = direction_unit(NULL, NULL, NULL, $2);
288 action
289 : direction
291 TRACE_MESSAGE('y', ("action: direction\n"));
292 $$.type = ITMC_OBJ_DIREC;
293 $$.tbl_hdr = $1;
295 | map
297 TRACE_MESSAGE('y', ("action: map\n"));
298 $$.type = ITMC_OBJ_MAP;
299 $$.tbl_hdr = $1;
301 | operation
303 TRACE_MESSAGE('y', ("action: operation\n"));
304 $$.type = ITMC_OBJ_OP;
305 $$.tbl_hdr = $1;
309 condition
310 : CONDITION name CBO condition_list CBC
312 itm_tbl_hdr_t *tbl_hdr;
313 TRACE_MESSAGE('y', ("condition\n"));
314 tbl_hdr = obj_table(ITM_TBL_COND, $2,
315 $4, sizeof (itm_cond_t));
316 $$ = obj_register(ITMC_OBJ_COND, $2,
317 tbl_hdr, tbl_hdr->size,
318 NULL, OBJ_REG_TAIL);
320 | CONDITION CBO condition_list CBC
322 itm_tbl_hdr_t *tbl_hdr;
323 TRACE_MESSAGE('y', ("condition\n"));
324 tbl_hdr = obj_table(ITM_TBL_COND, NULL,
325 $3, sizeof (itm_cond_t));
326 $$ = obj_register(ITMC_OBJ_COND, NULL,
327 tbl_hdr, tbl_hdr->size,
328 NULL, OBJ_REG_TAIL);
332 condition_list
333 : condition_expr SC
335 TRACE_MESSAGE('y', ("condition_list: condition_expr;\n"));
336 $$ = obj_list_append(NULL, $1);
338 | condition_list condition_expr SC
340 TRACE_MESSAGE('y', ("condition_list: "
341 "condition_list condition_expr;\n"));
342 $$ = obj_list_append($1, $2);
346 condition_expr
347 : BETWEEN range_list
349 itm_tbl_hdr_t *range;
350 itm_cond_t *cond;
351 TRACE_MESSAGE('y', ("condition_expr: between\n"));
352 range = range_table(NULL, $2);
353 if (range == NULL) {
354 $$ = NULL;
355 } else {
356 $$ = malloc_vital(sizeof (itmc_obj_t));
357 $$->type = ITMC_OBJ_RANGE;
358 $$->name = NULL;
359 cond = malloc_vital(sizeof (itm_cond_t));
360 $$->obj = cond;
361 cond->type = ITM_COND_BETWEEN;
362 cond->operand.place.itm_ptr = (itm_place2_t)range;
363 $$->ref[0] = obj_register(ITMC_OBJ_RANGE, NULL,
364 range, range->size,
365 &(cond->operand.place),
366 OBJ_REG_TAIL);
367 $$->ref[1] = NULL;
368 $$->ref[2] = NULL;
369 $$->next = $$->last = NULL;
372 | expr
374 itm_cond_t *cond;
375 TRACE_MESSAGE('y', ("condition_expr: expr\n"));
376 $$ = malloc_vital(sizeof (itmc_obj_t));
377 $$->type = ITMC_OBJ_EXPR;
378 $$->name = NULL;
379 cond = malloc_vital(sizeof (itm_cond_t));
380 $$->obj = cond;
381 cond->type = ITM_COND_EXPR;
382 cond->operand.place.itm_ptr = (itm_place2_t)($1);
383 $$->ref[0] = obj_register(ITMC_OBJ_EXPR, NULL,
384 $1, sizeof (itm_expr_t),
385 &(cond->operand.place),
386 OBJ_REG_TAIL);
387 $$->ref[1] = NULL;
388 $$->ref[2] = NULL;
389 $$->next = $$->last = NULL;
391 | ESCAPESEQ escseq_list
393 itm_tbl_hdr_t *escseq;
394 itm_cond_t *cond;
395 TRACE_MESSAGE('y', ("condition_expr: escseq {escseq_list;}\n"));
396 escseq = escseq_table(NULL, $2);
397 if (escseq == NULL) {
398 $$ = NULL;
399 } else {
400 $$ = malloc_vital(sizeof (itmc_obj_t));
401 $$->type = ITMC_OBJ_ESCAPESEQ;
402 $$->name = NULL;
403 cond = malloc_vital(sizeof (itm_cond_t));
404 $$->obj = cond;
405 cond->type = ITM_COND_ESCAPESEQ;
406 cond->operand.place.itm_ptr = (itm_place2_t)escseq;
407 $$->ref[0] = obj_register(ITMC_OBJ_ESCAPESEQ, NULL,
408 escseq, escseq->size,
409 &(cond->operand.place),
410 OBJ_REG_TAIL);
411 $$->ref[1] = NULL;
412 $$->ref[2] = NULL;
413 $$->next = $$->last = NULL;
418 range_list
419 : range_pair
421 TRACE_MESSAGE('y', ("range_list: range_pair\n"));
422 $$ = obj_list_append(NULL, $1);
424 | range_list COMMA range_pair
426 TRACE_MESSAGE('y', ("range_list: range_list, range_pair\n"));
427 $$ = obj_list_append($1, $3);
431 range_pair
432 : HEXADECIMAL ELLIPSES HEXADECIMAL
434 itmc_data_pair_t *range;
435 TRACE_MESSAGE('y', ("range_pair: HEXADECIMAL...HEXADECIMAL\n"));
436 $$ = malloc_vital(sizeof (itmc_obj_t));
437 $$->type = ITMC_OBJ_RANGE;
438 $$->name = NULL;
439 range = malloc_vital(sizeof (itmc_data_pair_t));
440 $$->obj = range;
441 if (data_compare($1, $3) < 0) {
442 range->data0 = *($1);
443 range->data1 = *($3);
444 } else {
445 range->data0 = *($3);
446 range->data1 = *($1);
450 escseq_list
451 : escseq
453 TRACE_MESSAGE('y', ("escseq_list: escseq\n"));
454 $$ = obj_list_append(NULL, $1);
456 | escseq_list COMMA escseq
458 TRACE_MESSAGE('y', ("escseq_list: escseq_list; escseq\n"));
459 $$ = obj_list_append($1, $3);
463 escseq
464 : HEXADECIMAL
466 itm_data_t *escseq;
467 TRACE_MESSAGE('y', ("escseq: HEXADECIMAL\n"));
468 $$ = malloc_vital(sizeof (itmc_obj_t));
469 $$->type = ITMC_OBJ_ESCAPESEQ;
470 $$->name = NULL;
471 escseq = malloc_vital(sizeof (itm_data_t));
472 $$->obj = escseq;
473 *escseq = *($1);
477 map : MAP name CBO map_list CBC
479 TRACE_MESSAGE('y', ("map: map name {map_list}\n"));
480 $$ = map_table($2, $4, NULL);
482 | MAP CBO map_list CBC
484 TRACE_MESSAGE('y', ("map: map {map_list}\n"));
485 $$ = map_table(NULL, $3, NULL);
487 | MAP name map_attribute CBO map_list CBC
489 TRACE_MESSAGE('y', ("map: map name attribute {map_list}\n"));
490 $$ = map_table($2, $5, $3);
492 | MAP map_attribute CBO map_list CBC
494 TRACE_MESSAGE('y', ("map: map attribute {map_list}\n"));
495 $$ = map_table(NULL, $4, $2);
499 map_attribute
500 :map_type COMMA map_resultlen
502 TRACE_MESSAGE('y', ("map_attribute: map_type map_resultlen\n"));
503 $$ = $1;
504 $$->resultlen = $3;
506 |map_type
508 TRACE_MESSAGE('y', ("map_attribute: map_type\n"));
509 $$ = $1;
510 $$->resultlen = 0;
512 |map_resultlen COMMA map_type
514 TRACE_MESSAGE('y', ("map_attribute: map_resultlen map_type\n"));
515 $$ = $3;
516 $$->resultlen = $1;
518 |map_resultlen
520 TRACE_MESSAGE('y', ("map_attribute: map_resultlen\n"));
521 $$ = malloc_vital(sizeof (itmc_map_attr_t));
522 $$->resultlen = $1;
523 $$->type = NULL;
524 $$->hash_factor = 0;
528 map_type
529 : MAPTYPE ASSIGN map_type_names COLON DECIMAL
531 TRACE_MESSAGE('y', ("map_type: maptype=type:factor(%d)\n",
532 $5));
533 $$ = malloc_vital(sizeof (itmc_map_attr_t));
534 $$->type = $3;
535 $$->hash_factor = $5;
537 | MAPTYPE ASSIGN map_type_names
539 TRACE_MESSAGE('y', ("map_type: maptype=type\n"));
540 $$ = malloc_vital(sizeof (itmc_map_attr_t));
541 $$->type = $3;
542 $$->hash_factor = 0;
546 map_type_names
547 : MAPTYPE_NAME
549 TRACE_MESSAGE('y', ("map_type_names: size=%*s\n",
550 yylval.data->size, NSPTR(yylval.data)));
551 $$ = yylval.data;
556 map_resultlen
557 : RESULTLEN ASSIGN DECIMAL
559 TRACE_MESSAGE('y', ("map_resultlen(%d)\n", $3));
560 $$ = $3;
564 map_list
565 : map_pair
567 TRACE_MESSAGE('y', ("map_list: map_pair\n"));
568 $$ = map_list_append(NULL, $1);
570 | map_list map_pair
572 TRACE_MESSAGE('y', ("map_list: map_list map_pair\n"));
573 $$ = map_list_append($1, $2);
577 map_pair
578 : HEXADECIMAL HEXADECIMAL
580 TRACE_MESSAGE('y', ("map_pair: HEXADECIMAL HEXADECIMAL\n"));
581 $$ = malloc_vital(sizeof (itmc_map_t));
582 $$->data_pair.data0 = *($1);
583 free($1);
584 $$->data_pair.data1 = *($2);
585 free($2);
587 | HEXADECIMAL ELLIPSES HEXADECIMAL HEXADECIMAL
589 TRACE_MESSAGE('y', ("map_pair: "
590 "HEXADECIMAL ELLIPSES HEXADECIMAL\n"));
591 $$ = malloc_vital(sizeof (itmc_map_t));
592 $$->data_pair.data0 = *($1);
593 $$->data_pair.range = *($3);
594 free($1);
595 free($3);
596 $$->data_pair.data1 = *($4);
597 free($4);
599 | ITM_DEFAULT HEXADECIMAL
601 TRACE_MESSAGE('y', ("map_pair: default HEXADECIMAL\n"));
602 $$ = malloc_vital(sizeof (itmc_map_t));
603 $$->data_pair.data0.size = 0;
604 $$->data_pair.data1 = *($2);
605 free($2);
607 | ITM_DEFAULT ITM_IDENTICAL
609 TRACE_MESSAGE('y', ("map_pair: default default\n"));
610 $$ = malloc_vital(sizeof (itmc_map_t));
611 $$->data_pair.data0.size = 0;
612 $$->data_pair.data1.size = 0;
614 | HEXADECIMAL ERROR /* NO RANGE */
616 TRACE_MESSAGE('y', ("map_pair: hexadecimal error\n"));
617 $$ = malloc_vital(sizeof (itmc_map_t));
618 $$->data_pair.data0 = *($1);
619 free($1);
620 $$->data_pair.data1.size = 0;
624 operation
625 : OPERATION name CBO op_list CBC
627 TRACE_MESSAGE('y', ("operation: operation name {op_list}\n"));
628 $$ = obj_table(ITM_TBL_OP, $2,
629 $4, sizeof (itm_op_t));
631 | OPERATION CBO op_list CBC
633 TRACE_MESSAGE('y', ("operation: operation {op_list}\n"));
634 $$ = obj_table(ITM_TBL_OP, NULL,
635 $3, sizeof (itm_op_t));
637 | OPERATION ITM_INIT CBO op_list CBC
639 TRACE_MESSAGE('y', ("operation: operation init {op_list}\n"));
640 $$ = obj_table(ITM_TBL_OP_INIT, NULL,
641 $4, sizeof (itm_op_t));
643 | OPERATION RESET CBO op_list CBC
645 TRACE_MESSAGE('y', ("operation: operation reset {op_list}\n"));
646 $$ = obj_table(ITM_TBL_OP_RESET, NULL,
647 $4, sizeof (itm_op_t));
651 op_list : op_unit
653 TRACE_MESSAGE('y', ("op_list: op_unit\n"));
654 $$ = obj_list_append(NULL, $1);
656 | op_list op_unit
658 TRACE_MESSAGE('y', ("op_list: op_list op_unit\n"));
659 $$ = obj_list_append($1, $2);
663 op_unit : /* */ SC
665 TRACE_MESSAGE('y', ("op_unit: / *null */;\n"));
666 $$ = NULL;
668 | expr SC
670 TRACE_MESSAGE('y', ("op_unit: expr;\n"));
671 $$ = op_unary(ITM_OP_EXPR, $1, sizeof (itm_expr_t));
673 | ERROR SC
675 TRACE_MESSAGE('y', ("expr: error;\n"));
676 $$ = op_self_num(ITM_OP_ERROR_D, EINVAL);
678 | ERROR expr SC
680 TRACE_MESSAGE('y', ("expr: error;\n"));
681 if (ITM_EXPR_INT == $2->type) {
682 $$ = op_self_num(ITM_OP_ERROR_D, $2->data.itm_exnum);
683 } else {
684 $$ = op_unary(ITM_OP_ERROR, $2, sizeof (itm_expr_t));
687 | DISCARD SC
689 TRACE_MESSAGE('y', ("discard expr;\n"));
690 $$ = op_self_num(ITM_OP_DISCARD_D, 1);
692 | DISCARD expr SC
694 TRACE_MESSAGE('y', ("discard expr;\n"));
695 if (ITM_EXPR_INT == $2->type) {
696 $$ = op_self_num(ITM_OP_DISCARD_D, $2->data.itm_exnum);
697 } else {
698 $$ = op_unary(ITM_OP_DISCARD, $2, sizeof (itm_expr_t));
701 | ITM_OUT ASSIGN expr SC
703 TRACE_MESSAGE('y', ("out = expr;\n"));
704 switch ($3->type) {
705 case ITM_EXPR_INT:
706 $$ = op_unary(ITM_OP_OUT_D, $3, sizeof (itm_expr_t));
707 break;
708 case ITM_EXPR_SEQ:
709 $$ = op_unary(ITM_OP_OUT_S, $3, sizeof (itm_expr_t));
710 break;
711 case ITM_EXPR_REG:
712 $$ = op_unary(ITM_OP_OUT_R, $3, sizeof (itm_expr_t));
713 break;
714 case ITM_EXPR_IN_VECTOR_D:
715 $$ = op_unary(ITM_OP_OUT_INVD, $3, sizeof (itm_expr_t));
716 break;
717 default:
718 $$ = op_unary(ITM_OP_OUT, $3, sizeof (itm_expr_t));
719 break;
722 | DIRECTION name SC
724 itm_op_t *op;
725 TRACE_MESSAGE('y', ("direction NAME;\n"));
726 $$ = op_unit(ITM_OP_DIRECTION, NULL, 0, NULL, 0, NULL, 0);
727 op = (itm_op_t *)($$->obj);
728 op->data.operand[0].itm_ptr = (itm_place2_t)($2);
729 $$->ref[0] = obj_register(ITMC_OBJ_DIREC, $2,
730 NULL, 0,
731 &(op->data.operand[0]), OBJ_REG_TAIL);
733 | OPERATION name SC
735 itm_op_t *op;
736 TRACE_MESSAGE('y', ("operation NAME;\n"));
737 $$ = op_unit(ITM_OP_OPERATION, NULL, 0, NULL, 0, NULL, 0);
738 op = (itm_op_t *)($$->obj);
739 op->data.operand[0].itm_ptr = (itm_place2_t)($2);
740 $$->ref[0] = obj_register(ITMC_OBJ_OP, $2,
741 NULL, 0,
742 &(op->data.operand[0]), OBJ_REG_TAIL);
744 | OPERATION ITM_INIT SC
746 itm_op_t *op;
747 TRACE_MESSAGE('y', ("operation init;\n"));
748 $$ = op_self(ITM_OP_INIT);
750 | OPERATION RESET SC
752 itm_op_t *op;
753 TRACE_MESSAGE('y', ("operation reset;\n"));
754 $$ = op_self(ITM_OP_RESET);
756 | MAP name SC
758 itm_op_t *op;
759 TRACE_MESSAGE('y', ("map NAME;\n"));
760 $$ = op_unit(ITM_OP_MAP, NULL, 0, NULL, 0, NULL, 0);
761 op = (itm_op_t *)($$->obj);
762 op->data.operand[0].itm_ptr = (itm_place2_t)($2);
763 $$->ref[0] = obj_register(ITMC_OBJ_MAP, $2,
764 NULL, 0,
765 &(op->data.operand[0]), OBJ_REG_TAIL);
767 | MAP name expr SC
769 itm_op_t *op;
770 TRACE_MESSAGE('y', ("map NAME expr;\n"));
771 $$ = op_unit(ITM_OP_MAP, NULL, 0, $3,
772 sizeof (itm_expr_t), NULL, 0);
773 op = (itm_op_t *)($$->obj);
774 op->data.operand[0].itm_ptr = (itm_place2_t)($2);
775 $$->ref[0] = obj_register(ITMC_OBJ_MAP, $2,
776 NULL, 0,
777 &(op->data.operand[0]), OBJ_REG_TAIL);
779 | op_if_else
781 TRACE_MESSAGE('y', ("op_unit: op_if_else\n"));
782 $$ = $1;
784 | BREAK SC
786 TRACE_MESSAGE('y', ("break;\n"));
787 $$ = op_self(ITM_OP_BREAK);
789 | RETURN SC
791 TRACE_MESSAGE('y', ("return;\n"));
792 $$ = op_self(ITM_OP_RETURN);
794 | PRINTCHR expr SC
796 TRACE_MESSAGE('y', ("printchr expr;\n"));
797 $$ = op_unary(ITM_OP_PRINTCHR, $2, sizeof (itm_expr_t));
799 | PRINTHD expr SC
801 TRACE_MESSAGE('y', ("printchr expr;\n"));
802 $$ = op_unary(ITM_OP_PRINTHD, $2, sizeof (itm_expr_t));
804 | PRINTINT expr SC
806 TRACE_MESSAGE('y', ("printint expr;\n"));
807 $$ = op_unary(ITM_OP_PRINTINT, $2, sizeof (itm_expr_t));
811 op_if_else
812 : ITM_IF PO expr PC CBO op_list CBC
814 itm_tbl_hdr_t *tbl_hdr;
815 TRACE_MESSAGE('y', ("op_if_else: if (expr) {op_list}\n"));
816 tbl_hdr = obj_table(ITM_TBL_OP, NULL,
817 $6, sizeof (itm_op_t));
818 $$ = op_unit(ITM_OP_IF,
819 $3, sizeof (itm_expr_t),
820 tbl_hdr, tbl_hdr->size,
821 NULL, 0);
823 | ITM_IF PO expr PC CBO op_list CBC ITM_ELSE op_if_else
825 itm_tbl_hdr_t *tbl_hdr1;
826 itm_tbl_hdr_t *tbl_hdr2;
827 TRACE_MESSAGE('y', ("op_if_else: "
828 "if (expr) {op_list} else op_if_else\n"));
829 tbl_hdr1 = obj_table(ITM_TBL_OP, NULL,
830 $6, sizeof (itm_op_t));
831 tbl_hdr2 = obj_table(ITM_TBL_OP, NULL,
832 $9, sizeof (itm_op_t));
833 $$ = op_unit(ITM_OP_IF_ELSE,
834 $3, sizeof (itm_expr_t),
835 tbl_hdr1, tbl_hdr1->size,
836 tbl_hdr2, tbl_hdr2->size);
838 | ITM_IF PO expr PC CBO op_list CBC ITM_ELSE CBO op_list CBC
840 itm_tbl_hdr_t *tbl_hdr1;
841 itm_tbl_hdr_t *tbl_hdr2;
842 TRACE_MESSAGE('y', ("op_if_else: "
843 "if (expr) {op_list} else {op_list}\n"));
844 tbl_hdr1 = obj_table(ITM_TBL_OP, NULL,
845 $6, sizeof (itm_op_t));
846 tbl_hdr2 = obj_table(ITM_TBL_OP, NULL,
847 $10, sizeof (itm_op_t));
848 $$ = op_unit(ITM_OP_IF_ELSE,
849 $3, sizeof (itm_expr_t),
850 tbl_hdr1, tbl_hdr1->size,
851 tbl_hdr2, tbl_hdr2->size);
855 name : NAME
857 TRACE_MESSAGE('y', ("name: size=%*s\n",
858 yylval.data->size, NSPTR(yylval.data)));
859 $$ = yylval.data;
863 itm_in : ITM_IN
865 TRACE_MESSAGE('y', ("in\n"));
866 $$ = expr_self(ITM_EXPR_IN, NULL);
870 expr : PO expr PC
872 TRACE_MESSAGE('y', ("expr: (expr)\n"));
873 $$ = $2;
875 | name
877 TRACE_MESSAGE('y', ("expr: NAME\n"));
878 $$ = expr_self(ITM_EXPR_NAME, $1);
880 | HEXADECIMAL
882 TRACE_MESSAGE('y', ("expr: HEXADECIMAL\n"));
883 $$ = expr_self(ITM_EXPR_SEQ, yylval.data);
885 | DECIMAL
887 TRACE_MESSAGE('y', ("expr: DECIMAL\n"));
888 $$ = expr_self_num(ITM_EXPR_INT, yylval.num);
890 | itm_in SBO expr SBC
892 if (ITM_EXPR_INT == $3->type) {
893 TRACE_MESSAGE('y', ("expr: in[%ld]\n",
894 $3->data.itm_exnum));
895 $$ = expr_self_num(ITM_EXPR_IN_VECTOR_D,
896 $3->data.itm_exnum);
897 } else {
898 TRACE_MESSAGE('y', ("expr: in[expr]\n"));
899 $$ = expr_unary(ITM_EXPR_IN_VECTOR, $3);
902 | ITM_OUTSIZE
904 TRACE_MESSAGE('y', ("expr: outsize\n"));
905 $$ = expr_self_num(ITM_EXPR_OUT, 0);
907 | ITM_INSIZE
909 TRACE_MESSAGE('y', ("expr: inputsize\n"));
910 $$ = expr_self_num(ITM_EXPR_IN_VECTOR_D, (size_t)-1);
912 | ITM_TRUE
914 TRACE_MESSAGE('y', ("expr: true\n"));
915 $$ = expr_self_num(ITM_EXPR_TRUE, 1);
917 | ITM_FALSE
919 TRACE_MESSAGE('y', ("expr: false\n"));
920 $$ = expr_self_num(ITM_EXPR_FALSE, 0);
922 | itm_in EQ expr
924 TRACE_MESSAGE('y', ("expr: in == expr\n"));
925 $$ = expr_unary(ITM_EXPR_IN_EQ, $3);
927 | expr EQ itm_in
929 TRACE_MESSAGE('y', ("expr: expr == in\n"));
930 $$ = expr_unary(ITM_EXPR_IN_EQ, $1);
932 | NOT expr
934 TRACE_MESSAGE('y', ("expr: ! expr\n"));
936 if (ITM_EXPR_INT == $2->type) {
937 $$ = expr_self_num(ITM_EXPR_INT, !($2->data.itm_exnum));
938 } else {
939 $$ = expr_unary(ITM_EXPR_NOT, $2);
942 | NEG expr
944 TRACE_MESSAGE('y', ("expr: ~ expr\n"));
945 if (ITM_EXPR_INT == $2->type) {
946 $$ = expr_self_num(ITM_EXPR_INT, ~($2->data.itm_exnum));
947 } else {
948 $$ = expr_unary(ITM_EXPR_NEG, $2);
951 | MINUS expr %prec MUL
953 TRACE_MESSAGE('y', ("expr: - expr\n"));
954 if (ITM_EXPR_INT == $2->type) {
955 $$ = expr_self_num(ITM_EXPR_INT,
956 (-1) * ($2->data.itm_exnum));
957 } else {
958 $$ = expr_unary(ITM_EXPR_UMINUS, $2);
961 | expr PLUS expr
963 TRACE_MESSAGE('y', ("expr: expr + expr\n"));
964 $$ = expr_binary(ITM_EXPR_PLUS, $1, $3);
965 $1 = expr_seq_to_int($1);
966 $3 = expr_seq_to_int($3);
967 switch ($1->type) {
968 case ITM_EXPR_INT:
969 switch ($3->type) {
970 case ITM_EXPR_INT:
971 $$ = expr_binary2(ITM_EXPR_PLUS_D_D, $1, $3);
972 break;
973 case ITM_EXPR_REG:
974 $$ = expr_binary2(ITM_EXPR_PLUS_D_R, $1, $3);
975 break;
976 case ITM_EXPR_IN_VECTOR_D:
977 $$ = expr_binary2(ITM_EXPR_PLUS_D_INVD, $1, $3);
978 break;
979 default:
980 $$ = expr_binary2(ITM_EXPR_PLUS_D_E, $1, $3);
981 break;
983 break;
984 case ITM_EXPR_REG:
985 switch ($3->type) {
986 case ITM_EXPR_INT:
987 $$ = expr_binary2(ITM_EXPR_PLUS_R_D, $1, $3);
988 break;
989 case ITM_EXPR_REG:
990 $$ = expr_binary2(ITM_EXPR_PLUS_R_R, $1, $3);
991 break;
992 case ITM_EXPR_IN_VECTOR_D:
993 $$ = expr_binary2(ITM_EXPR_PLUS_R_INVD, $1, $3);
994 break;
995 default:
996 $$ = expr_binary2(ITM_EXPR_PLUS_R_E, $1, $3);
997 break;
999 break;
1000 case ITM_EXPR_IN_VECTOR_D:
1001 switch ($3->type) {
1002 case ITM_EXPR_INT:
1003 $$ = expr_binary2(ITM_EXPR_PLUS_INVD_D, $1, $3);
1004 break;
1005 case ITM_EXPR_REG:
1006 $$ = expr_binary2(ITM_EXPR_PLUS_INVD_R, $1, $3);
1007 break;
1008 case ITM_EXPR_IN_VECTOR_D:
1009 $$ = expr_binary2(ITM_EXPR_PLUS_INVD_INVD,
1010 $1, $3);
1011 break;
1012 default:
1013 $$ = expr_binary2(ITM_EXPR_PLUS_INVD_E, $1, $3);
1014 break;
1016 break;
1017 default:
1018 switch ($3->type) {
1019 case ITM_EXPR_INT:
1020 $$ = expr_binary2(ITM_EXPR_PLUS_E_D, $1, $3);
1021 break;
1022 case ITM_EXPR_REG:
1023 $$ = expr_binary2(ITM_EXPR_PLUS_E_R, $1, $3);
1024 break;
1025 case ITM_EXPR_IN_VECTOR_D:
1026 $$ = expr_binary2(ITM_EXPR_PLUS_E_INVD, $1, $3);
1027 break;
1028 default:
1029 $$ = expr_binary2(ITM_EXPR_PLUS, $1, $3);
1030 break;
1032 break;
1035 | expr MINUS expr
1037 TRACE_MESSAGE('y', ("expr: expr - expr\n"));
1038 $$ = expr_binary(ITM_EXPR_MINUS, $1, $3);
1039 $1 = expr_seq_to_int($1);
1040 $3 = expr_seq_to_int($3);
1041 switch ($1->type) {
1042 case ITM_EXPR_INT:
1043 switch ($3->type) {
1044 case ITM_EXPR_INT:
1045 $$ = expr_binary2(ITM_EXPR_MINUS_D_D, $1, $3);
1046 break;
1047 case ITM_EXPR_REG:
1048 $$ = expr_binary2(ITM_EXPR_MINUS_D_R, $1, $3);
1049 break;
1050 case ITM_EXPR_IN_VECTOR_D:
1051 $$ = expr_binary2(ITM_EXPR_MINUS_D_INVD,
1052 $1, $3);
1053 break;
1054 default:
1055 $$ = expr_binary2(ITM_EXPR_MINUS_D_E, $1, $3);
1056 break;
1058 break;
1059 case ITM_EXPR_REG:
1060 switch ($3->type) {
1061 case ITM_EXPR_INT:
1062 $$ = expr_binary2(ITM_EXPR_MINUS_R_D, $1, $3);
1063 break;
1064 case ITM_EXPR_REG:
1065 $$ = expr_binary2(ITM_EXPR_MINUS_R_R, $1, $3);
1066 break;
1067 case ITM_EXPR_IN_VECTOR_D:
1068 $$ = expr_binary2(ITM_EXPR_MINUS_R_INVD,
1069 $1, $3);
1070 break;
1071 default:
1072 $$ = expr_binary2(ITM_EXPR_MINUS_R_E, $1, $3);
1073 break;
1075 break;
1076 case ITM_EXPR_IN_VECTOR_D:
1077 switch ($3->type) {
1078 case ITM_EXPR_INT:
1079 $$ = expr_binary2(ITM_EXPR_MINUS_INVD_D,
1080 $1, $3);
1081 break;
1082 case ITM_EXPR_REG:
1083 $$ = expr_binary2(ITM_EXPR_MINUS_INVD_R,
1084 $1, $3);
1085 break;
1086 case ITM_EXPR_IN_VECTOR_D:
1087 $$ = expr_binary2(ITM_EXPR_MINUS_INVD_INVD,
1088 $1, $3);
1089 break;
1090 default:
1091 $$ = expr_binary2(ITM_EXPR_MINUS_INVD_E,
1092 $1, $3);
1093 break;
1095 break;
1096 default:
1097 switch ($3->type) {
1098 case ITM_EXPR_INT:
1099 $$ = expr_binary2(ITM_EXPR_MINUS_E_D, $1, $3);
1100 break;
1101 case ITM_EXPR_REG:
1102 $$ = expr_binary2(ITM_EXPR_MINUS_E_R, $1, $3);
1103 break;
1104 case ITM_EXPR_IN_VECTOR_D:
1105 $$ = expr_binary2(ITM_EXPR_MINUS_E_INVD,
1106 $1, $3);
1107 break;
1108 default:
1109 $$ = expr_binary2(ITM_EXPR_MINUS, $1, $3);
1110 break;
1112 break;
1115 | expr MUL expr
1117 TRACE_MESSAGE('y', ("expr: expr *expr\n"));
1118 $$ = expr_binary(ITM_EXPR_MUL, $1, $3);
1119 $1 = expr_seq_to_int($1);
1120 $3 = expr_seq_to_int($3);
1121 switch ($1->type) {
1122 case ITM_EXPR_INT:
1123 switch ($3->type) {
1124 case ITM_EXPR_INT:
1125 $$ = expr_binary2(ITM_EXPR_MUL_D_D, $1, $3);
1126 break;
1127 case ITM_EXPR_REG:
1128 $$ = expr_binary2(ITM_EXPR_MUL_D_R, $1, $3);
1129 break;
1130 case ITM_EXPR_IN_VECTOR_D:
1131 $$ = expr_binary2(ITM_EXPR_MUL_D_INVD, $1, $3);
1132 break;
1133 default:
1134 $$ = expr_binary2(ITM_EXPR_MUL_D_E, $1, $3);
1135 break;
1137 break;
1138 case ITM_EXPR_REG:
1139 switch ($3->type) {
1140 case ITM_EXPR_INT:
1141 $$ = expr_binary2(ITM_EXPR_MUL_R_D, $1, $3);
1142 break;
1143 case ITM_EXPR_REG:
1144 $$ = expr_binary2(ITM_EXPR_MUL_R_R, $1, $3);
1145 break;
1146 case ITM_EXPR_IN_VECTOR_D:
1147 $$ = expr_binary2(ITM_EXPR_MUL_R_INVD, $1, $3);
1148 break;
1149 default:
1150 $$ = expr_binary2(ITM_EXPR_MUL_R_E, $1, $3);
1151 break;
1153 break;
1154 case ITM_EXPR_IN_VECTOR_D:
1155 switch ($3->type) {
1156 case ITM_EXPR_INT:
1157 $$ = expr_binary2(ITM_EXPR_MUL_INVD_D, $1, $3);
1158 break;
1159 case ITM_EXPR_REG:
1160 $$ = expr_binary2(ITM_EXPR_MUL_INVD_R, $1, $3);
1161 break;
1162 case ITM_EXPR_IN_VECTOR_D:
1163 $$ = expr_binary2(ITM_EXPR_MUL_INVD_INVD,
1164 $1, $3);
1165 break;
1166 default:
1167 $$ = expr_binary2(ITM_EXPR_MUL_INVD_E, $1, $3);
1168 break;
1170 break;
1171 default:
1172 switch ($3->type) {
1173 case ITM_EXPR_INT:
1174 $$ = expr_binary2(ITM_EXPR_MUL_E_D, $1, $3);
1175 break;
1176 case ITM_EXPR_REG:
1177 $$ = expr_binary2(ITM_EXPR_MUL_E_R, $1, $3);
1178 break;
1179 case ITM_EXPR_IN_VECTOR_D:
1180 $$ = expr_binary2(ITM_EXPR_MUL_E_INVD, $1, $3);
1181 break;
1182 default:
1183 $$ = expr_binary2(ITM_EXPR_MUL, $1, $3);
1184 break;
1186 break;
1189 | expr DIV expr
1191 TRACE_MESSAGE('y', ("expr: expr / expr\n"));
1192 $$ = expr_binary(ITM_EXPR_DIV, $1, $3);
1193 $1 = expr_seq_to_int($1);
1194 $3 = expr_seq_to_int($3);
1195 switch ($1->type) {
1196 case ITM_EXPR_INT:
1197 switch ($3->type) {
1198 case ITM_EXPR_INT:
1199 $$ = expr_binary2(ITM_EXPR_DIV_D_D, $1, $3);
1200 break;
1201 case ITM_EXPR_REG:
1202 $$ = expr_binary2(ITM_EXPR_DIV_D_R, $1, $3);
1203 break;
1204 case ITM_EXPR_IN_VECTOR_D:
1205 $$ = expr_binary2(ITM_EXPR_DIV_D_INVD, $1, $3);
1206 break;
1207 default:
1208 $$ = expr_binary2(ITM_EXPR_DIV_D_E, $1, $3);
1209 break;
1211 break;
1212 case ITM_EXPR_REG:
1213 switch ($3->type) {
1214 case ITM_EXPR_INT:
1215 $$ = expr_binary2(ITM_EXPR_DIV_R_D, $1, $3);
1216 break;
1217 case ITM_EXPR_REG:
1218 $$ = expr_binary2(ITM_EXPR_DIV_R_R, $1, $3);
1219 break;
1220 case ITM_EXPR_IN_VECTOR_D:
1221 $$ = expr_binary2(ITM_EXPR_DIV_R_INVD, $1, $3);
1222 break;
1223 default:
1224 $$ = expr_binary2(ITM_EXPR_DIV_R_E, $1, $3);
1225 break;
1227 break;
1228 case ITM_EXPR_IN_VECTOR_D:
1229 switch ($3->type) {
1230 case ITM_EXPR_INT:
1231 $$ = expr_binary2(ITM_EXPR_DIV_INVD_D, $1, $3);
1232 break;
1233 case ITM_EXPR_REG:
1234 $$ = expr_binary2(ITM_EXPR_DIV_INVD_R, $1, $3);
1235 break;
1236 case ITM_EXPR_IN_VECTOR_D:
1237 $$ = expr_binary2(ITM_EXPR_DIV_INVD_INVD,
1238 $1, $3);
1239 break;
1240 default:
1241 $$ = expr_binary2(ITM_EXPR_DIV_INVD_E, $1, $3);
1242 break;
1244 break;
1245 default:
1246 switch ($3->type) {
1247 case ITM_EXPR_INT:
1248 $$ = expr_binary2(ITM_EXPR_DIV_E_D, $1, $3);
1249 break;
1250 case ITM_EXPR_REG:
1251 $$ = expr_binary2(ITM_EXPR_DIV_E_R, $1, $3);
1252 break;
1253 case ITM_EXPR_IN_VECTOR_D:
1254 $$ = expr_binary2(ITM_EXPR_DIV_E_INVD, $1, $3);
1255 break;
1256 default:
1257 $$ = expr_binary2(ITM_EXPR_DIV, $1, $3);
1258 break;
1260 break;
1263 | expr MOD expr
1265 TRACE_MESSAGE('y', ("expr: expr % expr\n"));
1266 $$ = expr_binary(ITM_EXPR_MOD, $1, $3);
1267 $1 = expr_seq_to_int($1);
1268 $3 = expr_seq_to_int($3);
1269 switch ($1->type) {
1270 case ITM_EXPR_INT:
1271 switch ($3->type) {
1272 case ITM_EXPR_INT:
1273 $$ = expr_binary2(ITM_EXPR_MOD_D_D, $1, $3);
1274 break;
1275 case ITM_EXPR_REG:
1276 $$ = expr_binary2(ITM_EXPR_MOD_D_R, $1, $3);
1277 break;
1278 case ITM_EXPR_IN_VECTOR_D:
1279 $$ = expr_binary2(ITM_EXPR_MOD_D_INVD, $1, $3);
1280 break;
1281 default:
1282 $$ = expr_binary2(ITM_EXPR_MOD_D_E, $1, $3);
1283 break;
1285 break;
1286 case ITM_EXPR_REG:
1287 switch ($3->type) {
1288 case ITM_EXPR_INT:
1289 $$ = expr_binary2(ITM_EXPR_MOD_R_D, $1, $3);
1290 break;
1291 case ITM_EXPR_REG:
1292 $$ = expr_binary2(ITM_EXPR_MOD_R_R, $1, $3);
1293 break;
1294 case ITM_EXPR_IN_VECTOR_D:
1295 $$ = expr_binary2(ITM_EXPR_MOD_R_INVD, $1, $3);
1296 break;
1297 default:
1298 $$ = expr_binary2(ITM_EXPR_MOD_R_E, $1, $3);
1299 break;
1301 break;
1302 case ITM_EXPR_IN_VECTOR_D:
1303 switch ($3->type) {
1304 case ITM_EXPR_INT:
1305 $$ = expr_binary2(ITM_EXPR_MOD_INVD_D, $1, $3);
1306 break;
1307 case ITM_EXPR_REG:
1308 $$ = expr_binary2(ITM_EXPR_MOD_INVD_R, $1, $3);
1309 break;
1310 case ITM_EXPR_IN_VECTOR_D:
1311 $$ = expr_binary2(ITM_EXPR_MOD_INVD_INVD,
1312 $1, $3);
1313 break;
1314 default:
1315 $$ = expr_binary2(ITM_EXPR_MOD_INVD_E, $1, $3);
1316 break;
1318 break;
1319 default:
1320 switch ($3->type) {
1321 case ITM_EXPR_INT:
1322 $$ = expr_binary2(ITM_EXPR_MOD_E_D, $1, $3);
1323 break;
1324 case ITM_EXPR_REG:
1325 $$ = expr_binary2(ITM_EXPR_MOD_E_R, $1, $3);
1326 break;
1327 case ITM_EXPR_IN_VECTOR_D:
1328 $$ = expr_binary2(ITM_EXPR_MOD_E_INVD, $1, $3);
1329 break;
1330 default:
1331 $$ = expr_binary2(ITM_EXPR_MOD, $1, $3);
1332 break;
1334 break;
1337 | expr SHL expr
1339 TRACE_MESSAGE('y', ("expr: expr << expr\n"));
1340 $$ = expr_binary(ITM_EXPR_SHIFT_L, $1, $3);
1341 $1 = expr_seq_to_int($1);
1342 $3 = expr_seq_to_int($3);
1343 switch ($1->type) {
1344 case ITM_EXPR_INT:
1345 switch ($3->type) {
1346 case ITM_EXPR_INT:
1347 $$ = expr_binary2(ITM_EXPR_SHIFT_L_D_D, $1, $3);
1348 break;
1349 case ITM_EXPR_REG:
1350 $$ = expr_binary2(ITM_EXPR_SHIFT_L_D_R, $1, $3);
1351 break;
1352 case ITM_EXPR_IN_VECTOR_D:
1353 $$ = expr_binary2(ITM_EXPR_SHIFT_L_D_INVD,
1354 $1, $3);
1355 break;
1356 default:
1357 $$ = expr_binary2(ITM_EXPR_SHIFT_L_D_E, $1, $3);
1358 break;
1360 break;
1361 case ITM_EXPR_REG:
1362 switch ($3->type) {
1363 case ITM_EXPR_INT:
1364 $$ = expr_binary2(ITM_EXPR_SHIFT_L_R_D, $1, $3);
1365 break;
1366 case ITM_EXPR_REG:
1367 $$ = expr_binary2(ITM_EXPR_SHIFT_L_R_R, $1, $3);
1368 break;
1369 case ITM_EXPR_IN_VECTOR_D:
1370 $$ = expr_binary2(ITM_EXPR_SHIFT_L_R_INVD,
1371 $1, $3);
1372 break;
1373 default:
1374 $$ = expr_binary2(ITM_EXPR_SHIFT_L_R_E, $1, $3);
1375 break;
1377 break;
1378 case ITM_EXPR_IN_VECTOR_D:
1379 switch ($3->type) {
1380 case ITM_EXPR_INT:
1381 $$ = expr_binary2(ITM_EXPR_SHIFT_L_INVD_D,
1382 $1, $3);
1383 break;
1384 case ITM_EXPR_REG:
1385 $$ = expr_binary2(ITM_EXPR_SHIFT_L_INVD_R,
1386 $1, $3);
1387 break;
1388 case ITM_EXPR_IN_VECTOR_D:
1389 $$ = expr_binary2(ITM_EXPR_SHIFT_L_INVD_INVD,
1390 $1, $3);
1391 break;
1392 default:
1393 $$ = expr_binary2(ITM_EXPR_SHIFT_L_INVD_E,
1394 $1, $3);
1395 break;
1397 break;
1398 default:
1399 switch ($3->type) {
1400 case ITM_EXPR_INT:
1401 $$ = expr_binary2(ITM_EXPR_SHIFT_L_E_D, $1, $3);
1402 break;
1403 case ITM_EXPR_REG:
1404 $$ = expr_binary2(ITM_EXPR_SHIFT_L_E_R, $1, $3);
1405 break;
1406 case ITM_EXPR_IN_VECTOR_D:
1407 $$ = expr_binary2(ITM_EXPR_SHIFT_L_E_INVD,
1408 $1, $3);
1409 break;
1410 default:
1411 $$ = expr_binary2(ITM_EXPR_SHIFT_L, $1, $3);
1412 break;
1414 break;
1417 | expr SHR expr
1419 TRACE_MESSAGE('y', ("expr: expr >> expr\n"));
1420 $$ = expr_binary(ITM_EXPR_SHIFT_R, $1, $3);
1421 $1 = expr_seq_to_int($1);
1422 $3 = expr_seq_to_int($3);
1423 switch ($1->type) {
1424 case ITM_EXPR_INT:
1425 switch ($3->type) {
1426 case ITM_EXPR_INT:
1427 $$ = expr_binary2(ITM_EXPR_SHIFT_R_D_D, $1, $3);
1428 break;
1429 case ITM_EXPR_REG:
1430 $$ = expr_binary2(ITM_EXPR_SHIFT_R_D_R, $1, $3);
1431 break;
1432 case ITM_EXPR_IN_VECTOR_D:
1433 $$ = expr_binary2(ITM_EXPR_SHIFT_R_D_INVD,
1434 $1, $3);
1435 break;
1436 default:
1437 $$ = expr_binary2(ITM_EXPR_SHIFT_R_D_E, $1, $3);
1438 break;
1440 break;
1441 case ITM_EXPR_REG:
1442 switch ($3->type) {
1443 case ITM_EXPR_INT:
1444 $$ = expr_binary2(ITM_EXPR_SHIFT_R_R_D, $1, $3);
1445 break;
1446 case ITM_EXPR_REG:
1447 $$ = expr_binary2(ITM_EXPR_SHIFT_R_R_R, $1, $3);
1448 break;
1449 case ITM_EXPR_IN_VECTOR_D:
1450 $$ = expr_binary2(ITM_EXPR_SHIFT_R_R_INVD,
1451 $1, $3);
1452 break;
1453 default:
1454 $$ = expr_binary2(ITM_EXPR_SHIFT_R_R_E, $1, $3);
1455 break;
1457 break;
1458 case ITM_EXPR_IN_VECTOR_D:
1459 switch ($3->type) {
1460 case ITM_EXPR_INT:
1461 $$ = expr_binary2(ITM_EXPR_SHIFT_R_INVD_D,
1462 $1, $3);
1463 break;
1464 case ITM_EXPR_REG:
1465 $$ = expr_binary2(ITM_EXPR_SHIFT_R_INVD_R,
1466 $1, $3);
1467 break;
1468 case ITM_EXPR_IN_VECTOR_D:
1469 $$ = expr_binary2(ITM_EXPR_SHIFT_R_INVD_INVD,
1470 $1, $3);
1471 break;
1472 default:
1473 $$ = expr_binary2(ITM_EXPR_SHIFT_R_INVD_E,
1474 $1, $3);
1475 break;
1477 break;
1478 default:
1479 switch ($3->type) {
1480 case ITM_EXPR_INT:
1481 $$ = expr_binary2(ITM_EXPR_SHIFT_R_E_D, $1, $3);
1482 break;
1483 case ITM_EXPR_REG:
1484 $$ = expr_binary2(ITM_EXPR_SHIFT_R_E_R, $1, $3);
1485 break;
1486 case ITM_EXPR_IN_VECTOR_D:
1487 $$ = expr_binary2(ITM_EXPR_SHIFT_R_E_INVD,
1488 $1, $3);
1489 break;
1490 default:
1491 $$ = expr_binary2(ITM_EXPR_SHIFT_R, $1, $3);
1492 break;
1494 break;
1497 | expr OR expr
1499 TRACE_MESSAGE('y', ("expr: expr | expr\n"));
1500 $$ = expr_binary(ITM_EXPR_OR, $1, $3);
1501 $1 = expr_seq_to_int($1);
1502 $3 = expr_seq_to_int($3);
1503 switch ($1->type) {
1504 case ITM_EXPR_INT:
1505 switch ($3->type) {
1506 case ITM_EXPR_INT:
1507 $$ = expr_binary2(ITM_EXPR_OR_D_D, $1, $3);
1508 break;
1509 case ITM_EXPR_REG:
1510 $$ = expr_binary2(ITM_EXPR_OR_D_R, $1, $3);
1511 break;
1512 case ITM_EXPR_IN_VECTOR_D:
1513 $$ = expr_binary2(ITM_EXPR_OR_D_INVD, $1, $3);
1514 break;
1515 default:
1516 $$ = expr_binary2(ITM_EXPR_OR_D_E, $1, $3);
1517 break;
1519 break;
1520 case ITM_EXPR_REG:
1521 switch ($3->type) {
1522 case ITM_EXPR_INT:
1523 $$ = expr_binary2(ITM_EXPR_OR_R_D, $1, $3);
1524 break;
1525 case ITM_EXPR_REG:
1526 $$ = expr_binary2(ITM_EXPR_OR_R_R, $1, $3);
1527 break;
1528 case ITM_EXPR_IN_VECTOR_D:
1529 $$ = expr_binary2(ITM_EXPR_OR_R_INVD, $1, $3);
1530 break;
1531 default:
1532 $$ = expr_binary2(ITM_EXPR_OR_R_E, $1, $3);
1533 break;
1535 break;
1536 case ITM_EXPR_IN_VECTOR_D:
1537 switch ($3->type) {
1538 case ITM_EXPR_INT:
1539 $$ = expr_binary2(ITM_EXPR_OR_INVD_D, $1, $3);
1540 break;
1541 case ITM_EXPR_REG:
1542 $$ = expr_binary2(ITM_EXPR_OR_INVD_R, $1, $3);
1543 break;
1544 case ITM_EXPR_IN_VECTOR_D:
1545 $$ = expr_binary2(ITM_EXPR_OR_INVD_INVD,
1546 $1, $3);
1547 break;
1548 default:
1549 $$ = expr_binary2(ITM_EXPR_OR_INVD_E, $1, $3);
1550 break;
1552 break;
1553 default:
1554 switch ($3->type) {
1555 case ITM_EXPR_INT:
1556 $$ = expr_binary2(ITM_EXPR_OR_E_D, $1, $3);
1557 break;
1558 case ITM_EXPR_REG:
1559 $$ = expr_binary2(ITM_EXPR_OR_E_R, $1, $3);
1560 break;
1561 case ITM_EXPR_IN_VECTOR_D:
1562 $$ = expr_binary2(ITM_EXPR_OR_E_INVD, $1, $3);
1563 break;
1564 default:
1565 $$ = expr_binary2(ITM_EXPR_OR, $1, $3);
1566 break;
1568 break;
1571 | expr XOR expr
1573 TRACE_MESSAGE('y', ("expr: expr ^ expr\n"));
1574 $$ = expr_binary(ITM_EXPR_XOR, $1, $3);
1575 $1 = expr_seq_to_int($1);
1576 $3 = expr_seq_to_int($3);
1577 switch ($1->type) {
1578 case ITM_EXPR_INT:
1579 switch ($3->type) {
1580 case ITM_EXPR_INT:
1581 $$ = expr_binary2(ITM_EXPR_XOR_D_D, $1, $3);
1582 break;
1583 case ITM_EXPR_REG:
1584 $$ = expr_binary2(ITM_EXPR_XOR_D_R, $1, $3);
1585 break;
1586 case ITM_EXPR_IN_VECTOR_D:
1587 $$ = expr_binary2(ITM_EXPR_XOR_D_INVD, $1, $3);
1588 break;
1589 default:
1590 $$ = expr_binary2(ITM_EXPR_XOR_D_E, $1, $3);
1591 break;
1593 break;
1594 case ITM_EXPR_REG:
1595 switch ($3->type) {
1596 case ITM_EXPR_INT:
1597 $$ = expr_binary2(ITM_EXPR_XOR_R_D, $1, $3);
1598 break;
1599 case ITM_EXPR_REG:
1600 $$ = expr_binary2(ITM_EXPR_XOR_R_R, $1, $3);
1601 break;
1602 case ITM_EXPR_IN_VECTOR_D:
1603 $$ = expr_binary2(ITM_EXPR_XOR_R_INVD, $1, $3);
1604 break;
1605 default:
1606 $$ = expr_binary2(ITM_EXPR_XOR_R_E, $1, $3);
1607 break;
1609 break;
1610 case ITM_EXPR_IN_VECTOR_D:
1611 switch ($3->type) {
1612 case ITM_EXPR_INT:
1613 $$ = expr_binary2(ITM_EXPR_XOR_INVD_D, $1, $3);
1614 break;
1615 case ITM_EXPR_REG:
1616 $$ = expr_binary2(ITM_EXPR_XOR_INVD_R, $1, $3);
1617 break;
1618 case ITM_EXPR_IN_VECTOR_D:
1619 $$ = expr_binary2(ITM_EXPR_XOR_INVD_INVD,
1620 $1, $3);
1621 break;
1622 default:
1623 $$ = expr_binary2(ITM_EXPR_XOR_INVD_E, $1, $3);
1624 break;
1626 break;
1627 default:
1628 switch ($3->type) {
1629 case ITM_EXPR_INT:
1630 $$ = expr_binary2(ITM_EXPR_XOR_E_D, $1, $3);
1631 break;
1632 case ITM_EXPR_REG:
1633 $$ = expr_binary2(ITM_EXPR_XOR_E_R, $1, $3);
1634 break;
1635 case ITM_EXPR_IN_VECTOR_D:
1636 $$ = expr_binary2(ITM_EXPR_XOR_E_INVD, $1, $3);
1637 break;
1638 default:
1639 $$ = expr_binary2(ITM_EXPR_XOR, $1, $3);
1640 break;
1642 break;
1645 | expr AND expr
1647 TRACE_MESSAGE('y', ("expr: expr & expr\n"));
1648 $$ = expr_binary(ITM_EXPR_AND, $1, $3);
1649 $1 = expr_seq_to_int($1);
1650 $3 = expr_seq_to_int($3);
1651 switch ($1->type) {
1652 case ITM_EXPR_INT:
1653 switch ($3->type) {
1654 case ITM_EXPR_INT:
1655 $$ = expr_binary2(ITM_EXPR_AND_D_D, $1, $3);
1656 break;
1657 case ITM_EXPR_REG:
1658 $$ = expr_binary2(ITM_EXPR_AND_D_R, $1, $3);
1659 break;
1660 case ITM_EXPR_IN_VECTOR_D:
1661 $$ = expr_binary2(ITM_EXPR_AND_D_INVD, $1, $3);
1662 break;
1663 default:
1664 $$ = expr_binary2(ITM_EXPR_AND_D_E, $1, $3);
1665 break;
1667 break;
1668 case ITM_EXPR_REG:
1669 switch ($3->type) {
1670 case ITM_EXPR_INT:
1671 $$ = expr_binary2(ITM_EXPR_AND_R_D, $1, $3);
1672 break;
1673 case ITM_EXPR_REG:
1674 $$ = expr_binary2(ITM_EXPR_AND_R_R, $1, $3);
1675 break;
1676 case ITM_EXPR_IN_VECTOR_D:
1677 $$ = expr_binary2(ITM_EXPR_AND_R_INVD, $1, $3);
1678 break;
1679 default:
1680 $$ = expr_binary2(ITM_EXPR_AND_R_E, $1, $3);
1681 break;
1683 break;
1684 case ITM_EXPR_IN_VECTOR_D:
1685 switch ($3->type) {
1686 case ITM_EXPR_INT:
1687 $$ = expr_binary2(ITM_EXPR_AND_INVD_D, $1, $3);
1688 break;
1689 case ITM_EXPR_REG:
1690 $$ = expr_binary2(ITM_EXPR_AND_INVD_R, $1, $3);
1691 break;
1692 case ITM_EXPR_IN_VECTOR_D:
1693 $$ = expr_binary2(ITM_EXPR_AND_INVD_INVD,
1694 $1, $3);
1695 break;
1696 default:
1697 $$ = expr_binary2(ITM_EXPR_AND_INVD_E, $1, $3);
1698 break;
1700 break;
1701 default:
1702 switch ($3->type) {
1703 case ITM_EXPR_INT:
1704 $$ = expr_binary2(ITM_EXPR_AND_E_D, $1, $3);
1705 break;
1706 case ITM_EXPR_REG:
1707 $$ = expr_binary2(ITM_EXPR_AND_E_R, $1, $3);
1708 break;
1709 case ITM_EXPR_IN_VECTOR_D:
1710 $$ = expr_binary2(ITM_EXPR_AND_E_INVD, $1, $3);
1711 break;
1712 default:
1713 $$ = expr_binary2(ITM_EXPR_AND, $1, $3);
1714 break;
1716 break;
1719 | expr EQ expr
1721 TRACE_MESSAGE('y', ("expr: expr == expr\n"));
1722 $$ = expr_binary(ITM_EXPR_EQ, $1, $3);
1723 $1 = expr_seq_to_int($1);
1724 $3 = expr_seq_to_int($3);
1725 switch ($1->type) {
1726 case ITM_EXPR_INT:
1727 switch ($3->type) {
1728 case ITM_EXPR_INT:
1729 $$ = expr_binary2(ITM_EXPR_EQ_D_D, $1, $3);
1730 break;
1731 case ITM_EXPR_REG:
1732 $$ = expr_binary2(ITM_EXPR_EQ_D_R, $1, $3);
1733 break;
1734 case ITM_EXPR_IN_VECTOR_D:
1735 $$ = expr_binary2(ITM_EXPR_EQ_D_INVD, $1, $3);
1736 break;
1737 default:
1738 $$ = expr_binary2(ITM_EXPR_EQ_D_E, $1, $3);
1739 break;
1741 break;
1742 case ITM_EXPR_REG:
1743 switch ($3->type) {
1744 case ITM_EXPR_INT:
1745 $$ = expr_binary2(ITM_EXPR_EQ_R_D, $1, $3);
1746 break;
1747 case ITM_EXPR_REG:
1748 $$ = expr_binary2(ITM_EXPR_EQ_R_R, $1, $3);
1749 break;
1750 case ITM_EXPR_IN_VECTOR_D:
1751 $$ = expr_binary2(ITM_EXPR_EQ_R_INVD, $1, $3);
1752 break;
1753 default:
1754 $$ = expr_binary2(ITM_EXPR_EQ_R_E, $1, $3);
1755 break;
1757 break;
1758 case ITM_EXPR_IN_VECTOR_D:
1759 switch ($3->type) {
1760 case ITM_EXPR_INT:
1761 $$ = expr_binary2(ITM_EXPR_EQ_INVD_D, $1, $3);
1762 break;
1763 case ITM_EXPR_REG:
1764 $$ = expr_binary2(ITM_EXPR_EQ_INVD_R, $1, $3);
1765 break;
1766 case ITM_EXPR_IN_VECTOR_D:
1767 $$ = expr_binary2(ITM_EXPR_EQ_INVD_INVD,
1768 $1, $3);
1769 break;
1770 default:
1771 $$ = expr_binary2(ITM_EXPR_EQ_INVD_E, $1, $3);
1772 break;
1774 break;
1775 default:
1776 switch ($3->type) {
1777 case ITM_EXPR_INT:
1778 $$ = expr_binary2(ITM_EXPR_EQ_E_D, $1, $3);
1779 break;
1780 case ITM_EXPR_REG:
1781 $$ = expr_binary2(ITM_EXPR_EQ_E_R, $1, $3);
1782 break;
1783 case ITM_EXPR_IN_VECTOR_D:
1784 $$ = expr_binary2(ITM_EXPR_EQ_E_INVD, $1, $3);
1785 break;
1786 default:
1787 $$ = expr_binary2(ITM_EXPR_EQ, $1, $3);
1788 break;
1790 break;
1793 | expr NE expr
1795 TRACE_MESSAGE('y', ("expr: expr != expr\n"));
1796 $$ = expr_binary(ITM_EXPR_NE, $1, $3);
1797 $1 = expr_seq_to_int($1);
1798 $3 = expr_seq_to_int($3);
1799 switch ($1->type) {
1800 case ITM_EXPR_INT:
1801 switch ($3->type) {
1802 case ITM_EXPR_INT:
1803 $$ = expr_binary2(ITM_EXPR_NE_D_D, $1, $3);
1804 break;
1805 case ITM_EXPR_REG:
1806 $$ = expr_binary2(ITM_EXPR_NE_D_R, $1, $3);
1807 break;
1808 case ITM_EXPR_IN_VECTOR_D:
1809 $$ = expr_binary2(ITM_EXPR_NE_D_INVD, $1, $3);
1810 break;
1811 default:
1812 $$ = expr_binary2(ITM_EXPR_NE_D_E, $1, $3);
1813 break;
1815 break;
1816 case ITM_EXPR_REG:
1817 switch ($3->type) {
1818 case ITM_EXPR_INT:
1819 $$ = expr_binary2(ITM_EXPR_NE_R_D, $1, $3);
1820 break;
1821 case ITM_EXPR_REG:
1822 $$ = expr_binary2(ITM_EXPR_NE_R_R, $1, $3);
1823 break;
1824 case ITM_EXPR_IN_VECTOR_D:
1825 $$ = expr_binary2(ITM_EXPR_NE_R_INVD, $1, $3);
1826 break;
1827 default:
1828 $$ = expr_binary2(ITM_EXPR_NE_R_E, $1, $3);
1829 break;
1831 break;
1832 case ITM_EXPR_IN_VECTOR_D:
1833 switch ($3->type) {
1834 case ITM_EXPR_INT:
1835 $$ = expr_binary2(ITM_EXPR_NE_INVD_D, $1, $3);
1836 break;
1837 case ITM_EXPR_REG:
1838 $$ = expr_binary2(ITM_EXPR_NE_INVD_R, $1, $3);
1839 break;
1840 case ITM_EXPR_IN_VECTOR_D:
1841 $$ = expr_binary2(ITM_EXPR_NE_INVD_INVD,
1842 $1, $3);
1843 break;
1844 default:
1845 $$ = expr_binary2(ITM_EXPR_NE_INVD_E, $1, $3);
1846 break;
1848 break;
1849 default:
1850 switch ($3->type) {
1851 case ITM_EXPR_INT:
1852 $$ = expr_binary2(ITM_EXPR_NE_E_D, $1, $3);
1853 break;
1854 case ITM_EXPR_REG:
1855 $$ = expr_binary2(ITM_EXPR_NE_E_R, $1, $3);
1856 break;
1857 case ITM_EXPR_IN_VECTOR_D:
1858 $$ = expr_binary2(ITM_EXPR_NE_E_INVD, $1, $3);
1859 break;
1860 default:
1861 $$ = expr_binary2(ITM_EXPR_NE, $1, $3);
1862 break;
1864 break;
1867 | expr GT expr
1869 TRACE_MESSAGE('y', ("expr: expr > expr\n"));
1870 $$ = expr_binary(ITM_EXPR_GT, $1, $3);
1871 $1 = expr_seq_to_int($1);
1872 $3 = expr_seq_to_int($3);
1873 switch ($1->type) {
1874 case ITM_EXPR_INT:
1875 switch ($3->type) {
1876 case ITM_EXPR_INT:
1877 $$ = expr_binary2(ITM_EXPR_GT_D_D, $1, $3);
1878 break;
1879 case ITM_EXPR_REG:
1880 $$ = expr_binary2(ITM_EXPR_GT_D_R, $1, $3);
1881 break;
1882 case ITM_EXPR_IN_VECTOR_D:
1883 $$ = expr_binary2(ITM_EXPR_GT_D_INVD, $1, $3);
1884 break;
1885 default:
1886 $$ = expr_binary2(ITM_EXPR_GT_D_E, $1, $3);
1887 break;
1889 break;
1890 case ITM_EXPR_REG:
1891 switch ($3->type) {
1892 case ITM_EXPR_INT:
1893 $$ = expr_binary2(ITM_EXPR_GT_R_D, $1, $3);
1894 break;
1895 case ITM_EXPR_REG:
1896 $$ = expr_binary2(ITM_EXPR_GT_R_R, $1, $3);
1897 break;
1898 case ITM_EXPR_IN_VECTOR_D:
1899 $$ = expr_binary2(ITM_EXPR_GT_R_INVD, $1, $3);
1900 break;
1901 default:
1902 $$ = expr_binary2(ITM_EXPR_GT_R_E, $1, $3);
1903 break;
1905 break;
1906 case ITM_EXPR_IN_VECTOR_D:
1907 switch ($3->type) {
1908 case ITM_EXPR_INT:
1909 $$ = expr_binary2(ITM_EXPR_GT_INVD_D, $1, $3);
1910 break;
1911 case ITM_EXPR_REG:
1912 $$ = expr_binary2(ITM_EXPR_GT_INVD_R, $1, $3);
1913 break;
1914 case ITM_EXPR_IN_VECTOR_D:
1915 $$ = expr_binary2(ITM_EXPR_GT_INVD_INVD,
1916 $1, $3);
1917 break;
1918 default:
1919 $$ = expr_binary2(ITM_EXPR_GT_INVD_E, $1, $3);
1920 break;
1922 break;
1923 default:
1924 switch ($3->type) {
1925 case ITM_EXPR_INT:
1926 $$ = expr_binary2(ITM_EXPR_GT_E_D, $1, $3);
1927 break;
1928 case ITM_EXPR_REG:
1929 $$ = expr_binary2(ITM_EXPR_GT_E_R, $1, $3);
1930 break;
1931 case ITM_EXPR_IN_VECTOR_D:
1932 $$ = expr_binary2(ITM_EXPR_GT_E_INVD, $1, $3);
1933 break;
1934 default:
1935 $$ = expr_binary2(ITM_EXPR_GT, $1, $3);
1936 break;
1938 break;
1941 | expr GE expr
1943 TRACE_MESSAGE('y', ("expr: expr >= expr\n"));
1944 $$ = expr_binary(ITM_EXPR_GE, $1, $3);
1945 $1 = expr_seq_to_int($1);
1946 $3 = expr_seq_to_int($3);
1947 switch ($1->type) {
1948 case ITM_EXPR_INT:
1949 switch ($3->type) {
1950 case ITM_EXPR_INT:
1951 $$ = expr_binary2(ITM_EXPR_GE_D_D, $1, $3);
1952 break;
1953 case ITM_EXPR_REG:
1954 $$ = expr_binary2(ITM_EXPR_GE_D_R, $1, $3);
1955 break;
1956 case ITM_EXPR_IN_VECTOR_D:
1957 $$ = expr_binary2(ITM_EXPR_GE_D_INVD, $1, $3);
1958 break;
1959 default:
1960 $$ = expr_binary2(ITM_EXPR_GE_D_E, $1, $3);
1961 break;
1963 break;
1964 case ITM_EXPR_REG:
1965 switch ($3->type) {
1966 case ITM_EXPR_INT:
1967 $$ = expr_binary2(ITM_EXPR_GE_R_D, $1, $3);
1968 break;
1969 case ITM_EXPR_REG:
1970 $$ = expr_binary2(ITM_EXPR_GE_R_R, $1, $3);
1971 break;
1972 case ITM_EXPR_IN_VECTOR_D:
1973 $$ = expr_binary2(ITM_EXPR_GE_R_INVD, $1, $3);
1974 break;
1975 default:
1976 $$ = expr_binary2(ITM_EXPR_GE_R_E, $1, $3);
1977 break;
1979 break;
1980 case ITM_EXPR_IN_VECTOR_D:
1981 switch ($3->type) {
1982 case ITM_EXPR_INT:
1983 $$ = expr_binary2(ITM_EXPR_GE_INVD_D, $1, $3);
1984 break;
1985 case ITM_EXPR_REG:
1986 $$ = expr_binary2(ITM_EXPR_GE_INVD_R, $1, $3);
1987 break;
1988 case ITM_EXPR_IN_VECTOR_D:
1989 $$ = expr_binary2(ITM_EXPR_GE_INVD_INVD,
1990 $1, $3);
1991 break;
1992 default:
1993 $$ = expr_binary2(ITM_EXPR_GE_INVD_E, $1, $3);
1994 break;
1996 break;
1997 default:
1998 switch ($3->type) {
1999 case ITM_EXPR_INT:
2000 $$ = expr_binary2(ITM_EXPR_GE_E_D, $1, $3);
2001 break;
2002 case ITM_EXPR_REG:
2003 $$ = expr_binary2(ITM_EXPR_GE_E_R, $1, $3);
2004 break;
2005 case ITM_EXPR_IN_VECTOR_D:
2006 $$ = expr_binary2(ITM_EXPR_GE_E_INVD, $1, $3);
2007 break;
2008 default:
2009 $$ = expr_binary2(ITM_EXPR_GE, $1, $3);
2010 break;
2012 break;
2015 | expr LT expr
2017 TRACE_MESSAGE('y', ("expr: expr < expr\n"));
2018 $$ = expr_binary(ITM_EXPR_LT, $1, $3);
2019 $1 = expr_seq_to_int($1);
2020 $3 = expr_seq_to_int($3);
2021 switch ($1->type) {
2022 case ITM_EXPR_INT:
2023 switch ($3->type) {
2024 case ITM_EXPR_INT:
2025 $$ = expr_binary2(ITM_EXPR_LT_D_D, $1, $3);
2026 break;
2027 case ITM_EXPR_REG:
2028 $$ = expr_binary2(ITM_EXPR_LT_D_R, $1, $3);
2029 break;
2030 case ITM_EXPR_IN_VECTOR_D:
2031 $$ = expr_binary2(ITM_EXPR_LT_D_INVD, $1, $3);
2032 break;
2033 default:
2034 $$ = expr_binary2(ITM_EXPR_LT_D_E, $1, $3);
2035 break;
2037 break;
2038 case ITM_EXPR_REG:
2039 switch ($3->type) {
2040 case ITM_EXPR_INT:
2041 $$ = expr_binary2(ITM_EXPR_LT_R_D, $1, $3);
2042 break;
2043 case ITM_EXPR_REG:
2044 $$ = expr_binary2(ITM_EXPR_LT_R_R, $1, $3);
2045 break;
2046 case ITM_EXPR_IN_VECTOR_D:
2047 $$ = expr_binary2(ITM_EXPR_LT_R_INVD, $1, $3);
2048 break;
2049 default:
2050 $$ = expr_binary2(ITM_EXPR_LT_R_E, $1, $3);
2051 break;
2053 break;
2054 case ITM_EXPR_IN_VECTOR_D:
2055 switch ($3->type) {
2056 case ITM_EXPR_INT:
2057 $$ = expr_binary2(ITM_EXPR_LT_INVD_D, $1, $3);
2058 break;
2059 case ITM_EXPR_REG:
2060 $$ = expr_binary2(ITM_EXPR_LT_INVD_R, $1, $3);
2061 break;
2062 case ITM_EXPR_IN_VECTOR_D:
2063 $$ = expr_binary2(ITM_EXPR_LT_INVD_INVD,
2064 $1, $3);
2065 break;
2066 default:
2067 $$ = expr_binary2(ITM_EXPR_LT_INVD_E, $1, $3);
2068 break;
2070 break;
2071 default:
2072 switch ($3->type) {
2073 case ITM_EXPR_INT:
2074 $$ = expr_binary2(ITM_EXPR_LT_E_D, $1, $3);
2075 break;
2076 case ITM_EXPR_REG:
2077 $$ = expr_binary2(ITM_EXPR_LT_E_R, $1, $3);
2078 break;
2079 case ITM_EXPR_IN_VECTOR_D:
2080 $$ = expr_binary2(ITM_EXPR_LT_E_INVD, $1, $3);
2081 break;
2082 default:
2083 $$ = expr_binary2(ITM_EXPR_LT, $1, $3);
2084 break;
2086 break;
2089 | expr LE expr
2091 TRACE_MESSAGE('y', ("expr: expr <= expr\n"));
2092 $$ = expr_binary(ITM_EXPR_LE, $1, $3);
2093 $1 = expr_seq_to_int($1);
2094 $3 = expr_seq_to_int($3);
2095 switch ($1->type) {
2096 case ITM_EXPR_INT:
2097 switch ($3->type) {
2098 case ITM_EXPR_INT:
2099 $$ = expr_binary2(ITM_EXPR_LE_D_D, $1, $3);
2100 break;
2101 case ITM_EXPR_REG:
2102 $$ = expr_binary2(ITM_EXPR_LE_D_R, $1, $3);
2103 break;
2104 case ITM_EXPR_IN_VECTOR_D:
2105 $$ = expr_binary2(ITM_EXPR_LE_D_INVD, $1, $3);
2106 break;
2107 default:
2108 $$ = expr_binary2(ITM_EXPR_LE_D_E, $1, $3);
2109 break;
2111 break;
2112 case ITM_EXPR_REG:
2113 switch ($3->type) {
2114 case ITM_EXPR_INT:
2115 $$ = expr_binary2(ITM_EXPR_LE_R_D, $1, $3);
2116 break;
2117 case ITM_EXPR_REG:
2118 $$ = expr_binary2(ITM_EXPR_LE_R_R, $1, $3);
2119 break;
2120 case ITM_EXPR_IN_VECTOR_D:
2121 $$ = expr_binary2(ITM_EXPR_LE_R_INVD, $1, $3);
2122 break;
2123 default:
2124 $$ = expr_binary2(ITM_EXPR_LE_R_E, $1, $3);
2125 break;
2127 break;
2128 case ITM_EXPR_IN_VECTOR_D:
2129 switch ($3->type) {
2130 case ITM_EXPR_INT:
2131 $$ = expr_binary2(ITM_EXPR_LE_INVD_D, $1, $3);
2132 break;
2133 case ITM_EXPR_REG:
2134 $$ = expr_binary2(ITM_EXPR_LE_INVD_R, $1, $3);
2135 break;
2136 case ITM_EXPR_IN_VECTOR_D:
2137 $$ = expr_binary2(ITM_EXPR_LE_INVD_INVD,
2138 $1, $3);
2139 break;
2140 default:
2141 $$ = expr_binary2(ITM_EXPR_LE_INVD_E, $1, $3);
2142 break;
2144 break;
2145 default:
2146 switch ($3->type) {
2147 case ITM_EXPR_INT:
2148 $$ = expr_binary2(ITM_EXPR_LE_E_D, $1, $3);
2149 break;
2150 case ITM_EXPR_REG:
2151 $$ = expr_binary2(ITM_EXPR_LE_E_R, $1, $3);
2152 break;
2153 case ITM_EXPR_IN_VECTOR_D:
2154 $$ = expr_binary2(ITM_EXPR_LE_E_INVD, $1, $3);
2155 break;
2156 default:
2157 $$ = expr_binary2(ITM_EXPR_LE, $1, $3);
2158 break;
2160 break;
2163 | name ASSIGN expr
2165 TRACE_MESSAGE('y', ("expr: NAME = expr\n"));
2166 $$ = expr_assign(ITM_EXPR_ASSIGN, $1, $3);
2168 | expr LOR expr
2170 TRACE_MESSAGE('y', ("expr: expr || expr\n"));
2171 $$ = expr_binary(ITM_EXPR_LOR, $1, $3);
2173 | expr LAND expr
2175 TRACE_MESSAGE('y', ("expr: expr && expr\n"));
2176 $$ = expr_binary(ITM_EXPR_LAND, $1, $3);