Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. /* TI C6X instruction format information.
  2.    Copyright 2010-2013 Free Software Foundation, Inc.
  3.  
  4.    This program is free software; you can redistribute it and/or modify
  5.    it under the terms of the GNU General Public License as published by
  6.    the Free Software Foundation; either version 3 of the License, or
  7.    (at your option) any later version.
  8.  
  9.    This program is distributed in the hope that it will be useful,
  10.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.    GNU General Public License for more details.
  13.  
  14.    You should have received a copy of the GNU General Public License
  15.    along with this program; if not, write to the Free Software
  16.    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
  17.    MA 02110-1301, USA.  */
  18.  
  19. /* Define the FMT macro before including this file; it takes a name
  20.    and the fields from tic6x_insn_format (defined in tic6x.h).  */
  21.  
  22. /* Expansion fields values for 16 bits insn.  */
  23. #define SAT(a) (((a) & 1) << TIC6X_COMPACT_SAT_POS)
  24. #define BR(a) (((a) & 1) << TIC6X_COMPACT_BR_POS)
  25. #define DSZ(a) (((a) & 7) << TIC6X_COMPACT_DSZ_POS)
  26. /* Composite fields for 16 bits insn.  */
  27. #define BFLD(low_pos, width, pos) { (low_pos), (width), (pos) }
  28. #define BFLD1(a) 1, { a }
  29. #define BFLD2(a, b) 2, { a, b }
  30. #define BFLD3(a, b, c) 3, { a, b, c }
  31. #define BFLD4(a, b, c, d) 4, { a, b, c, d }
  32. #define COMPFLD(name, bitfields) { CONCAT2(tic6x_field_,name),  bitfields }
  33. /**/
  34. #define FLD(name, pos, width) { CONCAT2(tic6x_field_,name), BFLD1(BFLD(pos, width, 0)) }
  35. #define CFLDS FLD(p, 0, 1), FLD(creg, 29, 3), FLD(z, 28, 1)
  36. #define CFLDS2(a, b) 5, { CFLDS, a, b }
  37. #define CFLDS3(a, b, c) 6, { CFLDS, a, b, c }
  38. #define CFLDS4(a, b, c, d) 7, { CFLDS, a, b, c, d }
  39. #define CFLDS5(a, b, c, d, e) 8, { CFLDS, a, b, c, d, e }
  40. #define CFLDS6(a, b, c, d, e, f) 9, { CFLDS, a, b, c, d, e, f }
  41. #define CFLDS7(a, b, c, d, e, f, g) 10, { CFLDS, a, b, c, d, e, f, g }
  42. #define CFLDS8(a, b, c, d, e, f, g, h) 11, { CFLDS, a, b, c, d, e, f, g, h }
  43. #define NFLDS FLD(p, 0, 1)
  44. #define NFLDS1(a) 2, { NFLDS, a }
  45. #define NFLDS2(a, b) 3, { NFLDS, a, b }
  46. #define NFLDS3(a, b, c) 4, { NFLDS, a, b, c }
  47. #define NFLDS5(a, b, c, d, e) 6, { NFLDS, a, b, c, d, e }
  48. #define NFLDS6(a, b, c, d, e, f) 7, { NFLDS, a, b, c, d, e, f }
  49. #define NFLDS7(a, b, c, d, e, f, g) 8, { NFLDS, a, b, c, d, e, f, g }
  50. /* 16 bits insn */
  51. #define FLDS1(a) 1, { a }
  52. #define FLDS2(a, b) 2, { a, b }
  53. #define FLDS3(a, b, c) 3, { a, b, c }
  54. #define FLDS4(a, b, c, d) 4, { a, b, c, d }
  55. #define FLDS5(a, b, c, d, e) 5, { a, b, c, d, e }
  56. #define SFLDS FLD(s, 0, 1)
  57. #define SFLDS1(a) 2, { SFLDS, a }
  58. #define SFLDS2(a, b) 3, { SFLDS, a, b }
  59. #define SFLDS3(a, b, c) 4, { SFLDS, a, b, c }
  60. #define SFLDS4(a, b, c, d) 5, { SFLDS, a, b, c, d }
  61. #define SFLDS5(a, b, c, d, e) 6, { SFLDS, a, b, c, d, e }
  62. #define SFLDS6(a, b, c, d, e, f) 7, { SFLDS, a, b, c, d, e, f }
  63. #define SFLDS7(a, b, c, d, e, f, g) 8, { SFLDS, a, b, c, d, e, f, g }
  64. /**/
  65.  
  66. /* These are in the order from SPRUFE8, appendices C-H.  */
  67.  
  68. /* Appendix C 32-bit formats.  */
  69.  
  70. FMT(d_1_or_2_src, 32, 0x40, 0x7c,
  71.     CFLDS5(FLD(s, 1, 1), FLD(op, 7, 6), FLD(src1, 13, 5), FLD(src2, 18, 5),
  72.            FLD(dst, 23, 5)))
  73. FMT(d_ext_1_or_2_src, 32, 0x830, 0xc3c,
  74.     CFLDS6(FLD(s, 1, 1), FLD(op, 6, 4), FLD(x, 12, 1), FLD(src1, 13, 5),
  75.            FLD(src2, 18, 5), FLD(dst, 23, 5)))
  76. FMT(d_load_store, 32, 0x4, 0xc,
  77.     CFLDS8(FLD(s, 1, 1), FLD(op, 4, 3), FLD(y, 7, 1), FLD(r, 8, 1),
  78.            FLD(mode, 9, 4), FLD(offsetR, 13, 5), FLD(baseR, 18, 5),
  79.            FLD(srcdst, 23, 5)))
  80. /* The nonaligned loads and stores have the formats shown in the
  81.    individual instruction descriptions; the appendix is incorrect.  */
  82. FMT(d_load_nonaligned, 32, 0x124, 0x17c,
  83.     CFLDS7(FLD(s, 1, 1), FLD(y, 7, 1), FLD(mode, 9, 4), FLD(offsetR, 13, 5),
  84.            FLD(baseR, 18, 5), FLD(sc, 23, 1), FLD(dst, 24, 4)))
  85. FMT(d_store_nonaligned, 32, 0x174, 0x17c,
  86.     CFLDS7(FLD(s, 1, 1), FLD(y, 7, 1), FLD(mode, 9, 4), FLD(offsetR, 13, 5),
  87.            FLD(baseR, 18, 5), FLD(sc, 23, 1), FLD(src, 24, 4)))
  88. FMT(d_load_store_long, 32, 0xc, 0xc,
  89.     CFLDS5(FLD(s, 1, 1), FLD(op, 4, 3), FLD(y, 7, 1), FLD(offsetR, 8, 15),
  90.            FLD(dst, 23, 5)))
  91. FMT(d_adda_long, 32, 0x1000000c, 0xf000000c,
  92.     NFLDS5(FLD(s, 1, 1), FLD(op, 4, 3), FLD(y, 7, 1), FLD(offsetR, 8, 15),
  93.            FLD(dst, 23, 5)))
  94.  
  95. /* Appendix C 16-bit formats will go here.  */
  96.  
  97. /* C-8 */
  98. FMT(d_doff4_dsz_0xx, 16, DSZ(0) | 0x0004, DSZ(0x4) | 0x0406,
  99.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
  100.            COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
  101. FMT(d_doff4_dsz_100, 16, DSZ(4) | 0x0004, DSZ(0x7) | 0x0406,
  102.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
  103.            COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
  104. FMT(d_doff4_dsz_000, 16, DSZ(0) | 0x0004, DSZ(0x7) | 0x0406,
  105.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
  106.            COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
  107. FMT(d_doff4_dsz_x01, 16, DSZ(1) | 0x0004, DSZ(0x3) | 0x0406,
  108.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
  109.            COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
  110. FMT(d_doff4_dsz_01x, 16, DSZ(2) | 0x0004, DSZ(0x6) | 0x0406,
  111.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
  112.            COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
  113. FMT(d_doff4_dsz_111, 16, DSZ(7) | 0x0004, DSZ(0x7) | 0x0406,
  114.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
  115.            COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
  116. FMT(d_doff4_dsz_x11, 16, DSZ(3) | 0x0004, DSZ(0x3) | 0x0406,
  117.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
  118.            COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
  119. FMT(d_doff4_dsz_010, 16, DSZ(2) | 0x0004, DSZ(0x7) | 0x0406,
  120.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
  121.            COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
  122. FMT(d_doff4_dsz_110, 16, DSZ(6) | 0x0004, DSZ(0x7) | 0x0406,
  123.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
  124.            COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
  125.  
  126. /* C-9 */
  127. FMT(d_doff4dw, 16, DSZ(4) | 0x0004, DSZ(0x4) | 0x0406,
  128.     SFLDS7(FLD(op, 3, 1), FLD(na, 4, 1), FLD(srcdst, 5, 2), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
  129.            COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
  130.  
  131. /* C-10 */
  132. FMT(d_dind_dsz_0xx, 16, DSZ(0) | 0x0404, DSZ(0x4) | 0x0c06,
  133.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  134.            FLD(t, 12, 1), FLD(src1, 13, 3)))
  135.  
  136. FMT(d_dind_dsz_x01, 16, DSZ(1) | 0x0404, DSZ(0x3) | 0x0c06,
  137.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  138.            FLD(t, 12, 1), FLD(src1, 13, 3)))
  139.  
  140. FMT(d_dind_dsz_x11, 16, DSZ(3) | 0x0404, DSZ(0x3) | 0x0c06,
  141.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  142.            FLD(t, 12, 1), FLD(src1, 13, 3)))
  143.  
  144. FMT(d_dind_dsz_01x, 16, DSZ(2) | 0x0404, DSZ(0x6) | 0x0c06,
  145.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  146.            FLD(t, 12, 1), FLD(src1, 13, 3)))
  147.  
  148. FMT(d_dind_dsz_000, 16, DSZ(0) | 0x0404, DSZ(0x7) | 0x0c06,
  149.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  150.            FLD(t, 12, 1), FLD(src1, 13, 3)))
  151.  
  152. FMT(d_dind_dsz_010, 16, DSZ(2) | 0x0404, DSZ(0x7) | 0x0c06,
  153.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  154.            FLD(t, 12, 1), FLD(src1, 13, 3)))
  155.  
  156. FMT(d_dind_dsz_100, 16, DSZ(4) | 0x0404, DSZ(0x7) | 0x0c06,
  157.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  158.            FLD(t, 12, 1), FLD(src1, 13, 3)))
  159.  
  160. FMT(d_dind_dsz_110, 16, DSZ(6) | 0x0404, DSZ(0x7) | 0x0c06,
  161.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  162.            FLD(t, 12, 1), FLD(src1, 13, 3)))
  163.  
  164. FMT(d_dind_dsz_111, 16, DSZ(7) | 0x0404, DSZ(0x7) | 0x0c06,
  165.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  166.            FLD(t, 12, 1), FLD(src1, 13, 3)))
  167.  
  168. /* C-11 */
  169. FMT(d_dinddw, 16, DSZ(4) | 0x0404, DSZ(0x4) | 0x0c06,
  170.     SFLDS7(FLD(op, 3, 1), FLD(na, 4, 1), FLD(srcdst, 5, 2), FLD(ptr, 7, 2),
  171.            FLD(sz, 9, 1), FLD(t, 12, 1), FLD(src1, 13, 3)))
  172.  
  173. /* C-12 */
  174. FMT(d_dinc_dsz_x01, 16, DSZ(1) | 0x0c04, DSZ(0x3) | 0xcc06,
  175.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  176.            FLD(t, 12, 1), FLD(cst, 13, 1)))
  177.  
  178. FMT(d_dinc_dsz_0xx, 16, DSZ(0) | 0x0c04, DSZ(0x4) | 0xcc06,
  179.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  180.            FLD(t, 12, 1), FLD(cst, 13, 1)))
  181.  
  182. FMT(d_dinc_dsz_01x, 16, DSZ(2) | 0x0c04, DSZ(0x6) | 0xcc06,
  183.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  184.            FLD(t, 12, 1), FLD(cst, 13, 1)))
  185.  
  186. FMT(d_dinc_dsz_x11,16, DSZ(3) | 0x0c04, DSZ(0x3) | 0xcc06,
  187.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  188.            FLD(t, 12, 1), FLD(cst, 13, 1)))
  189.  
  190. FMT(d_dinc_dsz_000, 16, DSZ(0) | 0x0c04, DSZ(0x7) | 0xcc06,
  191.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  192.            FLD(t, 12, 1), FLD(cst, 13, 1)))
  193.  
  194. FMT(d_dinc_dsz_010, 16, DSZ(2) | 0x0c04, DSZ(0x7) | 0xcc06,
  195.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  196.            FLD(t, 12, 1), FLD(cst, 13, 1)))
  197.  
  198. FMT(d_dinc_dsz_100, 16, DSZ(4) | 0x0c04, DSZ(0x7) | 0xcc06,
  199.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  200.            FLD(t, 12, 1), FLD(cst, 13, 1)))
  201.  
  202. FMT(d_dinc_dsz_110, 16, DSZ(6) | 0x0c04, DSZ(0x7) | 0xcc06,
  203.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  204.            FLD(t, 12, 1), FLD(cst, 13, 1)))
  205.  
  206. FMT(d_dinc_dsz_111, 16, DSZ(7) | 0x0c04, DSZ(0x7) | 0xcc06,
  207.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  208.            FLD(t, 12, 1), FLD(cst, 13, 1)))
  209.  
  210. /* C-13*/
  211. FMT(d_dincdw, 16, DSZ(4) | 0x0c04, DSZ(0x4) | 0xcc06,
  212.     SFLDS7(FLD(op, 3, 1), FLD(na, 4, 1), FLD(srcdst, 5, 2), FLD(ptr, 7, 2),
  213.            FLD(sz, 9, 1), FLD(t, 12, 1), FLD(cst, 13, 1)))
  214.  
  215. /* C-14 */
  216. FMT(d_ddec_dsz_01x, 16, DSZ(2) | 0x4c04, DSZ(0x6) | 0xcc06,
  217.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  218.            FLD(t, 12, 1), FLD(cst, 13, 1)))
  219.  
  220. FMT(d_ddec_dsz_0xx, 16, DSZ(0) | 0x4c04, DSZ(0x4) | 0xcc06,
  221.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  222.            FLD(t, 12, 1), FLD(cst, 13, 1)))
  223.  
  224. FMT(d_ddec_dsz_x01, 16, DSZ(1) | 0x4c04, DSZ(0x3) | 0xcc06,
  225.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  226.            FLD(t, 12, 1), FLD(cst, 13, 1)))
  227.  
  228. FMT(d_ddec_dsz_x11, 16, DSZ(3) | 0x4c04, DSZ(0x3) | 0xcc06,
  229.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  230.            FLD(t, 12, 1), FLD(cst, 13, 1)))
  231.  
  232. FMT(d_ddec_dsz_000, 16, DSZ(0) | 0x4c04, DSZ(0x7) | 0xcc06,
  233.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  234.            FLD(t, 12, 1), FLD(cst, 13, 1)))
  235.  
  236. FMT(d_ddec_dsz_010, 16, DSZ(2) | 0x4c04, DSZ(0x7) | 0xcc06,
  237.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  238.            FLD(t, 12, 1), FLD(cst, 13, 1)))
  239.  
  240. FMT(d_ddec_dsz_100, 16, DSZ(4) | 0x4c04, DSZ(0x7) | 0xcc06,
  241.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  242.            FLD(t, 12, 1), FLD(cst, 13, 1)))
  243.  
  244. FMT(d_ddec_dsz_110, 16, DSZ(6) | 0x4c04, DSZ(0x7) | 0xcc06,
  245.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  246.            FLD(t, 12, 1), FLD(cst, 13, 1)))
  247.  
  248. FMT(d_ddec_dsz_111, 16, DSZ(7) | 0x4c04, DSZ(0x7) | 0xcc06,
  249.     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
  250.            FLD(t, 12, 1), FLD(cst, 13, 1)))
  251.  
  252. /* C-15 */
  253. FMT(d_ddecdw, 16, DSZ(4) | 0x4c04, DSZ(0x4) | 0xcc06,
  254.     SFLDS7(FLD(op, 3, 1), FLD(na, 4, 1),  FLD(srcdst, 5, 2), FLD(ptr, 7, 2),
  255.            FLD(sz, 9, 1), FLD(t, 12, 1), FLD(cst, 13, 1)))
  256.  
  257. /* C-16 */
  258. FMT(d_dstk, 16, 0x8c04, 0x8c06,
  259.     SFLDS4(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(t, 12, 1),
  260.            COMPFLD(cst, BFLD2(BFLD(7, 3, 2), BFLD(13, 2, 0)))))
  261.  
  262. /* C-17 */
  263. FMT(d_dx2op, 16, 0x0036, 0x047e,
  264.     SFLDS4(FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1), FLD(srcdst, 13, 3)))
  265.  
  266. /* C-18 */
  267. FMT(d_dx5, 16, 0x0436, 0x047e,
  268.     SFLDS2(FLD(dst, 7, 3),
  269.            COMPFLD(cst, BFLD2(BFLD(11, 2, 3), BFLD(13, 3, 0)))))
  270.  
  271. /* C-19 */
  272. FMT(d_dx5p, 16, 0x0c76, 0x1c7e,
  273.     SFLDS2(FLD(op, 7, 1),
  274.            COMPFLD(cst, BFLD2(BFLD(8, 2, 3), BFLD(13, 3, 0)))))
  275.  
  276. /* C-20 */
  277. FMT(d_dx1, 16, 0x1876, 0x1c7e,
  278.     SFLDS2(FLD(srcdst, 7, 3), FLD(op, 13, 3)))
  279.  
  280. /* C-21 */
  281. FMT(d_dpp, 16, 0x0077, 0x087f,
  282.     SFLDS5(FLD(srcdst, 7, 4), FLD(t, 12, 1), FLD(cst, 13, 1), FLD(op, 14, 1),
  283.            FLD(dw, 15, 1)))
  284.  
  285. /* Appendix D 32-bit formats.  */
  286.  
  287. FMT(l_1_or_2_src, 32, 0x18, 0x1c,
  288.     CFLDS6(FLD(s, 1, 1), FLD(op, 5, 7), FLD(x, 12, 1), FLD(src1, 13, 5),
  289.            FLD(src2, 18, 5), FLD(dst, 23, 5)))
  290. FMT(l_1_or_2_src_noncond, 32, 0x10000018, 0xf000001c,
  291.     NFLDS6(FLD(s, 1, 1), FLD(op, 5, 7), FLD(x, 12, 1), FLD(src1, 13, 5),
  292.            FLD(src2, 18, 5), FLD(dst, 23, 5)))
  293. FMT(l_unary, 32, 0x358, 0xffc,
  294.     CFLDS5(FLD(s, 1, 1), FLD(x, 12, 1), FLD(op, 13, 5), FLD(src2, 18, 5),
  295.            FLD(dst, 23, 5)))
  296.  
  297. /* Appendix D 16-bit formats will go here.  */
  298.  
  299. /* D-4 */
  300. FMT(l_l3_sat_0, 16, SAT(0) | 0x0000, SAT(1) | 0x040e,
  301.     SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
  302.            FLD(src1, 13, 3)))
  303.  
  304. FMT(l_l3_sat_1, 16, SAT(1) | 0x0000, SAT(1) | 0x040e,
  305.     SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
  306.            FLD(src1, 13, 3)))
  307.  
  308. /* D-5 - combine cst3 and n fields into a single field cst */
  309. FMT(l_l3i, 16, 0x0400, 0x040e,
  310.     SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(sn, 11, 1), FLD(x, 12, 1),
  311.            COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
  312.  
  313. /* D-6 Mtbd ? */
  314.  
  315. /* D-7 */
  316. FMT(l_l2c, 16, 0x0408, 0x040e,
  317.     SFLDS5(FLD(dst, 4, 1), FLD(src2, 7, 3), FLD(x, 12, 1), FLD(src1, 13, 3),
  318.            COMPFLD(op, BFLD2(BFLD(5, 2, 0), BFLD(11, 1, 2)))))
  319.  
  320. /* D-8 */
  321. FMT(l_lx5, 16, 0x0426, 0x047e,
  322.     SFLDS2(FLD(dst, 7, 3),
  323.            COMPFLD(cst, BFLD2(BFLD(11, 2, 3), BFLD(13, 3, 0)))))
  324.  
  325. /* D-9 */
  326. FMT(l_lx3c, 16, 0x0026, 0x147e,
  327.     SFLDS3(FLD(src2, 7, 3), FLD(dst, 11, 1), FLD(cst, 13, 3)))
  328.  
  329. /* D-10 */
  330. FMT(l_lx1c, 16, 0x1026, 0x147e,
  331.     SFLDS4(FLD(src2, 7, 3), FLD(dst, 11, 1), FLD(cst, 13, 1), FLD(op, 14, 2)))
  332.  
  333. /* D-11 */
  334. FMT(l_lx1, 16, 0x1866, 0x1c7e,
  335.     SFLDS2(FLD(srcdst, 7, 3), FLD(op, 13, 3)))
  336.  
  337. /* Appendix E 32-bit formats.  */
  338.  
  339. FMT(m_compound, 32, 0x30, 0x83c,
  340.     CFLDS6(FLD(s, 1, 1), FLD(op, 6, 5), FLD(x, 12, 1), FLD(src1, 13, 5),
  341.            FLD(src2, 18, 5), FLD(dst, 23, 5)))
  342. FMT(m_1_or_2_src, 32, 0x10000030, 0xf000083c,
  343.     NFLDS6(FLD(s, 1, 1), FLD(op, 6, 5), FLD(x, 12, 1), FLD(src1, 13, 5),
  344.            FLD(src2, 18, 5), FLD(dst, 23, 5)))
  345. /* Contrary to SPRUFE8, this does have predicate fields.  */
  346. FMT(m_unary, 32, 0xf0, 0xffc,
  347.     CFLDS5(FLD(s, 1, 1), FLD(x, 12, 1), FLD(op, 13, 5), FLD(src2, 18, 5),
  348.            FLD(dst, 23, 5)))
  349.  
  350. /* M-unit formats missing from Appendix E.  */
  351. FMT(m_mpy, 32, 0x0, 0x7c,
  352.     CFLDS6(FLD(s, 1, 1), FLD(op, 7, 5), FLD(x, 12, 1), FLD(src1, 13, 5),
  353.            FLD(src2, 18, 5), FLD(dst, 23, 5)))
  354.  
  355. /* Appendix E 16-bit formats will go here.  */
  356. FMT(m_m3_sat_0, 16, SAT(0) | 0x001e, SAT(1) | 0x001e,
  357.     SFLDS5(FLD(op, 5, 2), FLD(src2, 7, 3), FLD(dst, 10, 2),
  358.            FLD(x, 12, 1), FLD(src1, 13, 3)))
  359. FMT(m_m3_sat_1, 16, SAT(1) | 0x001e, SAT(1) | 0x001e,
  360.     SFLDS5(FLD(op, 5, 2), FLD(src2, 7, 3), FLD(dst, 10, 2),
  361.            FLD(x, 12, 1), FLD(src1, 13, 3)))
  362.  
  363. /* Appendix F 32-bit formats.  */
  364.  
  365. FMT(s_1_or_2_src, 32, 0x20, 0x3c,
  366.     CFLDS6(FLD(s, 1, 1), FLD(op, 6, 6), FLD(x, 12, 1), FLD(src1, 13, 5),
  367.            FLD(src2, 18, 5), FLD(dst, 23 ,5)))
  368. FMT(s_ext_1_or_2_src, 32, 0xc30, 0xc3c,
  369.     CFLDS6(FLD(s, 1, 1), FLD(op, 6, 4), FLD(x, 12, 1), FLD(src1, 13, 5),
  370.            FLD(src2, 18, 5), FLD(dst, 23, 5)))
  371. FMT(s_ext_1_or_2_src_noncond, 32, 0xc30, 0xe0000c3c,
  372.     NFLDS7(FLD(s, 1, 1), FLD(op, 6, 4), FLD(x, 12, 1), FLD(src1, 13, 5),
  373.            FLD(src2, 18, 5), FLD(dst, 23, 5), FLD(z, 28, 1)))
  374. FMT(s_unary, 32, 0xf20, 0xffc,
  375.     CFLDS5(FLD(s, 1, 1), FLD(x, 12, 1), FLD(op, 13, 5), FLD(src2, 18, 5),
  376.            FLD(dst, 23, 5)))
  377. FMT(s_ext_branch_cond_imm, 32, 0x10, 0x7c,
  378.     CFLDS2(FLD(s, 1, 1), FLD(cst, 7, 21)))
  379. FMT(s_call_imm_nop, 32, 0x10, 0xe000007c,
  380.     NFLDS3(FLD(s, 1, 1), FLD(cst, 7, 21), FLD(z, 28, 1)))
  381. FMT(s_branch_nop_cst, 32, 0x120, 0x1ffc,
  382.     CFLDS3(FLD(s, 1, 1), FLD(src1, 13, 3), FLD(src2, 16, 12)))
  383. FMT(s_branch_nop_reg, 32, 0x800360, 0xf830ffc,
  384.     CFLDS4(FLD(s, 1, 1), FLD(x, 12, 1), FLD(src1, 13, 3), FLD(src2, 18, 5)))
  385. FMT(s_branch, 32, 0x360, 0xf83effc,
  386.     CFLDS3(FLD(s, 1, 1), FLD(x, 12, 1), FLD(src2, 18, 5)))
  387. FMT(s_mvk, 32, 0x28, 0x3c,
  388.     CFLDS4(FLD(s, 1, 1), FLD(h, 6, 1), FLD(cst, 7, 16), FLD(dst, 23, 5)))
  389. FMT(s_field, 32, 0x8, 0x3c,
  390.     CFLDS6(FLD(s, 1, 1), FLD(op, 6, 2), FLD(cstb, 8, 5), FLD(csta, 13, 5),
  391.            FLD(src2, 18, 5), FLD(dst, 23, 5)))
  392.  
  393. /* S-unit formats missing from Appendix F.  */
  394. FMT(s_addk, 32, 0x50, 0x7c,
  395.     CFLDS3(FLD(s, 1, 1), FLD(cst, 7, 16), FLD(dst, 23, 5)))
  396. FMT(s_addkpc, 32, 0x160, 0x1ffc,
  397.     CFLDS4(FLD(s, 1, 1), FLD(src2, 13, 3), FLD(src1, 16, 7), FLD(dst, 23, 5)))
  398. FMT(s_b_irp, 32, 0x1800e0, 0x7feffc,
  399.     CFLDS3(FLD(s, 1, 1), FLD(x, 12, 1), FLD(dst, 23, 5)))
  400. FMT(s_b_nrp, 32, 0x1c00e0, 0x7feffc,
  401.     CFLDS3(FLD(s, 1, 1), FLD(x, 12, 1), FLD(dst, 23, 5)))
  402. FMT(s_bdec, 32, 0x1020, 0x1ffc,
  403.     CFLDS3(FLD(s, 1, 1), FLD(src, 13, 10), FLD(dst, 23, 5)))
  404. FMT(s_bpos, 32, 0x20, 0x1ffc,
  405.     CFLDS3(FLD(s, 1, 1), FLD(src, 13, 10), FLD(dst, 23, 5)))
  406.  
  407. /* Appendix F 16-bit formats will go here.  */
  408.  
  409. /* F-17 Sbs7 Instruction Format */
  410. FMT(s_sbs7, 16, BR(1) | 0x000a, BR(1) | 0x003e,
  411.     SFLDS2(FLD(cst, 6, 7), FLD(n, 13, 3)))
  412.  
  413. /* F-18 Sbu8 Instruction Format */
  414. FMT(s_sbu8, 16, BR(1) | 0xc00a, BR(1) | 0xc03e,
  415.     SFLDS1(FLD(cst, 6, 8)))
  416.  
  417. /* F-19 Scs10 Instruction Format */
  418. FMT(s_scs10, 16, BR(1) | 0x001a, BR(1) | 0x003e,
  419.     SFLDS1(FLD(cst, 6, 10)))
  420.  
  421. /* F-20 Sbs7c Instruction Format */
  422. FMT(s_sbs7c, 16, BR(1) | 0x002a, BR(1) | 0x002e,
  423.     SFLDS3(FLD(z, 4, 1), FLD(cst, 6, 7), FLD(n, 13, 3)))
  424.  
  425. /* F-21 Sbu8c Instruction Format */
  426. FMT(s_sbu8c, 16, BR(1) | 0xc02a, BR(1) |  0xc02e,
  427.     SFLDS2(FLD(z, 4, 1), FLD(cst, 6, 8)))
  428.  
  429. /* F-22 S3 Instruction Format */
  430. FMT(s_s3, 16, BR(0) | 0x000a, BR(1) | 0x040e,
  431.     SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
  432.           FLD(src1, 13, 3)))
  433.  
  434. FMT(s_s3_sat_x, 16, BR(0) | SAT(0) | 0x000a, BR(1) | SAT(0) | 0x040e,
  435.     SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
  436.           FLD(src1, 13, 3)))
  437.  
  438. FMT(s_s3_sat_0, 16, BR(0) | SAT(0) | 0x000a, BR(1) | SAT(1) | 0x040e,
  439.     SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
  440.           FLD(src1, 13, 3)))
  441.  
  442. FMT(s_s3_sat_1, 16, BR(0) | SAT(1) | 0x000a, BR(1) | SAT(1) |    0x040e,
  443.     SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
  444.           FLD(src1, 13, 3)))
  445.  
  446. /* F-23 S3i Instruction Format */
  447. FMT(s_s3i, 16, BR(0) | 0x040a, BR(1) | 0x040e,
  448.     SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
  449.            FLD(cst, 13, 3)))
  450.  
  451. /* F-24 Smvk8 Instruction Format */
  452. FMT(s_smvk8, 16, 0x0012, 0x001e,
  453.     SFLDS2(FLD(dst, 7, 3),
  454.            COMPFLD(cst, BFLD4(BFLD(10, 1, 7), BFLD(5, 2, 5), BFLD(11, 2, 3), BFLD(13, 3, 0)))))
  455.  
  456. /* F-25 Ssh5 Instruction Format */
  457. FMT(s_ssh5_sat_x, 16, SAT(0) | 0x0402, SAT(0) | 0x041e,
  458.     SFLDS3(FLD(op, 5, 2), FLD(srcdst, 7, 3),
  459.            COMPFLD(cst, BFLD2(BFLD(11, 2, 3), BFLD(13, 3, 0)))))
  460. FMT(s_ssh5_sat_0, 16, SAT(0) | 0x0402, SAT(1) | 0x041e,
  461.     SFLDS3(FLD(op, 5, 2), FLD(srcdst, 7, 3),
  462.            COMPFLD(cst, BFLD2(BFLD(11, 2, 3), BFLD(13, 3, 0)))))
  463. FMT(s_ssh5_sat_1, 16, SAT(1) | 0x0402, SAT(1) | 0x041e,
  464.     SFLDS3(FLD(op, 5, 2), FLD(srcdst, 7, 3),
  465.            COMPFLD(cst, BFLD2(BFLD(11, 2, 3), BFLD(13, 3, 0)))))
  466.  
  467. /* F-26 S2sh Instruction Format */
  468. FMT(s_s2sh, 16, 0x0462, 0x047e,
  469.     SFLDS3(FLD(srcdst, 7, 3), FLD(op, 11, 2), FLD(src1, 13, 3)))
  470.  
  471. /* F-27 Sc5 Instruction Format */
  472. FMT(s_sc5, 16, 0x0002, 0x041e,
  473.     SFLDS3(FLD(op, 5, 2), FLD(srcdst, 7, 3),
  474.            COMPFLD(cst, BFLD2(BFLD(11, 2, 3), BFLD(13, 3, 0)))))
  475.  
  476. /* F-28 S2ext Instruction Format */
  477. FMT(s_s2ext, 16, 0x0062, 0x047e,
  478.     SFLDS3(FLD(src, 7, 3), FLD(op, 11, 2), FLD(dst, 13, 3)))
  479.  
  480. /* F-29 Sx2op Instruction Format */
  481. FMT(s_sx2op, 16, 0x002e, 0x047e,
  482.     SFLDS4(FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
  483.            FLD(srcdst, 13, 3)))
  484.  
  485. /* F-30 Sx5 Instruction Format */
  486. FMT(s_sx5, 16, 0x042e, 0x047e,
  487.     SFLDS2(FLD(dst, 7, 3),
  488.            COMPFLD(cst, BFLD2(BFLD(11, 2, 3), BFLD(13, 3, 0)))))
  489.  
  490. /* F-31 Sx1 Instruction Format */
  491. FMT(s_sx1, 16, 0x186e, 0x1c7e,
  492.     SFLDS2(FLD(srcdst, 7, 3), FLD(op, 13, 3)))
  493.  
  494. /* F-32 Sx1b Instruction Format */
  495. FMT(s_sx1b, 16, 0x006e, 0x187e,
  496.     SFLDS2(FLD(src2, 7, 4), FLD(n, 13, 3)))
  497.  
  498. /* Appendix G 16-bit formats will go here.  */
  499. FMT(lsdmvto, 16, 0x0006, 0x0066,
  500.     SFLDS4(FLD(unit, 3, 2),
  501.            FLD(x, 12, 1), FLD(dst, 13, 3),
  502.            COMPFLD(src2, BFLD2(BFLD(10, 2, 3), BFLD(7, 3, 0)))))
  503.  
  504. FMT(lsdmvfr, 16, 0x0046, 0x0066,
  505.     SFLDS4(FLD(unit, 3, 2), FLD(src2, 7, 3), FLD(x, 12, 1),
  506.            COMPFLD(dst, BFLD2(BFLD(10, 2, 3), BFLD(13, 3, 0)))))
  507.  
  508. /* G-3 */
  509. FMT(lsdx1c, 16, 0x0866, 0x1c66,
  510.     SFLDS4(FLD(unit, 3, 2), FLD(dst, 7, 3), FLD(cst, 13, 1),
  511.            FLD(cc, 14, 2)))
  512.  
  513. /* G-4 */
  514. FMT(lsdx1, 16, 0x1866, 0x1c66,
  515.     SFLDS3(FLD(unit, 3, 2), FLD(srcdst, 7, 3), FLD(op, 13, 3)))
  516.  
  517. /* Appendix H 32-bit formats.  */
  518.  
  519. FMT(nfu_loop_buffer, 32, 0x00020000, 0x00021ffc,
  520.     CFLDS4(FLD(s, 1, 1), FLD(op, 13, 4), FLD(csta, 18, 5), FLD(cstb, 23, 5)))
  521. /* Corrected relative to Appendix H.  */
  522. FMT(nfu_nop_idle, 32, 0x00000000, 0xfffe1ffc,
  523.     NFLDS2(FLD(s, 1, 1), FLD(op, 13, 4)))
  524.  
  525. /* No-unit formats missing from Appendix H (given the NOP and IDLE
  526.    correction).  */
  527. FMT(nfu_dint, 32, 0x10004000, 0xfffffffc,
  528.     NFLDS1(FLD(s, 1, 1)))
  529. FMT(nfu_rint, 32, 0x10006000, 0xfffffffc,
  530.     NFLDS1(FLD(s, 1, 1)))
  531. FMT(nfu_swe, 32, 0x10000000, 0xfffffffc,
  532.     NFLDS1(FLD(s, 1, 1)))
  533. FMT(nfu_swenr, 32, 0x10002000, 0xfffffffc,
  534.     NFLDS1(FLD(s, 1, 1)))
  535. /* Although formally covered by the loop buffer format, the fields in
  536.    that format are not useful for all such instructions and not all
  537.    instructions can be predicated.  */
  538. FMT(nfu_spkernel, 32, 0x00034000, 0xf03ffffc,
  539.     NFLDS2(FLD(s, 1, 1), FLD(fstgfcyc, 22, 6)))
  540. FMT(nfu_spkernelr, 32, 0x00036000, 0xfffffffc,
  541.     NFLDS1(FLD(s, 1, 1)))
  542. FMT(nfu_spmask, 32, 0x00020000, 0xfc021ffc,
  543.     NFLDS3(FLD(s, 1, 1), FLD(op, 13, 4), FLD(mask, 18, 8)))
  544.  
  545. /* Appendix H 16-bit formats will go here.  */
  546.  
  547. /* H-5 */
  548. FMT(nfu_uspl, 16, 0x0c66, 0xbc7e,
  549.    FLDS2(FLD(op, 0, 1), COMPFLD(ii, BFLD2(BFLD(7, 3, 0), BFLD(14, 1, 3)))))
  550.  
  551. /* H-6 */
  552. /* make up some fields to pretend to have s and z fields s for this format
  553.    so as to fit in other predicated compact instruction to avoid special-
  554.    casing this instruction in tic6x-dis.c
  555.    use op field as a predicate adress register selector (s field)
  556.    use the first zeroed bit as a z value as this insn only supports [a0]
  557.    and [b0] predicate forms.
  558. */
  559. FMT(nfu_uspldr, 16, 0x8c66, 0xbc7e,
  560.    FLDS4(FLD(op, 0, 1), FLD(s, 0, 1), FLD(z, 3, 1),
  561.          COMPFLD(ii, BFLD2(BFLD(7, 3, 0), BFLD(14, 1, 3)))))
  562.  
  563. /* H-7 */
  564. FMT(nfu_uspk, 16, 0x1c66, 0x3c7e,
  565.    FLDS1(COMPFLD(fstgfcyc, BFLD3(BFLD(0, 1, 0), BFLD(7, 3, 1), BFLD(14, 2, 4)))))
  566.  
  567. /* H-8a */
  568. FMT(nfu_uspma, 16, 0x2c66, 0x3c7e,
  569.    FLDS1(COMPFLD(mask, BFLD3(BFLD(0, 1, 0), BFLD(7, 3, 1), BFLD(14, 2, 4)))))
  570.  
  571. /* H-8b */
  572. FMT(nfu_uspmb, 16, 0x3c66, 0x3c7e,
  573.    FLDS1(COMPFLD(mask, BFLD3(BFLD(0, 1, 0), BFLD(7, 3, 1), BFLD(14, 2, 4)))))
  574.  
  575. /* H-9 */
  576. FMT(nfu_unop, 16, 0x0c6e, 0x1fff,
  577.    FLDS1(FLD(n, 13, 3)))
  578.  
  579. #undef FLD
  580. #undef CFLDS
  581. #undef CFLDS2
  582. #undef CFLDS3
  583. #undef CFLDS4
  584. #undef CFLDS5
  585. #undef CFLDS6
  586. #undef CFLDS7
  587. #undef CFLDS8
  588. #undef NFLDS
  589. #undef NFLDS1
  590. #undef NFLDS2
  591. #undef NFLDS3
  592. #undef NFLDS5
  593. #undef NFLDS6
  594. #undef NFLDS7
  595. #undef SFLDS
  596. #undef SFLDS1
  597. #undef SFLDS2
  598. #undef SFLDS3
  599. #undef SFLDS4
  600. #undef SFLDS5
  601. #undef SFLDS6
  602. #undef SFLDS7
  603. #undef BFLD
  604. #undef BFLD1
  605. #undef BFLD2
  606. #undef BFLD3
  607. #undef BFLD4
  608. #undef FLDS1
  609. #undef FLDS2
  610. #undef FLDS3
  611. #undef FLDS4
  612. #undef FLDS5
  613. #undef COMPFLD
  614. #undef DSZ
  615. #undef BR
  616. #undef SAT
  617.