lm32-opinst.c 21 KB

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