xstormy16-desc.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. /* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */
  2. /* CPU data header for xstormy16.
  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. #ifndef XSTORMY16_CPU_H
  19. #define XSTORMY16_CPU_H
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif
  23. #define CGEN_ARCH xstormy16
  24. /* Given symbol S, return xstormy16_cgen_<S>. */
  25. #define CGEN_SYM(s) xstormy16##_cgen_##s
  26. /* Selected cpu families. */
  27. #define HAVE_CPU_XSTORMY16
  28. #define CGEN_INSN_LSB0_P 0
  29. /* Minimum size of any insn (in bytes). */
  30. #define CGEN_MIN_INSN_SIZE 2
  31. /* Maximum size of any insn (in bytes). */
  32. #define CGEN_MAX_INSN_SIZE 4
  33. #define CGEN_INT_INSN_P 1
  34. /* Maximum number of syntax elements in an instruction. */
  35. #define CGEN_ACTUAL_MAX_SYNTAX_ELEMENTS 19
  36. /* CGEN_MNEMONIC_OPERANDS is defined if mnemonics have operands.
  37. e.g. In "b,a foo" the ",a" is an operand. If mnemonics have operands
  38. we can't hash on everything up to the space. */
  39. #define CGEN_MNEMONIC_OPERANDS
  40. /* Maximum number of fields in an instruction. */
  41. #define CGEN_ACTUAL_MAX_IFMT_OPERANDS 9
  42. /* Enums. */
  43. /* Enum declaration for . */
  44. typedef enum gr_names {
  45. H_GR_R0 = 0, H_GR_R1 = 1, H_GR_R2 = 2, H_GR_R3 = 3
  46. , H_GR_R4 = 4, H_GR_R5 = 5, H_GR_R6 = 6, H_GR_R7 = 7
  47. , H_GR_R8 = 8, H_GR_R9 = 9, H_GR_R10 = 10, H_GR_R11 = 11
  48. , H_GR_R12 = 12, H_GR_R13 = 13, H_GR_R14 = 14, H_GR_R15 = 15
  49. , H_GR_PSW = 14, H_GR_SP = 15
  50. } GR_NAMES;
  51. /* Enum declaration for . */
  52. typedef enum gr_rb_names {
  53. H_RBJ_R8 = 0, H_RBJ_R9 = 1, H_RBJ_R10 = 2, H_RBJ_R11 = 3
  54. , H_RBJ_R12 = 4, H_RBJ_R13 = 5, H_RBJ_R14 = 6, H_RBJ_R15 = 7
  55. , H_RBJ_PSW = 6, H_RBJ_SP = 7
  56. } GR_RB_NAMES;
  57. /* Enum declaration for insn op enums. */
  58. typedef enum insn_op1 {
  59. OP1_0, OP1_1, OP1_2, OP1_3
  60. , OP1_4, OP1_5, OP1_6, OP1_7
  61. , OP1_8, OP1_9, OP1_A, OP1_B
  62. , OP1_C, OP1_D, OP1_E, OP1_F
  63. } INSN_OP1;
  64. /* Enum declaration for insn op enums. */
  65. typedef enum insn_op2 {
  66. OP2_0, OP2_1, OP2_2, OP2_3
  67. , OP2_4, OP2_5, OP2_6, OP2_7
  68. , OP2_8, OP2_9, OP2_A, OP2_B
  69. , OP2_C, OP2_D, OP2_E, OP2_F
  70. } INSN_OP2;
  71. /* Enum declaration for insn op enums. */
  72. typedef enum insn_op2a {
  73. OP2A_0, OP2A_2, OP2A_4, OP2A_6
  74. , OP2A_8, OP2A_A, OP2A_C, OP2A_E
  75. } INSN_OP2A;
  76. /* Enum declaration for insn op enums. */
  77. typedef enum insn_op2m {
  78. OP2M_0, OP2M_1
  79. } INSN_OP2M;
  80. /* Enum declaration for insn op enums. */
  81. typedef enum insn_op3 {
  82. OP3_0, OP3_1, OP3_2, OP3_3
  83. , OP3_4, OP3_5, OP3_6, OP3_7
  84. , OP3_8, OP3_9, OP3_A, OP3_B
  85. , OP3_C, OP3_D, OP3_E, OP3_F
  86. } INSN_OP3;
  87. /* Enum declaration for insn op enums. */
  88. typedef enum insn_op3a {
  89. OP3A_0, OP3A_1, OP3A_2, OP3A_3
  90. } INSN_OP3A;
  91. /* Enum declaration for insn op enums. */
  92. typedef enum insn_op3b {
  93. OP3B_0, OP3B_2, OP3B_4, OP3B_6
  94. , OP3B_8, OP3B_A, OP3B_C, OP3B_E
  95. } INSN_OP3B;
  96. /* Enum declaration for insn op enums. */
  97. typedef enum insn_op4 {
  98. OP4_0, OP4_1, OP4_2, OP4_3
  99. , OP4_4, OP4_5, OP4_6, OP4_7
  100. , OP4_8, OP4_9, OP4_A, OP4_B
  101. , OP4_C, OP4_D, OP4_E, OP4_F
  102. } INSN_OP4;
  103. /* Enum declaration for insn op enums. */
  104. typedef enum insn_op4m {
  105. OP4M_0, OP4M_1
  106. } INSN_OP4M;
  107. /* Enum declaration for insn op enums. */
  108. typedef enum insn_op4b {
  109. OP4B_0, OP4B_1
  110. } INSN_OP4B;
  111. /* Enum declaration for insn op enums. */
  112. typedef enum insn_op5 {
  113. OP5_0, OP5_1, OP5_2, OP5_3
  114. , OP5_4, OP5_5, OP5_6, OP5_7
  115. , OP5_8, OP5_9, OP5_A, OP5_B
  116. , OP5_C, OP5_D, OP5_E, OP5_F
  117. } INSN_OP5;
  118. /* Enum declaration for insn op enums. */
  119. typedef enum insn_op5a {
  120. OP5A_0, OP5A_1
  121. } INSN_OP5A;
  122. /* Attributes. */
  123. /* Enum declaration for machine type selection. */
  124. typedef enum mach_attr {
  125. MACH_BASE, MACH_XSTORMY16, MACH_MAX
  126. } MACH_ATTR;
  127. /* Enum declaration for instruction set selection. */
  128. typedef enum isa_attr {
  129. ISA_XSTORMY16, ISA_MAX
  130. } ISA_ATTR;
  131. /* Number of architecture variants. */
  132. #define MAX_ISAS 1
  133. #define MAX_MACHS ((int) MACH_MAX)
  134. /* Ifield support. */
  135. /* Ifield attribute indices. */
  136. /* Enum declaration for cgen_ifld attrs. */
  137. typedef enum cgen_ifld_attr {
  138. CGEN_IFLD_VIRTUAL, CGEN_IFLD_PCREL_ADDR, CGEN_IFLD_ABS_ADDR, CGEN_IFLD_RESERVED
  139. , CGEN_IFLD_SIGN_OPT, CGEN_IFLD_SIGNED, CGEN_IFLD_END_BOOLS, CGEN_IFLD_START_NBOOLS = 31
  140. , CGEN_IFLD_MACH, CGEN_IFLD_END_NBOOLS
  141. } CGEN_IFLD_ATTR;
  142. /* Number of non-boolean elements in cgen_ifld_attr. */
  143. #define CGEN_IFLD_NBOOL_ATTRS (CGEN_IFLD_END_NBOOLS - CGEN_IFLD_START_NBOOLS - 1)
  144. /* cgen_ifld attribute accessor macros. */
  145. #define CGEN_ATTR_CGEN_IFLD_MACH_VALUE(attrs) ((attrs)->nonbool[CGEN_IFLD_MACH-CGEN_IFLD_START_NBOOLS-1].nonbitset)
  146. #define CGEN_ATTR_CGEN_IFLD_VIRTUAL_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_IFLD_VIRTUAL)) != 0)
  147. #define CGEN_ATTR_CGEN_IFLD_PCREL_ADDR_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_IFLD_PCREL_ADDR)) != 0)
  148. #define CGEN_ATTR_CGEN_IFLD_ABS_ADDR_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_IFLD_ABS_ADDR)) != 0)
  149. #define CGEN_ATTR_CGEN_IFLD_RESERVED_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_IFLD_RESERVED)) != 0)
  150. #define CGEN_ATTR_CGEN_IFLD_SIGN_OPT_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_IFLD_SIGN_OPT)) != 0)
  151. #define CGEN_ATTR_CGEN_IFLD_SIGNED_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_IFLD_SIGNED)) != 0)
  152. /* Enum declaration for xstormy16 ifield types. */
  153. typedef enum ifield_type {
  154. XSTORMY16_F_NIL, XSTORMY16_F_ANYOF, XSTORMY16_F_RD, XSTORMY16_F_RDM
  155. , XSTORMY16_F_RM, XSTORMY16_F_RS, XSTORMY16_F_RB, XSTORMY16_F_RBJ
  156. , XSTORMY16_F_OP1, XSTORMY16_F_OP2, XSTORMY16_F_OP2A, XSTORMY16_F_OP2M
  157. , XSTORMY16_F_OP3, XSTORMY16_F_OP3A, XSTORMY16_F_OP3B, XSTORMY16_F_OP4
  158. , XSTORMY16_F_OP4M, XSTORMY16_F_OP4B, XSTORMY16_F_OP5, XSTORMY16_F_OP5A
  159. , XSTORMY16_F_OP, XSTORMY16_F_IMM2, XSTORMY16_F_IMM3, XSTORMY16_F_IMM3B
  160. , XSTORMY16_F_IMM4, XSTORMY16_F_IMM8, XSTORMY16_F_IMM12, XSTORMY16_F_IMM16
  161. , XSTORMY16_F_LMEM8, XSTORMY16_F_HMEM8, XSTORMY16_F_REL8_2, XSTORMY16_F_REL8_4
  162. , XSTORMY16_F_REL12, XSTORMY16_F_REL12A, XSTORMY16_F_ABS24_1, XSTORMY16_F_ABS24_2
  163. , XSTORMY16_F_ABS24, XSTORMY16_F_MAX
  164. } IFIELD_TYPE;
  165. #define MAX_IFLD ((int) XSTORMY16_F_MAX)
  166. /* Hardware attribute indices. */
  167. /* Enum declaration for cgen_hw attrs. */
  168. typedef enum cgen_hw_attr {
  169. CGEN_HW_VIRTUAL, CGEN_HW_CACHE_ADDR, CGEN_HW_PC, CGEN_HW_PROFILE
  170. , CGEN_HW_END_BOOLS, CGEN_HW_START_NBOOLS = 31, CGEN_HW_MACH, CGEN_HW_END_NBOOLS
  171. } CGEN_HW_ATTR;
  172. /* Number of non-boolean elements in cgen_hw_attr. */
  173. #define CGEN_HW_NBOOL_ATTRS (CGEN_HW_END_NBOOLS - CGEN_HW_START_NBOOLS - 1)
  174. /* cgen_hw attribute accessor macros. */
  175. #define CGEN_ATTR_CGEN_HW_MACH_VALUE(attrs) ((attrs)->nonbool[CGEN_HW_MACH-CGEN_HW_START_NBOOLS-1].nonbitset)
  176. #define CGEN_ATTR_CGEN_HW_VIRTUAL_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_HW_VIRTUAL)) != 0)
  177. #define CGEN_ATTR_CGEN_HW_CACHE_ADDR_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_HW_CACHE_ADDR)) != 0)
  178. #define CGEN_ATTR_CGEN_HW_PC_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_HW_PC)) != 0)
  179. #define CGEN_ATTR_CGEN_HW_PROFILE_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_HW_PROFILE)) != 0)
  180. /* Enum declaration for xstormy16 hardware types. */
  181. typedef enum cgen_hw_type {
  182. HW_H_MEMORY, HW_H_SINT, HW_H_UINT, HW_H_ADDR
  183. , HW_H_IADDR, HW_H_PC, HW_H_GR, HW_H_RB
  184. , HW_H_RBJ, HW_H_RPSW, HW_H_Z8, HW_H_Z16
  185. , HW_H_CY, HW_H_HC, HW_H_OV, HW_H_PT
  186. , HW_H_S, HW_H_BRANCHCOND, HW_H_WORDSIZE, HW_MAX
  187. } CGEN_HW_TYPE;
  188. #define MAX_HW ((int) HW_MAX)
  189. /* Operand attribute indices. */
  190. /* Enum declaration for cgen_operand attrs. */
  191. typedef enum cgen_operand_attr {
  192. CGEN_OPERAND_VIRTUAL, CGEN_OPERAND_PCREL_ADDR, CGEN_OPERAND_ABS_ADDR, CGEN_OPERAND_SIGN_OPT
  193. , CGEN_OPERAND_SIGNED, CGEN_OPERAND_NEGATIVE, CGEN_OPERAND_RELAX, CGEN_OPERAND_SEM_ONLY
  194. , CGEN_OPERAND_END_BOOLS, CGEN_OPERAND_START_NBOOLS = 31, CGEN_OPERAND_MACH, CGEN_OPERAND_END_NBOOLS
  195. } CGEN_OPERAND_ATTR;
  196. /* Number of non-boolean elements in cgen_operand_attr. */
  197. #define CGEN_OPERAND_NBOOL_ATTRS (CGEN_OPERAND_END_NBOOLS - CGEN_OPERAND_START_NBOOLS - 1)
  198. /* cgen_operand attribute accessor macros. */
  199. #define CGEN_ATTR_CGEN_OPERAND_MACH_VALUE(attrs) ((attrs)->nonbool[CGEN_OPERAND_MACH-CGEN_OPERAND_START_NBOOLS-1].nonbitset)
  200. #define CGEN_ATTR_CGEN_OPERAND_VIRTUAL_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_OPERAND_VIRTUAL)) != 0)
  201. #define CGEN_ATTR_CGEN_OPERAND_PCREL_ADDR_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_OPERAND_PCREL_ADDR)) != 0)
  202. #define CGEN_ATTR_CGEN_OPERAND_ABS_ADDR_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_OPERAND_ABS_ADDR)) != 0)
  203. #define CGEN_ATTR_CGEN_OPERAND_SIGN_OPT_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_OPERAND_SIGN_OPT)) != 0)
  204. #define CGEN_ATTR_CGEN_OPERAND_SIGNED_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_OPERAND_SIGNED)) != 0)
  205. #define CGEN_ATTR_CGEN_OPERAND_NEGATIVE_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_OPERAND_NEGATIVE)) != 0)
  206. #define CGEN_ATTR_CGEN_OPERAND_RELAX_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_OPERAND_RELAX)) != 0)
  207. #define CGEN_ATTR_CGEN_OPERAND_SEM_ONLY_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_OPERAND_SEM_ONLY)) != 0)
  208. /* Enum declaration for xstormy16 operand types. */
  209. typedef enum cgen_operand_type {
  210. XSTORMY16_OPERAND_PC, XSTORMY16_OPERAND_PSW_Z8, XSTORMY16_OPERAND_PSW_Z16, XSTORMY16_OPERAND_PSW_CY
  211. , XSTORMY16_OPERAND_PSW_HC, XSTORMY16_OPERAND_PSW_OV, XSTORMY16_OPERAND_PSW_PT, XSTORMY16_OPERAND_PSW_S
  212. , XSTORMY16_OPERAND_RD, XSTORMY16_OPERAND_RDM, XSTORMY16_OPERAND_RM, XSTORMY16_OPERAND_RS
  213. , XSTORMY16_OPERAND_RB, XSTORMY16_OPERAND_RBJ, XSTORMY16_OPERAND_BCOND2, XSTORMY16_OPERAND_WS2
  214. , XSTORMY16_OPERAND_BCOND5, XSTORMY16_OPERAND_IMM2, XSTORMY16_OPERAND_IMM3, XSTORMY16_OPERAND_IMM3B
  215. , XSTORMY16_OPERAND_IMM4, XSTORMY16_OPERAND_IMM8, XSTORMY16_OPERAND_IMM8SMALL, XSTORMY16_OPERAND_IMM12
  216. , XSTORMY16_OPERAND_IMM16, XSTORMY16_OPERAND_LMEM8, XSTORMY16_OPERAND_HMEM8, XSTORMY16_OPERAND_REL8_2
  217. , XSTORMY16_OPERAND_REL8_4, XSTORMY16_OPERAND_REL12, XSTORMY16_OPERAND_REL12A, XSTORMY16_OPERAND_ABS24
  218. , XSTORMY16_OPERAND_PSW, XSTORMY16_OPERAND_RPSW, XSTORMY16_OPERAND_SP, XSTORMY16_OPERAND_R0
  219. , XSTORMY16_OPERAND_R1, XSTORMY16_OPERAND_R2, XSTORMY16_OPERAND_R8, XSTORMY16_OPERAND_MAX
  220. } CGEN_OPERAND_TYPE;
  221. /* Number of operands types. */
  222. #define MAX_OPERANDS 39
  223. /* Maximum number of operands referenced by any insn. */
  224. #define MAX_OPERAND_INSTANCES 8
  225. /* Insn attribute indices. */
  226. /* Enum declaration for cgen_insn attrs. */
  227. typedef enum cgen_insn_attr {
  228. CGEN_INSN_ALIAS, CGEN_INSN_VIRTUAL, CGEN_INSN_UNCOND_CTI, CGEN_INSN_COND_CTI
  229. , CGEN_INSN_SKIP_CTI, CGEN_INSN_DELAY_SLOT, CGEN_INSN_RELAXABLE, CGEN_INSN_RELAXED
  230. , CGEN_INSN_NO_DIS, CGEN_INSN_PBB, CGEN_INSN_END_BOOLS, CGEN_INSN_START_NBOOLS = 31
  231. , CGEN_INSN_MACH, CGEN_INSN_END_NBOOLS
  232. } CGEN_INSN_ATTR;
  233. /* Number of non-boolean elements in cgen_insn_attr. */
  234. #define CGEN_INSN_NBOOL_ATTRS (CGEN_INSN_END_NBOOLS - CGEN_INSN_START_NBOOLS - 1)
  235. /* cgen_insn attribute accessor macros. */
  236. #define CGEN_ATTR_CGEN_INSN_MACH_VALUE(attrs) ((attrs)->nonbool[CGEN_INSN_MACH-CGEN_INSN_START_NBOOLS-1].nonbitset)
  237. #define CGEN_ATTR_CGEN_INSN_ALIAS_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_INSN_ALIAS)) != 0)
  238. #define CGEN_ATTR_CGEN_INSN_VIRTUAL_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_INSN_VIRTUAL)) != 0)
  239. #define CGEN_ATTR_CGEN_INSN_UNCOND_CTI_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_INSN_UNCOND_CTI)) != 0)
  240. #define CGEN_ATTR_CGEN_INSN_COND_CTI_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_INSN_COND_CTI)) != 0)
  241. #define CGEN_ATTR_CGEN_INSN_SKIP_CTI_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_INSN_SKIP_CTI)) != 0)
  242. #define CGEN_ATTR_CGEN_INSN_DELAY_SLOT_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_INSN_DELAY_SLOT)) != 0)
  243. #define CGEN_ATTR_CGEN_INSN_RELAXABLE_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_INSN_RELAXABLE)) != 0)
  244. #define CGEN_ATTR_CGEN_INSN_RELAXED_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_INSN_RELAXED)) != 0)
  245. #define CGEN_ATTR_CGEN_INSN_NO_DIS_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_INSN_NO_DIS)) != 0)
  246. #define CGEN_ATTR_CGEN_INSN_PBB_VALUE(attrs) (((attrs)->bool_ & (1 << CGEN_INSN_PBB)) != 0)
  247. /* cgen.h uses things we just defined. */
  248. #include "opcode/cgen.h"
  249. extern const struct cgen_ifld xstormy16_cgen_ifld_table[];
  250. /* Attributes. */
  251. extern const CGEN_ATTR_TABLE xstormy16_cgen_hardware_attr_table[];
  252. extern const CGEN_ATTR_TABLE xstormy16_cgen_ifield_attr_table[];
  253. extern const CGEN_ATTR_TABLE xstormy16_cgen_operand_attr_table[];
  254. extern const CGEN_ATTR_TABLE xstormy16_cgen_insn_attr_table[];
  255. /* Hardware decls. */
  256. extern CGEN_KEYWORD xstormy16_cgen_opval_gr_names;
  257. extern CGEN_KEYWORD xstormy16_cgen_opval_gr_Rb_names;
  258. extern CGEN_KEYWORD xstormy16_cgen_opval_gr_Rb_names;
  259. extern CGEN_KEYWORD xstormy16_cgen_opval_h_branchcond;
  260. extern CGEN_KEYWORD xstormy16_cgen_opval_h_wordsize;
  261. extern const CGEN_HW_ENTRY xstormy16_cgen_hw_table[];
  262. #ifdef __cplusplus
  263. }
  264. #endif
  265. #endif /* XSTORMY16_CPU_H */