m32r-opc.c 46 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805
  1. /* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */
  2. /* Instruction opcode table for m32r.
  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 "m32r-desc.h"
  23. #include "m32r-opc.h"
  24. #include "libiberty.h"
  25. /* -- opc.c */
  26. unsigned int
  27. m32r_cgen_dis_hash (const char * buf ATTRIBUTE_UNUSED, CGEN_INSN_INT value)
  28. {
  29. unsigned int x;
  30. if (value & 0xffff0000) /* 32bit instructions. */
  31. value = (value >> 16) & 0xffff;
  32. x = (value >> 8) & 0xf0;
  33. if (x == 0x40 || x == 0xe0 || x == 0x60 || x == 0x50)
  34. return x;
  35. if (x == 0x70 || x == 0xf0)
  36. return x | ((value >> 8) & 0x0f);
  37. if (x == 0x30)
  38. return x | ((value & 0x70) >> 4);
  39. else
  40. return x | ((value & 0xf0) >> 4);
  41. }
  42. /* -- */
  43. /* The hash functions are recorded here to help keep assembler code out of
  44. the disassembler and vice versa. */
  45. static int asm_hash_insn_p (const CGEN_INSN *);
  46. static unsigned int asm_hash_insn (const char *);
  47. static int dis_hash_insn_p (const CGEN_INSN *);
  48. static unsigned int dis_hash_insn (const char *, CGEN_INSN_INT);
  49. /* Instruction formats. */
  50. #define F(f) & m32r_cgen_ifld_table[M32R_##f]
  51. static const CGEN_IFMT ifmt_empty ATTRIBUTE_UNUSED = {
  52. 0, 0, 0x0, { { 0 } }
  53. };
  54. static const CGEN_IFMT ifmt_add ATTRIBUTE_UNUSED = {
  55. 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }
  56. };
  57. static const CGEN_IFMT ifmt_add3 ATTRIBUTE_UNUSED = {
  58. 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
  59. };
  60. static const CGEN_IFMT ifmt_and3 ATTRIBUTE_UNUSED = {
  61. 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_UIMM16) }, { 0 } }
  62. };
  63. static const CGEN_IFMT ifmt_or3 ATTRIBUTE_UNUSED = {
  64. 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_UIMM16) }, { 0 } }
  65. };
  66. static const CGEN_IFMT ifmt_addi ATTRIBUTE_UNUSED = {
  67. 16, 16, 0xf000, { { F (F_OP1) }, { F (F_R1) }, { F (F_SIMM8) }, { 0 } }
  68. };
  69. static const CGEN_IFMT ifmt_addv3 ATTRIBUTE_UNUSED = {
  70. 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
  71. };
  72. static const CGEN_IFMT ifmt_bc8 ATTRIBUTE_UNUSED = {
  73. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP8) }, { 0 } }
  74. };
  75. static const CGEN_IFMT ifmt_bc24 ATTRIBUTE_UNUSED = {
  76. 32, 32, 0xff000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP24) }, { 0 } }
  77. };
  78. static const CGEN_IFMT ifmt_beq ATTRIBUTE_UNUSED = {
  79. 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_DISP16) }, { 0 } }
  80. };
  81. static const CGEN_IFMT ifmt_beqz ATTRIBUTE_UNUSED = {
  82. 32, 32, 0xfff00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_DISP16) }, { 0 } }
  83. };
  84. static const CGEN_IFMT ifmt_cmp ATTRIBUTE_UNUSED = {
  85. 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }
  86. };
  87. static const CGEN_IFMT ifmt_cmpi ATTRIBUTE_UNUSED = {
  88. 32, 32, 0xfff00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
  89. };
  90. static const CGEN_IFMT ifmt_cmpz ATTRIBUTE_UNUSED = {
  91. 16, 16, 0xfff0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }
  92. };
  93. static const CGEN_IFMT ifmt_div ATTRIBUTE_UNUSED = {
  94. 32, 32, 0xf0f0ffff, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
  95. };
  96. static const CGEN_IFMT ifmt_jc ATTRIBUTE_UNUSED = {
  97. 16, 16, 0xfff0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }
  98. };
  99. static const CGEN_IFMT ifmt_ld24 ATTRIBUTE_UNUSED = {
  100. 32, 32, 0xf0000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_UIMM24) }, { 0 } }
  101. };
  102. static const CGEN_IFMT ifmt_ldi16 ATTRIBUTE_UNUSED = {
  103. 32, 32, 0xf0ff0000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
  104. };
  105. static const CGEN_IFMT ifmt_machi_a ATTRIBUTE_UNUSED = {
  106. 16, 16, 0xf070, { { F (F_OP1) }, { F (F_R1) }, { F (F_ACC) }, { F (F_OP23) }, { F (F_R2) }, { 0 } }
  107. };
  108. static const CGEN_IFMT ifmt_mvfachi ATTRIBUTE_UNUSED = {
  109. 16, 16, 0xf0ff, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }
  110. };
  111. static const CGEN_IFMT ifmt_mvfachi_a ATTRIBUTE_UNUSED = {
  112. 16, 16, 0xf0f3, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_ACCS) }, { F (F_OP3) }, { 0 } }
  113. };
  114. static const CGEN_IFMT ifmt_mvfc ATTRIBUTE_UNUSED = {
  115. 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }
  116. };
  117. static const CGEN_IFMT ifmt_mvtachi ATTRIBUTE_UNUSED = {
  118. 16, 16, 0xf0ff, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }
  119. };
  120. static const CGEN_IFMT ifmt_mvtachi_a ATTRIBUTE_UNUSED = {
  121. 16, 16, 0xf0f3, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_ACCS) }, { F (F_OP3) }, { 0 } }
  122. };
  123. static const CGEN_IFMT ifmt_mvtc ATTRIBUTE_UNUSED = {
  124. 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }
  125. };
  126. static const CGEN_IFMT ifmt_nop ATTRIBUTE_UNUSED = {
  127. 16, 16, 0xffff, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }
  128. };
  129. static const CGEN_IFMT ifmt_rac_dsi ATTRIBUTE_UNUSED = {
  130. 16, 16, 0xf3f2, { { F (F_OP1) }, { F (F_ACCD) }, { F (F_BITS67) }, { F (F_OP2) }, { F (F_ACCS) }, { F (F_BIT14) }, { F (F_IMM1) }, { 0 } }
  131. };
  132. static const CGEN_IFMT ifmt_seth ATTRIBUTE_UNUSED = {
  133. 32, 32, 0xf0ff0000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_HI16) }, { 0 } }
  134. };
  135. static const CGEN_IFMT ifmt_slli ATTRIBUTE_UNUSED = {
  136. 16, 16, 0xf0e0, { { F (F_OP1) }, { F (F_R1) }, { F (F_SHIFT_OP2) }, { F (F_UIMM5) }, { 0 } }
  137. };
  138. static const CGEN_IFMT ifmt_st_d ATTRIBUTE_UNUSED = {
  139. 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
  140. };
  141. static const CGEN_IFMT ifmt_trap ATTRIBUTE_UNUSED = {
  142. 16, 16, 0xfff0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_UIMM4) }, { 0 } }
  143. };
  144. static const CGEN_IFMT ifmt_satb ATTRIBUTE_UNUSED = {
  145. 32, 32, 0xf0f0ffff, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_UIMM16) }, { 0 } }
  146. };
  147. static const CGEN_IFMT ifmt_clrpsw ATTRIBUTE_UNUSED = {
  148. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_UIMM8) }, { 0 } }
  149. };
  150. static const CGEN_IFMT ifmt_bset ATTRIBUTE_UNUSED = {
  151. 32, 32, 0xf8f00000, { { F (F_OP1) }, { F (F_BIT4) }, { F (F_UIMM3) }, { F (F_OP2) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
  152. };
  153. static const CGEN_IFMT ifmt_btst ATTRIBUTE_UNUSED = {
  154. 16, 16, 0xf8f0, { { F (F_OP1) }, { F (F_BIT4) }, { F (F_UIMM3) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }
  155. };
  156. #undef F
  157. #define A(a) (1 << CGEN_INSN_##a)
  158. #define OPERAND(op) M32R_OPERAND_##op
  159. #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
  160. #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
  161. /* The instruction table. */
  162. static const CGEN_OPCODE m32r_cgen_insn_opcode_table[MAX_INSNS] =
  163. {
  164. /* Special null first entry.
  165. A `num' value of zero is thus invalid.
  166. Also, the special `invalid' insn resides here. */
  167. { { 0, 0, 0, 0 }, {{0}}, 0, {0}},
  168. /* add $dr,$sr */
  169. {
  170. { 0, 0, 0, 0 },
  171. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  172. & ifmt_add, { 0xa0 }
  173. },
  174. /* add3 $dr,$sr,$hash$slo16 */
  175. {
  176. { 0, 0, 0, 0 },
  177. { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (HASH), OP (SLO16), 0 } },
  178. & ifmt_add3, { 0x80a00000 }
  179. },
  180. /* and $dr,$sr */
  181. {
  182. { 0, 0, 0, 0 },
  183. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  184. & ifmt_add, { 0xc0 }
  185. },
  186. /* and3 $dr,$sr,$uimm16 */
  187. {
  188. { 0, 0, 0, 0 },
  189. { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (UIMM16), 0 } },
  190. & ifmt_and3, { 0x80c00000 }
  191. },
  192. /* or $dr,$sr */
  193. {
  194. { 0, 0, 0, 0 },
  195. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  196. & ifmt_add, { 0xe0 }
  197. },
  198. /* or3 $dr,$sr,$hash$ulo16 */
  199. {
  200. { 0, 0, 0, 0 },
  201. { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (HASH), OP (ULO16), 0 } },
  202. & ifmt_or3, { 0x80e00000 }
  203. },
  204. /* xor $dr,$sr */
  205. {
  206. { 0, 0, 0, 0 },
  207. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  208. & ifmt_add, { 0xd0 }
  209. },
  210. /* xor3 $dr,$sr,$uimm16 */
  211. {
  212. { 0, 0, 0, 0 },
  213. { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (UIMM16), 0 } },
  214. & ifmt_and3, { 0x80d00000 }
  215. },
  216. /* addi $dr,$simm8 */
  217. {
  218. { 0, 0, 0, 0 },
  219. { { MNEM, ' ', OP (DR), ',', OP (SIMM8), 0 } },
  220. & ifmt_addi, { 0x4000 }
  221. },
  222. /* addv $dr,$sr */
  223. {
  224. { 0, 0, 0, 0 },
  225. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  226. & ifmt_add, { 0x80 }
  227. },
  228. /* addv3 $dr,$sr,$simm16 */
  229. {
  230. { 0, 0, 0, 0 },
  231. { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (SIMM16), 0 } },
  232. & ifmt_addv3, { 0x80800000 }
  233. },
  234. /* addx $dr,$sr */
  235. {
  236. { 0, 0, 0, 0 },
  237. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  238. & ifmt_add, { 0x90 }
  239. },
  240. /* bc.s $disp8 */
  241. {
  242. { 0, 0, 0, 0 },
  243. { { MNEM, ' ', OP (DISP8), 0 } },
  244. & ifmt_bc8, { 0x7c00 }
  245. },
  246. /* bc.l $disp24 */
  247. {
  248. { 0, 0, 0, 0 },
  249. { { MNEM, ' ', OP (DISP24), 0 } },
  250. & ifmt_bc24, { 0xfc000000 }
  251. },
  252. /* beq $src1,$src2,$disp16 */
  253. {
  254. { 0, 0, 0, 0 },
  255. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (DISP16), 0 } },
  256. & ifmt_beq, { 0xb0000000 }
  257. },
  258. /* beqz $src2,$disp16 */
  259. {
  260. { 0, 0, 0, 0 },
  261. { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },
  262. & ifmt_beqz, { 0xb0800000 }
  263. },
  264. /* bgez $src2,$disp16 */
  265. {
  266. { 0, 0, 0, 0 },
  267. { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },
  268. & ifmt_beqz, { 0xb0b00000 }
  269. },
  270. /* bgtz $src2,$disp16 */
  271. {
  272. { 0, 0, 0, 0 },
  273. { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },
  274. & ifmt_beqz, { 0xb0d00000 }
  275. },
  276. /* blez $src2,$disp16 */
  277. {
  278. { 0, 0, 0, 0 },
  279. { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },
  280. & ifmt_beqz, { 0xb0c00000 }
  281. },
  282. /* bltz $src2,$disp16 */
  283. {
  284. { 0, 0, 0, 0 },
  285. { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },
  286. & ifmt_beqz, { 0xb0a00000 }
  287. },
  288. /* bnez $src2,$disp16 */
  289. {
  290. { 0, 0, 0, 0 },
  291. { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },
  292. & ifmt_beqz, { 0xb0900000 }
  293. },
  294. /* bl.s $disp8 */
  295. {
  296. { 0, 0, 0, 0 },
  297. { { MNEM, ' ', OP (DISP8), 0 } },
  298. & ifmt_bc8, { 0x7e00 }
  299. },
  300. /* bl.l $disp24 */
  301. {
  302. { 0, 0, 0, 0 },
  303. { { MNEM, ' ', OP (DISP24), 0 } },
  304. & ifmt_bc24, { 0xfe000000 }
  305. },
  306. /* bcl.s $disp8 */
  307. {
  308. { 0, 0, 0, 0 },
  309. { { MNEM, ' ', OP (DISP8), 0 } },
  310. & ifmt_bc8, { 0x7800 }
  311. },
  312. /* bcl.l $disp24 */
  313. {
  314. { 0, 0, 0, 0 },
  315. { { MNEM, ' ', OP (DISP24), 0 } },
  316. & ifmt_bc24, { 0xf8000000 }
  317. },
  318. /* bnc.s $disp8 */
  319. {
  320. { 0, 0, 0, 0 },
  321. { { MNEM, ' ', OP (DISP8), 0 } },
  322. & ifmt_bc8, { 0x7d00 }
  323. },
  324. /* bnc.l $disp24 */
  325. {
  326. { 0, 0, 0, 0 },
  327. { { MNEM, ' ', OP (DISP24), 0 } },
  328. & ifmt_bc24, { 0xfd000000 }
  329. },
  330. /* bne $src1,$src2,$disp16 */
  331. {
  332. { 0, 0, 0, 0 },
  333. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (DISP16), 0 } },
  334. & ifmt_beq, { 0xb0100000 }
  335. },
  336. /* bra.s $disp8 */
  337. {
  338. { 0, 0, 0, 0 },
  339. { { MNEM, ' ', OP (DISP8), 0 } },
  340. & ifmt_bc8, { 0x7f00 }
  341. },
  342. /* bra.l $disp24 */
  343. {
  344. { 0, 0, 0, 0 },
  345. { { MNEM, ' ', OP (DISP24), 0 } },
  346. & ifmt_bc24, { 0xff000000 }
  347. },
  348. /* bncl.s $disp8 */
  349. {
  350. { 0, 0, 0, 0 },
  351. { { MNEM, ' ', OP (DISP8), 0 } },
  352. & ifmt_bc8, { 0x7900 }
  353. },
  354. /* bncl.l $disp24 */
  355. {
  356. { 0, 0, 0, 0 },
  357. { { MNEM, ' ', OP (DISP24), 0 } },
  358. & ifmt_bc24, { 0xf9000000 }
  359. },
  360. /* cmp $src1,$src2 */
  361. {
  362. { 0, 0, 0, 0 },
  363. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
  364. & ifmt_cmp, { 0x40 }
  365. },
  366. /* cmpi $src2,$simm16 */
  367. {
  368. { 0, 0, 0, 0 },
  369. { { MNEM, ' ', OP (SRC2), ',', OP (SIMM16), 0 } },
  370. & ifmt_cmpi, { 0x80400000 }
  371. },
  372. /* cmpu $src1,$src2 */
  373. {
  374. { 0, 0, 0, 0 },
  375. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
  376. & ifmt_cmp, { 0x50 }
  377. },
  378. /* cmpui $src2,$simm16 */
  379. {
  380. { 0, 0, 0, 0 },
  381. { { MNEM, ' ', OP (SRC2), ',', OP (SIMM16), 0 } },
  382. & ifmt_cmpi, { 0x80500000 }
  383. },
  384. /* cmpeq $src1,$src2 */
  385. {
  386. { 0, 0, 0, 0 },
  387. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
  388. & ifmt_cmp, { 0x60 }
  389. },
  390. /* cmpz $src2 */
  391. {
  392. { 0, 0, 0, 0 },
  393. { { MNEM, ' ', OP (SRC2), 0 } },
  394. & ifmt_cmpz, { 0x70 }
  395. },
  396. /* div $dr,$sr */
  397. {
  398. { 0, 0, 0, 0 },
  399. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  400. & ifmt_div, { 0x90000000 }
  401. },
  402. /* divu $dr,$sr */
  403. {
  404. { 0, 0, 0, 0 },
  405. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  406. & ifmt_div, { 0x90100000 }
  407. },
  408. /* rem $dr,$sr */
  409. {
  410. { 0, 0, 0, 0 },
  411. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  412. & ifmt_div, { 0x90200000 }
  413. },
  414. /* remu $dr,$sr */
  415. {
  416. { 0, 0, 0, 0 },
  417. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  418. & ifmt_div, { 0x90300000 }
  419. },
  420. /* remh $dr,$sr */
  421. {
  422. { 0, 0, 0, 0 },
  423. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  424. & ifmt_div, { 0x90200010 }
  425. },
  426. /* remuh $dr,$sr */
  427. {
  428. { 0, 0, 0, 0 },
  429. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  430. & ifmt_div, { 0x90300010 }
  431. },
  432. /* remb $dr,$sr */
  433. {
  434. { 0, 0, 0, 0 },
  435. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  436. & ifmt_div, { 0x90200018 }
  437. },
  438. /* remub $dr,$sr */
  439. {
  440. { 0, 0, 0, 0 },
  441. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  442. & ifmt_div, { 0x90300018 }
  443. },
  444. /* divuh $dr,$sr */
  445. {
  446. { 0, 0, 0, 0 },
  447. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  448. & ifmt_div, { 0x90100010 }
  449. },
  450. /* divb $dr,$sr */
  451. {
  452. { 0, 0, 0, 0 },
  453. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  454. & ifmt_div, { 0x90000018 }
  455. },
  456. /* divub $dr,$sr */
  457. {
  458. { 0, 0, 0, 0 },
  459. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  460. & ifmt_div, { 0x90100018 }
  461. },
  462. /* divh $dr,$sr */
  463. {
  464. { 0, 0, 0, 0 },
  465. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  466. & ifmt_div, { 0x90000010 }
  467. },
  468. /* jc $sr */
  469. {
  470. { 0, 0, 0, 0 },
  471. { { MNEM, ' ', OP (SR), 0 } },
  472. & ifmt_jc, { 0x1cc0 }
  473. },
  474. /* jnc $sr */
  475. {
  476. { 0, 0, 0, 0 },
  477. { { MNEM, ' ', OP (SR), 0 } },
  478. & ifmt_jc, { 0x1dc0 }
  479. },
  480. /* jl $sr */
  481. {
  482. { 0, 0, 0, 0 },
  483. { { MNEM, ' ', OP (SR), 0 } },
  484. & ifmt_jc, { 0x1ec0 }
  485. },
  486. /* jmp $sr */
  487. {
  488. { 0, 0, 0, 0 },
  489. { { MNEM, ' ', OP (SR), 0 } },
  490. & ifmt_jc, { 0x1fc0 }
  491. },
  492. /* ld $dr,@$sr */
  493. {
  494. { 0, 0, 0, 0 },
  495. { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },
  496. & ifmt_add, { 0x20c0 }
  497. },
  498. /* ld $dr,@($slo16,$sr) */
  499. {
  500. { 0, 0, 0, 0 },
  501. { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },
  502. & ifmt_add3, { 0xa0c00000 }
  503. },
  504. /* ldb $dr,@$sr */
  505. {
  506. { 0, 0, 0, 0 },
  507. { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },
  508. & ifmt_add, { 0x2080 }
  509. },
  510. /* ldb $dr,@($slo16,$sr) */
  511. {
  512. { 0, 0, 0, 0 },
  513. { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },
  514. & ifmt_add3, { 0xa0800000 }
  515. },
  516. /* ldh $dr,@$sr */
  517. {
  518. { 0, 0, 0, 0 },
  519. { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },
  520. & ifmt_add, { 0x20a0 }
  521. },
  522. /* ldh $dr,@($slo16,$sr) */
  523. {
  524. { 0, 0, 0, 0 },
  525. { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },
  526. & ifmt_add3, { 0xa0a00000 }
  527. },
  528. /* ldub $dr,@$sr */
  529. {
  530. { 0, 0, 0, 0 },
  531. { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },
  532. & ifmt_add, { 0x2090 }
  533. },
  534. /* ldub $dr,@($slo16,$sr) */
  535. {
  536. { 0, 0, 0, 0 },
  537. { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },
  538. & ifmt_add3, { 0xa0900000 }
  539. },
  540. /* lduh $dr,@$sr */
  541. {
  542. { 0, 0, 0, 0 },
  543. { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },
  544. & ifmt_add, { 0x20b0 }
  545. },
  546. /* lduh $dr,@($slo16,$sr) */
  547. {
  548. { 0, 0, 0, 0 },
  549. { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },
  550. & ifmt_add3, { 0xa0b00000 }
  551. },
  552. /* ld $dr,@$sr+ */
  553. {
  554. { 0, 0, 0, 0 },
  555. { { MNEM, ' ', OP (DR), ',', '@', OP (SR), '+', 0 } },
  556. & ifmt_add, { 0x20e0 }
  557. },
  558. /* ld24 $dr,$uimm24 */
  559. {
  560. { 0, 0, 0, 0 },
  561. { { MNEM, ' ', OP (DR), ',', OP (UIMM24), 0 } },
  562. & ifmt_ld24, { 0xe0000000 }
  563. },
  564. /* ldi8 $dr,$simm8 */
  565. {
  566. { 0, 0, 0, 0 },
  567. { { MNEM, ' ', OP (DR), ',', OP (SIMM8), 0 } },
  568. & ifmt_addi, { 0x6000 }
  569. },
  570. /* ldi16 $dr,$hash$slo16 */
  571. {
  572. { 0, 0, 0, 0 },
  573. { { MNEM, ' ', OP (DR), ',', OP (HASH), OP (SLO16), 0 } },
  574. & ifmt_ldi16, { 0x90f00000 }
  575. },
  576. /* lock $dr,@$sr */
  577. {
  578. { 0, 0, 0, 0 },
  579. { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },
  580. & ifmt_add, { 0x20d0 }
  581. },
  582. /* machi $src1,$src2 */
  583. {
  584. { 0, 0, 0, 0 },
  585. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
  586. & ifmt_cmp, { 0x3040 }
  587. },
  588. /* machi $src1,$src2,$acc */
  589. {
  590. { 0, 0, 0, 0 },
  591. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
  592. & ifmt_machi_a, { 0x3040 }
  593. },
  594. /* maclo $src1,$src2 */
  595. {
  596. { 0, 0, 0, 0 },
  597. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
  598. & ifmt_cmp, { 0x3050 }
  599. },
  600. /* maclo $src1,$src2,$acc */
  601. {
  602. { 0, 0, 0, 0 },
  603. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
  604. & ifmt_machi_a, { 0x3050 }
  605. },
  606. /* macwhi $src1,$src2 */
  607. {
  608. { 0, 0, 0, 0 },
  609. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
  610. & ifmt_cmp, { 0x3060 }
  611. },
  612. /* macwhi $src1,$src2,$acc */
  613. {
  614. { 0, 0, 0, 0 },
  615. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
  616. & ifmt_machi_a, { 0x3060 }
  617. },
  618. /* macwlo $src1,$src2 */
  619. {
  620. { 0, 0, 0, 0 },
  621. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
  622. & ifmt_cmp, { 0x3070 }
  623. },
  624. /* macwlo $src1,$src2,$acc */
  625. {
  626. { 0, 0, 0, 0 },
  627. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
  628. & ifmt_machi_a, { 0x3070 }
  629. },
  630. /* mul $dr,$sr */
  631. {
  632. { 0, 0, 0, 0 },
  633. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  634. & ifmt_add, { 0x1060 }
  635. },
  636. /* mulhi $src1,$src2 */
  637. {
  638. { 0, 0, 0, 0 },
  639. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
  640. & ifmt_cmp, { 0x3000 }
  641. },
  642. /* mulhi $src1,$src2,$acc */
  643. {
  644. { 0, 0, 0, 0 },
  645. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
  646. & ifmt_machi_a, { 0x3000 }
  647. },
  648. /* mullo $src1,$src2 */
  649. {
  650. { 0, 0, 0, 0 },
  651. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
  652. & ifmt_cmp, { 0x3010 }
  653. },
  654. /* mullo $src1,$src2,$acc */
  655. {
  656. { 0, 0, 0, 0 },
  657. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
  658. & ifmt_machi_a, { 0x3010 }
  659. },
  660. /* mulwhi $src1,$src2 */
  661. {
  662. { 0, 0, 0, 0 },
  663. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
  664. & ifmt_cmp, { 0x3020 }
  665. },
  666. /* mulwhi $src1,$src2,$acc */
  667. {
  668. { 0, 0, 0, 0 },
  669. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
  670. & ifmt_machi_a, { 0x3020 }
  671. },
  672. /* mulwlo $src1,$src2 */
  673. {
  674. { 0, 0, 0, 0 },
  675. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
  676. & ifmt_cmp, { 0x3030 }
  677. },
  678. /* mulwlo $src1,$src2,$acc */
  679. {
  680. { 0, 0, 0, 0 },
  681. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
  682. & ifmt_machi_a, { 0x3030 }
  683. },
  684. /* mv $dr,$sr */
  685. {
  686. { 0, 0, 0, 0 },
  687. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  688. & ifmt_add, { 0x1080 }
  689. },
  690. /* mvfachi $dr */
  691. {
  692. { 0, 0, 0, 0 },
  693. { { MNEM, ' ', OP (DR), 0 } },
  694. & ifmt_mvfachi, { 0x50f0 }
  695. },
  696. /* mvfachi $dr,$accs */
  697. {
  698. { 0, 0, 0, 0 },
  699. { { MNEM, ' ', OP (DR), ',', OP (ACCS), 0 } },
  700. & ifmt_mvfachi_a, { 0x50f0 }
  701. },
  702. /* mvfaclo $dr */
  703. {
  704. { 0, 0, 0, 0 },
  705. { { MNEM, ' ', OP (DR), 0 } },
  706. & ifmt_mvfachi, { 0x50f1 }
  707. },
  708. /* mvfaclo $dr,$accs */
  709. {
  710. { 0, 0, 0, 0 },
  711. { { MNEM, ' ', OP (DR), ',', OP (ACCS), 0 } },
  712. & ifmt_mvfachi_a, { 0x50f1 }
  713. },
  714. /* mvfacmi $dr */
  715. {
  716. { 0, 0, 0, 0 },
  717. { { MNEM, ' ', OP (DR), 0 } },
  718. & ifmt_mvfachi, { 0x50f2 }
  719. },
  720. /* mvfacmi $dr,$accs */
  721. {
  722. { 0, 0, 0, 0 },
  723. { { MNEM, ' ', OP (DR), ',', OP (ACCS), 0 } },
  724. & ifmt_mvfachi_a, { 0x50f2 }
  725. },
  726. /* mvfc $dr,$scr */
  727. {
  728. { 0, 0, 0, 0 },
  729. { { MNEM, ' ', OP (DR), ',', OP (SCR), 0 } },
  730. & ifmt_mvfc, { 0x1090 }
  731. },
  732. /* mvtachi $src1 */
  733. {
  734. { 0, 0, 0, 0 },
  735. { { MNEM, ' ', OP (SRC1), 0 } },
  736. & ifmt_mvtachi, { 0x5070 }
  737. },
  738. /* mvtachi $src1,$accs */
  739. {
  740. { 0, 0, 0, 0 },
  741. { { MNEM, ' ', OP (SRC1), ',', OP (ACCS), 0 } },
  742. & ifmt_mvtachi_a, { 0x5070 }
  743. },
  744. /* mvtaclo $src1 */
  745. {
  746. { 0, 0, 0, 0 },
  747. { { MNEM, ' ', OP (SRC1), 0 } },
  748. & ifmt_mvtachi, { 0x5071 }
  749. },
  750. /* mvtaclo $src1,$accs */
  751. {
  752. { 0, 0, 0, 0 },
  753. { { MNEM, ' ', OP (SRC1), ',', OP (ACCS), 0 } },
  754. & ifmt_mvtachi_a, { 0x5071 }
  755. },
  756. /* mvtc $sr,$dcr */
  757. {
  758. { 0, 0, 0, 0 },
  759. { { MNEM, ' ', OP (SR), ',', OP (DCR), 0 } },
  760. & ifmt_mvtc, { 0x10a0 }
  761. },
  762. /* neg $dr,$sr */
  763. {
  764. { 0, 0, 0, 0 },
  765. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  766. & ifmt_add, { 0x30 }
  767. },
  768. /* nop */
  769. {
  770. { 0, 0, 0, 0 },
  771. { { MNEM, 0 } },
  772. & ifmt_nop, { 0x7000 }
  773. },
  774. /* not $dr,$sr */
  775. {
  776. { 0, 0, 0, 0 },
  777. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  778. & ifmt_add, { 0xb0 }
  779. },
  780. /* rac */
  781. {
  782. { 0, 0, 0, 0 },
  783. { { MNEM, 0 } },
  784. & ifmt_nop, { 0x5090 }
  785. },
  786. /* rac $accd,$accs,$imm1 */
  787. {
  788. { 0, 0, 0, 0 },
  789. { { MNEM, ' ', OP (ACCD), ',', OP (ACCS), ',', OP (IMM1), 0 } },
  790. & ifmt_rac_dsi, { 0x5090 }
  791. },
  792. /* rach */
  793. {
  794. { 0, 0, 0, 0 },
  795. { { MNEM, 0 } },
  796. & ifmt_nop, { 0x5080 }
  797. },
  798. /* rach $accd,$accs,$imm1 */
  799. {
  800. { 0, 0, 0, 0 },
  801. { { MNEM, ' ', OP (ACCD), ',', OP (ACCS), ',', OP (IMM1), 0 } },
  802. & ifmt_rac_dsi, { 0x5080 }
  803. },
  804. /* rte */
  805. {
  806. { 0, 0, 0, 0 },
  807. { { MNEM, 0 } },
  808. & ifmt_nop, { 0x10d6 }
  809. },
  810. /* seth $dr,$hash$hi16 */
  811. {
  812. { 0, 0, 0, 0 },
  813. { { MNEM, ' ', OP (DR), ',', OP (HASH), OP (HI16), 0 } },
  814. & ifmt_seth, { 0xd0c00000 }
  815. },
  816. /* sll $dr,$sr */
  817. {
  818. { 0, 0, 0, 0 },
  819. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  820. & ifmt_add, { 0x1040 }
  821. },
  822. /* sll3 $dr,$sr,$simm16 */
  823. {
  824. { 0, 0, 0, 0 },
  825. { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (SIMM16), 0 } },
  826. & ifmt_addv3, { 0x90c00000 }
  827. },
  828. /* slli $dr,$uimm5 */
  829. {
  830. { 0, 0, 0, 0 },
  831. { { MNEM, ' ', OP (DR), ',', OP (UIMM5), 0 } },
  832. & ifmt_slli, { 0x5040 }
  833. },
  834. /* sra $dr,$sr */
  835. {
  836. { 0, 0, 0, 0 },
  837. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  838. & ifmt_add, { 0x1020 }
  839. },
  840. /* sra3 $dr,$sr,$simm16 */
  841. {
  842. { 0, 0, 0, 0 },
  843. { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (SIMM16), 0 } },
  844. & ifmt_addv3, { 0x90a00000 }
  845. },
  846. /* srai $dr,$uimm5 */
  847. {
  848. { 0, 0, 0, 0 },
  849. { { MNEM, ' ', OP (DR), ',', OP (UIMM5), 0 } },
  850. & ifmt_slli, { 0x5020 }
  851. },
  852. /* srl $dr,$sr */
  853. {
  854. { 0, 0, 0, 0 },
  855. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  856. & ifmt_add, { 0x1000 }
  857. },
  858. /* srl3 $dr,$sr,$simm16 */
  859. {
  860. { 0, 0, 0, 0 },
  861. { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (SIMM16), 0 } },
  862. & ifmt_addv3, { 0x90800000 }
  863. },
  864. /* srli $dr,$uimm5 */
  865. {
  866. { 0, 0, 0, 0 },
  867. { { MNEM, ' ', OP (DR), ',', OP (UIMM5), 0 } },
  868. & ifmt_slli, { 0x5000 }
  869. },
  870. /* st $src1,@$src2 */
  871. {
  872. { 0, 0, 0, 0 },
  873. { { MNEM, ' ', OP (SRC1), ',', '@', OP (SRC2), 0 } },
  874. & ifmt_cmp, { 0x2040 }
  875. },
  876. /* st $src1,@($slo16,$src2) */
  877. {
  878. { 0, 0, 0, 0 },
  879. { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SLO16), ',', OP (SRC2), ')', 0 } },
  880. & ifmt_st_d, { 0xa0400000 }
  881. },
  882. /* stb $src1,@$src2 */
  883. {
  884. { 0, 0, 0, 0 },
  885. { { MNEM, ' ', OP (SRC1), ',', '@', OP (SRC2), 0 } },
  886. & ifmt_cmp, { 0x2000 }
  887. },
  888. /* stb $src1,@($slo16,$src2) */
  889. {
  890. { 0, 0, 0, 0 },
  891. { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SLO16), ',', OP (SRC2), ')', 0 } },
  892. & ifmt_st_d, { 0xa0000000 }
  893. },
  894. /* sth $src1,@$src2 */
  895. {
  896. { 0, 0, 0, 0 },
  897. { { MNEM, ' ', OP (SRC1), ',', '@', OP (SRC2), 0 } },
  898. & ifmt_cmp, { 0x2020 }
  899. },
  900. /* sth $src1,@($slo16,$src2) */
  901. {
  902. { 0, 0, 0, 0 },
  903. { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SLO16), ',', OP (SRC2), ')', 0 } },
  904. & ifmt_st_d, { 0xa0200000 }
  905. },
  906. /* st $src1,@+$src2 */
  907. {
  908. { 0, 0, 0, 0 },
  909. { { MNEM, ' ', OP (SRC1), ',', '@', '+', OP (SRC2), 0 } },
  910. & ifmt_cmp, { 0x2060 }
  911. },
  912. /* sth $src1,@$src2+ */
  913. {
  914. { 0, 0, 0, 0 },
  915. { { MNEM, ' ', OP (SRC1), ',', '@', OP (SRC2), '+', 0 } },
  916. & ifmt_cmp, { 0x2030 }
  917. },
  918. /* stb $src1,@$src2+ */
  919. {
  920. { 0, 0, 0, 0 },
  921. { { MNEM, ' ', OP (SRC1), ',', '@', OP (SRC2), '+', 0 } },
  922. & ifmt_cmp, { 0x2010 }
  923. },
  924. /* st $src1,@-$src2 */
  925. {
  926. { 0, 0, 0, 0 },
  927. { { MNEM, ' ', OP (SRC1), ',', '@', '-', OP (SRC2), 0 } },
  928. & ifmt_cmp, { 0x2070 }
  929. },
  930. /* sub $dr,$sr */
  931. {
  932. { 0, 0, 0, 0 },
  933. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  934. & ifmt_add, { 0x20 }
  935. },
  936. /* subv $dr,$sr */
  937. {
  938. { 0, 0, 0, 0 },
  939. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  940. & ifmt_add, { 0x0 }
  941. },
  942. /* subx $dr,$sr */
  943. {
  944. { 0, 0, 0, 0 },
  945. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  946. & ifmt_add, { 0x10 }
  947. },
  948. /* trap $uimm4 */
  949. {
  950. { 0, 0, 0, 0 },
  951. { { MNEM, ' ', OP (UIMM4), 0 } },
  952. & ifmt_trap, { 0x10f0 }
  953. },
  954. /* unlock $src1,@$src2 */
  955. {
  956. { 0, 0, 0, 0 },
  957. { { MNEM, ' ', OP (SRC1), ',', '@', OP (SRC2), 0 } },
  958. & ifmt_cmp, { 0x2050 }
  959. },
  960. /* satb $dr,$sr */
  961. {
  962. { 0, 0, 0, 0 },
  963. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  964. & ifmt_satb, { 0x80600300 }
  965. },
  966. /* sath $dr,$sr */
  967. {
  968. { 0, 0, 0, 0 },
  969. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  970. & ifmt_satb, { 0x80600200 }
  971. },
  972. /* sat $dr,$sr */
  973. {
  974. { 0, 0, 0, 0 },
  975. { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
  976. & ifmt_satb, { 0x80600000 }
  977. },
  978. /* pcmpbz $src2 */
  979. {
  980. { 0, 0, 0, 0 },
  981. { { MNEM, ' ', OP (SRC2), 0 } },
  982. & ifmt_cmpz, { 0x370 }
  983. },
  984. /* sadd */
  985. {
  986. { 0, 0, 0, 0 },
  987. { { MNEM, 0 } },
  988. & ifmt_nop, { 0x50e4 }
  989. },
  990. /* macwu1 $src1,$src2 */
  991. {
  992. { 0, 0, 0, 0 },
  993. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
  994. & ifmt_cmp, { 0x50b0 }
  995. },
  996. /* msblo $src1,$src2 */
  997. {
  998. { 0, 0, 0, 0 },
  999. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
  1000. & ifmt_cmp, { 0x50d0 }
  1001. },
  1002. /* mulwu1 $src1,$src2 */
  1003. {
  1004. { 0, 0, 0, 0 },
  1005. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
  1006. & ifmt_cmp, { 0x50a0 }
  1007. },
  1008. /* maclh1 $src1,$src2 */
  1009. {
  1010. { 0, 0, 0, 0 },
  1011. { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
  1012. & ifmt_cmp, { 0x50c0 }
  1013. },
  1014. /* sc */
  1015. {
  1016. { 0, 0, 0, 0 },
  1017. { { MNEM, 0 } },
  1018. & ifmt_nop, { 0x7401 }
  1019. },
  1020. /* snc */
  1021. {
  1022. { 0, 0, 0, 0 },
  1023. { { MNEM, 0 } },
  1024. & ifmt_nop, { 0x7501 }
  1025. },
  1026. /* clrpsw $uimm8 */
  1027. {
  1028. { 0, 0, 0, 0 },
  1029. { { MNEM, ' ', OP (UIMM8), 0 } },
  1030. & ifmt_clrpsw, { 0x7200 }
  1031. },
  1032. /* setpsw $uimm8 */
  1033. {
  1034. { 0, 0, 0, 0 },
  1035. { { MNEM, ' ', OP (UIMM8), 0 } },
  1036. & ifmt_clrpsw, { 0x7100 }
  1037. },
  1038. /* bset $uimm3,@($slo16,$sr) */
  1039. {
  1040. { 0, 0, 0, 0 },
  1041. { { MNEM, ' ', OP (UIMM3), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },
  1042. & ifmt_bset, { 0xa0600000 }
  1043. },
  1044. /* bclr $uimm3,@($slo16,$sr) */
  1045. {
  1046. { 0, 0, 0, 0 },
  1047. { { MNEM, ' ', OP (UIMM3), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },
  1048. & ifmt_bset, { 0xa0700000 }
  1049. },
  1050. /* btst $uimm3,$sr */
  1051. {
  1052. { 0, 0, 0, 0 },
  1053. { { MNEM, ' ', OP (UIMM3), ',', OP (SR), 0 } },
  1054. & ifmt_btst, { 0xf0 }
  1055. },
  1056. };
  1057. #undef A
  1058. #undef OPERAND
  1059. #undef MNEM
  1060. #undef OP
  1061. /* Formats for ALIAS macro-insns. */
  1062. #define F(f) & m32r_cgen_ifld_table[M32R_##f]
  1063. static const CGEN_IFMT ifmt_bc8r ATTRIBUTE_UNUSED = {
  1064. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP8) }, { 0 } }
  1065. };
  1066. static const CGEN_IFMT ifmt_bc24r ATTRIBUTE_UNUSED = {
  1067. 32, 32, 0xff000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP24) }, { 0 } }
  1068. };
  1069. static const CGEN_IFMT ifmt_bl8r ATTRIBUTE_UNUSED = {
  1070. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP8) }, { 0 } }
  1071. };
  1072. static const CGEN_IFMT ifmt_bl24r ATTRIBUTE_UNUSED = {
  1073. 32, 32, 0xff000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP24) }, { 0 } }
  1074. };
  1075. static const CGEN_IFMT ifmt_bcl8r ATTRIBUTE_UNUSED = {
  1076. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP8) }, { 0 } }
  1077. };
  1078. static const CGEN_IFMT ifmt_bcl24r ATTRIBUTE_UNUSED = {
  1079. 32, 32, 0xff000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP24) }, { 0 } }
  1080. };
  1081. static const CGEN_IFMT ifmt_bnc8r ATTRIBUTE_UNUSED = {
  1082. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP8) }, { 0 } }
  1083. };
  1084. static const CGEN_IFMT ifmt_bnc24r ATTRIBUTE_UNUSED = {
  1085. 32, 32, 0xff000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP24) }, { 0 } }
  1086. };
  1087. static const CGEN_IFMT ifmt_bra8r ATTRIBUTE_UNUSED = {
  1088. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP8) }, { 0 } }
  1089. };
  1090. static const CGEN_IFMT ifmt_bra24r ATTRIBUTE_UNUSED = {
  1091. 32, 32, 0xff000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP24) }, { 0 } }
  1092. };
  1093. static const CGEN_IFMT ifmt_bncl8r ATTRIBUTE_UNUSED = {
  1094. 16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP8) }, { 0 } }
  1095. };
  1096. static const CGEN_IFMT ifmt_bncl24r ATTRIBUTE_UNUSED = {
  1097. 32, 32, 0xff000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP24) }, { 0 } }
  1098. };
  1099. static const CGEN_IFMT ifmt_ld_2 ATTRIBUTE_UNUSED = {
  1100. 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } }
  1101. };
  1102. static const CGEN_IFMT ifmt_ld_d2 ATTRIBUTE_UNUSED = {
  1103. 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
  1104. };
  1105. static const CGEN_IFMT ifmt_ldb_2 ATTRIBUTE_UNUSED = {
  1106. 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } }
  1107. };
  1108. static const CGEN_IFMT ifmt_ldb_d2 ATTRIBUTE_UNUSED = {
  1109. 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
  1110. };
  1111. static const CGEN_IFMT ifmt_ldh_2 ATTRIBUTE_UNUSED = {
  1112. 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } }
  1113. };
  1114. static const CGEN_IFMT ifmt_ldh_d2 ATTRIBUTE_UNUSED = {
  1115. 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
  1116. };
  1117. static const CGEN_IFMT ifmt_ldub_2 ATTRIBUTE_UNUSED = {
  1118. 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } }
  1119. };
  1120. static const CGEN_IFMT ifmt_ldub_d2 ATTRIBUTE_UNUSED = {
  1121. 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
  1122. };
  1123. static const CGEN_IFMT ifmt_lduh_2 ATTRIBUTE_UNUSED = {
  1124. 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } }
  1125. };
  1126. static const CGEN_IFMT ifmt_lduh_d2 ATTRIBUTE_UNUSED = {
  1127. 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
  1128. };
  1129. static const CGEN_IFMT ifmt_pop ATTRIBUTE_UNUSED = {
  1130. 16, 16, 0xf0ff, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }
  1131. };
  1132. static const CGEN_IFMT ifmt_ldi8a ATTRIBUTE_UNUSED = {
  1133. 16, 16, 0xf000, { { F (F_OP1) }, { F (F_R1) }, { F (F_SIMM8) }, { 0 } }
  1134. };
  1135. static const CGEN_IFMT ifmt_ldi16a ATTRIBUTE_UNUSED = {
  1136. 32, 32, 0xf0ff0000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_R1) }, { F (F_SIMM16) }, { 0 } }
  1137. };
  1138. static const CGEN_IFMT ifmt_rac_d ATTRIBUTE_UNUSED = {
  1139. 16, 16, 0xf3ff, { { F (F_OP1) }, { F (F_ACCD) }, { F (F_BITS67) }, { F (F_OP2) }, { F (F_ACCS) }, { F (F_BIT14) }, { F (F_IMM1) }, { 0 } }
  1140. };
  1141. static const CGEN_IFMT ifmt_rac_ds ATTRIBUTE_UNUSED = {
  1142. 16, 16, 0xf3f3, { { F (F_OP1) }, { F (F_ACCD) }, { F (F_BITS67) }, { F (F_OP2) }, { F (F_ACCS) }, { F (F_BIT14) }, { F (F_IMM1) }, { 0 } }
  1143. };
  1144. static const CGEN_IFMT ifmt_rach_d ATTRIBUTE_UNUSED = {
  1145. 16, 16, 0xf3ff, { { F (F_OP1) }, { F (F_ACCD) }, { F (F_BITS67) }, { F (F_OP2) }, { F (F_ACCS) }, { F (F_BIT14) }, { F (F_IMM1) }, { 0 } }
  1146. };
  1147. static const CGEN_IFMT ifmt_rach_ds ATTRIBUTE_UNUSED = {
  1148. 16, 16, 0xf3f3, { { F (F_OP1) }, { F (F_ACCD) }, { F (F_BITS67) }, { F (F_OP2) }, { F (F_ACCS) }, { F (F_BIT14) }, { F (F_IMM1) }, { 0 } }
  1149. };
  1150. static const CGEN_IFMT ifmt_st_2 ATTRIBUTE_UNUSED = {
  1151. 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } }
  1152. };
  1153. static const CGEN_IFMT ifmt_st_d2 ATTRIBUTE_UNUSED = {
  1154. 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
  1155. };
  1156. static const CGEN_IFMT ifmt_stb_2 ATTRIBUTE_UNUSED = {
  1157. 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } }
  1158. };
  1159. static const CGEN_IFMT ifmt_stb_d2 ATTRIBUTE_UNUSED = {
  1160. 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
  1161. };
  1162. static const CGEN_IFMT ifmt_sth_2 ATTRIBUTE_UNUSED = {
  1163. 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } }
  1164. };
  1165. static const CGEN_IFMT ifmt_sth_d2 ATTRIBUTE_UNUSED = {
  1166. 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
  1167. };
  1168. static const CGEN_IFMT ifmt_push ATTRIBUTE_UNUSED = {
  1169. 16, 16, 0xf0ff, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } }
  1170. };
  1171. #undef F
  1172. /* Each non-simple macro entry points to an array of expansion possibilities. */
  1173. #define A(a) (1 << CGEN_INSN_##a)
  1174. #define OPERAND(op) M32R_OPERAND_##op
  1175. #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
  1176. #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
  1177. /* The macro instruction table. */
  1178. static const CGEN_IBASE m32r_cgen_macro_insn_table[] =
  1179. {
  1180. /* bc $disp8 */
  1181. {
  1182. -1, "bc8r", "bc", 16,
  1183. { 0|A(RELAXABLE)|A(COND_CTI)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
  1184. },
  1185. /* bc $disp24 */
  1186. {
  1187. -1, "bc24r", "bc", 32,
  1188. { 0|A(RELAXED)|A(COND_CTI)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
  1189. },
  1190. /* bl $disp8 */
  1191. {
  1192. -1, "bl8r", "bl", 16,
  1193. { 0|A(RELAXABLE)|A(FILL_SLOT)|A(UNCOND_CTI)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
  1194. },
  1195. /* bl $disp24 */
  1196. {
  1197. -1, "bl24r", "bl", 32,
  1198. { 0|A(RELAXED)|A(UNCOND_CTI)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
  1199. },
  1200. /* bcl $disp8 */
  1201. {
  1202. -1, "bcl8r", "bcl", 16,
  1203. { 0|A(RELAXABLE)|A(FILL_SLOT)|A(COND_CTI)|A(ALIAS), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_O, 0 } } } }
  1204. },
  1205. /* bcl $disp24 */
  1206. {
  1207. -1, "bcl24r", "bcl", 32,
  1208. { 0|A(RELAXED)|A(COND_CTI)|A(ALIAS), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
  1209. },
  1210. /* bnc $disp8 */
  1211. {
  1212. -1, "bnc8r", "bnc", 16,
  1213. { 0|A(RELAXABLE)|A(COND_CTI)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
  1214. },
  1215. /* bnc $disp24 */
  1216. {
  1217. -1, "bnc24r", "bnc", 32,
  1218. { 0|A(RELAXED)|A(COND_CTI)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
  1219. },
  1220. /* bra $disp8 */
  1221. {
  1222. -1, "bra8r", "bra", 16,
  1223. { 0|A(RELAXABLE)|A(FILL_SLOT)|A(UNCOND_CTI)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
  1224. },
  1225. /* bra $disp24 */
  1226. {
  1227. -1, "bra24r", "bra", 32,
  1228. { 0|A(RELAXED)|A(UNCOND_CTI)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
  1229. },
  1230. /* bncl $disp8 */
  1231. {
  1232. -1, "bncl8r", "bncl", 16,
  1233. { 0|A(RELAXABLE)|A(FILL_SLOT)|A(COND_CTI)|A(ALIAS), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_O, 0 } } } }
  1234. },
  1235. /* bncl $disp24 */
  1236. {
  1237. -1, "bncl24r", "bncl", 32,
  1238. { 0|A(RELAXED)|A(COND_CTI)|A(ALIAS), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
  1239. },
  1240. /* ld $dr,@($sr) */
  1241. {
  1242. -1, "ld-2", "ld", 16,
  1243. { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
  1244. },
  1245. /* ld $dr,@($sr,$slo16) */
  1246. {
  1247. -1, "ld-d2", "ld", 32,
  1248. { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
  1249. },
  1250. /* ldb $dr,@($sr) */
  1251. {
  1252. -1, "ldb-2", "ldb", 16,
  1253. { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
  1254. },
  1255. /* ldb $dr,@($sr,$slo16) */
  1256. {
  1257. -1, "ldb-d2", "ldb", 32,
  1258. { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
  1259. },
  1260. /* ldh $dr,@($sr) */
  1261. {
  1262. -1, "ldh-2", "ldh", 16,
  1263. { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
  1264. },
  1265. /* ldh $dr,@($sr,$slo16) */
  1266. {
  1267. -1, "ldh-d2", "ldh", 32,
  1268. { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
  1269. },
  1270. /* ldub $dr,@($sr) */
  1271. {
  1272. -1, "ldub-2", "ldub", 16,
  1273. { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
  1274. },
  1275. /* ldub $dr,@($sr,$slo16) */
  1276. {
  1277. -1, "ldub-d2", "ldub", 32,
  1278. { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
  1279. },
  1280. /* lduh $dr,@($sr) */
  1281. {
  1282. -1, "lduh-2", "lduh", 16,
  1283. { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
  1284. },
  1285. /* lduh $dr,@($sr,$slo16) */
  1286. {
  1287. -1, "lduh-d2", "lduh", 32,
  1288. { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
  1289. },
  1290. /* pop $dr */
  1291. {
  1292. -1, "pop", "pop", 16,
  1293. { 0|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
  1294. },
  1295. /* ldi $dr,$simm8 */
  1296. {
  1297. -1, "ldi8a", "ldi", 16,
  1298. { 0|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
  1299. },
  1300. /* ldi $dr,$hash$slo16 */
  1301. {
  1302. -1, "ldi16a", "ldi", 32,
  1303. { 0|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
  1304. },
  1305. /* rac $accd */
  1306. {
  1307. -1, "rac-d", "rac", 16,
  1308. { 0|A(ALIAS), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
  1309. },
  1310. /* rac $accd,$accs */
  1311. {
  1312. -1, "rac-ds", "rac", 16,
  1313. { 0|A(ALIAS), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
  1314. },
  1315. /* rach $accd */
  1316. {
  1317. -1, "rach-d", "rach", 16,
  1318. { 0|A(ALIAS), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
  1319. },
  1320. /* rach $accd,$accs */
  1321. {
  1322. -1, "rach-ds", "rach", 16,
  1323. { 0|A(ALIAS), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
  1324. },
  1325. /* st $src1,@($src2) */
  1326. {
  1327. -1, "st-2", "st", 16,
  1328. { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
  1329. },
  1330. /* st $src1,@($src2,$slo16) */
  1331. {
  1332. -1, "st-d2", "st", 32,
  1333. { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
  1334. },
  1335. /* stb $src1,@($src2) */
  1336. {
  1337. -1, "stb-2", "stb", 16,
  1338. { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
  1339. },
  1340. /* stb $src1,@($src2,$slo16) */
  1341. {
  1342. -1, "stb-d2", "stb", 32,
  1343. { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
  1344. },
  1345. /* sth $src1,@($src2) */
  1346. {
  1347. -1, "sth-2", "sth", 16,
  1348. { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
  1349. },
  1350. /* sth $src1,@($src2,$slo16) */
  1351. {
  1352. -1, "sth-d2", "sth", 32,
  1353. { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
  1354. },
  1355. /* push $src1 */
  1356. {
  1357. -1, "push", "push", 16,
  1358. { 0|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
  1359. },
  1360. };
  1361. /* The macro instruction opcode table. */
  1362. static const CGEN_OPCODE m32r_cgen_macro_insn_opcode_table[] =
  1363. {
  1364. /* bc $disp8 */
  1365. {
  1366. { 0, 0, 0, 0 },
  1367. { { MNEM, ' ', OP (DISP8), 0 } },
  1368. & ifmt_bc8r, { 0x7c00 }
  1369. },
  1370. /* bc $disp24 */
  1371. {
  1372. { 0, 0, 0, 0 },
  1373. { { MNEM, ' ', OP (DISP24), 0 } },
  1374. & ifmt_bc24r, { 0xfc000000 }
  1375. },
  1376. /* bl $disp8 */
  1377. {
  1378. { 0, 0, 0, 0 },
  1379. { { MNEM, ' ', OP (DISP8), 0 } },
  1380. & ifmt_bl8r, { 0x7e00 }
  1381. },
  1382. /* bl $disp24 */
  1383. {
  1384. { 0, 0, 0, 0 },
  1385. { { MNEM, ' ', OP (DISP24), 0 } },
  1386. & ifmt_bl24r, { 0xfe000000 }
  1387. },
  1388. /* bcl $disp8 */
  1389. {
  1390. { 0, 0, 0, 0 },
  1391. { { MNEM, ' ', OP (DISP8), 0 } },
  1392. & ifmt_bcl8r, { 0x7800 }
  1393. },
  1394. /* bcl $disp24 */
  1395. {
  1396. { 0, 0, 0, 0 },
  1397. { { MNEM, ' ', OP (DISP24), 0 } },
  1398. & ifmt_bcl24r, { 0xf8000000 }
  1399. },
  1400. /* bnc $disp8 */
  1401. {
  1402. { 0, 0, 0, 0 },
  1403. { { MNEM, ' ', OP (DISP8), 0 } },
  1404. & ifmt_bnc8r, { 0x7d00 }
  1405. },
  1406. /* bnc $disp24 */
  1407. {
  1408. { 0, 0, 0, 0 },
  1409. { { MNEM, ' ', OP (DISP24), 0 } },
  1410. & ifmt_bnc24r, { 0xfd000000 }
  1411. },
  1412. /* bra $disp8 */
  1413. {
  1414. { 0, 0, 0, 0 },
  1415. { { MNEM, ' ', OP (DISP8), 0 } },
  1416. & ifmt_bra8r, { 0x7f00 }
  1417. },
  1418. /* bra $disp24 */
  1419. {
  1420. { 0, 0, 0, 0 },
  1421. { { MNEM, ' ', OP (DISP24), 0 } },
  1422. & ifmt_bra24r, { 0xff000000 }
  1423. },
  1424. /* bncl $disp8 */
  1425. {
  1426. { 0, 0, 0, 0 },
  1427. { { MNEM, ' ', OP (DISP8), 0 } },
  1428. & ifmt_bncl8r, { 0x7900 }
  1429. },
  1430. /* bncl $disp24 */
  1431. {
  1432. { 0, 0, 0, 0 },
  1433. { { MNEM, ' ', OP (DISP24), 0 } },
  1434. & ifmt_bncl24r, { 0xf9000000 }
  1435. },
  1436. /* ld $dr,@($sr) */
  1437. {
  1438. { 0, 0, 0, 0 },
  1439. { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ')', 0 } },
  1440. & ifmt_ld_2, { 0x20c0 }
  1441. },
  1442. /* ld $dr,@($sr,$slo16) */
  1443. {
  1444. { 0, 0, 0, 0 },
  1445. { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ',', OP (SLO16), ')', 0 } },
  1446. & ifmt_ld_d2, { 0xa0c00000 }
  1447. },
  1448. /* ldb $dr,@($sr) */
  1449. {
  1450. { 0, 0, 0, 0 },
  1451. { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ')', 0 } },
  1452. & ifmt_ldb_2, { 0x2080 }
  1453. },
  1454. /* ldb $dr,@($sr,$slo16) */
  1455. {
  1456. { 0, 0, 0, 0 },
  1457. { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ',', OP (SLO16), ')', 0 } },
  1458. & ifmt_ldb_d2, { 0xa0800000 }
  1459. },
  1460. /* ldh $dr,@($sr) */
  1461. {
  1462. { 0, 0, 0, 0 },
  1463. { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ')', 0 } },
  1464. & ifmt_ldh_2, { 0x20a0 }
  1465. },
  1466. /* ldh $dr,@($sr,$slo16) */
  1467. {
  1468. { 0, 0, 0, 0 },
  1469. { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ',', OP (SLO16), ')', 0 } },
  1470. & ifmt_ldh_d2, { 0xa0a00000 }
  1471. },
  1472. /* ldub $dr,@($sr) */
  1473. {
  1474. { 0, 0, 0, 0 },
  1475. { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ')', 0 } },
  1476. & ifmt_ldub_2, { 0x2090 }
  1477. },
  1478. /* ldub $dr,@($sr,$slo16) */
  1479. {
  1480. { 0, 0, 0, 0 },
  1481. { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ',', OP (SLO16), ')', 0 } },
  1482. & ifmt_ldub_d2, { 0xa0900000 }
  1483. },
  1484. /* lduh $dr,@($sr) */
  1485. {
  1486. { 0, 0, 0, 0 },
  1487. { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ')', 0 } },
  1488. & ifmt_lduh_2, { 0x20b0 }
  1489. },
  1490. /* lduh $dr,@($sr,$slo16) */
  1491. {
  1492. { 0, 0, 0, 0 },
  1493. { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ',', OP (SLO16), ')', 0 } },
  1494. & ifmt_lduh_d2, { 0xa0b00000 }
  1495. },
  1496. /* pop $dr */
  1497. {
  1498. { 0, 0, 0, 0 },
  1499. { { MNEM, ' ', OP (DR), 0 } },
  1500. & ifmt_pop, { 0x20ef }
  1501. },
  1502. /* ldi $dr,$simm8 */
  1503. {
  1504. { 0, 0, 0, 0 },
  1505. { { MNEM, ' ', OP (DR), ',', OP (SIMM8), 0 } },
  1506. & ifmt_ldi8a, { 0x6000 }
  1507. },
  1508. /* ldi $dr,$hash$slo16 */
  1509. {
  1510. { 0, 0, 0, 0 },
  1511. { { MNEM, ' ', OP (DR), ',', OP (HASH), OP (SLO16), 0 } },
  1512. & ifmt_ldi16a, { 0x90f00000 }
  1513. },
  1514. /* rac $accd */
  1515. {
  1516. { 0, 0, 0, 0 },
  1517. { { MNEM, ' ', OP (ACCD), 0 } },
  1518. & ifmt_rac_d, { 0x5090 }
  1519. },
  1520. /* rac $accd,$accs */
  1521. {
  1522. { 0, 0, 0, 0 },
  1523. { { MNEM, ' ', OP (ACCD), ',', OP (ACCS), 0 } },
  1524. & ifmt_rac_ds, { 0x5090 }
  1525. },
  1526. /* rach $accd */
  1527. {
  1528. { 0, 0, 0, 0 },
  1529. { { MNEM, ' ', OP (ACCD), 0 } },
  1530. & ifmt_rach_d, { 0x5080 }
  1531. },
  1532. /* rach $accd,$accs */
  1533. {
  1534. { 0, 0, 0, 0 },
  1535. { { MNEM, ' ', OP (ACCD), ',', OP (ACCS), 0 } },
  1536. & ifmt_rach_ds, { 0x5080 }
  1537. },
  1538. /* st $src1,@($src2) */
  1539. {
  1540. { 0, 0, 0, 0 },
  1541. { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SRC2), ')', 0 } },
  1542. & ifmt_st_2, { 0x2040 }
  1543. },
  1544. /* st $src1,@($src2,$slo16) */
  1545. {
  1546. { 0, 0, 0, 0 },
  1547. { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SRC2), ',', OP (SLO16), ')', 0 } },
  1548. & ifmt_st_d2, { 0xa0400000 }
  1549. },
  1550. /* stb $src1,@($src2) */
  1551. {
  1552. { 0, 0, 0, 0 },
  1553. { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SRC2), ')', 0 } },
  1554. & ifmt_stb_2, { 0x2000 }
  1555. },
  1556. /* stb $src1,@($src2,$slo16) */
  1557. {
  1558. { 0, 0, 0, 0 },
  1559. { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SRC2), ',', OP (SLO16), ')', 0 } },
  1560. & ifmt_stb_d2, { 0xa0000000 }
  1561. },
  1562. /* sth $src1,@($src2) */
  1563. {
  1564. { 0, 0, 0, 0 },
  1565. { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SRC2), ')', 0 } },
  1566. & ifmt_sth_2, { 0x2020 }
  1567. },
  1568. /* sth $src1,@($src2,$slo16) */
  1569. {
  1570. { 0, 0, 0, 0 },
  1571. { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SRC2), ',', OP (SLO16), ')', 0 } },
  1572. & ifmt_sth_d2, { 0xa0200000 }
  1573. },
  1574. /* push $src1 */
  1575. {
  1576. { 0, 0, 0, 0 },
  1577. { { MNEM, ' ', OP (SRC1), 0 } },
  1578. & ifmt_push, { 0x207f }
  1579. },
  1580. };
  1581. #undef A
  1582. #undef OPERAND
  1583. #undef MNEM
  1584. #undef OP
  1585. #ifndef CGEN_ASM_HASH_P
  1586. #define CGEN_ASM_HASH_P(insn) 1
  1587. #endif
  1588. #ifndef CGEN_DIS_HASH_P
  1589. #define CGEN_DIS_HASH_P(insn) 1
  1590. #endif
  1591. /* Return non-zero if INSN is to be added to the hash table.
  1592. Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file. */
  1593. static int
  1594. asm_hash_insn_p (const CGEN_INSN *insn ATTRIBUTE_UNUSED)
  1595. {
  1596. return CGEN_ASM_HASH_P (insn);
  1597. }
  1598. static int
  1599. dis_hash_insn_p (const CGEN_INSN *insn)
  1600. {
  1601. /* If building the hash table and the NO-DIS attribute is present,
  1602. ignore. */
  1603. if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_NO_DIS))
  1604. return 0;
  1605. return CGEN_DIS_HASH_P (insn);
  1606. }
  1607. #ifndef CGEN_ASM_HASH
  1608. #define CGEN_ASM_HASH_SIZE 127
  1609. #ifdef CGEN_MNEMONIC_OPERANDS
  1610. #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE)
  1611. #else
  1612. #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) /*FIXME*/
  1613. #endif
  1614. #endif
  1615. /* It doesn't make much sense to provide a default here,
  1616. but while this is under development we do.
  1617. BUFFER is a pointer to the bytes of the insn, target order.
  1618. VALUE is the first base_insn_bitsize bits as an int in host order. */
  1619. #ifndef CGEN_DIS_HASH
  1620. #define CGEN_DIS_HASH_SIZE 256
  1621. #define CGEN_DIS_HASH(buf, value) (*(unsigned char *) (buf))
  1622. #endif
  1623. /* The result is the hash value of the insn.
  1624. Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file. */
  1625. static unsigned int
  1626. asm_hash_insn (const char *mnem)
  1627. {
  1628. return CGEN_ASM_HASH (mnem);
  1629. }
  1630. /* BUF is a pointer to the bytes of the insn, target order.
  1631. VALUE is the first base_insn_bitsize bits as an int in host order. */
  1632. static unsigned int
  1633. dis_hash_insn (const char *buf ATTRIBUTE_UNUSED,
  1634. CGEN_INSN_INT value ATTRIBUTE_UNUSED)
  1635. {
  1636. return CGEN_DIS_HASH (buf, value);
  1637. }
  1638. /* Set the recorded length of the insn in the CGEN_FIELDS struct. */
  1639. static void
  1640. set_fields_bitsize (CGEN_FIELDS *fields, int size)
  1641. {
  1642. CGEN_FIELDS_BITSIZE (fields) = size;
  1643. }
  1644. /* Function to call before using the operand instance table.
  1645. This plugs the opcode entries and macro instructions into the cpu table. */
  1646. void
  1647. m32r_cgen_init_opcode_table (CGEN_CPU_DESC cd)
  1648. {
  1649. int i;
  1650. int num_macros = (sizeof (m32r_cgen_macro_insn_table) /
  1651. sizeof (m32r_cgen_macro_insn_table[0]));
  1652. const CGEN_IBASE *ib = & m32r_cgen_macro_insn_table[0];
  1653. const CGEN_OPCODE *oc = & m32r_cgen_macro_insn_opcode_table[0];
  1654. CGEN_INSN *insns = xmalloc (num_macros * sizeof (CGEN_INSN));
  1655. /* This test has been added to avoid a warning generated
  1656. if memset is called with a third argument of value zero. */
  1657. if (num_macros >= 1)
  1658. memset (insns, 0, num_macros * sizeof (CGEN_INSN));
  1659. for (i = 0; i < num_macros; ++i)
  1660. {
  1661. insns[i].base = &ib[i];
  1662. insns[i].opcode = &oc[i];
  1663. m32r_cgen_build_insn_regex (& insns[i]);
  1664. }
  1665. cd->macro_insn_table.init_entries = insns;
  1666. cd->macro_insn_table.entry_size = sizeof (CGEN_IBASE);
  1667. cd->macro_insn_table.num_init_entries = num_macros;
  1668. oc = & m32r_cgen_insn_opcode_table[0];
  1669. insns = (CGEN_INSN *) cd->insn_table.init_entries;
  1670. for (i = 0; i < MAX_INSNS; ++i)
  1671. {
  1672. insns[i].opcode = &oc[i];
  1673. m32r_cgen_build_insn_regex (& insns[i]);
  1674. }
  1675. cd->sizeof_fields = sizeof (CGEN_FIELDS);
  1676. cd->set_fields_bitsize = set_fields_bitsize;
  1677. cd->asm_hash_p = asm_hash_insn_p;
  1678. cd->asm_hash = asm_hash_insn;
  1679. cd->asm_hash_size = CGEN_ASM_HASH_SIZE;
  1680. cd->dis_hash_p = dis_hash_insn_p;
  1681. cd->dis_hash = dis_hash_insn;
  1682. cd->dis_hash_size = CGEN_DIS_HASH_SIZE;
  1683. }