C_instr2.c 15 KB

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