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