m32r-opc.c 46 KB

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