epiphany-opc.h 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. /* Instruction opcode header for epiphany.
  2. THIS FILE IS MACHINE GENERATED WITH CGEN.
  3. Copyright (C) 1996-2015 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. #ifndef EPIPHANY_OPC_H
  18. #define EPIPHANY_OPC_H
  19. /* -- opc.h */
  20. /* enumerate relaxation types for gas. */
  21. typedef enum epiphany_relax_types
  22. {
  23. EPIPHANY_RELAX_NONE=0,
  24. EPIPHANY_RELAX_NEED_RELAXING,
  25. EPIPHANY_RELAX_BRANCH_SHORT, /* Fits into +127..-128 */
  26. EPIPHANY_RELAX_BRANCH_LONG, /* b/bl/b<cond> +-2*16 */
  27. EPIPHANY_RELAX_ARITH_SIMM3, /* add/sub -7..3 */
  28. EPIPHANY_RELAX_ARITH_SIMM11, /* add/sub -2**11-1 .. 2**10-1 */
  29. EPIPHANY_RELAX_MOV_IMM8, /* mov r,imm8 */
  30. EPIPHANY_RELAX_MOV_IMM16, /* mov r,imm16 */
  31. EPIPHANY_RELAX_LDST_IMM3, /* (ldr|str)* r,[r,disp3] */
  32. EPIPHANY_RELAX_LDST_IMM11 /* (ldr|str)* r,[r,disp11] */
  33. } EPIPHANY_RELAX_TYPES;
  34. /* Override disassembly hashing... */
  35. /* Can only depend on instruction having 4 decode bits which gets us to the
  36. major groups of 16/32 instructions. */
  37. #undef CGEN_DIS_HASH_SIZE
  38. #if 1
  39. /* hash code on the 4 LSBs */
  40. #define CGEN_DIS_HASH_SIZE 16
  41. #define CGEN_DIS_HASH(buf, value) ((*buf) & 0xf)
  42. #else
  43. #define CGEN_DIS_HASH_SIZE 1
  44. #define CGEN_DIS_HASH(buf, value) 0
  45. #endif
  46. extern const char * parse_shortregs (CGEN_CPU_DESC cd,
  47. const char ** strp,
  48. CGEN_KEYWORD * keywords,
  49. long * valuep);
  50. extern const char * parse_branch_addr (CGEN_CPU_DESC cd,
  51. const char ** strp,
  52. int opindex,
  53. int opinfo,
  54. enum cgen_parse_operand_result * resultp,
  55. bfd_vma *valuep);
  56. /* Allows reason codes to be output when assembler errors occur. */
  57. #define CGEN_VERBOSE_ASSEMBLER_ERRORS
  58. /* -- opc.c */
  59. /* Enum declaration for epiphany instruction types. */
  60. typedef enum cgen_insn_type {
  61. EPIPHANY_INSN_INVALID, EPIPHANY_INSN_BEQ16, EPIPHANY_INSN_BEQ, EPIPHANY_INSN_BNE16
  62. , EPIPHANY_INSN_BNE, EPIPHANY_INSN_BGTU16, EPIPHANY_INSN_BGTU, EPIPHANY_INSN_BGTEU16
  63. , EPIPHANY_INSN_BGTEU, EPIPHANY_INSN_BLTEU16, EPIPHANY_INSN_BLTEU, EPIPHANY_INSN_BLTU16
  64. , EPIPHANY_INSN_BLTU, EPIPHANY_INSN_BGT16, EPIPHANY_INSN_BGT, EPIPHANY_INSN_BGTE16
  65. , EPIPHANY_INSN_BGTE, EPIPHANY_INSN_BLT16, EPIPHANY_INSN_BLT, EPIPHANY_INSN_BLTE16
  66. , EPIPHANY_INSN_BLTE, EPIPHANY_INSN_BBEQ16, EPIPHANY_INSN_BBEQ, EPIPHANY_INSN_BBNE16
  67. , EPIPHANY_INSN_BBNE, EPIPHANY_INSN_BBLT16, EPIPHANY_INSN_BBLT, EPIPHANY_INSN_BBLTE16
  68. , EPIPHANY_INSN_BBLTE, EPIPHANY_INSN_B16, EPIPHANY_INSN_B, EPIPHANY_INSN_BL16
  69. , EPIPHANY_INSN_BL, EPIPHANY_INSN_JR16, EPIPHANY_INSN_RTS, EPIPHANY_INSN_JR
  70. , EPIPHANY_INSN_JALR16, EPIPHANY_INSN_JALR, EPIPHANY_INSN_LDRBX16_S, EPIPHANY_INSN_LDRBP16_S
  71. , EPIPHANY_INSN_LDRBX_L, EPIPHANY_INSN_LDRBP_L, EPIPHANY_INSN_LDRBD16_S, EPIPHANY_INSN_LDRBD_L
  72. , EPIPHANY_INSN_LDRBDPM_L, EPIPHANY_INSN_LDRHX16_S, EPIPHANY_INSN_LDRHP16_S, EPIPHANY_INSN_LDRHX_L
  73. , EPIPHANY_INSN_LDRHP_L, EPIPHANY_INSN_LDRHD16_S, EPIPHANY_INSN_LDRHD_L, EPIPHANY_INSN_LDRHDPM_L
  74. , EPIPHANY_INSN_LDRX16_S, EPIPHANY_INSN_LDRP16_S, EPIPHANY_INSN_LDRX_L, EPIPHANY_INSN_LDRP_L
  75. , EPIPHANY_INSN_LDRD16_S, EPIPHANY_INSN_LDRD_L, EPIPHANY_INSN_LDRDPM_L, EPIPHANY_INSN_LDRDX16_S
  76. , EPIPHANY_INSN_LDRDP16_S, EPIPHANY_INSN_LDRDX_L, EPIPHANY_INSN_LDRDP_L, EPIPHANY_INSN_LDRDD16_S
  77. , EPIPHANY_INSN_LDRDD_L, EPIPHANY_INSN_LDRDDPM_L, EPIPHANY_INSN_TESTSETBT, EPIPHANY_INSN_TESTSETHT
  78. , EPIPHANY_INSN_TESTSETT, EPIPHANY_INSN_STRBX16, EPIPHANY_INSN_STRBX, EPIPHANY_INSN_STRBP16
  79. , EPIPHANY_INSN_STRBP, EPIPHANY_INSN_STRBD16, EPIPHANY_INSN_STRBD, EPIPHANY_INSN_STRBDPM
  80. , EPIPHANY_INSN_STRHX16, EPIPHANY_INSN_STRHX, EPIPHANY_INSN_STRHP16, EPIPHANY_INSN_STRHP
  81. , EPIPHANY_INSN_STRHD16, EPIPHANY_INSN_STRHD, EPIPHANY_INSN_STRHDPM, EPIPHANY_INSN_STRX16
  82. , EPIPHANY_INSN_STRX, EPIPHANY_INSN_STRP16, EPIPHANY_INSN_STRP, EPIPHANY_INSN_STRD16
  83. , EPIPHANY_INSN_STRD, EPIPHANY_INSN_STRDPM, EPIPHANY_INSN_STRDX16, EPIPHANY_INSN_STRDX
  84. , EPIPHANY_INSN_STRDP16, EPIPHANY_INSN_STRDP, EPIPHANY_INSN_STRDD16, EPIPHANY_INSN_STRDD
  85. , EPIPHANY_INSN_STRDDPM, EPIPHANY_INSN_CMOV16EQ, EPIPHANY_INSN_CMOVEQ, EPIPHANY_INSN_CMOV16NE
  86. , EPIPHANY_INSN_CMOVNE, EPIPHANY_INSN_CMOV16GTU, EPIPHANY_INSN_CMOVGTU, EPIPHANY_INSN_CMOV16GTEU
  87. , EPIPHANY_INSN_CMOVGTEU, EPIPHANY_INSN_CMOV16LTEU, EPIPHANY_INSN_CMOVLTEU, EPIPHANY_INSN_CMOV16LTU
  88. , EPIPHANY_INSN_CMOVLTU, EPIPHANY_INSN_CMOV16GT, EPIPHANY_INSN_CMOVGT, EPIPHANY_INSN_CMOV16GTE
  89. , EPIPHANY_INSN_CMOVGTE, EPIPHANY_INSN_CMOV16LT, EPIPHANY_INSN_CMOVLT, EPIPHANY_INSN_CMOV16LTE
  90. , EPIPHANY_INSN_CMOVLTE, EPIPHANY_INSN_CMOV16B, EPIPHANY_INSN_CMOVB, EPIPHANY_INSN_CMOV16BEQ
  91. , EPIPHANY_INSN_CMOVBEQ, EPIPHANY_INSN_CMOV16BNE, EPIPHANY_INSN_CMOVBNE, EPIPHANY_INSN_CMOV16BLT
  92. , EPIPHANY_INSN_CMOVBLT, EPIPHANY_INSN_CMOV16BLTE, EPIPHANY_INSN_CMOVBLTE, EPIPHANY_INSN_MOVTS16
  93. , EPIPHANY_INSN_MOVTS6, EPIPHANY_INSN_MOVTSDMA, EPIPHANY_INSN_MOVTSMEM, EPIPHANY_INSN_MOVTSMESH
  94. , EPIPHANY_INSN_MOVFS16, EPIPHANY_INSN_MOVFS6, EPIPHANY_INSN_MOVFSDMA, EPIPHANY_INSN_MOVFSMEM
  95. , EPIPHANY_INSN_MOVFSMESH, EPIPHANY_INSN_NOP, EPIPHANY_INSN_SNOP, EPIPHANY_INSN_UNIMPL
  96. , EPIPHANY_INSN_IDLE, EPIPHANY_INSN_BKPT, EPIPHANY_INSN_MBKPT, EPIPHANY_INSN_RTI
  97. , EPIPHANY_INSN_WAND, EPIPHANY_INSN_SYNC, EPIPHANY_INSN_GIEN, EPIPHANY_INSN_GIDIS
  98. , EPIPHANY_INSN_SWI_NUM, EPIPHANY_INSN_SWI, EPIPHANY_INSN_TRAP16, EPIPHANY_INSN_ADD16
  99. , EPIPHANY_INSN_ADD, EPIPHANY_INSN_SUB16, EPIPHANY_INSN_SUB, EPIPHANY_INSN_AND16
  100. , EPIPHANY_INSN_AND, EPIPHANY_INSN_ORR16, EPIPHANY_INSN_ORR, EPIPHANY_INSN_EOR16
  101. , EPIPHANY_INSN_EOR, EPIPHANY_INSN_ADDI16, EPIPHANY_INSN_ADDI, EPIPHANY_INSN_SUBI16
  102. , EPIPHANY_INSN_SUBI, EPIPHANY_INSN_ASR16, EPIPHANY_INSN_ASR, EPIPHANY_INSN_LSR16
  103. , EPIPHANY_INSN_LSR, EPIPHANY_INSN_LSL16, EPIPHANY_INSN_LSL, EPIPHANY_INSN_LSRI16
  104. , EPIPHANY_INSN_LSRI32, EPIPHANY_INSN_LSLI16, EPIPHANY_INSN_LSLI32, EPIPHANY_INSN_ASRI16
  105. , EPIPHANY_INSN_ASRI32, EPIPHANY_INSN_BITR16, EPIPHANY_INSN_BITR, EPIPHANY_INSN_FEXT
  106. , EPIPHANY_INSN_FDEP, EPIPHANY_INSN_LFSR, EPIPHANY_INSN_MOV8, EPIPHANY_INSN_MOV16
  107. , EPIPHANY_INSN_MOVT, EPIPHANY_INSN_F_ADDF16, EPIPHANY_INSN_F_ADDF32, EPIPHANY_INSN_F_SUBF16
  108. , EPIPHANY_INSN_F_SUBF32, EPIPHANY_INSN_F_MULF16, EPIPHANY_INSN_F_MULF32, EPIPHANY_INSN_F_MADDF16
  109. , EPIPHANY_INSN_F_MADDF32, EPIPHANY_INSN_F_MSUBF16, EPIPHANY_INSN_F_MSUBF32, EPIPHANY_INSN_F_ABSF16
  110. , EPIPHANY_INSN_F_ABSF32, EPIPHANY_INSN_F_LOATF16, EPIPHANY_INSN_F_LOATF32, EPIPHANY_INSN_F_IXF16
  111. , EPIPHANY_INSN_F_IXF32, EPIPHANY_INSN_F_RECIPF32, EPIPHANY_INSN_F_SQRTF32
  112. } CGEN_INSN_TYPE;
  113. /* Index of `invalid' insn place holder. */
  114. #define CGEN_INSN_INVALID EPIPHANY_INSN_INVALID
  115. /* Total number of insns in table. */
  116. #define MAX_INSNS ((int) EPIPHANY_INSN_F_SQRTF32 + 1)
  117. /* This struct records data prior to insertion or after extraction. */
  118. struct cgen_fields
  119. {
  120. int length;
  121. long f_nil;
  122. long f_anyof;
  123. long f_opc;
  124. long f_opc_4_1;
  125. long f_opc_6_3;
  126. long f_opc_8_5;
  127. long f_opc_19_4;
  128. long f_condcode;
  129. long f_secondary_ccs;
  130. long f_shift;
  131. long f_wordsize;
  132. long f_store;
  133. long f_opc_8_1;
  134. long f_opc_31_32;
  135. long f_simm8;
  136. long f_simm24;
  137. long f_sdisp3;
  138. long f_disp3;
  139. long f_disp8;
  140. long f_imm8;
  141. long f_imm_27_8;
  142. long f_addsubx;
  143. long f_subd;
  144. long f_pm;
  145. long f_rm;
  146. long f_rn;
  147. long f_rd;
  148. long f_rm_x;
  149. long f_rn_x;
  150. long f_rd_x;
  151. long f_dc_9_1;
  152. long f_sn;
  153. long f_sd;
  154. long f_sn_x;
  155. long f_sd_x;
  156. long f_dc_7_4;
  157. long f_trap_swi_9_1;
  158. long f_gien_gidis_9_1;
  159. long f_dc_15_3;
  160. long f_dc_15_7;
  161. long f_dc_15_6;
  162. long f_trap_num;
  163. long f_dc_20_1;
  164. long f_dc_21_1;
  165. long f_dc_21_2;
  166. long f_dc_22_3;
  167. long f_dc_22_2;
  168. long f_dc_22_1;
  169. long f_dc_25_6;
  170. long f_dc_25_4;
  171. long f_dc_25_2;
  172. long f_dc_25_1;
  173. long f_dc_28_1;
  174. long f_dc_31_3;
  175. long f_disp11;
  176. long f_sdisp11;
  177. long f_imm16;
  178. long f_rd6;
  179. long f_rn6;
  180. long f_rm6;
  181. long f_sd6;
  182. long f_sn6;
  183. };
  184. #define CGEN_INIT_PARSE(od) \
  185. {\
  186. }
  187. #define CGEN_INIT_INSERT(od) \
  188. {\
  189. }
  190. #define CGEN_INIT_EXTRACT(od) \
  191. {\
  192. }
  193. #define CGEN_INIT_PRINT(od) \
  194. {\
  195. }
  196. #endif /* EPIPHANY_OPC_H */