lm32-opinst.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476
  1. /* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */
  2. /* Semantic operand instances for lm32.
  3. THIS FILE IS MACHINE GENERATED WITH CGEN.
  4. Copyright (C) 1996-2022 Free Software Foundation, Inc.
  5. This file is part of the GNU Binutils and/or GDB, the GNU debugger.
  6. This file is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 3, or (at your option)
  9. any later version.
  10. It is distributed in the hope that it will be useful, but WITHOUT
  11. ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  12. or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
  13. License for more details.
  14. You should have received a copy of the GNU General Public License along
  15. with this program; if not, write to the Free Software Foundation, Inc.,
  16. 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
  17. */
  18. #include "sysdep.h"
  19. #include "ansidecl.h"
  20. #include "bfd.h"
  21. #include "symcat.h"
  22. #include "lm32-desc.h"
  23. #include "lm32-opc.h"
  24. /* Operand references. */
  25. #define OP_ENT(op) LM32_OPERAND_##op
  26. #define INPUT CGEN_OPINST_INPUT
  27. #define OUTPUT CGEN_OPINST_OUTPUT
  28. #define END CGEN_OPINST_END
  29. #define COND_REF CGEN_OPINST_COND_REF
  30. static const CGEN_OPINST sfmt_empty_ops[] ATTRIBUTE_UNUSED = {
  31. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  32. };
  33. static const CGEN_OPINST sfmt_add_ops[] ATTRIBUTE_UNUSED = {
  34. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  35. { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  36. { OUTPUT, "r2", HW_H_GR, CGEN_MODE_SI, OP_ENT (R2), 0, 0 },
  37. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  38. };
  39. static const CGEN_OPINST sfmt_addi_ops[] ATTRIBUTE_UNUSED = {
  40. { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
  41. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  42. { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  43. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  44. };
  45. static const CGEN_OPINST sfmt_andi_ops[] ATTRIBUTE_UNUSED = {
  46. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  47. { INPUT, "uimm", HW_H_UINT, CGEN_MODE_UINT, OP_ENT (UIMM), 0, 0 },
  48. { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  49. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  50. };
  51. static const CGEN_OPINST sfmt_andhii_ops[] ATTRIBUTE_UNUSED = {
  52. { INPUT, "hi16", HW_H_UINT, CGEN_MODE_UINT, OP_ENT (HI16), 0, 0 },
  53. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  54. { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  55. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  56. };
  57. static const CGEN_OPINST sfmt_b_ops[] ATTRIBUTE_UNUSED = {
  58. { INPUT, "f_r0", HW_H_UINT, CGEN_MODE_UINT, 0, 0, 0 },
  59. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  60. { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
  61. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  62. };
  63. static const CGEN_OPINST sfmt_bi_ops[] ATTRIBUTE_UNUSED = {
  64. { INPUT, "call", HW_H_IADDR, CGEN_MODE_USI, OP_ENT (CALL), 0, 0 },
  65. { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
  66. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  67. };
  68. static const CGEN_OPINST sfmt_be_ops[] ATTRIBUTE_UNUSED = {
  69. { INPUT, "branch", HW_H_IADDR, CGEN_MODE_USI, OP_ENT (BRANCH), 0, COND_REF },
  70. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  71. { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  72. { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, COND_REF },
  73. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  74. };
  75. static const CGEN_OPINST sfmt_call_ops[] ATTRIBUTE_UNUSED = {
  76. { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
  77. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  78. { OUTPUT, "h_gr_SI_29", HW_H_GR, CGEN_MODE_SI, 0, 29, 0 },
  79. { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
  80. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  81. };
  82. static const CGEN_OPINST sfmt_calli_ops[] ATTRIBUTE_UNUSED = {
  83. { INPUT, "call", HW_H_IADDR, CGEN_MODE_USI, OP_ENT (CALL), 0, 0 },
  84. { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
  85. { OUTPUT, "h_gr_SI_29", HW_H_GR, CGEN_MODE_SI, 0, 29, 0 },
  86. { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
  87. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  88. };
  89. static const CGEN_OPINST sfmt_divu_ops[] ATTRIBUTE_UNUSED = {
  90. { INPUT, "f_r0", HW_H_UINT, CGEN_MODE_UINT, 0, 0, 0 },
  91. { INPUT, "f_r1", HW_H_UINT, CGEN_MODE_UINT, 0, 0, 0 },
  92. { INPUT, "f_r2", HW_H_UINT, CGEN_MODE_UINT, 0, 0, 0 },
  93. { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
  94. { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
  95. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  96. };
  97. static const CGEN_OPINST sfmt_lb_ops[] ATTRIBUTE_UNUSED = {
  98. { INPUT, "h_memory_QI_add__SI_r0_ext__SI_trunc__HI_imm", HW_H_MEMORY, CGEN_MODE_QI, 0, 0, 0 },
  99. { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
  100. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  101. { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  102. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  103. };
  104. static const CGEN_OPINST sfmt_lh_ops[] ATTRIBUTE_UNUSED = {
  105. { INPUT, "h_memory_HI_add__SI_r0_ext__SI_trunc__HI_imm", HW_H_MEMORY, CGEN_MODE_HI, 0, 0, 0 },
  106. { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
  107. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  108. { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  109. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  110. };
  111. static const CGEN_OPINST sfmt_lw_ops[] ATTRIBUTE_UNUSED = {
  112. { INPUT, "h_memory_SI_add__SI_r0_ext__SI_trunc__HI_imm", HW_H_MEMORY, CGEN_MODE_SI, 0, 0, 0 },
  113. { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
  114. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  115. { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  116. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  117. };
  118. static const CGEN_OPINST sfmt_ori_ops[] ATTRIBUTE_UNUSED = {
  119. { INPUT, "lo16", HW_H_UINT, CGEN_MODE_UINT, OP_ENT (LO16), 0, 0 },
  120. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  121. { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  122. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  123. };
  124. static const CGEN_OPINST sfmt_rcsr_ops[] ATTRIBUTE_UNUSED = {
  125. { INPUT, "csr", HW_H_CSR, CGEN_MODE_SI, OP_ENT (CSR), 0, 0 },
  126. { OUTPUT, "r2", HW_H_GR, CGEN_MODE_SI, OP_ENT (R2), 0, 0 },
  127. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  128. };
  129. static const CGEN_OPINST sfmt_sb_ops[] ATTRIBUTE_UNUSED = {
  130. { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
  131. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  132. { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  133. { OUTPUT, "h_memory_QI_add__SI_r0_ext__SI_trunc__HI_imm", HW_H_MEMORY, CGEN_MODE_QI, 0, 0, 0 },
  134. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  135. };
  136. static const CGEN_OPINST sfmt_sextb_ops[] ATTRIBUTE_UNUSED = {
  137. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  138. { OUTPUT, "r2", HW_H_GR, CGEN_MODE_SI, OP_ENT (R2), 0, 0 },
  139. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  140. };
  141. static const CGEN_OPINST sfmt_sh_ops[] ATTRIBUTE_UNUSED = {
  142. { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
  143. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  144. { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  145. { OUTPUT, "h_memory_HI_add__SI_r0_ext__SI_trunc__HI_imm", HW_H_MEMORY, CGEN_MODE_HI, 0, 0, 0 },
  146. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  147. };
  148. static const CGEN_OPINST sfmt_sw_ops[] ATTRIBUTE_UNUSED = {
  149. { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
  150. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  151. { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  152. { OUTPUT, "h_memory_SI_add__SI_r0_ext__SI_trunc__HI_imm", HW_H_MEMORY, CGEN_MODE_SI, 0, 0, 0 },
  153. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  154. };
  155. static const CGEN_OPINST sfmt_user_ops[] ATTRIBUTE_UNUSED = {
  156. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  157. { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  158. { INPUT, "user", HW_H_UINT, CGEN_MODE_UINT, OP_ENT (USER), 0, 0 },
  159. { OUTPUT, "r2", HW_H_GR, CGEN_MODE_SI, OP_ENT (R2), 0, 0 },
  160. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  161. };
  162. static const CGEN_OPINST sfmt_wcsr_ops[] ATTRIBUTE_UNUSED = {
  163. { INPUT, "f_csr", HW_H_UINT, CGEN_MODE_UINT, 0, 0, 0 },
  164. { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  165. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  166. };
  167. static const CGEN_OPINST sfmt_break_ops[] ATTRIBUTE_UNUSED = {
  168. { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
  169. { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
  170. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  171. };
  172. static const CGEN_OPINST sfmt_bret_ops[] ATTRIBUTE_UNUSED = {
  173. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  174. { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
  175. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  176. };
  177. static const CGEN_OPINST sfmt_mvi_ops[] ATTRIBUTE_UNUSED = {
  178. { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
  179. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  180. { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  181. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  182. };
  183. static const CGEN_OPINST sfmt_mvui_ops[] ATTRIBUTE_UNUSED = {
  184. { INPUT, "lo16", HW_H_UINT, CGEN_MODE_UINT, OP_ENT (LO16), 0, 0 },
  185. { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  186. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  187. };
  188. static const CGEN_OPINST sfmt_mvhi_ops[] ATTRIBUTE_UNUSED = {
  189. { INPUT, "hi16", HW_H_UINT, CGEN_MODE_UINT, OP_ENT (HI16), 0, 0 },
  190. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  191. { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  192. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  193. };
  194. static const CGEN_OPINST sfmt_mva_ops[] ATTRIBUTE_UNUSED = {
  195. { INPUT, "gp16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GP16), 0, 0 },
  196. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  197. { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  198. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  199. };
  200. static const CGEN_OPINST sfmt_nop_ops[] ATTRIBUTE_UNUSED = {
  201. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  202. { OUTPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  203. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  204. };
  205. static const CGEN_OPINST sfmt_lbgprel_ops[] ATTRIBUTE_UNUSED = {
  206. { INPUT, "gp16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GP16), 0, 0 },
  207. { INPUT, "h_memory_QI_add__SI_r0_ext__SI_trunc__HI_gp16", HW_H_MEMORY, CGEN_MODE_QI, 0, 0, 0 },
  208. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  209. { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  210. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  211. };
  212. static const CGEN_OPINST sfmt_lhgprel_ops[] ATTRIBUTE_UNUSED = {
  213. { INPUT, "gp16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GP16), 0, 0 },
  214. { INPUT, "h_memory_HI_add__SI_r0_ext__SI_trunc__HI_gp16", HW_H_MEMORY, CGEN_MODE_HI, 0, 0, 0 },
  215. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  216. { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  217. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  218. };
  219. static const CGEN_OPINST sfmt_lwgprel_ops[] ATTRIBUTE_UNUSED = {
  220. { INPUT, "gp16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GP16), 0, 0 },
  221. { INPUT, "h_memory_SI_add__SI_r0_ext__SI_trunc__HI_gp16", HW_H_MEMORY, CGEN_MODE_SI, 0, 0, 0 },
  222. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  223. { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  224. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  225. };
  226. static const CGEN_OPINST sfmt_sbgprel_ops[] ATTRIBUTE_UNUSED = {
  227. { INPUT, "gp16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GP16), 0, 0 },
  228. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  229. { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  230. { OUTPUT, "h_memory_QI_add__SI_r0_ext__SI_trunc__HI_gp16", HW_H_MEMORY, CGEN_MODE_QI, 0, 0, 0 },
  231. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  232. };
  233. static const CGEN_OPINST sfmt_shgprel_ops[] ATTRIBUTE_UNUSED = {
  234. { INPUT, "gp16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GP16), 0, 0 },
  235. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  236. { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  237. { OUTPUT, "h_memory_HI_add__SI_r0_ext__SI_trunc__HI_gp16", HW_H_MEMORY, CGEN_MODE_HI, 0, 0, 0 },
  238. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  239. };
  240. static const CGEN_OPINST sfmt_swgprel_ops[] ATTRIBUTE_UNUSED = {
  241. { INPUT, "gp16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GP16), 0, 0 },
  242. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  243. { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  244. { OUTPUT, "h_memory_SI_add__SI_r0_ext__SI_trunc__HI_gp16", HW_H_MEMORY, CGEN_MODE_SI, 0, 0, 0 },
  245. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  246. };
  247. static const CGEN_OPINST sfmt_lwgotrel_ops[] ATTRIBUTE_UNUSED = {
  248. { INPUT, "got16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOT16), 0, 0 },
  249. { INPUT, "h_memory_SI_add__SI_r0_ext__SI_trunc__HI_got16", HW_H_MEMORY, CGEN_MODE_SI, 0, 0, 0 },
  250. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  251. { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  252. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  253. };
  254. static const CGEN_OPINST sfmt_orhigotoffi_ops[] ATTRIBUTE_UNUSED = {
  255. { INPUT, "gotoffhi16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFHI16), 0, 0 },
  256. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  257. { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  258. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  259. };
  260. static const CGEN_OPINST sfmt_addgotoff_ops[] ATTRIBUTE_UNUSED = {
  261. { INPUT, "gotofflo16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFLO16), 0, 0 },
  262. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  263. { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  264. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  265. };
  266. static const CGEN_OPINST sfmt_swgotoff_ops[] ATTRIBUTE_UNUSED = {
  267. { INPUT, "gotofflo16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFLO16), 0, 0 },
  268. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  269. { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  270. { OUTPUT, "h_memory_SI_add__SI_r0_ext__SI_trunc__HI_gotofflo16", HW_H_MEMORY, CGEN_MODE_SI, 0, 0, 0 },
  271. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  272. };
  273. static const CGEN_OPINST sfmt_lwgotoff_ops[] ATTRIBUTE_UNUSED = {
  274. { INPUT, "gotofflo16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFLO16), 0, 0 },
  275. { INPUT, "h_memory_SI_add__SI_r0_ext__SI_trunc__HI_gotofflo16", HW_H_MEMORY, CGEN_MODE_SI, 0, 0, 0 },
  276. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  277. { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  278. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  279. };
  280. static const CGEN_OPINST sfmt_shgotoff_ops[] ATTRIBUTE_UNUSED = {
  281. { INPUT, "gotofflo16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFLO16), 0, 0 },
  282. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  283. { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  284. { OUTPUT, "h_memory_HI_add__SI_r0_ext__SI_trunc__HI_gotofflo16", HW_H_MEMORY, CGEN_MODE_HI, 0, 0, 0 },
  285. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  286. };
  287. static const CGEN_OPINST sfmt_lhgotoff_ops[] ATTRIBUTE_UNUSED = {
  288. { INPUT, "gotofflo16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFLO16), 0, 0 },
  289. { INPUT, "h_memory_HI_add__SI_r0_ext__SI_trunc__HI_gotofflo16", HW_H_MEMORY, CGEN_MODE_HI, 0, 0, 0 },
  290. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  291. { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  292. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  293. };
  294. static const CGEN_OPINST sfmt_sbgotoff_ops[] ATTRIBUTE_UNUSED = {
  295. { INPUT, "gotofflo16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFLO16), 0, 0 },
  296. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  297. { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  298. { OUTPUT, "h_memory_QI_add__SI_r0_ext__SI_trunc__HI_gotofflo16", HW_H_MEMORY, CGEN_MODE_QI, 0, 0, 0 },
  299. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  300. };
  301. static const CGEN_OPINST sfmt_lbgotoff_ops[] ATTRIBUTE_UNUSED = {
  302. { INPUT, "gotofflo16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFLO16), 0, 0 },
  303. { INPUT, "h_memory_QI_add__SI_r0_ext__SI_trunc__HI_gotofflo16", HW_H_MEMORY, CGEN_MODE_QI, 0, 0, 0 },
  304. { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
  305. { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
  306. { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
  307. };
  308. #undef OP_ENT
  309. #undef INPUT
  310. #undef OUTPUT
  311. #undef END
  312. #undef COND_REF
  313. /* Operand instance lookup table. */
  314. static const CGEN_OPINST *lm32_cgen_opinst_table[MAX_INSNS] = {
  315. 0,
  316. & sfmt_add_ops[0],
  317. & sfmt_addi_ops[0],
  318. & sfmt_add_ops[0],
  319. & sfmt_andi_ops[0],
  320. & sfmt_andhii_ops[0],
  321. & sfmt_b_ops[0],
  322. & sfmt_bi_ops[0],
  323. & sfmt_be_ops[0],
  324. & sfmt_be_ops[0],
  325. & sfmt_be_ops[0],
  326. & sfmt_be_ops[0],
  327. & sfmt_be_ops[0],
  328. & sfmt_be_ops[0],
  329. & sfmt_call_ops[0],
  330. & sfmt_calli_ops[0],
  331. & sfmt_add_ops[0],
  332. & sfmt_addi_ops[0],
  333. & sfmt_add_ops[0],
  334. & sfmt_addi_ops[0],
  335. & sfmt_add_ops[0],
  336. & sfmt_addi_ops[0],
  337. & sfmt_add_ops[0],
  338. & sfmt_andi_ops[0],
  339. & sfmt_add_ops[0],
  340. & sfmt_andi_ops[0],
  341. & sfmt_add_ops[0],
  342. & sfmt_addi_ops[0],
  343. & sfmt_divu_ops[0],
  344. & sfmt_lb_ops[0],
  345. & sfmt_lb_ops[0],
  346. & sfmt_lh_ops[0],
  347. & sfmt_lh_ops[0],
  348. & sfmt_lw_ops[0],
  349. & sfmt_divu_ops[0],
  350. & sfmt_add_ops[0],
  351. & sfmt_addi_ops[0],
  352. & sfmt_add_ops[0],
  353. & sfmt_andi_ops[0],
  354. & sfmt_add_ops[0],
  355. & sfmt_ori_ops[0],
  356. & sfmt_andhii_ops[0],
  357. & sfmt_rcsr_ops[0],
  358. & sfmt_sb_ops[0],
  359. & sfmt_sextb_ops[0],
  360. & sfmt_sextb_ops[0],
  361. & sfmt_sh_ops[0],
  362. & sfmt_add_ops[0],
  363. & sfmt_addi_ops[0],
  364. & sfmt_add_ops[0],
  365. & sfmt_addi_ops[0],
  366. & sfmt_add_ops[0],
  367. & sfmt_addi_ops[0],
  368. & sfmt_add_ops[0],
  369. & sfmt_sw_ops[0],
  370. & sfmt_user_ops[0],
  371. & sfmt_wcsr_ops[0],
  372. & sfmt_add_ops[0],
  373. & sfmt_andi_ops[0],
  374. & sfmt_add_ops[0],
  375. & sfmt_andi_ops[0],
  376. & sfmt_break_ops[0],
  377. & sfmt_break_ops[0],
  378. & sfmt_bret_ops[0],
  379. & sfmt_bret_ops[0],
  380. & sfmt_bret_ops[0],
  381. & sfmt_sextb_ops[0],
  382. & sfmt_mvi_ops[0],
  383. & sfmt_mvui_ops[0],
  384. & sfmt_mvhi_ops[0],
  385. & sfmt_mva_ops[0],
  386. & sfmt_sextb_ops[0],
  387. & sfmt_nop_ops[0],
  388. & sfmt_lbgprel_ops[0],
  389. & sfmt_lbgprel_ops[0],
  390. & sfmt_lhgprel_ops[0],
  391. & sfmt_lhgprel_ops[0],
  392. & sfmt_lwgprel_ops[0],
  393. & sfmt_sbgprel_ops[0],
  394. & sfmt_shgprel_ops[0],
  395. & sfmt_swgprel_ops[0],
  396. & sfmt_lwgotrel_ops[0],
  397. & sfmt_orhigotoffi_ops[0],
  398. & sfmt_addgotoff_ops[0],
  399. & sfmt_swgotoff_ops[0],
  400. & sfmt_lwgotoff_ops[0],
  401. & sfmt_shgotoff_ops[0],
  402. & sfmt_lhgotoff_ops[0],
  403. & sfmt_lhgotoff_ops[0],
  404. & sfmt_sbgotoff_ops[0],
  405. & sfmt_lbgotoff_ops[0],
  406. & sfmt_lbgotoff_ops[0],
  407. };
  408. /* Function to call before using the operand instance table. */
  409. void
  410. lm32_cgen_init_opinst_table (CGEN_CPU_DESC cd)
  411. {
  412. int i;
  413. const CGEN_OPINST **oi = & lm32_cgen_opinst_table[0];
  414. CGEN_INSN *insns = (CGEN_INSN *) cd->insn_table.init_entries;
  415. for (i = 0; i < MAX_INSNS; ++i)
  416. insns[i].opinst = oi[i];
  417. }