fr30-opc.c 32 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369
  1. /* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */
  2. /* Instruction opcode table for fr30.
  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 "fr30-desc.h"
  23. #include "fr30-opc.h"
  24. #include "libiberty.h"
  25. /* The hash functions are recorded here to help keep assembler code out of
  26. the disassembler and vice versa. */
  27. static int asm_hash_insn_p (const CGEN_INSN *);
  28. static unsigned int asm_hash_insn (const char *);
  29. static int dis_hash_insn_p (const CGEN_INSN *);
  30. static unsigned int dis_hash_insn (const char *, CGEN_INSN_INT);
  31. /* Instruction formats. */
  32. #define F(f) & fr30_cgen_ifld_table[FR30_##f]
  33. static const CGEN_IFMT ifmt_empty ATTRIBUTE_UNUSED = {
  34. 0, 0, 0x0, { { 0 } }
  35. };
  36. static const CGEN_IFMT ifmt_add ATTRIBUTE_UNUSED = {
  37. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_RJ) }, { F (F_RI) }, { 0 } }
  38. };
  39. static const CGEN_IFMT ifmt_addi ATTRIBUTE_UNUSED = {
  40. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_U4) }, { F (F_RI) }, { 0 } }
  41. };
  42. static const CGEN_IFMT ifmt_add2 ATTRIBUTE_UNUSED = {
  43. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_M4) }, { F (F_RI) }, { 0 } }
  44. };
  45. static const CGEN_IFMT ifmt_div0s ATTRIBUTE_UNUSED = {
  46. 16, 16, 0xfff0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RI) }, { 0 } }
  47. };
  48. static const CGEN_IFMT ifmt_div3 ATTRIBUTE_UNUSED = {
  49. 16, 16, 0xffff, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_OP4) }, { 0 } }
  50. };
  51. static const CGEN_IFMT ifmt_ldi8 ATTRIBUTE_UNUSED = {
  52. 16, 16, 0xf000, { { F (F_OP1) }, { F (F_I8) }, { F (F_RI) }, { 0 } }
  53. };
  54. static const CGEN_IFMT ifmt_ldi20 ATTRIBUTE_UNUSED = {
  55. 16, 32, 0xff00, { { F (F_OP1) }, { F (F_I20) }, { F (F_OP2) }, { F (F_RI) }, { 0 } }
  56. };
  57. static const CGEN_IFMT ifmt_ldi32 ATTRIBUTE_UNUSED = {
  58. 16, 48, 0xfff0, { { F (F_OP1) }, { F (F_I32) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RI) }, { 0 } }
  59. };
  60. static const CGEN_IFMT ifmt_ldr14 ATTRIBUTE_UNUSED = {
  61. 16, 16, 0xf000, { { F (F_OP1) }, { F (F_DISP10) }, { F (F_RI) }, { 0 } }
  62. };
  63. static const CGEN_IFMT ifmt_ldr14uh ATTRIBUTE_UNUSED = {
  64. 16, 16, 0xf000, { { F (F_OP1) }, { F (F_DISP9) }, { F (F_RI) }, { 0 } }
  65. };
  66. static const CGEN_IFMT ifmt_ldr14ub ATTRIBUTE_UNUSED = {
  67. 16, 16, 0xf000, { { F (F_OP1) }, { F (F_DISP8) }, { F (F_RI) }, { 0 } }
  68. };
  69. static const CGEN_IFMT ifmt_ldr15 ATTRIBUTE_UNUSED = {
  70. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_UDISP6) }, { F (F_RI) }, { 0 } }
  71. };
  72. static const CGEN_IFMT ifmt_ldr15dr ATTRIBUTE_UNUSED = {
  73. 16, 16, 0xfff0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RS2) }, { 0 } }
  74. };
  75. static const CGEN_IFMT ifmt_movdr ATTRIBUTE_UNUSED = {
  76. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_RS1) }, { F (F_RI) }, { 0 } }
  77. };
  78. static const CGEN_IFMT ifmt_call ATTRIBUTE_UNUSED = {
  79. 16, 16, 0xf800, { { F (F_OP1) }, { F (F_OP5) }, { F (F_REL12) }, { 0 } }
  80. };
  81. static const CGEN_IFMT ifmt_int ATTRIBUTE_UNUSED = {
  82. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_U8) }, { 0 } }
  83. };
  84. static const CGEN_IFMT ifmt_brad ATTRIBUTE_UNUSED = {
  85. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_CC) }, { F (F_REL9) }, { 0 } }
  86. };
  87. static const CGEN_IFMT ifmt_dmovr13 ATTRIBUTE_UNUSED = {
  88. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_DIR10) }, { 0 } }
  89. };
  90. static const CGEN_IFMT ifmt_dmovr13h ATTRIBUTE_UNUSED = {
  91. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_DIR9) }, { 0 } }
  92. };
  93. static const CGEN_IFMT ifmt_dmovr13b ATTRIBUTE_UNUSED = {
  94. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_DIR8) }, { 0 } }
  95. };
  96. static const CGEN_IFMT ifmt_copop ATTRIBUTE_UNUSED = {
  97. 16, 32, 0xfff0, { { F (F_OP1) }, { F (F_CCC) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_CRJ) }, { F (F_U4C) }, { F (F_CRI) }, { 0 } }
  98. };
  99. static const CGEN_IFMT ifmt_copld ATTRIBUTE_UNUSED = {
  100. 16, 32, 0xfff0, { { F (F_OP1) }, { F (F_CCC) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RJC) }, { F (F_U4C) }, { F (F_CRI) }, { 0 } }
  101. };
  102. static const CGEN_IFMT ifmt_copst ATTRIBUTE_UNUSED = {
  103. 16, 32, 0xfff0, { { F (F_OP1) }, { F (F_CCC) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_CRJ) }, { F (F_U4C) }, { F (F_RIC) }, { 0 } }
  104. };
  105. static const CGEN_IFMT ifmt_addsp ATTRIBUTE_UNUSED = {
  106. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_S10) }, { 0 } }
  107. };
  108. static const CGEN_IFMT ifmt_ldm0 ATTRIBUTE_UNUSED = {
  109. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_LOW_LD) }, { 0 } }
  110. };
  111. static const CGEN_IFMT ifmt_ldm1 ATTRIBUTE_UNUSED = {
  112. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_HI_LD) }, { 0 } }
  113. };
  114. static const CGEN_IFMT ifmt_stm0 ATTRIBUTE_UNUSED = {
  115. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_LOW_ST) }, { 0 } }
  116. };
  117. static const CGEN_IFMT ifmt_stm1 ATTRIBUTE_UNUSED = {
  118. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_HI_ST) }, { 0 } }
  119. };
  120. static const CGEN_IFMT ifmt_enter ATTRIBUTE_UNUSED = {
  121. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_U10) }, { 0 } }
  122. };
  123. #undef F
  124. #define A(a) (1 << CGEN_INSN_##a)
  125. #define OPERAND(op) FR30_OPERAND_##op
  126. #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
  127. #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
  128. /* The instruction table. */
  129. static const CGEN_OPCODE fr30_cgen_insn_opcode_table[MAX_INSNS] =
  130. {
  131. /* Special null first entry.
  132. A `num' value of zero is thus invalid.
  133. Also, the special `invalid' insn resides here. */
  134. { { 0, 0, 0, 0 }, {{0}}, 0, {0}},
  135. /* add $Rj,$Ri */
  136. {
  137. { 0, 0, 0, 0 },
  138. { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
  139. & ifmt_add, { 0xa600 }
  140. },
  141. /* add $u4,$Ri */
  142. {
  143. { 0, 0, 0, 0 },
  144. { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
  145. & ifmt_addi, { 0xa400 }
  146. },
  147. /* add2 $m4,$Ri */
  148. {
  149. { 0, 0, 0, 0 },
  150. { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
  151. & ifmt_add2, { 0xa500 }
  152. },
  153. /* addc $Rj,$Ri */
  154. {
  155. { 0, 0, 0, 0 },
  156. { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
  157. & ifmt_add, { 0xa700 }
  158. },
  159. /* addn $Rj,$Ri */
  160. {
  161. { 0, 0, 0, 0 },
  162. { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
  163. & ifmt_add, { 0xa200 }
  164. },
  165. /* addn $u4,$Ri */
  166. {
  167. { 0, 0, 0, 0 },
  168. { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
  169. & ifmt_addi, { 0xa000 }
  170. },
  171. /* addn2 $m4,$Ri */
  172. {
  173. { 0, 0, 0, 0 },
  174. { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
  175. & ifmt_add2, { 0xa100 }
  176. },
  177. /* sub $Rj,$Ri */
  178. {
  179. { 0, 0, 0, 0 },
  180. { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
  181. & ifmt_add, { 0xac00 }
  182. },
  183. /* subc $Rj,$Ri */
  184. {
  185. { 0, 0, 0, 0 },
  186. { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
  187. & ifmt_add, { 0xad00 }
  188. },
  189. /* subn $Rj,$Ri */
  190. {
  191. { 0, 0, 0, 0 },
  192. { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
  193. & ifmt_add, { 0xae00 }
  194. },
  195. /* cmp $Rj,$Ri */
  196. {
  197. { 0, 0, 0, 0 },
  198. { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
  199. & ifmt_add, { 0xaa00 }
  200. },
  201. /* cmp $u4,$Ri */
  202. {
  203. { 0, 0, 0, 0 },
  204. { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
  205. & ifmt_addi, { 0xa800 }
  206. },
  207. /* cmp2 $m4,$Ri */
  208. {
  209. { 0, 0, 0, 0 },
  210. { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
  211. & ifmt_add2, { 0xa900 }
  212. },
  213. /* and $Rj,$Ri */
  214. {
  215. { 0, 0, 0, 0 },
  216. { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
  217. & ifmt_add, { 0x8200 }
  218. },
  219. /* or $Rj,$Ri */
  220. {
  221. { 0, 0, 0, 0 },
  222. { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
  223. & ifmt_add, { 0x9200 }
  224. },
  225. /* eor $Rj,$Ri */
  226. {
  227. { 0, 0, 0, 0 },
  228. { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
  229. & ifmt_add, { 0x9a00 }
  230. },
  231. /* and $Rj,@$Ri */
  232. {
  233. { 0, 0, 0, 0 },
  234. { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
  235. & ifmt_add, { 0x8400 }
  236. },
  237. /* andh $Rj,@$Ri */
  238. {
  239. { 0, 0, 0, 0 },
  240. { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
  241. & ifmt_add, { 0x8500 }
  242. },
  243. /* andb $Rj,@$Ri */
  244. {
  245. { 0, 0, 0, 0 },
  246. { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
  247. & ifmt_add, { 0x8600 }
  248. },
  249. /* or $Rj,@$Ri */
  250. {
  251. { 0, 0, 0, 0 },
  252. { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
  253. & ifmt_add, { 0x9400 }
  254. },
  255. /* orh $Rj,@$Ri */
  256. {
  257. { 0, 0, 0, 0 },
  258. { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
  259. & ifmt_add, { 0x9500 }
  260. },
  261. /* orb $Rj,@$Ri */
  262. {
  263. { 0, 0, 0, 0 },
  264. { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
  265. & ifmt_add, { 0x9600 }
  266. },
  267. /* eor $Rj,@$Ri */
  268. {
  269. { 0, 0, 0, 0 },
  270. { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
  271. & ifmt_add, { 0x9c00 }
  272. },
  273. /* eorh $Rj,@$Ri */
  274. {
  275. { 0, 0, 0, 0 },
  276. { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
  277. & ifmt_add, { 0x9d00 }
  278. },
  279. /* eorb $Rj,@$Ri */
  280. {
  281. { 0, 0, 0, 0 },
  282. { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
  283. & ifmt_add, { 0x9e00 }
  284. },
  285. /* bandl $u4,@$Ri */
  286. {
  287. { 0, 0, 0, 0 },
  288. { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
  289. & ifmt_addi, { 0x8000 }
  290. },
  291. /* borl $u4,@$Ri */
  292. {
  293. { 0, 0, 0, 0 },
  294. { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
  295. & ifmt_addi, { 0x9000 }
  296. },
  297. /* beorl $u4,@$Ri */
  298. {
  299. { 0, 0, 0, 0 },
  300. { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
  301. & ifmt_addi, { 0x9800 }
  302. },
  303. /* bandh $u4,@$Ri */
  304. {
  305. { 0, 0, 0, 0 },
  306. { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
  307. & ifmt_addi, { 0x8100 }
  308. },
  309. /* borh $u4,@$Ri */
  310. {
  311. { 0, 0, 0, 0 },
  312. { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
  313. & ifmt_addi, { 0x9100 }
  314. },
  315. /* beorh $u4,@$Ri */
  316. {
  317. { 0, 0, 0, 0 },
  318. { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
  319. & ifmt_addi, { 0x9900 }
  320. },
  321. /* btstl $u4,@$Ri */
  322. {
  323. { 0, 0, 0, 0 },
  324. { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
  325. & ifmt_addi, { 0x8800 }
  326. },
  327. /* btsth $u4,@$Ri */
  328. {
  329. { 0, 0, 0, 0 },
  330. { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
  331. & ifmt_addi, { 0x8900 }
  332. },
  333. /* mul $Rj,$Ri */
  334. {
  335. { 0, 0, 0, 0 },
  336. { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
  337. & ifmt_add, { 0xaf00 }
  338. },
  339. /* mulu $Rj,$Ri */
  340. {
  341. { 0, 0, 0, 0 },
  342. { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
  343. & ifmt_add, { 0xab00 }
  344. },
  345. /* mulh $Rj,$Ri */
  346. {
  347. { 0, 0, 0, 0 },
  348. { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
  349. & ifmt_add, { 0xbf00 }
  350. },
  351. /* muluh $Rj,$Ri */
  352. {
  353. { 0, 0, 0, 0 },
  354. { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
  355. & ifmt_add, { 0xbb00 }
  356. },
  357. /* div0s $Ri */
  358. {
  359. { 0, 0, 0, 0 },
  360. { { MNEM, ' ', OP (RI), 0 } },
  361. & ifmt_div0s, { 0x9740 }
  362. },
  363. /* div0u $Ri */
  364. {
  365. { 0, 0, 0, 0 },
  366. { { MNEM, ' ', OP (RI), 0 } },
  367. & ifmt_div0s, { 0x9750 }
  368. },
  369. /* div1 $Ri */
  370. {
  371. { 0, 0, 0, 0 },
  372. { { MNEM, ' ', OP (RI), 0 } },
  373. & ifmt_div0s, { 0x9760 }
  374. },
  375. /* div2 $Ri */
  376. {
  377. { 0, 0, 0, 0 },
  378. { { MNEM, ' ', OP (RI), 0 } },
  379. & ifmt_div0s, { 0x9770 }
  380. },
  381. /* div3 */
  382. {
  383. { 0, 0, 0, 0 },
  384. { { MNEM, 0 } },
  385. & ifmt_div3, { 0x9f60 }
  386. },
  387. /* div4s */
  388. {
  389. { 0, 0, 0, 0 },
  390. { { MNEM, 0 } },
  391. & ifmt_div3, { 0x9f70 }
  392. },
  393. /* lsl $Rj,$Ri */
  394. {
  395. { 0, 0, 0, 0 },
  396. { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
  397. & ifmt_add, { 0xb600 }
  398. },
  399. /* lsl $u4,$Ri */
  400. {
  401. { 0, 0, 0, 0 },
  402. { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
  403. & ifmt_addi, { 0xb400 }
  404. },
  405. /* lsl2 $u4,$Ri */
  406. {
  407. { 0, 0, 0, 0 },
  408. { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
  409. & ifmt_addi, { 0xb500 }
  410. },
  411. /* lsr $Rj,$Ri */
  412. {
  413. { 0, 0, 0, 0 },
  414. { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
  415. & ifmt_add, { 0xb200 }
  416. },
  417. /* lsr $u4,$Ri */
  418. {
  419. { 0, 0, 0, 0 },
  420. { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
  421. & ifmt_addi, { 0xb000 }
  422. },
  423. /* lsr2 $u4,$Ri */
  424. {
  425. { 0, 0, 0, 0 },
  426. { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
  427. & ifmt_addi, { 0xb100 }
  428. },
  429. /* asr $Rj,$Ri */
  430. {
  431. { 0, 0, 0, 0 },
  432. { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
  433. & ifmt_add, { 0xba00 }
  434. },
  435. /* asr $u4,$Ri */
  436. {
  437. { 0, 0, 0, 0 },
  438. { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
  439. & ifmt_addi, { 0xb800 }
  440. },
  441. /* asr2 $u4,$Ri */
  442. {
  443. { 0, 0, 0, 0 },
  444. { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
  445. & ifmt_addi, { 0xb900 }
  446. },
  447. /* ldi:8 $i8,$Ri */
  448. {
  449. { 0, 0, 0, 0 },
  450. { { MNEM, ' ', OP (I8), ',', OP (RI), 0 } },
  451. & ifmt_ldi8, { 0xc000 }
  452. },
  453. /* ldi:20 $i20,$Ri */
  454. {
  455. { 0, 0, 0, 0 },
  456. { { MNEM, ' ', OP (I20), ',', OP (RI), 0 } },
  457. & ifmt_ldi20, { 0x9b00 }
  458. },
  459. /* ldi:32 $i32,$Ri */
  460. {
  461. { 0, 0, 0, 0 },
  462. { { MNEM, ' ', OP (I32), ',', OP (RI), 0 } },
  463. & ifmt_ldi32, { 0x9f80 }
  464. },
  465. /* ld @$Rj,$Ri */
  466. {
  467. { 0, 0, 0, 0 },
  468. { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
  469. & ifmt_add, { 0x400 }
  470. },
  471. /* lduh @$Rj,$Ri */
  472. {
  473. { 0, 0, 0, 0 },
  474. { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
  475. & ifmt_add, { 0x500 }
  476. },
  477. /* ldub @$Rj,$Ri */
  478. {
  479. { 0, 0, 0, 0 },
  480. { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
  481. & ifmt_add, { 0x600 }
  482. },
  483. /* ld @($R13,$Rj),$Ri */
  484. {
  485. { 0, 0, 0, 0 },
  486. { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
  487. & ifmt_add, { 0x0 }
  488. },
  489. /* lduh @($R13,$Rj),$Ri */
  490. {
  491. { 0, 0, 0, 0 },
  492. { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
  493. & ifmt_add, { 0x100 }
  494. },
  495. /* ldub @($R13,$Rj),$Ri */
  496. {
  497. { 0, 0, 0, 0 },
  498. { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
  499. & ifmt_add, { 0x200 }
  500. },
  501. /* ld @($R14,$disp10),$Ri */
  502. {
  503. { 0, 0, 0, 0 },
  504. { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP10), ')', ',', OP (RI), 0 } },
  505. & ifmt_ldr14, { 0x2000 }
  506. },
  507. /* lduh @($R14,$disp9),$Ri */
  508. {
  509. { 0, 0, 0, 0 },
  510. { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP9), ')', ',', OP (RI), 0 } },
  511. & ifmt_ldr14uh, { 0x4000 }
  512. },
  513. /* ldub @($R14,$disp8),$Ri */
  514. {
  515. { 0, 0, 0, 0 },
  516. { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP8), ')', ',', OP (RI), 0 } },
  517. & ifmt_ldr14ub, { 0x6000 }
  518. },
  519. /* ld @($R15,$udisp6),$Ri */
  520. {
  521. { 0, 0, 0, 0 },
  522. { { MNEM, ' ', '@', '(', OP (R15), ',', OP (UDISP6), ')', ',', OP (RI), 0 } },
  523. & ifmt_ldr15, { 0x300 }
  524. },
  525. /* ld @$R15+,$Ri */
  526. {
  527. { 0, 0, 0, 0 },
  528. { { MNEM, ' ', '@', OP (R15), '+', ',', OP (RI), 0 } },
  529. & ifmt_div0s, { 0x700 }
  530. },
  531. /* ld @$R15+,$Rs2 */
  532. {
  533. { 0, 0, 0, 0 },
  534. { { MNEM, ' ', '@', OP (R15), '+', ',', OP (RS2), 0 } },
  535. & ifmt_ldr15dr, { 0x780 }
  536. },
  537. /* ld @$R15+,$ps */
  538. {
  539. { 0, 0, 0, 0 },
  540. { { MNEM, ' ', '@', OP (R15), '+', ',', OP (PS), 0 } },
  541. & ifmt_div3, { 0x790 }
  542. },
  543. /* st $Ri,@$Rj */
  544. {
  545. { 0, 0, 0, 0 },
  546. { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
  547. & ifmt_add, { 0x1400 }
  548. },
  549. /* sth $Ri,@$Rj */
  550. {
  551. { 0, 0, 0, 0 },
  552. { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
  553. & ifmt_add, { 0x1500 }
  554. },
  555. /* stb $Ri,@$Rj */
  556. {
  557. { 0, 0, 0, 0 },
  558. { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
  559. & ifmt_add, { 0x1600 }
  560. },
  561. /* st $Ri,@($R13,$Rj) */
  562. {
  563. { 0, 0, 0, 0 },
  564. { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
  565. & ifmt_add, { 0x1000 }
  566. },
  567. /* sth $Ri,@($R13,$Rj) */
  568. {
  569. { 0, 0, 0, 0 },
  570. { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
  571. & ifmt_add, { 0x1100 }
  572. },
  573. /* stb $Ri,@($R13,$Rj) */
  574. {
  575. { 0, 0, 0, 0 },
  576. { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
  577. & ifmt_add, { 0x1200 }
  578. },
  579. /* st $Ri,@($R14,$disp10) */
  580. {
  581. { 0, 0, 0, 0 },
  582. { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP10), ')', 0 } },
  583. & ifmt_ldr14, { 0x3000 }
  584. },
  585. /* sth $Ri,@($R14,$disp9) */
  586. {
  587. { 0, 0, 0, 0 },
  588. { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP9), ')', 0 } },
  589. & ifmt_ldr14uh, { 0x5000 }
  590. },
  591. /* stb $Ri,@($R14,$disp8) */
  592. {
  593. { 0, 0, 0, 0 },
  594. { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP8), ')', 0 } },
  595. & ifmt_ldr14ub, { 0x7000 }
  596. },
  597. /* st $Ri,@($R15,$udisp6) */
  598. {
  599. { 0, 0, 0, 0 },
  600. { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R15), ',', OP (UDISP6), ')', 0 } },
  601. & ifmt_ldr15, { 0x1300 }
  602. },
  603. /* st $Ri,@-$R15 */
  604. {
  605. { 0, 0, 0, 0 },
  606. { { MNEM, ' ', OP (RI), ',', '@', '-', OP (R15), 0 } },
  607. & ifmt_div0s, { 0x1700 }
  608. },
  609. /* st $Rs2,@-$R15 */
  610. {
  611. { 0, 0, 0, 0 },
  612. { { MNEM, ' ', OP (RS2), ',', '@', '-', OP (R15), 0 } },
  613. & ifmt_ldr15dr, { 0x1780 }
  614. },
  615. /* st $ps,@-$R15 */
  616. {
  617. { 0, 0, 0, 0 },
  618. { { MNEM, ' ', OP (PS), ',', '@', '-', OP (R15), 0 } },
  619. & ifmt_div3, { 0x1790 }
  620. },
  621. /* mov $Rj,$Ri */
  622. {
  623. { 0, 0, 0, 0 },
  624. { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
  625. & ifmt_add, { 0x8b00 }
  626. },
  627. /* mov $Rs1,$Ri */
  628. {
  629. { 0, 0, 0, 0 },
  630. { { MNEM, ' ', OP (RS1), ',', OP (RI), 0 } },
  631. & ifmt_movdr, { 0xb700 }
  632. },
  633. /* mov $ps,$Ri */
  634. {
  635. { 0, 0, 0, 0 },
  636. { { MNEM, ' ', OP (PS), ',', OP (RI), 0 } },
  637. & ifmt_div0s, { 0x1710 }
  638. },
  639. /* mov $Ri,$Rs1 */
  640. {
  641. { 0, 0, 0, 0 },
  642. { { MNEM, ' ', OP (RI), ',', OP (RS1), 0 } },
  643. & ifmt_movdr, { 0xb300 }
  644. },
  645. /* mov $Ri,$ps */
  646. {
  647. { 0, 0, 0, 0 },
  648. { { MNEM, ' ', OP (RI), ',', OP (PS), 0 } },
  649. & ifmt_div0s, { 0x710 }
  650. },
  651. /* jmp @$Ri */
  652. {
  653. { 0, 0, 0, 0 },
  654. { { MNEM, ' ', '@', OP (RI), 0 } },
  655. & ifmt_div0s, { 0x9700 }
  656. },
  657. /* jmp:d @$Ri */
  658. {
  659. { 0, 0, 0, 0 },
  660. { { MNEM, ' ', '@', OP (RI), 0 } },
  661. & ifmt_div0s, { 0x9f00 }
  662. },
  663. /* call @$Ri */
  664. {
  665. { 0, 0, 0, 0 },
  666. { { MNEM, ' ', '@', OP (RI), 0 } },
  667. & ifmt_div0s, { 0x9710 }
  668. },
  669. /* call:d @$Ri */
  670. {
  671. { 0, 0, 0, 0 },
  672. { { MNEM, ' ', '@', OP (RI), 0 } },
  673. & ifmt_div0s, { 0x9f10 }
  674. },
  675. /* call $label12 */
  676. {
  677. { 0, 0, 0, 0 },
  678. { { MNEM, ' ', OP (LABEL12), 0 } },
  679. & ifmt_call, { 0xd000 }
  680. },
  681. /* call:d $label12 */
  682. {
  683. { 0, 0, 0, 0 },
  684. { { MNEM, ' ', OP (LABEL12), 0 } },
  685. & ifmt_call, { 0xd800 }
  686. },
  687. /* ret */
  688. {
  689. { 0, 0, 0, 0 },
  690. { { MNEM, 0 } },
  691. & ifmt_div3, { 0x9720 }
  692. },
  693. /* ret:d */
  694. {
  695. { 0, 0, 0, 0 },
  696. { { MNEM, 0 } },
  697. & ifmt_div3, { 0x9f20 }
  698. },
  699. /* int $u8 */
  700. {
  701. { 0, 0, 0, 0 },
  702. { { MNEM, ' ', OP (U8), 0 } },
  703. & ifmt_int, { 0x1f00 }
  704. },
  705. /* inte */
  706. {
  707. { 0, 0, 0, 0 },
  708. { { MNEM, 0 } },
  709. & ifmt_div3, { 0x9f30 }
  710. },
  711. /* reti */
  712. {
  713. { 0, 0, 0, 0 },
  714. { { MNEM, 0 } },
  715. & ifmt_div3, { 0x9730 }
  716. },
  717. /* bra:d $label9 */
  718. {
  719. { 0, 0, 0, 0 },
  720. { { MNEM, ' ', OP (LABEL9), 0 } },
  721. & ifmt_brad, { 0xf000 }
  722. },
  723. /* bra $label9 */
  724. {
  725. { 0, 0, 0, 0 },
  726. { { MNEM, ' ', OP (LABEL9), 0 } },
  727. & ifmt_brad, { 0xe000 }
  728. },
  729. /* bno:d $label9 */
  730. {
  731. { 0, 0, 0, 0 },
  732. { { MNEM, ' ', OP (LABEL9), 0 } },
  733. & ifmt_brad, { 0xf100 }
  734. },
  735. /* bno $label9 */
  736. {
  737. { 0, 0, 0, 0 },
  738. { { MNEM, ' ', OP (LABEL9), 0 } },
  739. & ifmt_brad, { 0xe100 }
  740. },
  741. /* beq:d $label9 */
  742. {
  743. { 0, 0, 0, 0 },
  744. { { MNEM, ' ', OP (LABEL9), 0 } },
  745. & ifmt_brad, { 0xf200 }
  746. },
  747. /* beq $label9 */
  748. {
  749. { 0, 0, 0, 0 },
  750. { { MNEM, ' ', OP (LABEL9), 0 } },
  751. & ifmt_brad, { 0xe200 }
  752. },
  753. /* bne:d $label9 */
  754. {
  755. { 0, 0, 0, 0 },
  756. { { MNEM, ' ', OP (LABEL9), 0 } },
  757. & ifmt_brad, { 0xf300 }
  758. },
  759. /* bne $label9 */
  760. {
  761. { 0, 0, 0, 0 },
  762. { { MNEM, ' ', OP (LABEL9), 0 } },
  763. & ifmt_brad, { 0xe300 }
  764. },
  765. /* bc:d $label9 */
  766. {
  767. { 0, 0, 0, 0 },
  768. { { MNEM, ' ', OP (LABEL9), 0 } },
  769. & ifmt_brad, { 0xf400 }
  770. },
  771. /* bc $label9 */
  772. {
  773. { 0, 0, 0, 0 },
  774. { { MNEM, ' ', OP (LABEL9), 0 } },
  775. & ifmt_brad, { 0xe400 }
  776. },
  777. /* bnc:d $label9 */
  778. {
  779. { 0, 0, 0, 0 },
  780. { { MNEM, ' ', OP (LABEL9), 0 } },
  781. & ifmt_brad, { 0xf500 }
  782. },
  783. /* bnc $label9 */
  784. {
  785. { 0, 0, 0, 0 },
  786. { { MNEM, ' ', OP (LABEL9), 0 } },
  787. & ifmt_brad, { 0xe500 }
  788. },
  789. /* bn:d $label9 */
  790. {
  791. { 0, 0, 0, 0 },
  792. { { MNEM, ' ', OP (LABEL9), 0 } },
  793. & ifmt_brad, { 0xf600 }
  794. },
  795. /* bn $label9 */
  796. {
  797. { 0, 0, 0, 0 },
  798. { { MNEM, ' ', OP (LABEL9), 0 } },
  799. & ifmt_brad, { 0xe600 }
  800. },
  801. /* bp:d $label9 */
  802. {
  803. { 0, 0, 0, 0 },
  804. { { MNEM, ' ', OP (LABEL9), 0 } },
  805. & ifmt_brad, { 0xf700 }
  806. },
  807. /* bp $label9 */
  808. {
  809. { 0, 0, 0, 0 },
  810. { { MNEM, ' ', OP (LABEL9), 0 } },
  811. & ifmt_brad, { 0xe700 }
  812. },
  813. /* bv:d $label9 */
  814. {
  815. { 0, 0, 0, 0 },
  816. { { MNEM, ' ', OP (LABEL9), 0 } },
  817. & ifmt_brad, { 0xf800 }
  818. },
  819. /* bv $label9 */
  820. {
  821. { 0, 0, 0, 0 },
  822. { { MNEM, ' ', OP (LABEL9), 0 } },
  823. & ifmt_brad, { 0xe800 }
  824. },
  825. /* bnv:d $label9 */
  826. {
  827. { 0, 0, 0, 0 },
  828. { { MNEM, ' ', OP (LABEL9), 0 } },
  829. & ifmt_brad, { 0xf900 }
  830. },
  831. /* bnv $label9 */
  832. {
  833. { 0, 0, 0, 0 },
  834. { { MNEM, ' ', OP (LABEL9), 0 } },
  835. & ifmt_brad, { 0xe900 }
  836. },
  837. /* blt:d $label9 */
  838. {
  839. { 0, 0, 0, 0 },
  840. { { MNEM, ' ', OP (LABEL9), 0 } },
  841. & ifmt_brad, { 0xfa00 }
  842. },
  843. /* blt $label9 */
  844. {
  845. { 0, 0, 0, 0 },
  846. { { MNEM, ' ', OP (LABEL9), 0 } },
  847. & ifmt_brad, { 0xea00 }
  848. },
  849. /* bge:d $label9 */
  850. {
  851. { 0, 0, 0, 0 },
  852. { { MNEM, ' ', OP (LABEL9), 0 } },
  853. & ifmt_brad, { 0xfb00 }
  854. },
  855. /* bge $label9 */
  856. {
  857. { 0, 0, 0, 0 },
  858. { { MNEM, ' ', OP (LABEL9), 0 } },
  859. & ifmt_brad, { 0xeb00 }
  860. },
  861. /* ble:d $label9 */
  862. {
  863. { 0, 0, 0, 0 },
  864. { { MNEM, ' ', OP (LABEL9), 0 } },
  865. & ifmt_brad, { 0xfc00 }
  866. },
  867. /* ble $label9 */
  868. {
  869. { 0, 0, 0, 0 },
  870. { { MNEM, ' ', OP (LABEL9), 0 } },
  871. & ifmt_brad, { 0xec00 }
  872. },
  873. /* bgt:d $label9 */
  874. {
  875. { 0, 0, 0, 0 },
  876. { { MNEM, ' ', OP (LABEL9), 0 } },
  877. & ifmt_brad, { 0xfd00 }
  878. },
  879. /* bgt $label9 */
  880. {
  881. { 0, 0, 0, 0 },
  882. { { MNEM, ' ', OP (LABEL9), 0 } },
  883. & ifmt_brad, { 0xed00 }
  884. },
  885. /* bls:d $label9 */
  886. {
  887. { 0, 0, 0, 0 },
  888. { { MNEM, ' ', OP (LABEL9), 0 } },
  889. & ifmt_brad, { 0xfe00 }
  890. },
  891. /* bls $label9 */
  892. {
  893. { 0, 0, 0, 0 },
  894. { { MNEM, ' ', OP (LABEL9), 0 } },
  895. & ifmt_brad, { 0xee00 }
  896. },
  897. /* bhi:d $label9 */
  898. {
  899. { 0, 0, 0, 0 },
  900. { { MNEM, ' ', OP (LABEL9), 0 } },
  901. & ifmt_brad, { 0xff00 }
  902. },
  903. /* bhi $label9 */
  904. {
  905. { 0, 0, 0, 0 },
  906. { { MNEM, ' ', OP (LABEL9), 0 } },
  907. & ifmt_brad, { 0xef00 }
  908. },
  909. /* dmov $R13,@$dir10 */
  910. {
  911. { 0, 0, 0, 0 },
  912. { { MNEM, ' ', OP (R13), ',', '@', OP (DIR10), 0 } },
  913. & ifmt_dmovr13, { 0x1800 }
  914. },
  915. /* dmovh $R13,@$dir9 */
  916. {
  917. { 0, 0, 0, 0 },
  918. { { MNEM, ' ', OP (R13), ',', '@', OP (DIR9), 0 } },
  919. & ifmt_dmovr13h, { 0x1900 }
  920. },
  921. /* dmovb $R13,@$dir8 */
  922. {
  923. { 0, 0, 0, 0 },
  924. { { MNEM, ' ', OP (R13), ',', '@', OP (DIR8), 0 } },
  925. & ifmt_dmovr13b, { 0x1a00 }
  926. },
  927. /* dmov @$R13+,@$dir10 */
  928. {
  929. { 0, 0, 0, 0 },
  930. { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR10), 0 } },
  931. & ifmt_dmovr13, { 0x1c00 }
  932. },
  933. /* dmovh @$R13+,@$dir9 */
  934. {
  935. { 0, 0, 0, 0 },
  936. { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR9), 0 } },
  937. & ifmt_dmovr13h, { 0x1d00 }
  938. },
  939. /* dmovb @$R13+,@$dir8 */
  940. {
  941. { 0, 0, 0, 0 },
  942. { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR8), 0 } },
  943. & ifmt_dmovr13b, { 0x1e00 }
  944. },
  945. /* dmov @$R15+,@$dir10 */
  946. {
  947. { 0, 0, 0, 0 },
  948. { { MNEM, ' ', '@', OP (R15), '+', ',', '@', OP (DIR10), 0 } },
  949. & ifmt_dmovr13, { 0x1b00 }
  950. },
  951. /* dmov @$dir10,$R13 */
  952. {
  953. { 0, 0, 0, 0 },
  954. { { MNEM, ' ', '@', OP (DIR10), ',', OP (R13), 0 } },
  955. & ifmt_dmovr13, { 0x800 }
  956. },
  957. /* dmovh @$dir9,$R13 */
  958. {
  959. { 0, 0, 0, 0 },
  960. { { MNEM, ' ', '@', OP (DIR9), ',', OP (R13), 0 } },
  961. & ifmt_dmovr13h, { 0x900 }
  962. },
  963. /* dmovb @$dir8,$R13 */
  964. {
  965. { 0, 0, 0, 0 },
  966. { { MNEM, ' ', '@', OP (DIR8), ',', OP (R13), 0 } },
  967. & ifmt_dmovr13b, { 0xa00 }
  968. },
  969. /* dmov @$dir10,@$R13+ */
  970. {
  971. { 0, 0, 0, 0 },
  972. { { MNEM, ' ', '@', OP (DIR10), ',', '@', OP (R13), '+', 0 } },
  973. & ifmt_dmovr13, { 0xc00 }
  974. },
  975. /* dmovh @$dir9,@$R13+ */
  976. {
  977. { 0, 0, 0, 0 },
  978. { { MNEM, ' ', '@', OP (DIR9), ',', '@', OP (R13), '+', 0 } },
  979. & ifmt_dmovr13h, { 0xd00 }
  980. },
  981. /* dmovb @$dir8,@$R13+ */
  982. {
  983. { 0, 0, 0, 0 },
  984. { { MNEM, ' ', '@', OP (DIR8), ',', '@', OP (R13), '+', 0 } },
  985. & ifmt_dmovr13b, { 0xe00 }
  986. },
  987. /* dmov @$dir10,@-$R15 */
  988. {
  989. { 0, 0, 0, 0 },
  990. { { MNEM, ' ', '@', OP (DIR10), ',', '@', '-', OP (R15), 0 } },
  991. & ifmt_dmovr13, { 0xb00 }
  992. },
  993. /* ldres @$Ri+,$u4 */
  994. {
  995. { 0, 0, 0, 0 },
  996. { { MNEM, ' ', '@', OP (RI), '+', ',', OP (U4), 0 } },
  997. & ifmt_addi, { 0xbc00 }
  998. },
  999. /* stres $u4,@$Ri+ */
  1000. {
  1001. { 0, 0, 0, 0 },
  1002. { { MNEM, ' ', OP (U4), ',', '@', OP (RI), '+', 0 } },
  1003. & ifmt_addi, { 0xbd00 }
  1004. },
  1005. /* copop $u4c,$ccc,$CRj,$CRi */
  1006. {
  1007. { 0, 0, 0, 0 },
  1008. { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (CRI), 0 } },
  1009. & ifmt_copop, { 0x9fc0 }
  1010. },
  1011. /* copld $u4c,$ccc,$Rjc,$CRi */
  1012. {
  1013. { 0, 0, 0, 0 },
  1014. { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (RJC), ',', OP (CRI), 0 } },
  1015. & ifmt_copld, { 0x9fd0 }
  1016. },
  1017. /* copst $u4c,$ccc,$CRj,$Ric */
  1018. {
  1019. { 0, 0, 0, 0 },
  1020. { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (RIC), 0 } },
  1021. & ifmt_copst, { 0x9fe0 }
  1022. },
  1023. /* copsv $u4c,$ccc,$CRj,$Ric */
  1024. {
  1025. { 0, 0, 0, 0 },
  1026. { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (RIC), 0 } },
  1027. & ifmt_copst, { 0x9ff0 }
  1028. },
  1029. /* nop */
  1030. {
  1031. { 0, 0, 0, 0 },
  1032. { { MNEM, 0 } },
  1033. & ifmt_div3, { 0x9fa0 }
  1034. },
  1035. /* andccr $u8 */
  1036. {
  1037. { 0, 0, 0, 0 },
  1038. { { MNEM, ' ', OP (U8), 0 } },
  1039. & ifmt_int, { 0x8300 }
  1040. },
  1041. /* orccr $u8 */
  1042. {
  1043. { 0, 0, 0, 0 },
  1044. { { MNEM, ' ', OP (U8), 0 } },
  1045. & ifmt_int, { 0x9300 }
  1046. },
  1047. /* stilm $u8 */
  1048. {
  1049. { 0, 0, 0, 0 },
  1050. { { MNEM, ' ', OP (U8), 0 } },
  1051. & ifmt_int, { 0x8700 }
  1052. },
  1053. /* addsp $s10 */
  1054. {
  1055. { 0, 0, 0, 0 },
  1056. { { MNEM, ' ', OP (S10), 0 } },
  1057. & ifmt_addsp, { 0xa300 }
  1058. },
  1059. /* extsb $Ri */
  1060. {
  1061. { 0, 0, 0, 0 },
  1062. { { MNEM, ' ', OP (RI), 0 } },
  1063. & ifmt_div0s, { 0x9780 }
  1064. },
  1065. /* extub $Ri */
  1066. {
  1067. { 0, 0, 0, 0 },
  1068. { { MNEM, ' ', OP (RI), 0 } },
  1069. & ifmt_div0s, { 0x9790 }
  1070. },
  1071. /* extsh $Ri */
  1072. {
  1073. { 0, 0, 0, 0 },
  1074. { { MNEM, ' ', OP (RI), 0 } },
  1075. & ifmt_div0s, { 0x97a0 }
  1076. },
  1077. /* extuh $Ri */
  1078. {
  1079. { 0, 0, 0, 0 },
  1080. { { MNEM, ' ', OP (RI), 0 } },
  1081. & ifmt_div0s, { 0x97b0 }
  1082. },
  1083. /* ldm0 ($reglist_low_ld) */
  1084. {
  1085. { 0, 0, 0, 0 },
  1086. { { MNEM, ' ', '(', OP (REGLIST_LOW_LD), ')', 0 } },
  1087. & ifmt_ldm0, { 0x8c00 }
  1088. },
  1089. /* ldm1 ($reglist_hi_ld) */
  1090. {
  1091. { 0, 0, 0, 0 },
  1092. { { MNEM, ' ', '(', OP (REGLIST_HI_LD), ')', 0 } },
  1093. & ifmt_ldm1, { 0x8d00 }
  1094. },
  1095. /* stm0 ($reglist_low_st) */
  1096. {
  1097. { 0, 0, 0, 0 },
  1098. { { MNEM, ' ', '(', OP (REGLIST_LOW_ST), ')', 0 } },
  1099. & ifmt_stm0, { 0x8e00 }
  1100. },
  1101. /* stm1 ($reglist_hi_st) */
  1102. {
  1103. { 0, 0, 0, 0 },
  1104. { { MNEM, ' ', '(', OP (REGLIST_HI_ST), ')', 0 } },
  1105. & ifmt_stm1, { 0x8f00 }
  1106. },
  1107. /* enter $u10 */
  1108. {
  1109. { 0, 0, 0, 0 },
  1110. { { MNEM, ' ', OP (U10), 0 } },
  1111. & ifmt_enter, { 0xf00 }
  1112. },
  1113. /* leave */
  1114. {
  1115. { 0, 0, 0, 0 },
  1116. { { MNEM, 0 } },
  1117. & ifmt_div3, { 0x9f90 }
  1118. },
  1119. /* xchb @$Rj,$Ri */
  1120. {
  1121. { 0, 0, 0, 0 },
  1122. { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
  1123. & ifmt_add, { 0x8a00 }
  1124. },
  1125. };
  1126. #undef A
  1127. #undef OPERAND
  1128. #undef MNEM
  1129. #undef OP
  1130. /* Formats for ALIAS macro-insns. */
  1131. #define F(f) & fr30_cgen_ifld_table[FR30_##f]
  1132. static const CGEN_IFMT ifmt_ldi8m ATTRIBUTE_UNUSED = {
  1133. 16, 16, 0xf000, { { F (F_OP1) }, { F (F_I8) }, { F (F_RI) }, { 0 } }
  1134. };
  1135. static const CGEN_IFMT ifmt_ldi20m ATTRIBUTE_UNUSED = {
  1136. 16, 32, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_RI) }, { F (F_I20) }, { 0 } }
  1137. };
  1138. static const CGEN_IFMT ifmt_ldi32m ATTRIBUTE_UNUSED = {
  1139. 16, 48, 0xfff0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RI) }, { F (F_I32) }, { 0 } }
  1140. };
  1141. #undef F
  1142. /* Each non-simple macro entry points to an array of expansion possibilities. */
  1143. #define A(a) (1 << CGEN_INSN_##a)
  1144. #define OPERAND(op) FR30_OPERAND_##op
  1145. #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
  1146. #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
  1147. /* The macro instruction table. */
  1148. static const CGEN_IBASE fr30_cgen_macro_insn_table[] =
  1149. {
  1150. /* ldi8 $i8,$Ri */
  1151. {
  1152. -1, "ldi8m", "ldi8", 16,
  1153. { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
  1154. },
  1155. /* ldi20 $i20,$Ri */
  1156. {
  1157. -1, "ldi20m", "ldi20", 32,
  1158. { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
  1159. },
  1160. /* ldi32 $i32,$Ri */
  1161. {
  1162. -1, "ldi32m", "ldi32", 48,
  1163. { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
  1164. },
  1165. };
  1166. /* The macro instruction opcode table. */
  1167. static const CGEN_OPCODE fr30_cgen_macro_insn_opcode_table[] =
  1168. {
  1169. /* ldi8 $i8,$Ri */
  1170. {
  1171. { 0, 0, 0, 0 },
  1172. { { MNEM, ' ', OP (I8), ',', OP (RI), 0 } },
  1173. & ifmt_ldi8m, { 0xc000 }
  1174. },
  1175. /* ldi20 $i20,$Ri */
  1176. {
  1177. { 0, 0, 0, 0 },
  1178. { { MNEM, ' ', OP (I20), ',', OP (RI), 0 } },
  1179. & ifmt_ldi20m, { 0x9b00 }
  1180. },
  1181. /* ldi32 $i32,$Ri */
  1182. {
  1183. { 0, 0, 0, 0 },
  1184. { { MNEM, ' ', OP (I32), ',', OP (RI), 0 } },
  1185. & ifmt_ldi32m, { 0x9f80 }
  1186. },
  1187. };
  1188. #undef A
  1189. #undef OPERAND
  1190. #undef MNEM
  1191. #undef OP
  1192. #ifndef CGEN_ASM_HASH_P
  1193. #define CGEN_ASM_HASH_P(insn) 1
  1194. #endif
  1195. #ifndef CGEN_DIS_HASH_P
  1196. #define CGEN_DIS_HASH_P(insn) 1
  1197. #endif
  1198. /* Return non-zero if INSN is to be added to the hash table.
  1199. Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file. */
  1200. static int
  1201. asm_hash_insn_p (const CGEN_INSN *insn ATTRIBUTE_UNUSED)
  1202. {
  1203. return CGEN_ASM_HASH_P (insn);
  1204. }
  1205. static int
  1206. dis_hash_insn_p (const CGEN_INSN *insn)
  1207. {
  1208. /* If building the hash table and the NO-DIS attribute is present,
  1209. ignore. */
  1210. if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_NO_DIS))
  1211. return 0;
  1212. return CGEN_DIS_HASH_P (insn);
  1213. }
  1214. #ifndef CGEN_ASM_HASH
  1215. #define CGEN_ASM_HASH_SIZE 127
  1216. #ifdef CGEN_MNEMONIC_OPERANDS
  1217. #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE)
  1218. #else
  1219. #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) /*FIXME*/
  1220. #endif
  1221. #endif
  1222. /* It doesn't make much sense to provide a default here,
  1223. but while this is under development we do.
  1224. BUFFER is a pointer to the bytes of the insn, target order.
  1225. VALUE is the first base_insn_bitsize bits as an int in host order. */
  1226. #ifndef CGEN_DIS_HASH
  1227. #define CGEN_DIS_HASH_SIZE 256
  1228. #define CGEN_DIS_HASH(buf, value) (*(unsigned char *) (buf))
  1229. #endif
  1230. /* The result is the hash value of the insn.
  1231. Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file. */
  1232. static unsigned int
  1233. asm_hash_insn (const char *mnem)
  1234. {
  1235. return CGEN_ASM_HASH (mnem);
  1236. }
  1237. /* BUF is a pointer to the bytes of the insn, target order.
  1238. VALUE is the first base_insn_bitsize bits as an int in host order. */
  1239. static unsigned int
  1240. dis_hash_insn (const char *buf ATTRIBUTE_UNUSED,
  1241. CGEN_INSN_INT value ATTRIBUTE_UNUSED)
  1242. {
  1243. return CGEN_DIS_HASH (buf, value);
  1244. }
  1245. /* Set the recorded length of the insn in the CGEN_FIELDS struct. */
  1246. static void
  1247. set_fields_bitsize (CGEN_FIELDS *fields, int size)
  1248. {
  1249. CGEN_FIELDS_BITSIZE (fields) = size;
  1250. }
  1251. /* Function to call before using the operand instance table.
  1252. This plugs the opcode entries and macro instructions into the cpu table. */
  1253. void
  1254. fr30_cgen_init_opcode_table (CGEN_CPU_DESC cd)
  1255. {
  1256. int i;
  1257. int num_macros = (sizeof (fr30_cgen_macro_insn_table) /
  1258. sizeof (fr30_cgen_macro_insn_table[0]));
  1259. const CGEN_IBASE *ib = & fr30_cgen_macro_insn_table[0];
  1260. const CGEN_OPCODE *oc = & fr30_cgen_macro_insn_opcode_table[0];
  1261. CGEN_INSN *insns = xmalloc (num_macros * sizeof (CGEN_INSN));
  1262. /* This test has been added to avoid a warning generated
  1263. if memset is called with a third argument of value zero. */
  1264. if (num_macros >= 1)
  1265. memset (insns, 0, num_macros * sizeof (CGEN_INSN));
  1266. for (i = 0; i < num_macros; ++i)
  1267. {
  1268. insns[i].base = &ib[i];
  1269. insns[i].opcode = &oc[i];
  1270. fr30_cgen_build_insn_regex (& insns[i]);
  1271. }
  1272. cd->macro_insn_table.init_entries = insns;
  1273. cd->macro_insn_table.entry_size = sizeof (CGEN_IBASE);
  1274. cd->macro_insn_table.num_init_entries = num_macros;
  1275. oc = & fr30_cgen_insn_opcode_table[0];
  1276. insns = (CGEN_INSN *) cd->insn_table.init_entries;
  1277. for (i = 0; i < MAX_INSNS; ++i)
  1278. {
  1279. insns[i].opcode = &oc[i];
  1280. fr30_cgen_build_insn_regex (& insns[i]);
  1281. }
  1282. cd->sizeof_fields = sizeof (CGEN_FIELDS);
  1283. cd->set_fields_bitsize = set_fields_bitsize;
  1284. cd->asm_hash_p = asm_hash_insn_p;
  1285. cd->asm_hash = asm_hash_insn;
  1286. cd->asm_hash_size = CGEN_ASM_HASH_SIZE;
  1287. cd->dis_hash_p = dis_hash_insn_p;
  1288. cd->dis_hash = dis_hash_insn;
  1289. cd->dis_hash_size = CGEN_DIS_HASH_SIZE;
  1290. }