home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / superopt-2.5-src.tgz / tar.out / fsf / superopt / insn.def < prev    next >
Text File  |  1996-09-28  |  12KB  |  368 lines

  1. /* This file contains the definitions and documentation for the instructions
  2.    used in the Superoptimizer.
  3.  
  4.    Copyright (C) 1992, 1994, 1995 Free Software Foundation, Inc.
  5.  
  6.    This program is free software; you can redistribute it and/or modify it
  7.    under the terms of the GNU General Public License as published by the
  8.    Free Software Foundation; either version 2, or (at your option) any
  9.    later version.
  10.  
  11.    This program is distributed in the hope that it will be useful, but
  12.    WITHOUT ANY WARRANTY; without even the implied warranty of
  13.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14.    General Public License for more details.
  15.  
  16.    You should have received a copy of the GNU General Public License along
  17.    with this program; see the file COPYING.  If not, write to the Free
  18.    Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  19.  
  20. /* The fields in the cpp macro call "DEF_INSN()" are:
  21.  
  22.    1. The internal name of the instruction.
  23.  
  24.    2. The class of the instruction.  These are stored in the insn_class
  25.    array and are accessed via the GET_INSN_CLASS macro.  They are defined
  26.    as  follows:
  27.  
  28.      "1" an rtx code for a unary arithmetic expression (e.g, ABSVAL, CLZ)
  29.      "c" an rtx code for a commutative binary operation (e.g,  ADD, XOR)
  30.      "2" an rtx code for a non-commutative binary operation (e.g., SUB, CMP)
  31.      "<" an rtx code for a non-commutative binary instruction that only
  32.      writes to the condition code
  33.      "=" an rtx code for a commutative binary instruction that only writes
  34.      to the condition code
  35.      "x" everything else
  36.  
  37.    3. The printed name of the instruction.
  38.  
  39.    */
  40.  
  41. /* Arithmetic insns.  d = r1 + r2 [+ cy] */
  42. DEF_INSN (ADD,        'b', "add")
  43. DEF_INSN (ADD_CI,    'b', "add_ci")
  44. DEF_INSN (ADD_CO,    'b', "add_co")
  45. DEF_INSN (ADD_CIO,    'b', "add_cio")
  46. /* Arithmetic insns.  d = r1 - r2 [- cy] */
  47. DEF_INSN (SUB,        '2', "sub")
  48. DEF_INSN (SUB_CI,    '2', "sub_ci")
  49. DEF_INSN (SUB_CO,    '2', "sub_co")
  50. DEF_INSN (SUB_CIO,    '2', "sub_cio")
  51. /* Arithmetic insns.  d = r1 + ~r2 + cy/1 */
  52. DEF_INSN (ADC_CI,    '2', "adc_ci")
  53. DEF_INSN (ADC_CO,    '2', "adc_co")
  54. DEF_INSN (ADC_CIO,    '2', "adc_cio")
  55. /* Arithmetic insns.  d = r1 + ~r2  */
  56. DEF_INSN (ADDCMPL,    '2', "addcmpl")
  57.  
  58. /* Logical insns that don't affect the carry flag.  */
  59. DEF_INSN (AND,        'b', "and")
  60. DEF_INSN (IOR,        'b', "ior")
  61. DEF_INSN (XOR,        'b', "xor")
  62. DEF_INSN (ANDC,        '2', "andc")
  63. DEF_INSN (IORC,        '2', "iorc")
  64. DEF_INSN (EQV,        '2', "eqv")
  65. DEF_INSN (NAND,        'b', "nand")
  66. DEF_INSN (NOR,        'b', "nor")
  67.  
  68. /* Logical insns that reset the carry flag.  */
  69. DEF_INSN (AND_RC,    'b', "and_rc")
  70. DEF_INSN (IOR_RC,    'b', "ior_rc")
  71. DEF_INSN (XOR_RC,    'b', "xor_rc")
  72. DEF_INSN (ANDC_RC,    '2', "andc_rc")
  73. DEF_INSN (IORC_RC,    '2', "iorc_rc")
  74. DEF_INSN (EQV_RC,    '2', "eqv_rc")
  75. DEF_INSN (NAND_RC,    'b', "nand_rc")
  76. DEF_INSN (NOR_RC,    'b', "nor_rc")
  77.  
  78. /* Logical insns that clobber the carry flag.  */
  79. DEF_INSN (AND_CC,    'b', "and_cc")
  80. DEF_INSN (IOR_CC,    'b', "ior_cc")
  81. DEF_INSN (XOR_CC,    'b', "xor_cc")
  82. DEF_INSN (ANDC_CC,    '2', "andc_cc")
  83. DEF_INSN (IORC_CC,    '2', "iorc_cc")
  84. DEF_INSN (EQV_CC,    '2', "eqv_cc")
  85. DEF_INSN (NAND_CC,    'b', "nand_cc")
  86. DEF_INSN (NOR_CC,    'b', "nor_cc")
  87.  
  88. /* Bit shift and count.  */
  89. DEF_INSN (LSHIFTR,    '2', "log_shift_right")
  90. DEF_INSN (ASHIFTR,    '2', "arith_shift_right")
  91. DEF_INSN (SHIFTL,    '2', "shift_left")
  92. DEF_INSN (LSHIFTR_CO,    '2', "log_shift_right_co")
  93. DEF_INSN (ASHIFTR_CO,    '2', "arith_shift_right_co")
  94. DEF_INSN (SHIFTL_CO,    '2', "shift_left_co")
  95. DEF_INSN (ROTATEL,    '2', "rotate_left")
  96. DEF_INSN (ROTATEL_CO,    '2', "rotate_left_co")
  97. DEF_INSN (ROTATER_CO,    '2', "rotate_right_co")
  98.  
  99. /* Rotate thru carry.  */
  100. DEF_INSN (ROTATEXL_CIO,    '2', "rotate_thru_carry_left_co")
  101. DEF_INSN (ROTATEXR_CIO,    '2', "rotate_thru_carry_right_co")
  102.  
  103. /* Shift arithmetic right instruction and set carry iff the shifted
  104.    operand is negative and any bit shifted out is 1.  */
  105. DEF_INSN (ASHIFTR_CON,    '2', "arith_shift_right_set_carry_if_neg_and_nzbit_lost")
  106.  
  107. /* Extract.  */
  108. DEF_INSN (EXTS1,    '2', "exts1")
  109. DEF_INSN (EXTS2,    '2', "exts2")
  110. DEF_INSN (EXTS8,    '2', "exts8")
  111. DEF_INSN (EXTS16,    '2', "exts16")
  112. DEF_INSN (EXTU1,    '2', "extu1")
  113. DEF_INSN (EXTU2,    '2', "extu2")
  114.  
  115. /* Count leading/trailing zero instructions.  */
  116. DEF_INSN (CLZ,        '1', "clz")
  117. DEF_INSN (CTZ,        '1', "ctz")
  118. DEF_INSN (FF1,        '1', "ff1")
  119. DEF_INSN (FF0,        '1', "ff0")
  120. DEF_INSN (BSF86,    '1', "bsf86")
  121.  
  122. DEF_INSN (ABSVAL,    '1', "abs")
  123. DEF_INSN (NABSVAL,    '1', "nabs")
  124. DEF_INSN (CMP,        '<', "cmp")
  125.  
  126. /* 29k CMP instructions.  */
  127. DEF_INSN (CPEQ,        'c', "cpeq")
  128. DEF_INSN (CPGE,        '2', "cpge")
  129. DEF_INSN (CPGEU,    '2', "cpgeu")
  130. DEF_INSN (CPGT,        '2', "cpgt")
  131. DEF_INSN (CPGTU,    '2', "cpgtu")
  132. DEF_INSN (CPLE,        '2', "cple")
  133. DEF_INSN (CPLEU,    '2', "cpleu")
  134. DEF_INSN (CPLT,        '2', "cplt")
  135. DEF_INSN (CPLTU,    '2', "cpltu")
  136. DEF_INSN (CPNEQ,    'c', "cpneq")
  137.  
  138. /* Alpha CMP instructions.  */
  139. DEF_INSN (CMPEQ,    'c', "cmpeq")
  140. DEF_INSN (CMPLE,    '2', "cmple")
  141. DEF_INSN (CMPLEU,    '2', "cmpleu")
  142. DEF_INSN (CMPLT,    '2', "cmplt")
  143. DEF_INSN (CMPLTU,    '2', "cmpltu")
  144.  
  145. /* 88100 CMP instruction.  */
  146. DEF_INSN (CMPPAR,    '2', "cmppar")
  147.  
  148. /* SH CMP instructions.  */
  149. DEF_INSN (CYEQ,        '=', "cyeq")
  150. DEF_INSN (CYGTU,    '<', "cygtu")
  151. DEF_INSN (CYGEU,    '<', "cygeu")
  152. DEF_INSN (CYGTS,    '<', "cygts")
  153. DEF_INSN (CYGES,    '<', "cyges")
  154. DEF_INSN (CYAND,    '=', "cyand")
  155.  
  156. /* SH specific instruction.  */
  157. DEF_INSN (MERGE16,    '2', "merge16")
  158. DEF_INSN (DECR_CYEQ,    '2', "decr_cyeq")
  159.  
  160. /* Difference-or-zero (rs6000) */
  161. DEF_INSN (DOZ,        '2', "difference_or_zero")
  162.  
  163. DEF_INSN (COPY,        '1', "copy")
  164. DEF_INSN (EXCHANGE,    '2', "exchange")
  165.  
  166. /* Set, clear, complement carry */
  167. DEF_INSN (SETCY,    'x', "set_cy")
  168. DEF_INSN (CLRCY,    'x', "clear_cy")
  169. DEF_INSN (COMCY,    'x', "complement_cy")
  170.  
  171. /* Alpha conditional move */
  172. DEF_INSN (CMOVEQ,    '2', "cmoveq")
  173. DEF_INSN (CMOVNE,    '2', "cmovne")
  174. DEF_INSN (CMOVLT,    '2', "cmovlt")
  175. DEF_INSN (CMOVGE,    '2', "cmovge")
  176. DEF_INSN (CMOVLE,    '2', "cmovle")
  177. DEF_INSN (CMOVGT,    '2', "cmovgt")
  178.  
  179. DEF_INSN (INVDIV,    '2', "invdiv")
  180. DEF_INSN (INVMOD,    '2', "invmod")
  181. DEF_INSN (UMULWIDEN_HI,    '2', "umulwiden_hi")
  182. DEF_INSN (MUL,        '2', "mul")
  183.  
  184. #if UDIV_WITH_SDIV
  185. DEF_INSN (SDIV,        '2', "sdiv")
  186. #endif
  187.  
  188. DEF_INSN (ADD_SEQ,    '2', "add_seq")
  189. DEF_INSN (ADD_SNE,    '2', "add_sne")
  190. DEF_INSN (ADD_SLTS,    '2', "add_slts")
  191. DEF_INSN (ADD_SGES,    '2', "add_sges")
  192. DEF_INSN (ADD_SLES,    '2', "add_sles")
  193. DEF_INSN (ADD_SGTS,    '2', "add_sgts")
  194. DEF_INSN (ADD_SLTU,    '2', "add_sltu")
  195. DEF_INSN (ADD_SGEU,    '2', "add_sgeu")
  196. DEF_INSN (ADD_SLEU,    '2', "add_sleu")
  197. DEF_INSN (ADD_SGTU,    '2', "add_sgtu")
  198. DEF_INSN (ADD_SOVS,    '2', "add_sovs")
  199. DEF_INSN (ADD_SNVS,    '2', "add_snvs")
  200. DEF_INSN (ADD_SODD,    '2', "add_sodd")
  201. DEF_INSN (ADD_SEVN,    '2', "add_sevn")
  202. DEF_INSN (ADD_S,    '2', "add_s")
  203. DEF_INSN (ADD_CIO_SEQ,    '2', "add_cio_seq")
  204. DEF_INSN (ADD_CIO_SNE,    '2', "add_cio_sne")
  205. DEF_INSN (ADD_CIO_SLTU,    '2', "add_cio_sltu")
  206. DEF_INSN (ADD_CIO_SGEU,    '2', "add_cio_sgeu")
  207. DEF_INSN (ADD_CIO_SLEU,    '2', "add_cio_sleu")
  208. DEF_INSN (ADD_CIO_SGTU,    '2', "add_cio_sgtu")
  209. DEF_INSN (ADD_CIO_SODD,    '2', "add_cio_sodd")
  210. DEF_INSN (ADD_CIO_SEVN,    '2', "add_cio_sevn")
  211. DEF_INSN (ADD_CIO_S,    '2', "add_cio_s")
  212. DEF_INSN (ADD_CO_SEQ,    '2', "add_co_seq")
  213. DEF_INSN (ADD_CO_SNE,    '2', "add_co_sne")
  214. DEF_INSN (ADD_CO_SLTU,    '2', "add_co_sltu")
  215. DEF_INSN (ADD_CO_SGEU,    '2', "add_co_sgeu")
  216. DEF_INSN (ADD_CO_SLEU,    '2', "add_co_sleu")
  217. DEF_INSN (ADD_CO_SGTU,    '2', "add_co_sgtu")
  218. DEF_INSN (ADD_CO_SODD,    '2', "add_co_sodd")
  219. DEF_INSN (ADD_CO_SEVN,    '2', "add_co_sevn")
  220. DEF_INSN (ADD_CO_S,    '2', "add_co_s")
  221.  
  222. DEF_INSN (SUB_SEQ,    '2', "sub_seq")
  223. DEF_INSN (SUB_SNE,    '2', "sub_sne")
  224. DEF_INSN (SUB_SLTS,    '2', "sub_slts")
  225. DEF_INSN (SUB_SGES,    '2', "sub_sges")
  226. DEF_INSN (SUB_SLES,    '2', "sub_sles")
  227. DEF_INSN (SUB_SGTS,    '2', "sub_sgts")
  228. DEF_INSN (SUB_SODD,    '2', "sub_sodd")
  229. DEF_INSN (SUB_SEVN,    '2', "sub_sevn")
  230. DEF_INSN (SUB_S,    '2', "sub_s")
  231.  
  232. DEF_INSN (ADC_CIO_SEQ,    '2', "adc_cio_seq")
  233. DEF_INSN (ADC_CIO_SNE,    '2', "adc_cio_sne")
  234. DEF_INSN (ADC_CIO_SLTU,    '2', "adc_cio_sltu")
  235. DEF_INSN (ADC_CIO_SGEU,    '2', "adc_cio_sgeu")
  236. DEF_INSN (ADC_CIO_SLEU,    '2', "adc_cio_sleu")
  237. DEF_INSN (ADC_CIO_SGTU,    '2', "adc_cio_sgtu")
  238. DEF_INSN (ADC_CIO_SODD,    '2', "adc_cio_sodd")
  239. DEF_INSN (ADC_CIO_SEVN,    '2', "adc_cio_sevn")
  240. DEF_INSN (ADC_CIO_S,    '2', "adc_cio_s")
  241. DEF_INSN (ADC_CO_SEQ,    '2', "adc_co_seq")
  242. DEF_INSN (ADC_CO_SNE,    '2', "adc_co_sne")
  243. DEF_INSN (ADC_CO_SLTU,    '2', "adc_co_sltu")
  244. DEF_INSN (ADC_CO_SGEU,    '2', "adc_co_sgeu")
  245. DEF_INSN (ADC_CO_SLEU,    '2', "adc_co_sleu")
  246. DEF_INSN (ADC_CO_SGTU,    '2', "adc_co_sgtu")
  247. DEF_INSN (ADC_CO_SODD,    '2', "adc_co_sodd")
  248. DEF_INSN (ADC_CO_SEVN,    '2', "adc_co_sevn")
  249. DEF_INSN (ADC_CO_S,    '2', "adc_co_s")
  250.  
  251. DEF_INSN (COMCLR_SEQ,    '2', "comclr_seq")
  252. DEF_INSN (COMCLR_SNE,    '2', "comclr_sne")
  253. DEF_INSN (COMCLR_SLTS,    '2', "comclr_slts")
  254. DEF_INSN (COMCLR_SGES,    '2', "comclr_sges")
  255. DEF_INSN (COMCLR_SLES,    '2', "comclr_sles")
  256. DEF_INSN (COMCLR_SGTS,    '2', "comclr_sgts")
  257. DEF_INSN (COMCLR_SLTU,    '2', "comclr_sltu")
  258. DEF_INSN (COMCLR_SGEU,    '2', "comclr_sgeu")
  259. DEF_INSN (COMCLR_SLEU,    '2', "comclr_sleu")
  260. DEF_INSN (COMCLR_SGTU,    '2', "comclr_sgtu")
  261. DEF_INSN (COMCLR_SODD,    '2', "comclr_sodd")
  262. DEF_INSN (COMCLR_SEVN,    '2', "comclr_sevn")
  263. /* DEF_INSN (COMCLR_S,    '2', "comclr_s") */
  264.  
  265. DEF_INSN (AND_SEQ,    '2', "and_seq")
  266. DEF_INSN (AND_SNE,    '2', "and_sne")
  267. DEF_INSN (AND_SLTS,    '2', "and_slts")
  268. DEF_INSN (AND_SGES,    '2', "and_sges")
  269. DEF_INSN (AND_SLES,    '2', "and_sles")
  270. DEF_INSN (AND_SGTS,    '2', "and_sgts")
  271. DEF_INSN (AND_SODD,    '2', "and_sodd")
  272. DEF_INSN (AND_SEVN,    '2', "and_sevn")
  273. DEF_INSN (AND_S,    '2', "and_s")
  274. DEF_INSN (IOR_SEQ,    '2', "ior_seq")
  275. DEF_INSN (IOR_SNE,    '2', "ior_sne")
  276. DEF_INSN (IOR_SLTS,    '2', "ior_slts")
  277. DEF_INSN (IOR_SGES,    '2', "ior_sges")
  278. DEF_INSN (IOR_SLES,    '2', "ior_sles")
  279. DEF_INSN (IOR_SGTS,    '2', "ior_sgts")
  280. DEF_INSN (IOR_SODD,    '2', "ior_sodd")
  281. DEF_INSN (IOR_SEVN,    '2', "ior_sevn")
  282. DEF_INSN (IOR_S,    '2', "ior_s")
  283. DEF_INSN (XOR_SEQ,    '2', "xor_seq")
  284. DEF_INSN (XOR_SNE,    '2', "xor_sne")
  285. DEF_INSN (XOR_SLTS,    '2', "xor_slts")
  286. DEF_INSN (XOR_SGES,    '2', "xor_sges")
  287. DEF_INSN (XOR_SLES,    '2', "xor_sles")
  288. DEF_INSN (XOR_SGTS,    '2', "xor_sgts")
  289. DEF_INSN (XOR_SODD,    '2', "xor_sodd")
  290. DEF_INSN (XOR_SEVN,    '2', "xor_sevn")
  291. DEF_INSN (XOR_S,    '2', "xor_s")
  292. DEF_INSN (ANDC_SEQ,    '2', "andc_seq")
  293. DEF_INSN (ANDC_SNE,    '2', "andc_sne")
  294. DEF_INSN (ANDC_SLTS,    '2', "andc_slts")
  295. DEF_INSN (ANDC_SGES,    '2', "andc_sges")
  296. DEF_INSN (ANDC_SLES,    '2', "andc_sles")
  297. DEF_INSN (ANDC_SGTS,    '2', "andc_sgts")
  298. DEF_INSN (ANDC_SODD,    '2', "andc_sodd")
  299. DEF_INSN (ANDC_SEVN,    '2', "andc_sevn")
  300. DEF_INSN (ANDC_S,    '2', "andc_s")
  301.  
  302. /* Bit shift and count.  */
  303. DEF_INSN (LSHIFTR_S,    '2', "log_shift_right_s")
  304. DEF_INSN (ASHIFTR_S,    '2', "arith_shift_right_s")
  305. DEF_INSN (SHIFTL_S,    '2', "shift_left_s")
  306. DEF_INSN (ROTATEL_S,    '2', "rotate_left_s")
  307.  
  308. /* Extract.  */
  309. DEF_INSN (EXTS1_S,    '2', "exts1_s")
  310. DEF_INSN (EXTS2_S,    '2', "exts2_s")
  311. DEF_INSN (EXTS8_S,    '2', "exts8_s")
  312. DEF_INSN (EXTS16_S,    '2', "exts16_s")
  313. DEF_INSN (EXTU1_S,    '2', "extu1_s")
  314. DEF_INSN (EXTU2_S,    '2', "extu2_s")
  315.  
  316. DEF_INSN (COPY_S,    '1', "copy_s")
  317.  
  318.  
  319. /* Inte 960 specific instructions.  */
  320. DEF_INSN (ADDC_960,    '2', "addc_960")
  321. DEF_INSN (SUBC_960,    '2', "subc_960")
  322.  
  323. DEF_INSN (SEL_NO_960,    '2', "sel_no_960")
  324. DEF_INSN (SEL_G_960,    '2', "sel_g_960")
  325. DEF_INSN (SEL_E_960,    '2', "sel_e_960")
  326. DEF_INSN (SEL_GE_960,    '2', "sel_ge_960")
  327. DEF_INSN (SEL_L_960,    '2', "sel_l_960")
  328. DEF_INSN (SEL_NE_960,    '2', "sel_ne_960")
  329. DEF_INSN (SEL_LE_960,    '2', "sel_le_960")
  330. DEF_INSN (SEL_O_960,    '2', "sel_o_960")
  331.  
  332. DEF_INSN (CONCMPO_960,    '<', "concmpo_960")
  333. DEF_INSN (CONCMPI_960,    '<', "concmpi_960")
  334. DEF_INSN (CMPO_960,    '<', "cmpo_960")
  335. DEF_INSN (CMPI_960,    '<', "cmpi_960")
  336. DEF_INSN (SHIFTL_NT,    '2', "shiftl_nt")
  337. DEF_INSN (LSHIFTR_NT,    '2', "lshiftr_nt")
  338. DEF_INSN (ASHIFTR_NT,    '2', "ashiftr_nt")
  339. DEF_INSN (ADDO_NO_960,    '2', "addo_no_960")
  340. DEF_INSN (ADDO_G_960,    '2', "addo_g_960")
  341. DEF_INSN (ADDO_E_960,    '2', "addo_e_960")
  342. DEF_INSN (ADDO_GE_960,    '2', "addo_ge_960")
  343. DEF_INSN (ADDO_L_960,    '2', "addo_l_960")
  344. DEF_INSN (ADDO_NE_960,    '2', "addo_ne_960")
  345. DEF_INSN (ADDO_LE_960,    '2', "addo_le_960")
  346. DEF_INSN (ADDO_O_960,    '2', "addo_o_960")
  347. DEF_INSN (SUBO_NO_960,    '2', "subo_no_960")
  348. DEF_INSN (SUBO_G_960,    '2', "subo_g_960")
  349. DEF_INSN (SUBO_E_960,    '2', "subo_e_960")
  350. DEF_INSN (SUBO_GE_960,    '2', "subo_ge_960")
  351. DEF_INSN (SUBO_L_960,    '2', "subo_l_960")
  352. DEF_INSN (SUBO_NE_960,    '2', "subo_ne_960")
  353. DEF_INSN (SUBO_LE_960,    '2', "subo_le_960")
  354. DEF_INSN (SUBO_O_960,    '2', "subo_o_960")
  355.  
  356. DEF_INSN (ALTERBIT,    '2', "alterbit")
  357. DEF_INSN (SETBIT,    '2', "setbit")
  358. DEF_INSN (CLRBIT,    '2', "clrbit")
  359. DEF_INSN (CHKBIT,    '<', "chkbit")
  360. DEF_INSN (NOTBIT,    '2', "notbit")
  361.  
  362. /*
  363. Local variables:
  364. mode:c
  365. version-control: t
  366. End:
  367. */
  368.