Pristine Ack-5.5
[Ack-5.5.git] / util / ceg / EM_parser / common / C_instr2.c
1 #include "decl.h"
2 #include <system.h>
3
4 /* This file contains two arrays with information concerning the C_INSTR tokens:
5  *      t_C_info C_info[];      - Describes the arguments of EM-instructions
6  *      struct ? EM_instr[];    - Contains per entry:
7  *                                      1) The name of the C_INSTR
8  *                                      2) The type of its argument, an index in
9  *                                         C_info[].
10  *                                      3) The segment for which code/data must
11  *                                         be generated.
12  *                                The array is sorted on the C_INSTR-name.
13  *
14  * Furthermore there are two routines present in this file :
15  *      set_C_instr_info( instr)        - It looks 'instr' up in EM_instr[] and
16  *              char *instr;            - sets the global variables
17  *                                      - 'C_instr_info' and 'segment'.
18  *
19  *      arg_type( arg)          - 'arg' must be a string starting with a '$' 
20  *              char *arg;      - and a number. arg_type() will return the
21  *                              - type of the 'number'th argment of the current
22  *                              - C_INSTR.
23  *                              - For example, if the EM_table contains:
24  *                                  C_loc ==> "pushl $1".
25  *                                then arg_type( "$1") will return ARITH.
26  */
27
28
29 t_C_info C_info[] = {
30         /* NO_ARGS      */   { "()\n{\n",
31                                { 0, 0, 0, 0},
32                                { 0, 0, 0, 0},
33                                { 0, 0, 0, 0}},
34         /* C_ARG        */   { "( c)\narith c;\n{\n",
35                                { ARITH, 0, 0, 0},
36                                { "c", 0, 0, 0},
37                                { "c", 0, 0, 0}},
38         /* D_ARG        */   { "( d)\narith d;\n{\n",
39                                { ARITH, 0, 0, 0},
40                                { "d", 0, 0, 0},
41                                { "d", 0, 0, 0}},
42         /* F_ARG        */   { "( f)\narith f;\n{\n",
43                                { ARITH, 0, 0, 0},
44                                { "f", 0, 0, 0},
45                                { "f", 0, 0, 0}},
46         /* L_ARG        */   { "( l)\narith l;\n{\n", 
47                                { ARITH, 0, 0, 0},
48                                { "l", 0, 0, 0},
49                                { "(l >= 0 ? l + EM_BSIZE : l)", 0, 0, 0}},
50         /* N_ARG        */   { "( n)\narith n;\n{\n",
51                                { ARITH, 0, 0, 0},
52                                { "n", 0, 0, 0},
53                                { "n", 0, 0, 0}},
54         /* O_ARG        */   { "( o)\narith o;\n{\n",
55                                { ARITH, 0, 0, 0},
56                                { "o", 0, 0, 0},
57                                { "o", 0, 0, 0}},
58         /* R_ARG        */   { "( r)\narith r;\n{\n",
59                                { ARITH, 0, 0, 0},
60                                { "r", 0, 0, 0},
61                                { "r", 0, 0, 0}},
62         /* S_ARG        */   { "( s)\narith s;\n{\n",
63                                { ARITH, 0, 0, 0},
64                                { "s", 0, 0, 0},
65                                { "s", 0, 0, 0}},
66         /* Z_ARG        */   { "( z)\narith z;\n{\n",
67                                { ARITH, 0, 0, 0},
68                                { "z", 0, 0, 0},
69                                { "z", 0, 0, 0}},
70         /* W_ARG        */   { "( w)\narith w;\n{\n",
71                                { ARITH, 0, 0, 0},
72                                { "w", 0, 0, 0},
73                                { "w", 0, 0, 0}},
74         /* EXTERNAL     */   { "( g)\narith g;\n{\n",
75                                { STRING, ARITH, 0, 0},
76                                { "FAKE-ARGUMENT", "g", 0, 0},
77                                { "extnd_hol( B_holno)", "g", 0, 0}},
78         /* EXTERNAL_DNAM*/   { "( g, o)\nchar *g;\narith o;\n{\n",
79                                { STRING, ARITH, 0, 0},
80                                { "g", "o", 0, 0},
81                                { "extnd_dnam( g)", "o", 0, 0}},
82         /* EXTERNAL_DLB */   { "( g, o)\nlabel g;\narith o;\n{\n",
83                                { LABEL, ARITH, 0, 0},
84                                { "g", "o", 0, 0},
85                                { "extnd_dlb( g)", "o", 0, 0}},
86         /* P_ARG        */   { "( p)\nchar *p;\n{\n",
87                                { STRING, 0, 0, 0},
88                                { "p", 0, 0, 0},
89                                { "extnd_name( p)", 0, 0, 0}},
90         /* B_ARG        */   { "( b)\nlabel b;\n{\n",
91                                { STRING, 0, 0, 0},
92                                { "b", 0, 0, 0},
93                                { "extnd_ilb( b, B_procno)", 0, 0, 0}},
94         /* STRING+ARITH */   { "( val, sz)\nchar *val;\narith sz;\n{\n",
95                                { STRING, ARITH, 0, 0},
96                                { "val", "sz", 0, 0},
97                                { "val", "sz", 0, 0}},
98         /* BSS_EXT_DNAM */   { "( n, g, o, i)\nchar *g;\narith n, o;\nint i;\n{\n",
99                                { ARITH, STRING, ARITH, INT},
100                                { "n", "g", "o", "i"},
101                                { "n", "extnd_dnam( g)", "o", "i"}},
102         /* BSS_EXT_DLB  */   { "( n, g, o, i)\nlabel g;\narith n, o;\nint i;\n{\n",
103                                { ARITH, LABEL, ARITH, INT},
104                                { "n", "g", "o", "i"},
105                                { "n", "extnd_dlb( g)", "o", "i"}},
106         /* BSS_STR+AR   */   { "( n, val, sz, i)\nchar *val;\narith n, sz;\nint i;\n{\n",
107                                { ARITH, STRING, ARITH, INT},
108                                { "n", "val", "sz", "i"},
109                                { "n", "val", "sz", "i"}},
110         /* BSS_W_ARG    */   { "( n, w, i)\narith n, w;\nint i;\n{\n",
111                                { ARITH, ARITH, INT, 0},
112                                { "n", "w", "i", 0},
113                                { "n", "w", "i", 0}},
114         /* BSS_PNAM     */   { "( n, p, i)\narith n;\nchar *p;int i;\n\n{\n",
115                                { ARITH, STRING, INT, 0},
116                                { "n", "p", "i", 0},
117                                { "n", "extnd_name( p)", "i", 0}},
118         /* BSS_ILB      */   { "( n, b, i)\narith n;\nlabel b;int i;\n\n{\n",
119                                { ARITH, STRING, INT, 0},
120                                { "n", "b", "i", 0},
121                                { "n", "extnd_ilb( b, B_procno)", "i", 0}},
122         /* ID+N_ARG     */   { "( p, n)\nchar *p;\narith n;\n{\n",
123                                { STRING, ARITH, 0, 0},
124                                { "p", "n", 0, 0},
125                                { "extnd_name( p)", "n", 0, 0}},
126         /* ARITH+ARITH  */   { "( n, w)\narith n, w;\n{\n",
127                                { ARITH, ARITH, 0, 0},
128                                { "n", "w", 0, 0},
129                                { "n", "w", 0, 0}},
130         /* EXT_DNAM     */   { "( g)\nchar *g;\n{\n",
131                                { STRING, 0, 0, 0},
132                                { "g", 0, 0, 0},
133                                { "extnd_dnam( g)", 0, 0, 0}},
134         /* EXT_DLB      */   { "( g)\nlabel g;\n{\n",
135                                { LABEL, 0, 0, 0},
136                                { "g", 0, 0, 0},
137                                { "extnd_dlb( g)", 0, 0, 0}},
138         /* ONE_INT      */   { "( i)\nint i;\n{\n",
139                                { INT, 0, 0, 0},
140                                { "i", 0, 0, 0},
141                                { "i", 0, 0, 0}},
142         /* _STRING      */   { "( str)\nchar *str;\n{\n",
143                                { STRING, 0, 0, 0},
144                                { "str", 0, 0, 0},
145                                { "str", 0, 0, 0}}
146                      }, *C_instr_info;
147
148 #define N_INSTR 270
149
150 struct { char *name; int class, segment;}
151                 EM_instr[ N_INSTR ] = {
152                                 { "C_aar", W_ARG, SEGTXT},
153                                 { "C_aar_narg", NO_ARGS, SEGTXT},
154                                 { "C_adf", W_ARG, SEGTXT},
155                                 { "C_adf_narg", NO_ARGS, SEGTXT},
156                                 { "C_adi", W_ARG, SEGTXT},
157                                 { "C_adi_narg", NO_ARGS, SEGTXT},
158                                 { "C_adp", F_ARG, SEGTXT},
159                                 { "C_ads", W_ARG, SEGTXT},
160                                 { "C_ads_narg", NO_ARGS, SEGTXT},
161                                 { "C_adu", W_ARG, SEGTXT},
162                                 { "C_adu_narg", NO_ARGS, SEGTXT},
163                                 { "C_and", W_ARG, SEGTXT},
164                                 { "C_and_narg", NO_ARGS, SEGTXT},
165                                 { "C_asp", F_ARG, SEGTXT},
166                                 { "C_ass", W_ARG, SEGTXT},
167                                 { "C_ass_narg", NO_ARGS, SEGTXT},
168                                 { "C_beq", B_ARG, SEGTXT},
169                                 { "C_bge", B_ARG, SEGTXT},
170                                 { "C_bgt", B_ARG, SEGTXT},
171                                 { "C_ble", B_ARG, SEGTXT},
172                                 { "C_blm", Z_ARG, SEGTXT},
173                                 { "C_bls", W_ARG, SEGTXT},
174                                 { "C_bls_narg", NO_ARGS, SEGTXT},
175                                 { "C_blt", B_ARG, SEGTXT},
176                                 { "C_bne", B_ARG, SEGTXT},
177                                 { "C_bra", B_ARG, SEGTXT},
178                                 { "C_bss_cst", BSS_W_ARG, SEGBSS},
179                                 { "C_bss_dlb", BSS_EXT_DLB, SEGBSS},
180                                 { "C_bss_dnam", BSS_EXT_DNAM, SEGBSS},
181                                 { "C_bss_fcon", BSS_STR_AR, SEGBSS},
182                                 { "C_bss_icon", BSS_STR_AR, SEGBSS},
183                                 { "C_bss_ilb", BSS_ILB, SEGBSS},
184                                 { "C_bss_pnam", BSS_PNAM, SEGBSS},
185                                 { "C_bss_ucon", BSS_STR_AR, SEGBSS},
186                                 { "C_cai", NO_ARGS, SEGTXT},
187                                 { "C_cal", P_ARG, SEGTXT},
188                                 { "C_cff", NO_ARGS, SEGTXT},
189                                 { "C_cfi", NO_ARGS, SEGTXT},
190                                 { "C_cfu", NO_ARGS, SEGTXT},
191                                 { "C_cif", NO_ARGS, SEGTXT},
192                                 { "C_cii", NO_ARGS, SEGTXT},
193                                 { "C_ciu", NO_ARGS, SEGTXT},
194                                 { "C_close", NO_ARGS, NOSEG},
195                                 { "C_cmf", W_ARG, SEGTXT},
196                                 { "C_cmf_narg", NO_ARGS, SEGTXT},
197                                 { "C_cmi", W_ARG, SEGTXT},
198                                 { "C_cmi_narg", NO_ARGS, SEGTXT},
199                                 { "C_cmp", NO_ARGS, SEGTXT},
200                                 { "C_cms", W_ARG, SEGTXT},
201                                 { "C_cms_narg", NO_ARGS, SEGTXT},
202                                 { "C_cmu", W_ARG, SEGTXT},
203                                 { "C_cmu_narg", NO_ARGS, SEGTXT},
204                                 { "C_com", W_ARG, SEGTXT},
205                                 { "C_com_narg", NO_ARGS, SEGTXT},
206                                 { "C_con_cst", C_ARG, SEGCON},
207                                 { "C_con_dlb", EXTERNAL_DLB, SEGCON},
208                                 { "C_con_dnam", EXTERNAL_DNAM, SEGCON},
209                                 { "C_con_fcon", STRING_ARITH, SEGCON},
210                                 { "C_con_icon", STRING_ARITH, SEGCON},
211                                 { "C_con_ilb", B_ARG, SEGCON},
212                                 { "C_con_pnam", P_ARG, SEGCON},
213                                 { "C_con_scon", STRING_ARITH, SEGCON},
214                                 { "C_con_ucon", STRING_ARITH, SEGCON},
215                                 { "C_csa", W_ARG, SEGTXT},
216                                 { "C_csa_narg", NO_ARGS, SEGTXT},
217                                 { "C_csb", W_ARG, SEGTXT},
218                                 { "C_csb_narg", NO_ARGS, SEGTXT},
219                                 { "C_cst", C_ARG, NOSEG},
220                                 { "C_cuf", NO_ARGS, SEGTXT},
221                                 { "C_cui", NO_ARGS, SEGTXT},
222                                 { "C_cuu", NO_ARGS, SEGTXT},
223                                 { "C_db_sline", NO_ARGS, SEGTXT},
224                                 { "C_dch", NO_ARGS, SEGTXT},
225                                 { "C_dec", NO_ARGS, SEGTXT},
226                                 { "C_dee", EXTERNAL, SEGTXT},
227                                 { "C_dee_dlb", EXTERNAL_DLB, SEGTXT},
228                                 { "C_dee_dnam", EXTERNAL_DNAM, SEGTXT},
229                                 { "C_del", L_ARG, SEGTXT},
230                                 { "C_df_dlb", EXT_DLB, NOSEG},
231                                 { "C_df_dnam", EXT_DNAM, NOSEG},
232                                 { "C_df_ilb", B_ARG, SEGTXT},
233                                 { "C_dlb", STRING_ARITH, SEGTXT},
234                                 { "C_dnam", STRING_ARITH, SEGTXT},
235                                 { "C_dup", S_ARG, SEGTXT},
236                                 { "C_dus", W_ARG, SEGTXT},
237                                 { "C_dus_narg", NO_ARGS, SEGTXT},
238                                 { "C_dvf", W_ARG, SEGTXT},
239                                 { "C_dvf_narg", NO_ARGS, SEGTXT},
240                                 { "C_dvi", W_ARG, SEGTXT},
241                                 { "C_dvi_narg", NO_ARGS, SEGTXT},
242                                 { "C_dvu", W_ARG, SEGTXT},
243                                 { "C_dvu_narg", NO_ARGS, SEGTXT},
244                                 { "C_end", Z_ARG, SEGTXT},
245                                 { "C_end_narg", NO_ARGS, SEGTXT},
246                                 { "C_exa_dlb", EXT_DLB, NOSEG},
247                                 { "C_exa_dnam", EXT_DNAM, NOSEG},
248                                 { "C_exc", ARITH_ARITH, NOSEG},
249                                 { "C_exg", W_ARG, SEGTXT},
250                                 { "C_exg_narg", NO_ARGS, SEGTXT},
251                                 { "C_exp", P_ARG, SEGTXT},
252                                 { "C_fcon", STRING_ARITH, SEGTXT},
253                                 { "C_fef", W_ARG, SEGTXT},
254                                 { "C_fef_narg", NO_ARGS, SEGTXT},
255                                 { "C_fif", W_ARG, SEGTXT},
256                                 { "C_fif_narg", NO_ARGS, SEGTXT},
257                                 { "C_fil", EXTERNAL, SEGTXT},
258                                 { "C_fil_dlb", EXTERNAL_DLB, SEGTXT},
259                                 { "C_fil_dnam", EXTERNAL_DNAM, SEGTXT},
260                                 { "C_gto", EXTERNAL, SEGTXT},
261                                 { "C_gto_dlb", EXTERNAL_DLB, SEGTXT},
262                                 { "C_gto_dnam", EXTERNAL_DNAM, SEGTXT},
263                                 { "C_hol_cst", BSS_W_ARG, SEGHOL},
264                                 { "C_hol_dlb", BSS_EXT_DLB, SEGHOL},
265                                 { "C_hol_dnam", BSS_EXT_DNAM, SEGHOL},
266                                 { "C_hol_fcon", BSS_STR_AR, SEGHOL},
267                                 { "C_hol_icon", BSS_STR_AR, SEGHOL},
268                                 { "C_hol_ilb", BSS_ILB, SEGHOL},
269                                 { "C_hol_pnam", BSS_PNAM, SEGHOL},
270                                 { "C_hol_ucon", BSS_STR_AR, SEGHOL},
271                                 { "C_icon", STRING_ARITH, SEGTXT},
272                                 { "C_ilb", B_ARG, SEGTXT},
273                                 { "C_ina_dlb", EXT_DLB, SEGTXT},
274                                 { "C_ina_dnam", EXT_DNAM, SEGTXT},
275                                 { "C_inc", NO_ARGS, SEGTXT},
276                                 { "C_ine", EXTERNAL, SEGTXT},
277                                 { "C_ine_dlb", EXTERNAL_DLB, SEGTXT},
278                                 { "C_ine_dnam", EXTERNAL_DNAM, SEGTXT},
279                                 { "C_init", ARITH_ARITH, SEGTXT},
280                                 { "C_inl", L_ARG, SEGTXT},
281                                 { "C_inn", W_ARG, SEGTXT},
282                                 { "C_inn_narg", NO_ARGS, SEGTXT},
283                                 { "C_inp", P_ARG, NOSEG},
284                                 { "C_ior", W_ARG, SEGTXT},
285                                 { "C_ior_narg", NO_ARGS, SEGTXT},
286                                 { "C_jump", _STRING, SEGTXT},
287                                 { "C_lae", EXTERNAL, SEGTXT},
288                                 { "C_lae_dlb", EXTERNAL_DLB, SEGTXT},
289                                 { "C_lae_dnam", EXTERNAL_DNAM, SEGTXT},
290                                 { "C_lal", L_ARG, SEGTXT},
291                                 { "C_lar", W_ARG, SEGTXT},
292                                 { "C_lar_narg", NO_ARGS, SEGTXT},
293                                 { "C_ldc", D_ARG, SEGTXT},
294                                 { "C_lde", EXTERNAL, SEGTXT},
295                                 { "C_lde_dlb", EXTERNAL_DLB, SEGTXT},
296                                 { "C_lde_dnam", EXTERNAL_DNAM, SEGTXT},
297                                 { "C_ldf", F_ARG, SEGTXT},
298                                 { "C_ldl", L_ARG, SEGTXT},
299                                 { "C_lfr", S_ARG, SEGTXT},
300                                 { "C_lil", L_ARG, SEGTXT},
301                                 { "C_lim", NO_ARGS, SEGTXT},
302                                 { "C_lin", N_ARG, SEGTXT},
303                                 { "C_lni", NO_ARGS, SEGTXT},
304                                 { "C_loc", C_ARG, SEGTXT},
305                                 { "C_locals", N_ARG, SEGTXT},
306                                 { "C_loe", EXTERNAL, SEGTXT},
307                                 { "C_loe_dlb", EXTERNAL_DLB, SEGTXT},
308                                 { "C_loe_dnam", EXTERNAL_DNAM, SEGTXT},
309                                 { "C_lof", F_ARG, SEGTXT},
310                                 { "C_loi", O_ARG, SEGTXT},
311                                 { "C_lol", L_ARG, SEGTXT},
312                                 { "C_lor", R_ARG, SEGTXT},
313                                 { "C_los", W_ARG, SEGTXT},
314                                 { "C_los_narg", NO_ARGS, SEGTXT},
315                                 { "C_lpb", NO_ARGS, SEGTXT},
316                                 { "C_lpi", P_ARG, SEGTXT},
317                                 { "C_lxa", N_ARG, SEGTXT},
318                                 { "C_lxl", N_ARG, SEGTXT},
319                                 { "C_magic", NO_ARGS, NOSEG},
320                                 { "C_mes_begin", ONE_INT, NOSEG},
321                                 { "C_mes_end", NO_ARGS, NOSEG},
322                                 { "C_mlf", W_ARG, SEGTXT},
323                                 { "C_mlf_narg", NO_ARGS, SEGTXT},
324                                 { "C_mli", W_ARG, SEGTXT},
325                                 { "C_mli_narg", NO_ARGS, SEGTXT},
326                                 { "C_mlu", W_ARG, SEGTXT},
327                                 { "C_mlu_narg", NO_ARGS, SEGTXT},
328                                 { "C_mon", NO_ARGS, SEGTXT},
329                                 { "C_ngf", W_ARG, SEGTXT},
330                                 { "C_ngf_narg", NO_ARGS, SEGTXT},
331                                 { "C_ngi", W_ARG, SEGTXT},
332                                 { "C_ngi_narg", NO_ARGS, SEGTXT},
333                                 { "C_nop", NO_ARGS, SEGTXT},
334                                 { "C_open", _STRING, NOSEG},
335                                 { "C_pnam", P_ARG, NOSEG},
336                                 { "C_pro", P_ARG, SEGTXT},
337                                 { "C_pro_narg", NO_ARGS, SEGTXT},
338                                 { "C_prolog", NO_ARGS, SEGTXT},
339                                 { "C_rck", W_ARG, SEGTXT},
340                                 { "C_rck_narg", NO_ARGS, SEGTXT},
341                                 { "C_ret", Z_ARG, SEGTXT},
342                                 { "C_rmi", W_ARG, SEGTXT},
343                                 { "C_rmi_narg", NO_ARGS, SEGTXT},
344                                 { "C_rmu", W_ARG, SEGTXT},
345                                 { "C_rmu_narg", NO_ARGS, SEGTXT},
346                                 { "C_rol", W_ARG, SEGTXT},
347                                 { "C_rol_narg", NO_ARGS, SEGTXT},
348                                 { "C_rom_cst", C_ARG, SEGROM},
349                                 { "C_rom_dlb", EXTERNAL_DLB, SEGROM},
350                                 { "C_rom_dnam", EXTERNAL_DNAM, SEGROM},
351                                 { "C_rom_fcon", STRING_ARITH, SEGROM},
352                                 { "C_rom_icon", STRING_ARITH, SEGROM},
353                                 { "C_rom_ilb", B_ARG, SEGROM},
354                                 { "C_rom_pnam", P_ARG, SEGROM},
355                                 { "C_rom_scon", STRING_ARITH, SEGROM},
356                                 { "C_rom_ucon", STRING_ARITH, SEGROM},
357                                 { "C_ror", W_ARG, SEGTXT},
358                                 { "C_ror_narg", NO_ARGS, SEGTXT},
359                                 { "C_rtt", NO_ARGS, SEGTXT},
360                                 { "C_sar", W_ARG, SEGTXT},
361                                 { "C_sar_narg", NO_ARGS, SEGTXT},
362                                 { "C_sbf", W_ARG, SEGTXT},
363                                 { "C_sbf_narg", NO_ARGS, SEGTXT},
364                                 { "C_sbi", W_ARG, SEGTXT},
365                                 { "C_sbi_narg", NO_ARGS, SEGTXT},
366                                 { "C_sbs", W_ARG, SEGTXT},
367                                 { "C_sbs_narg", NO_ARGS, SEGTXT},
368                                 { "C_sbu", W_ARG, SEGTXT},
369                                 { "C_sbu_narg", NO_ARGS, SEGTXT},
370                                 { "C_scon", STRING_ARITH, NOSEG},
371                                 { "C_sde", EXTERNAL, SEGTXT},
372                                 { "C_sde_dlb", EXTERNAL_DLB, SEGTXT},
373                                 { "C_sde_dnam", EXTERNAL_DNAM, SEGTXT},
374                                 { "C_sdf", F_ARG, SEGTXT},
375                                 { "C_sdl", L_ARG, SEGTXT},
376                                 { "C_set", W_ARG, SEGTXT},
377                                 { "C_set_narg", NO_ARGS, SEGTXT},
378                                 { "C_sig", NO_ARGS, SEGTXT},
379                                 { "C_sil", L_ARG, SEGTXT},
380                                 { "C_sim", NO_ARGS, SEGTXT},
381                                 { "C_sli", W_ARG, SEGTXT},
382                                 { "C_sli_narg", NO_ARGS, SEGTXT},
383                                 { "C_slu", W_ARG, SEGTXT},
384                                 { "C_slu_narg", NO_ARGS, SEGTXT},
385                                 { "C_sri", W_ARG, SEGTXT},
386                                 { "C_sri_narg", NO_ARGS, SEGTXT},
387                                 { "C_sru", W_ARG, SEGTXT},
388                                 { "C_sru_narg", NO_ARGS, SEGTXT},
389                                 { "C_ste", EXTERNAL, SEGTXT},
390                                 { "C_ste_dlb", EXTERNAL_DLB, SEGTXT},
391                                 { "C_ste_dnam", EXTERNAL_DNAM, SEGTXT},
392                                 { "C_stf", F_ARG, SEGTXT},
393                                 { "C_sti", O_ARG, SEGTXT},
394                                 { "C_stl", L_ARG, SEGTXT},
395                                 { "C_str", R_ARG, SEGTXT},
396                                 { "C_sts", W_ARG, SEGTXT},
397                                 { "C_sts_narg", NO_ARGS, SEGTXT},
398                                 { "C_teq", NO_ARGS, SEGTXT},
399                                 { "C_tge", NO_ARGS, SEGTXT},
400                                 { "C_tgt", NO_ARGS, SEGTXT},
401                                 { "C_tle", NO_ARGS, SEGTXT},
402                                 { "C_tlt", NO_ARGS, SEGTXT},
403                                 { "C_tne", NO_ARGS, SEGTXT},
404                                 { "C_trp", NO_ARGS, SEGTXT},
405                                 { "C_ucon", STRING_ARITH, NOSEG},
406                                 { "C_xor", W_ARG, SEGTXT},
407                                 { "C_xor_narg", NO_ARGS, SEGTXT},
408                                 { "C_zeq", B_ARG, SEGTXT},
409                                 { "C_zer", W_ARG, SEGTXT},
410                                 { "C_zer_narg", NO_ARGS, SEGTXT},
411                                 { "C_zge", B_ARG, SEGTXT},
412                                 { "C_zgt", B_ARG, SEGTXT},
413                                 { "C_zle", B_ARG, SEGTXT},
414                                 { "C_zlt", B_ARG, SEGTXT},
415                                 { "C_zne", B_ARG, SEGTXT},
416                                 { "C_zre", EXTERNAL, SEGTXT},
417                                 { "C_zre_dlb", EXTERNAL_DLB, SEGTXT},
418                                 { "C_zre_dnam", EXTERNAL_DNAM, SEGTXT},
419                                 { "C_zrf", W_ARG, SEGTXT},
420                                 { "C_zrf_narg", NO_ARGS, SEGTXT},
421                                 { "C_zrl", L_ARG, SEGTXT}
422                         };
423
424 set_C_instr_info( instr)
425 char *instr;
426 {
427         int low, high, mid, rel;
428
429         low = 0;
430         high = N_INSTR - 1;
431
432         while ( TRUE) {
433                 mid = ( low + high) / 2;
434                 rel = strcmp( instr, EM_instr[mid].name);
435
436                 if ( rel == 0 )
437                         break;
438                 else if ( high == low) {
439                         fprint(STDERR, "ERROR : can't find >>%s<< !!\n", instr);
440                         abort();
441                 }
442                 else if ( rel < 0)
443                         high = mid;
444                 else
445                         /* watch it, mit is truncated !! */
446                         low = ( mid == low ? low + 1: mid);
447         }
448         C_instr_info = &C_info[ EM_instr[mid].class];
449         segment = EM_instr[mid].segment;
450 }
451
452 int arg_type( arg)
453 char *arg;
454
455 /* return argument-type from $i */
456
457 {
458         int i;
459
460         i = *(arg+1) - '0' - 1;
461         return( C_instr_info->arg_type[i]);
462 }