fr30-opc.c 32 KB

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