0001-merge-from-dubhe-pr-06-30-to-support-b0.94.patch 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927
  1. From cc2d8c8bed31f441206b53009d5d681132c6e332 Mon Sep 17 00:00:00 2001
  2. From: "max.ma" <max.ma@starfivetech.com>
  3. Date: Wed, 29 Sep 2021 02:42:26 -0700
  4. Subject: [PATCH 01/11] merge from dubhe-pr-06-30 to support b0.94
  5. ---
  6. gas/config/tc-riscv.c | 24 +++
  7. gas/testsuite/gas/riscv/b-ext-64.d | 69 +++++++
  8. gas/testsuite/gas/riscv/b-ext-64.s | 69 +++++++
  9. gas/testsuite/gas/riscv/b-ext.d | 39 ++++
  10. gas/testsuite/gas/riscv/b-ext.s | 39 ++++
  11. include/opcode/riscv-opc.h | 206 +++++++++++++++++++
  12. include/opcode/riscv.h | 12 ++
  13. opcodes/riscv-opc.c | 316 +++++++++++++++++++++++++++++
  14. 8 files changed, 774 insertions(+)
  15. diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c
  16. index 70cbc8190f..e5d8070b75 100644
  17. --- a/gas/config/tc-riscv.c
  18. +++ b/gas/config/tc-riscv.c
  19. @@ -343,6 +343,30 @@ riscv_multi_subset_supports (enum riscv_insn_class insn_class)
  20. case INSN_CLASS_ZBC:
  21. return riscv_subset_supports ("zbc");
  22. + case INSN_CLASS_ZBE:
  23. + return riscv_subset_supports ("zbe");
  24. + case INSN_CLASS_ZBF:
  25. + return riscv_subset_supports ("zbf");
  26. + case INSN_CLASS_ZBM:
  27. + return riscv_subset_supports ("zbm");
  28. + case INSN_CLASS_ZBP:
  29. + return riscv_subset_supports ("zbp");
  30. + case INSN_CLASS_ZBR:
  31. + return riscv_subset_supports ("zbr");
  32. + case INSN_CLASS_ZBS:
  33. + return riscv_subset_supports ("zbs");
  34. + case INSN_CLASS_ZBT:
  35. + return riscv_subset_supports ("zbt");
  36. + case INSN_CLASS_ZBB_OR_ZBP:
  37. + return (riscv_subset_supports ("zbb") || riscv_subset_supports ("zbp"));
  38. + case INSN_CLASS_ZBS_OR_ZBE:
  39. + return (riscv_subset_supports ("zbs") || riscv_subset_supports ("zbe"));
  40. + case INSN_CLASS_ZBP_OR_ZBM:
  41. + return (riscv_subset_supports ("zbp") || riscv_subset_supports ("zbm"));
  42. + case INSN_CLASS_ZBP_OR_ZBE_OR_ZBF:
  43. + return (riscv_subset_supports ("zbp") || riscv_subset_supports ("zbe") || riscv_subset_supports ("zbf"));
  44. + case INSN_CLASS_ZBP_OR_ZBE_OR_ZBF_OR_ZBM:
  45. + return (riscv_subset_supports ("zbp") || riscv_subset_supports ("zbe") || riscv_subset_supports ("zbf") || riscv_subset_supports ("zbm"));
  46. default:
  47. as_fatal ("internal: unreachable");
  48. return false;
  49. diff --git a/gas/testsuite/gas/riscv/b-ext-64.d b/gas/testsuite/gas/riscv/b-ext-64.d
  50. index f4a7abf02d..d1b512b9e9 100644
  51. --- a/gas/testsuite/gas/riscv/b-ext-64.d
  52. +++ b/gas/testsuite/gas/riscv/b-ext-64.d
  53. @@ -46,3 +46,72 @@ Disassembly of section .text:
  54. [ ]+8c:[ ]+08c5853b[ ]+add.uw[ ]+a0,a1,a2
  55. [ ]+90:[ ]+0805853b[ ]+zext.w[ ]+a0,a1
  56. [ ]+94:[ ]+0825951b[ ]+slli.uw[ ]+a0,a1,0x2
  57. +[ ]+98:[ ]+08c5c533[ ]+pack[ ]+a0,a1,a2
  58. +[ ]+9c:[ ]+48c5c533[ ]+packu[ ]+a0,a1,a2
  59. +[ ]+a0:[ ]+08c5f533[ ]+packh[ ]+a0,a1,a2
  60. +[ ]+a4:[ ]+0825c53b[ ]+packw[ ]+a0,a1,0x2
  61. +[ ]+a8:[ ]+4825c53b[ ]+packuw[ ]+a0,a1,0x2
  62. +[ ]+ac:[ ]+68c5d533[ ]+grev[ ]+a0,a1,a2
  63. +[ ]+b0:[ ]+6825d513[ ]+rev2.n[ ]+a0,a1
  64. +[ ]+b4:[ ]+6825d53b[ ]+grevw[ ]+a0,a1,0x2
  65. +[ ]+b8:[ ]+6825d51b[ ]+greviw[ ]+a0,a1,0x2
  66. +[ ]+bc:[ ]+28c5d533[ ]+gorc[ ]+a0,a1,a2
  67. +[ ]+c0:[ ]+2825d513[ ]+orc2.n[ ]+a0,a1
  68. +[ ]+c4:[ ]+2825d53b[ ]+gorcw[ ]+a0,a1,0x2
  69. +[ ]+c8:[ ]+2825d51b[ ]+gorciw[ ]+a0,a1,0x2
  70. +[ ]+cc:[ ]+08c59533[ ]+shfl[ ]+a0,a1,a2
  71. +[ ]+d0:[ ]+08259513[ ]+zip2.b[ ]+a0,a1
  72. +[ ]+d4:[ ]+0825953b[ ]+shflw[ ]+a0,a1,0x2
  73. +[ ]+d8:[ ]+08c5d533[ ]+unshfl[ ]+a0,a1,a2
  74. +[ ]+dc:[ ]+0825d513[ ]+unzip2.b[ ]+a0,a1
  75. +[ ]+e0:[ ]+0825d53b[ ]+unshflw[ ]+a0,a1,0x2
  76. +[ ]+e4:[ ]+28c5a533[ ]+xperm.n[ ]+a0,a1,a2
  77. +[ ]+e8:[ ]+28c5c533[ ]+xperm.b[ ]+a0,a1,a2
  78. +[ ]+ec:[ ]+28c5e533[ ]+xperm.h[ ]+a0,a1,a2
  79. +[ ]+f0:[ ]+28258533[ ]+xperm.w[ ]+a0,a1,0x2
  80. +[ ]+f4:[ ]+28c59533[ ]+bset[ ]+a0,a1,a2
  81. +[ ]+f8:[ ]+48c59533[ ]+bclr[ ]+a0,a1,a2
  82. +[ ]+fc:[ ]+68c59533[ ]+binv[ ]+a0,a1,a2
  83. +[ ]+100:[ ]+48c5d533[ ]+bext[ ]+a0,a1,a2
  84. +[ ]+104:[ ]+48c5e533[ ]+bdecompress[ ]+a0,a1,a2
  85. +[ ]+108:[ ]+28259513[ ]+bseti[ ]+a0,a1,0x2
  86. +[ ]+10c:[ ]+48259513[ ]+bclri[ ]+a0,a1,0x2
  87. +[ ]+110:[ ]+68259513[ ]+binvi[ ]+a0,a1,0x2
  88. +[ ]+114:[ ]+4825d513[ ]+bexti[ ]+a0,a1,0x2
  89. +[ ]+118:[ ]+28c5953b[ ]+bsetw[ ]+a0,a1,a2
  90. +[ ]+11c:[ ]+48c5953b[ ]+bclrw[ ]+a0,a1,a2
  91. +[ ]+120:[ ]+68c5953b[ ]+binvw[ ]+a0,a1,a2
  92. +[ ]+124:[ ]+48c5d53b[ ]+bextw[ ]+a0,a1,a2
  93. +[ ]+128:[ ]+4825e53b[ ]+bdecompressw[ ]+a0,a1,0x2
  94. +[ ]+12c:[ ]+2825951b[ ]+bsetiw[ ]+a0,a1,0x2
  95. +[ ]+130:[ ]+4825951b[ ]+bclriw[ ]+a0,a1,0x2
  96. +[ ]+134:[ ]+6825951b[ ]+binviw[ ]+a0,a1,0x2
  97. +[ ]+138:[ ]+20c59533[ ]+slo[ ]+a0,a1,a2
  98. +[ ]+13c:[ ]+20c5d533[ ]+sro[ ]+a0,a1,a2
  99. +[ ]+140:[ ]+20259513[ ]+sloi[ ]+a0,a1,0x2
  100. +[ ]+144:[ ]+2025d513[ ]+sroi[ ]+a0,a1,0x2
  101. +[ ]+148:[ ]+2025953b[ ]+slow[ ]+a0,a1,0x2
  102. +[ ]+14c:[ ]+2025d53b[ ]+srow[ ]+a0,a1,0x2
  103. +[ ]+150:[ ]+2025951b[ ]+sloiw[ ]+a0,a1,0x2
  104. +[ ]+154:[ ]+2025d51b[ ]+sroiw[ ]+a0,a1,0x2
  105. +[ ]+158:[ ]+48c5f533[ ]+bfp[ ]+a0,a1,a2
  106. +[ ]+15c:[ ]+4825f53b[ ]+bfpw[ ]+a0,a1,0x2
  107. +[ ]+160:[ ]+08c5b533[ ]+bmator[ ]+a0,a1,a2
  108. +[ ]+164:[ ]+48c5b533[ ]+bmatxor[ ]+a0,a1,a2
  109. +[ ]+168:[ ]+60351513[ ]+bmatflip[ ]+a0,a0
  110. +[ ]+16c:[ ]+61051513[ ]+crc32.b[ ]+a0,a0
  111. +[ ]+170:[ ]+61151513[ ]+crc32.h[ ]+a0,a0
  112. +[ ]+174:[ ]+61251513[ ]+crc32.w[ ]+a0,a0
  113. +[ ]+178:[ ]+61851513[ ]+crc32c.b[ ]+a0,a0
  114. +[ ]+17c:[ ]+61951513[ ]+crc32c.h[ ]+a0,a0
  115. +[ ]+180:[ ]+61a51513[ ]+crc32c.w[ ]+a0,a0
  116. +[ ]+184:[ ]+61351513[ ]+crc32.d[ ]+a0,a0
  117. +[ ]+188:[ ]+61b51513[ ]+crc32c.d[ ]+a0,a0
  118. +[ ]+18c:[ ]+6ec59533[ ]+cmix[ ]+a0,a1,a2,a3
  119. +[ ]+190:[ ]+6ec5d533[ ]+cmov[ ]+a0,a1,a2,a3
  120. +[ ]+194:[ ]+6cc59533[ ]+fsl[ ]+a0,a1,a2,a3
  121. +[ ]+198:[ ]+6cc5d533[ ]+fsr[ ]+a0,a1,a2,a3
  122. +[ ]+19c:[ ]+6c25d513[ ]+fsri[ ]+a0,a1,0x2,a3
  123. +[ ]+1a0:[ ]+6c25953b[ ]+fslw[ ]+a0,a1,0x2,a3
  124. +[ ]+1a4:[ ]+6c25d53b[ ]+fsrw[ ]+a0,a1,0x2,a3
  125. +[ ]+1a8:[ ]+6c25d51b[ ]+fsriw[ ]+a0,a1,0x2,a3
  126. \ No newline at end of file
  127. diff --git a/gas/testsuite/gas/riscv/b-ext-64.s b/gas/testsuite/gas/riscv/b-ext-64.s
  128. index c3ac377f4b..23b1cbe473 100644
  129. --- a/gas/testsuite/gas/riscv/b-ext-64.s
  130. +++ b/gas/testsuite/gas/riscv/b-ext-64.s
  131. @@ -37,3 +37,72 @@ target:
  132. add.uw a0, a1, a2
  133. zext.w a0, a1
  134. slli.uw a0, a1, 2
  135. + pack a0, a1, a2
  136. + packu a0, a1, a2
  137. + packh a0, a1, a2
  138. + packw a0, a1, 2
  139. + packuw a0, a1, 2
  140. + grev a0, a1, a2
  141. + grevi a0, a1, 2
  142. + grevw a0, a1, 2
  143. + greviw a0, a1, 2
  144. + gorc a0, a1, a2
  145. + gorci a0, a1, 2
  146. + gorcw a0, a1, 2
  147. + gorciw a0, a1, 2
  148. + shfl a0, a1, a2
  149. + shfli a0, a1, 2
  150. + shflw a0, a1, 2
  151. + unshfl a0, a1, a2
  152. + unshfli a0, a1, 2
  153. + unshflw a0, a1, 2
  154. + xperm.n a0, a1, a2
  155. + xperm.b a0, a1, a2
  156. + xperm.h a0, a1, a2
  157. + xperm.w a0, a1, 2
  158. + bset a0, a1, a2
  159. + bclr a0, a1, a2
  160. + binv a0, a1, a2
  161. + bext a0, a1, a2
  162. + bdecompress a0, a1, a2
  163. + bseti a0, a1, 2
  164. + bclri a0, a1, 2
  165. + binvi a0, a1, 2
  166. + bexti a0, a1, 2
  167. + bsetw a0, a1, a2
  168. + bclrw a0, a1, a2
  169. + binvw a0, a1, a2
  170. + bextw a0, a1, a2
  171. + bdecompressw a0, a1, 2
  172. + bsetiw a0, a1, 2
  173. + bclriw a0, a1, 2
  174. + binviw a0, a1, 2
  175. + slo a0, a1, a2
  176. + sro a0, a1, a2
  177. + sloi a0, a1, 2
  178. + sroi a0, a1, 2
  179. + slow a0, a1, 2
  180. + srow a0, a1, 2
  181. + sloiw a0, a1, 2
  182. + sroiw a0, a1, 2
  183. + bfp a0, a1, a2
  184. + bfpw a0, a1, 2
  185. + bmator a0, a1, a2
  186. + bmatxor a0, a1, a2
  187. + bmatflip a0, a0
  188. + crc32.b a0, a0
  189. + crc32.h a0, a0
  190. + crc32.w a0, a0
  191. + crc32c.b a0, a0
  192. + crc32c.h a0, a0
  193. + crc32c.w a0, a0
  194. + crc32.d a0, a0
  195. + crc32c.d a0, a0
  196. + cmix a0, a1, a2, a3
  197. + cmov a0, a1, a2, a3
  198. + fsl a0, a1, a2, a3
  199. + fsr a0, a1, a2, a3
  200. + fsri a0, a1, 2, a3
  201. + fslw a0, a1, 2, a3
  202. + fsrw a0, a1, 2, a3
  203. + fsriw a0, a1, 2, a3
  204. \ No newline at end of file
  205. diff --git a/gas/testsuite/gas/riscv/b-ext.d b/gas/testsuite/gas/riscv/b-ext.d
  206. index 7410796a3b..059a8fa146 100644
  207. --- a/gas/testsuite/gas/riscv/b-ext.d
  208. +++ b/gas/testsuite/gas/riscv/b-ext.d
  209. @@ -33,3 +33,42 @@ Disassembly of section .text:
  210. [ ]+58:[ ]+0ac59533[ ]+clmul[ ]+a0,a1,a2
  211. [ ]+5c:[ ]+0ac5b533[ ]+clmulh[ ]+a0,a1,a2
  212. [ ]+60:[ ]+0ac5a533[ ]+clmulr[ ]+a0,a1,a2
  213. +[ ]+64:[ ]+08c5c533[ ]+pack[ ]+a0,a1,a2
  214. +[ ]+68:[ ]+48c5c533[ ]+packu[ ]+a0,a1,a2
  215. +[ ]+6c:[ ]+08c5f533[ ]+packh[ ]+a0,a1,a2
  216. +[ ]+70:[ ]+68c5d533[ ]+grev[ ]+a0,a1,a2
  217. +[ ]+74:[ ]+6825d513[ ]+rev2.n[ ]+a0,a1
  218. +[ ]+78:[ ]+28c5d533[ ]+gorc[ ]+a0,a1,a2
  219. +[ ]+7c:[ ]+2825d513[ ]+orc2.n[ ]+a0,a1
  220. +[ ]+80:[ ]+08c59533[ ]+shfl[ ]+a0,a1,a2
  221. +[ ]+84:[ ]+08259513[ ]+zip2.b[ ]+a0,a1
  222. +[ ]+88:[ ]+08c5d533[ ]+unshfl[ ]+a0,a1,a2
  223. +[ ]+8c:[ ]+0825d513[ ]+unzip2.b[ ]+a0,a1
  224. +[ ]+90:[ ]+28c5a533[ ]+xperm.n[ ]+a0,a1,a2
  225. +[ ]+94:[ ]+28c5c533[ ]+xperm.b[ ]+a0,a1,a2
  226. +[ ]+98:[ ]+28c5e533[ ]+xperm.h[ ]+a0,a1,a2
  227. +[ ]+9c:[ ]+28c59533[ ]+bset[ ]+a0,a1,a2
  228. +[ ]+a0:[ ]+48c59533[ ]+bclr[ ]+a0,a1,a2
  229. +[ ]+a4:[ ]+68c59533[ ]+binv[ ]+a0,a1,a2
  230. +[ ]+a8:[ ]+48c5d533[ ]+bext[ ]+a0,a1,a2
  231. +[ ]+ac:[ ]+48c5e533[ ]+bdecompress[ ]+a0,a1,a2
  232. +[ ]+b0:[ ]+28259513[ ]+bseti[ ]+a0,a1,0x2
  233. +[ ]+b4:[ ]+48259513[ ]+bclri[ ]+a0,a1,0x2
  234. +[ ]+b8:[ ]+68259513[ ]+binvi[ ]+a0,a1,0x2
  235. +[ ]+bc:[ ]+4825d513[ ]+bexti[ ]+a0,a1,0x2
  236. +[ ]+c0:[ ]+20c59533[ ]+slo[ ]+a0,a1,a2
  237. +[ ]+c4:[ ]+20c5d533[ ]+sro[ ]+a0,a1,a2
  238. +[ ]+c8:[ ]+20259513[ ]+sloi[ ]+a0,a1,0x2
  239. +[ ]+cc:[ ]+2025d513[ ]+sroi[ ]+a0,a1,0x2
  240. +[ ]+d0:[ ]+48c5f533[ ]+bfp[ ]+a0,a1,a2
  241. +[ ]+d4:[ ]+61051513[ ]+crc32.b[ ]+a0,a0
  242. +[ ]+d8:[ ]+61151513[ ]+crc32.h[ ]+a0,a0
  243. +[ ]+dc:[ ]+61251513[ ]+crc32.w[ ]+a0,a0
  244. +[ ]+e0:[ ]+61851513[ ]+crc32c.b[ ]+a0,a0
  245. +[ ]+e4:[ ]+61951513[ ]+crc32c.h[ ]+a0,a0
  246. +[ ]+e8:[ ]+61a51513[ ]+crc32c.w[ ]+a0,a0
  247. +[ ]+ec:[ ]+6ec59533[ ]+cmix[ ]+a0,a1,a2,a3
  248. +[ ]+f0:[ ]+6ec5d533[ ]+cmov[ ]+a0,a1,a2,a3
  249. +[ ]+f4:[ ]+6cc59533[ ]+fsl[ ]+a0,a1,a2,a3
  250. +[ ]+f8:[ ]+6cc5d533[ ]+fsr[ ]+a0,a1,a2,a3
  251. +[ ]+fc:[ ]+6c25d513[ ]+fsri[ ]+a0,a1,0x2,a3
  252. \ No newline at end of file
  253. diff --git a/gas/testsuite/gas/riscv/b-ext.s b/gas/testsuite/gas/riscv/b-ext.s
  254. index 051dafd171..041af79bbd 100644
  255. --- a/gas/testsuite/gas/riscv/b-ext.s
  256. +++ b/gas/testsuite/gas/riscv/b-ext.s
  257. @@ -24,3 +24,42 @@ target:
  258. clmul a0, a1, a2
  259. clmulh a0, a1, a2
  260. clmulr a0, a1, a2
  261. + pack a0, a1, a2
  262. + packu a0, a1, a2
  263. + packh a0, a1, a2
  264. + grev a0, a1, a2
  265. + grevi a0, a1, 2
  266. + gorc a0, a1, a2
  267. + gorci a0, a1, 2
  268. + shfl a0, a1, a2
  269. + shfli a0, a1, 2
  270. + unshfl a0, a1, a2
  271. + unshfli a0, a1, 2
  272. + xperm.n a0, a1, a2
  273. + xperm.b a0, a1, a2
  274. + xperm.h a0, a1, a2
  275. + bset a0, a1, a2
  276. + bclr a0, a1, a2
  277. + binv a0, a1, a2
  278. + bext a0, a1, a2
  279. + bdecompress a0, a1, a2
  280. + bseti a0, a1, 2
  281. + bclri a0, a1, 2
  282. + binvi a0, a1, 2
  283. + bexti a0, a1, 2
  284. + slo a0, a1, a2
  285. + sro a0, a1, a2
  286. + sloi a0, a1, 2
  287. + sroi a0, a1, 2
  288. + bfp a0, a1, a2
  289. + crc32.b a0, a0
  290. + crc32.h a0, a0
  291. + crc32.w a0, a0
  292. + crc32c.b a0, a0
  293. + crc32c.h a0, a0
  294. + crc32c.w a0, a0
  295. + cmix a0, a1, a2, a3
  296. + cmov a0, a1, a2, a3
  297. + fsl a0, a1, a2, a3
  298. + fsr a0, a1, a2, a3
  299. + fsri a0, a1, 2, a3
  300. \ No newline at end of file
  301. diff --git a/include/opcode/riscv-opc.h b/include/opcode/riscv-opc.h
  302. index 9999da6241..1a80dbf87d 100644
  303. --- a/include/opcode/riscv-opc.h
  304. +++ b/include/opcode/riscv-opc.h
  305. @@ -113,6 +113,18 @@
  306. #define MASK_SRL 0xfe00707f
  307. #define MATCH_SRA 0x40005033
  308. #define MASK_SRA 0xfe00707f
  309. +#define MATCH_SLO 0x20001033
  310. +#define MASK_SLO 0xfe00707f
  311. +#define MATCH_SLOI 0x20001013
  312. +#define MASK_SLOI 0xfc00707f
  313. +#define MATCH_SLOW 0x2000103b
  314. +#define MASK_SLOW 0xfe00707f
  315. +#define MATCH_SRO 0x20005033
  316. +#define MASK_SRO 0xfe00707f
  317. +#define MATCH_SROI 0x20005013
  318. +#define MASK_SROI 0xfc00707f
  319. +#define MATCH_SROW 0x2000503b
  320. +#define MASK_SROW 0xfe00707f
  321. #define MATCH_OR 0x6033
  322. #define MASK_OR 0xfe00707f
  323. #define MATCH_AND 0x7033
  324. @@ -429,6 +441,24 @@
  325. #define MASK_CTZ 0xfff0707f
  326. #define MATCH_CPOP 0x60201013
  327. #define MASK_CPOP 0xfff0707f
  328. +#define MATCH_BMATFLIP 0x60301013
  329. +#define MASK_BMATFLIP 0xfff0707f
  330. +#define MATCH_CRC32_B 0x61001013
  331. +#define MASK_CRC32_B 0xfff0707f
  332. +#define MATCH_CRC32_H 0x61101013
  333. +#define MASK_CRC32_H 0xfff0707f
  334. +#define MATCH_CRC32_W 0x61201013
  335. +#define MASK_CRC32_W 0xfff0707f
  336. +#define MATCH_CRC32_D 0x61301013
  337. +#define MASK_CRC32_D 0xfff0707f
  338. +#define MATCH_CRC32C_B 0x61801013
  339. +#define MASK_CRC32C_B 0xfff0707f
  340. +#define MATCH_CRC32C_H 0x61901013
  341. +#define MASK_CRC32C_H 0xfff0707f
  342. +#define MATCH_CRC32C_W 0x61A01013
  343. +#define MASK_CRC32C_W 0xfff0707f
  344. +#define MATCH_CRC32C_D 0x61B01013
  345. +#define MASK_CRC32C_D 0xfff0707f
  346. #define MATCH_MIN 0xa004033
  347. #define MASK_MIN 0xfe00707f
  348. #define MATCH_MINU 0xa005033
  349. @@ -437,14 +467,38 @@
  350. #define MASK_MAX 0xfe00707f
  351. #define MATCH_MAXU 0xa007033
  352. #define MASK_MAXU 0xfe00707f
  353. +#define MATCH_SHFL 0x8001033
  354. +#define MASK_SHFL 0xfe00707f
  355. +#define MATCH_SHFLI 0x8001013
  356. +#define MASK_SHFLI 0xfc00707f
  357. +#define MATCH_UNSHFL 0x8005033
  358. +#define MASK_UNSHFL 0xfe00707f
  359. +#define MATCH_UNSHFLI 0x8005013
  360. +#define MASK_UNSHFLI 0xfc00707f
  361. +#define MATCH_BCOMPRESS 0x8006033
  362. +#define MASK_BCOMPRESS 0xfe00707f
  363. +#define MATCH_BDECOMPRESS 0x48006033
  364. +#define MASK_BDECOMPRESS 0xfe00707f
  365. #define MATCH_SEXT_B 0x60401013
  366. #define MASK_SEXT_B 0xfff0707f
  367. #define MATCH_SEXT_H 0x60501013
  368. #define MASK_SEXT_H 0xfff0707f
  369. #define MATCH_PACK 0x8004033
  370. #define MASK_PACK 0xfe00707f
  371. +#define MATCH_PACKU 0x48004033
  372. +#define MASK_PACKU 0xfe00707f
  373. +#define MATCH_BMATOR 0x8003033
  374. +#define MASK_BMATOR 0xfe00707f
  375. +#define MATCH_BMATXOR 0x48003033
  376. +#define MASK_BMATXOR 0xfe00707f
  377. +#define MATCH_PACKH 0x8007033
  378. +#define MASK_PACKH 0xfe00707f
  379. +#define MATCH_BFP 0x48007033
  380. +#define MASK_BFP 0xfe00707f
  381. #define MATCH_PACKW 0x800403b
  382. #define MASK_PACKW 0xfe00707f
  383. +#define MATCH_PACKUW 0x4800403b
  384. +#define MASK_PACKUW 0xfe00707f
  385. #define MATCH_ANDN 0x40007033
  386. #define MASK_ANDN 0xfe00707f
  387. #define MATCH_ORN 0x40006033
  388. @@ -457,10 +511,40 @@
  389. #define MASK_ROR 0xfe00707f
  390. #define MATCH_RORI 0x60005013
  391. #define MASK_RORI 0xfc00707f
  392. +#define MATCH_BCLR 0x48001033
  393. +#define MASK_BCLR 0xfe00707f
  394. +#define MATCH_BCLRI 0x48001013
  395. +#define MASK_BCLRI 0xfc00707f
  396. +#define MATCH_BSET 0x28001033
  397. +#define MASK_BSET 0xfe00707f
  398. +#define MATCH_BSETI 0x28001013
  399. +#define MASK_BSETI 0xfc00707f
  400. +#define MATCH_BINV 0x68001033
  401. +#define MASK_BINV 0xfe00707f
  402. +#define MATCH_BINVI 0x68001013
  403. +#define MASK_BINVI 0xfc00707f
  404. +#define MATCH_BEXT 0x48005033
  405. +#define MASK_BEXT 0xfe00707f
  406. +#define MATCH_BEXTI 0x48005013
  407. +#define MASK_BEXTI 0xfc00707f
  408. +#define MATCH_GREV 0x68005033
  409. +#define MASK_GREV 0xfe00707f
  410. #define MATCH_GREVI 0x68005013
  411. #define MASK_GREVI 0xfc00707f
  412. +#define MATCH_GORC 0x28005033
  413. +#define MASK_GORC 0xfe00707f
  414. #define MATCH_GORCI 0x28005013
  415. #define MASK_GORCI 0xfc00707f
  416. +#define MATCH_CMIX 0x6001033
  417. +#define MASK_CMIX 0x600707f
  418. +#define MATCH_CMOV 0x6005033
  419. +#define MASK_CMOV 0x600707f
  420. +#define MATCH_FSL 0x4001033
  421. +#define MASK_FSL 0x600707f
  422. +#define MATCH_FSR 0x4005033
  423. +#define MASK_FSR 0x600707f
  424. +#define MATCH_FSRI 0x4005013
  425. +#define MASK_FSRI 0x400707f
  426. #define MATCH_CLZW 0x6000101b
  427. #define MASK_CLZW 0xfff0707f
  428. #define MATCH_CTZW 0x6010101b
  429. @@ -485,6 +569,56 @@
  430. #define MASK_SH2ADD_UW 0xfe00707f
  431. #define MATCH_SH3ADD_UW 0x2000603b
  432. #define MASK_SH3ADD_UW 0xfe00707f
  433. +#define MATCH_BCLRW 0x4800103b
  434. +#define MASK_BCLRW 0xfe00707f
  435. +#define MATCH_BSETW 0x2800103b
  436. +#define MASK_BSETW 0xfe00707f
  437. +#define MATCH_BINVW 0x6800103b
  438. +#define MASK_BINVW 0xfe00707f
  439. +#define MATCH_BEXTW 0x4800503b
  440. +#define MASK_BEXTW 0xfe00707f
  441. +#define MATCH_GORCW 0x2800503b
  442. +#define MASK_GORCW 0xfe00707f
  443. +#define MATCH_GREVW 0x6800503b
  444. +#define MASK_GREVW 0xfe00707f
  445. +#define MATCH_SLOIW 0x2000101b
  446. +#define MASK_SLOIW 0xfe00707f
  447. +#define MATCH_SROIW 0x2000501b
  448. +#define MASK_SROIW 0xfe00707f
  449. +#define MATCH_BCLRIW 0x4800101b
  450. +#define MASK_BCLRIW 0xfe00707f
  451. +#define MATCH_BSETIW 0x2800101b
  452. +#define MASK_BSETIW 0xfe00707f
  453. +#define MATCH_BINVIW 0x6800101b
  454. +#define MASK_BINVIW 0xfe00707f
  455. +#define MATCH_GORCIW 0x2800501b
  456. +#define MASK_GORCIW 0xfe00707f
  457. +#define MATCH_GREVIW 0x6800501b
  458. +#define MASK_GREVIW 0xfe00707f
  459. +#define MATCH_FSLW 0x400103b
  460. +#define MASK_FSLW 0x600707f
  461. +#define MATCH_FSRW 0x400503B
  462. +#define MASK_FSRW 0x600707f
  463. +#define MATCH_FSRIW 0x400501B
  464. +#define MASK_FSRIW 0x600707f
  465. +#define MATCH_SHFLW 0x800103b
  466. +#define MASK_SHFLW 0xfe00707f
  467. +#define MATCH_UNSHFLW 0x800503b
  468. +#define MASK_UNSHFLW 0xfe00707f
  469. +#define MATCH_BCOMPRESSW 0x800603B
  470. +#define MASK_BCOMPRESSW 0xfe00707f
  471. +#define MATCH_BDECOMPRESSW 0x4800603b
  472. +#define MASK_BDECOMPRESSW 0xfe00707f
  473. +#define MATCH_BFPW 0x4800703b
  474. +#define MASK_BFPW 0xfe00707f
  475. +#define MATCH_XPERM_N 0x28002033
  476. +#define MASK_XPERM_N 0xfe00707f
  477. +#define MATCH_XPERM_B 0x28004033
  478. +#define MASK_XPERM_B 0xfe00707f
  479. +#define MATCH_XPERM_H 0x28006033
  480. +#define MASK_XPERM_H 0xfe00707f
  481. +#define MATCH_XPERM_W 0x28000033
  482. +#define MASK_XPERM_W 0xfe00707f
  483. #define MATCH_ADD_UW 0x800003b
  484. #define MASK_ADD_UW 0xfe00707f
  485. #define MATCH_SLLI_UW 0x800101b
  486. @@ -1102,6 +1236,78 @@ DECLARE_INSN(slli_uw, MATCH_SLLI_UW, MASK_SLLI_UW)
  487. DECLARE_INSN(clmul, MATCH_CLMUL, MASK_CLMUL)
  488. DECLARE_INSN(clmulh, MATCH_CLMULH, MASK_CLMULH)
  489. DECLARE_INSN(clmulr, MATCH_CLMULR, MASK_CLMULR)
  490. +DECLARE_INSN(pack, MATCH_PACK, MASK_PACK)
  491. +DECLARE_INSN(packu, MATCH_PACKU, MASK_PACKU)
  492. +DECLARE_INSN(packh, MATCH_PACKH, MASK_PACKH)
  493. +DECLARE_INSN(packw, MATCH_PACKW, MASK_PACKW)
  494. +DECLARE_INSN(packuw, MATCH_PACKUW, MASK_PACKUW)
  495. +DECLARE_INSN(grev, MATCH_GREV, MASK_GREV)
  496. +DECLARE_INSN(grevi, MATCH_GREVI, MASK_GREVI)
  497. +DECLARE_INSN(grevw, MATCH_GREVW, MASK_GREVW)
  498. +DECLARE_INSN(greviw, MATCH_GREVIW, MASK_GREVIW)
  499. +DECLARE_INSN(gorc, MATCH_GORC, MASK_GORC)
  500. +DECLARE_INSN(gorci, MATCH_GORCI, MASK_GORCI)
  501. +DECLARE_INSN(gorcw, MATCH_GORCW, MASK_GORCW)
  502. +DECLARE_INSN(gorciw, MATCH_GORCIW, MASK_GORCIW)
  503. +DECLARE_INSN(shfl, MATCH_SHFL, MASK_SHFL)
  504. +DECLARE_INSN(shfli, MATCH_SHFLI, MASK_SHFLI)
  505. +DECLARE_INSN(shflw, MATCH_SHFLW, MASK_SHFLW)
  506. +DECLARE_INSN(unshfl, MATCH_UNSHFL, MASK_UNSHFL)
  507. +DECLARE_INSN(unshfli, MATCH_UNSHFLI, MASK_UNSHFLI)
  508. +DECLARE_INSN(unshflw, MATCH_UNSHFLW, MASK_UNSHFLW)
  509. +DECLARE_INSN(xperm_n, MATCH_XPERM_N, MASK_XPERM_N)
  510. +DECLARE_INSN(xperm_b, MATCH_XPERM_B, MASK_XPERM_B)
  511. +DECLARE_INSN(xperm_h, MATCH_XPERM_H, MASK_XPERM_H)
  512. +DECLARE_INSN(xperm_w, MATCH_XPERM_W, MASK_XPERM_W)
  513. +DECLARE_INSN(bset, MATCH_BSET, MASK_BSET)
  514. +DECLARE_INSN(bclr, MATCH_BCLR, MASK_BCLR)
  515. +DECLARE_INSN(binv, MATCH_BINV, MASK_BINV)
  516. +DECLARE_INSN(bext, MATCH_BEXT, MASK_BEXT)
  517. +DECLARE_INSN(bcompress, MATCH_BCOMPRESS, MASK_BCOMPRESS)
  518. +DECLARE_INSN(bdecompress, MATCH_BDECOMPRESS, MASK_BDECOMPRESS)
  519. +DECLARE_INSN(bseti, MATCH_BSETI, MASK_BSETI)
  520. +DECLARE_INSN(bclri, MATCH_BCLRI, MASK_BCLRI)
  521. +DECLARE_INSN(binvi, MATCH_BINVI, MASK_BINVI)
  522. +DECLARE_INSN(bexti, MATCH_BEXTI, MASK_BEXTI)
  523. +DECLARE_INSN(bsetw, MATCH_BSETW, MASK_BSETW)
  524. +DECLARE_INSN(bclrw, MATCH_BCLRW, MASK_BCLRW)
  525. +DECLARE_INSN(binvw, MATCH_BINVW, MASK_BINVW)
  526. +DECLARE_INSN(bextw, MATCH_BEXTW, MASK_BEXTW)
  527. +DECLARE_INSN(bcompressw, MATCH_BCOMPRESSW, MASK_BCOMPRESSW)
  528. +DECLARE_INSN(bdecompressw, MATCH_BDECOMPRESSW, MASK_BDECOMPRESSW)
  529. +DECLARE_INSN(bsetiw, MATCH_BSETIW, MASK_BSETIW)
  530. +DECLARE_INSN(bclriw, MATCH_BCLRIW, MASK_BCLRIW)
  531. +DECLARE_INSN(binviw, MATCH_BINVIW, MASK_BINVIW)
  532. +DECLARE_INSN(slo, MATCH_SLO, MASK_SLO)
  533. +DECLARE_INSN(sro, MATCH_SRO, MASK_SRO)
  534. +DECLARE_INSN(sloi, MATCH_SLOI, MASK_SLOI)
  535. +DECLARE_INSN(sroi, MATCH_SROI, MASK_SROI)
  536. +DECLARE_INSN(slow, MATCH_SLOW, MASK_SLOW)
  537. +DECLARE_INSN(srow, MATCH_SROW, MASK_SROW)
  538. +DECLARE_INSN(sloiw, MATCH_SLOIW, MASK_SLOIW)
  539. +DECLARE_INSN(sroiw, MATCH_SROIW, MASK_SROIW)
  540. +DECLARE_INSN(bfp, MATCH_BFP, MASK_BFP)
  541. +DECLARE_INSN(bfpw, MATCH_BFPW, MASK_BFPW)
  542. +DECLARE_INSN(bmator, MATCH_BMATOR, MASK_BMATOR)
  543. +DECLARE_INSN(bmatxor, MATCH_BMATXOR, MASK_BMATXOR)
  544. +DECLARE_INSN(bmatflip, MATCH_BMATFLIP, MASK_BMATFLIP)
  545. +DECLARE_INSN(crc32_b, MATCH_CRC32_B, MASK_CRC32_B)
  546. +DECLARE_INSN(crc32_h, MATCH_CRC32_H, MASK_CRC32_H)
  547. +DECLARE_INSN(crc32_w, MATCH_CRC32_W, MASK_CRC32_W)
  548. +DECLARE_INSN(crc32c_b, MATCH_CRC32C_B, MASK_CRC32C_B)
  549. +DECLARE_INSN(crc32c_h, MATCH_CRC32C_H, MASK_CRC32C_H)
  550. +DECLARE_INSN(crc32c_w, MATCH_CRC32C_W, MASK_CRC32C_W)
  551. +DECLARE_INSN(crc32_d, MATCH_CRC32_D, MASK_CRC32_D)
  552. +DECLARE_INSN(crc32c_d, MATCH_CRC32C_D, MASK_CRC32C_D)
  553. +DECLARE_INSN(cmix, MATCH_CMIX, MASK_CMIX)
  554. +DECLARE_INSN(cmov, MATCH_CMOV, MASK_CMOV)
  555. +DECLARE_INSN(fsl, MATCH_FSL, MASK_FSL)
  556. +DECLARE_INSN(fsr, MATCH_FSR, MASK_FSR)
  557. +DECLARE_INSN(fsri, MATCH_FSRI, MASK_FSRI)
  558. +DECLARE_INSN(fslw, MATCH_FSLW, MASK_FSLW)
  559. +DECLARE_INSN(fsrw, MATCH_FSRW, MASK_FSRW)
  560. +DECLARE_INSN(fsriw, MATCH_FSRIW, MASK_FSRIW)
  561. +DECLARE_INSN(flh, MATCH_FLH, MASK_FLH)
  562. DECLARE_INSN(flw, MATCH_FLW, MASK_FLW)
  563. DECLARE_INSN(fld, MATCH_FLD, MASK_FLD)
  564. DECLARE_INSN(flq, MATCH_FLQ, MASK_FLQ)
  565. diff --git a/include/opcode/riscv.h b/include/opcode/riscv.h
  566. index fdf3df4f5c..ae8c6bd33f 100644
  567. --- a/include/opcode/riscv.h
  568. +++ b/include/opcode/riscv.h
  569. @@ -319,6 +319,18 @@ enum riscv_insn_class
  570. INSN_CLASS_ZBA,
  571. INSN_CLASS_ZBB,
  572. INSN_CLASS_ZBC,
  573. + INSN_CLASS_ZBP,
  574. + INSN_CLASS_ZBB_OR_ZBP,
  575. + INSN_CLASS_ZBS,
  576. + INSN_CLASS_ZBE,
  577. + INSN_CLASS_ZBS_OR_ZBE,
  578. + INSN_CLASS_ZBF,
  579. + INSN_CLASS_ZBM,
  580. + INSN_CLASS_ZBP_OR_ZBM,
  581. + INSN_CLASS_ZBR,
  582. + INSN_CLASS_ZBT,
  583. + INSN_CLASS_ZBP_OR_ZBE_OR_ZBF,
  584. + INSN_CLASS_ZBP_OR_ZBE_OR_ZBF_OR_ZBM,
  585. };
  586. /* This structure holds information for a particular instruction. */
  587. diff --git a/opcodes/riscv-opc.c b/opcodes/riscv-opc.c
  588. index f55a01b071..3d9240262c 100644
  589. --- a/opcodes/riscv-opc.c
  590. +++ b/opcodes/riscv-opc.c
  591. @@ -24,6 +24,130 @@
  592. #include "opcode/riscv.h"
  593. #include <stdio.h>
  594. +#define MASK_SHAMT (OP_MASK_SHAMT << OP_SH_SHAMT)
  595. +#define MATCH_SHAMT_REV_32 (0b11111 << OP_SH_SHAMT)
  596. +#define MATCH_SHAMT_REV_64 (0b111111 << OP_SH_SHAMT)
  597. +#define MATCH_SHAMT_REV_P_32 (0b00001 << OP_SH_SHAMT)
  598. +#define MATCH_SHAMT_REV_P_64 (0b000001 << OP_SH_SHAMT)
  599. +#define MATCH_SHAMT_REV_N_32 (0b00011 << OP_SH_SHAMT)
  600. +#define MATCH_SHAMT_REV_N_64 (0b000011 << OP_SH_SHAMT)
  601. +#define MATCH_SHAMT_REV_B_32 (0b00111 << OP_SH_SHAMT)
  602. +#define MATCH_SHAMT_REV_B_64 (0b000111 << OP_SH_SHAMT)
  603. +#define MATCH_SHAMT_REV_H_32 (0b01111 << OP_SH_SHAMT)
  604. +#define MATCH_SHAMT_REV_H_64 (0b001111 << OP_SH_SHAMT)
  605. +#define MATCH_SHAMT_REV_W_64 (0b011111 << OP_SH_SHAMT)
  606. +#define MATCH_SHAMT_REV2_32 (0b11110 << OP_SH_SHAMT)
  607. +#define MATCH_SHAMT_REV2_64 (0b111110 << OP_SH_SHAMT)
  608. +#define MATCH_SHAMT_REV2_N_32 (0b00010 << OP_SH_SHAMT)
  609. +#define MATCH_SHAMT_REV2_N_64 (0b000010 << OP_SH_SHAMT)
  610. +#define MATCH_SHAMT_REV2_B_32 (0b00110 << OP_SH_SHAMT)
  611. +#define MATCH_SHAMT_REV2_B_64 (0b000110 << OP_SH_SHAMT)
  612. +#define MATCH_SHAMT_REV2_H_32 (0b01110 << OP_SH_SHAMT)
  613. +#define MATCH_SHAMT_REV2_H_64 (0b001110 << OP_SH_SHAMT)
  614. +#define MATCH_SHAMT_REV2_W_64 (0b011110 << OP_SH_SHAMT)
  615. +#define MATCH_SHAMT_REV4_32 (0b11100 << OP_SH_SHAMT)
  616. +#define MATCH_SHAMT_REV4_64 (0b111100 << OP_SH_SHAMT)
  617. +#define MATCH_SHAMT_REV4_B_32 (0b00100 << OP_SH_SHAMT)
  618. +#define MATCH_SHAMT_REV4_B_64 (0b000100 << OP_SH_SHAMT)
  619. +#define MATCH_SHAMT_REV4_H_32 (0b01100 << OP_SH_SHAMT)
  620. +#define MATCH_SHAMT_REV4_H_64 (0b001100 << OP_SH_SHAMT)
  621. +#define MATCH_SHAMT_REV4_W_64 (0b011100 << OP_SH_SHAMT)
  622. +#define MATCH_SHAMT_REV8_32 (0b11000 << OP_SH_SHAMT)
  623. +#define MATCH_SHAMT_REV8_64 (0b111000 << OP_SH_SHAMT)
  624. +#define MATCH_SHAMT_REV8_H_32 (0b01000 << OP_SH_SHAMT)
  625. +#define MATCH_SHAMT_REV8_H_64 (0b001000 << OP_SH_SHAMT)
  626. +#define MATCH_SHAMT_REV8_W_64 (0b011000 << OP_SH_SHAMT)
  627. +#define MATCH_SHAMT_REV16_32 (0b10000 << OP_SH_SHAMT)
  628. +#define MATCH_SHAMT_REV16_64 (0b110000 << OP_SH_SHAMT)
  629. +#define MATCH_SHAMT_REV16_W_64 (0b010000 << OP_SH_SHAMT)
  630. +#define MATCH_SHAMT_REV32_64 (0b100000 << OP_SH_SHAMT)
  631. +#define MATCH_SHAMT_ZIP_32 (0b1111 << OP_SH_SHAMT)
  632. +#define MATCH_SHAMT_ZIP_64 (0b11111 << OP_SH_SHAMT)
  633. +#define MATCH_SHAMT_ZIP_N_32 (0b0001 << OP_SH_SHAMT)
  634. +#define MATCH_SHAMT_ZIP_N_64 (0b00001 << OP_SH_SHAMT)
  635. +#define MATCH_SHAMT_ZIP_B_32 (0b0011 << OP_SH_SHAMT)
  636. +#define MATCH_SHAMT_ZIP_B_64 (0b00011 << OP_SH_SHAMT)
  637. +#define MATCH_SHAMT_ZIP_H_32 (0b0111 << OP_SH_SHAMT)
  638. +#define MATCH_SHAMT_ZIP_H_64 (0b00111 << OP_SH_SHAMT)
  639. +#define MATCH_SHAMT_ZIP_W_64 (0b01111 << OP_SH_SHAMT)
  640. +#define MATCH_SHAMT_ZIP2_32 (0b1110 << OP_SH_SHAMT)
  641. +#define MATCH_SHAMT_ZIP2_64 (0b11110 << OP_SH_SHAMT)
  642. +#define MATCH_SHAMT_ZIP2_B_32 (0b0010 << OP_SH_SHAMT)
  643. +#define MATCH_SHAMT_ZIP2_B_64 (0b00010 << OP_SH_SHAMT)
  644. +#define MATCH_SHAMT_ZIP2_H_32 (0b0110 << OP_SH_SHAMT)
  645. +#define MATCH_SHAMT_ZIP2_H_64 (0b00110 << OP_SH_SHAMT)
  646. +#define MATCH_SHAMT_ZIP2_W_64 (0b01110 << OP_SH_SHAMT)
  647. +#define MATCH_SHAMT_ZIP4_32 (0b1100 << OP_SH_SHAMT)
  648. +#define MATCH_SHAMT_ZIP4_64 (0b11100 << OP_SH_SHAMT)
  649. +#define MATCH_SHAMT_ZIP4_H_32 (0b0100 << OP_SH_SHAMT)
  650. +#define MATCH_SHAMT_ZIP4_H_64 (0b00100 << OP_SH_SHAMT)
  651. +#define MATCH_SHAMT_ZIP4_W_64 (0b01100 << OP_SH_SHAMT)
  652. +#define MATCH_SHAMT_ZIP8_32 (0b1000 << OP_SH_SHAMT)
  653. +#define MATCH_SHAMT_ZIP8_64 (0b11000 << OP_SH_SHAMT)
  654. +#define MATCH_SHAMT_ZIP8_W_64 (0b01000 << OP_SH_SHAMT)
  655. +#define MATCH_SHAMT_ZIP16_64 (0b10000 << OP_SH_SHAMT)
  656. +#define MATCH_SHAMT_UNZIP_32 (0b1111 << OP_SH_SHAMT)
  657. +#define MATCH_SHAMT_UNZIP_64 (0b11111 << OP_SH_SHAMT)
  658. +#define MATCH_SHAMT_UNZIP_N_32 (0b0001 << OP_SH_SHAMT)
  659. +#define MATCH_SHAMT_UNZIP_N_64 (0b00001 << OP_SH_SHAMT)
  660. +#define MATCH_SHAMT_UNZIP_B_32 (0b0011 << OP_SH_SHAMT)
  661. +#define MATCH_SHAMT_UNZIP_B_64 (0b00011 << OP_SH_SHAMT)
  662. +#define MATCH_SHAMT_UNZIP_H_32 (0b0111 << OP_SH_SHAMT)
  663. +#define MATCH_SHAMT_UNZIP_H_64 (0b00111 << OP_SH_SHAMT)
  664. +#define MATCH_SHAMT_UNZIP_W_64 (0b01111 << OP_SH_SHAMT)
  665. +#define MATCH_SHAMT_UNZIP2_32 (0b1110 << OP_SH_SHAMT)
  666. +#define MATCH_SHAMT_UNZIP2_64 (0b11110 << OP_SH_SHAMT)
  667. +#define MATCH_SHAMT_UNZIP2_B_32 (0b0010 << OP_SH_SHAMT)
  668. +#define MATCH_SHAMT_UNZIP2_B_64 (0b00010 << OP_SH_SHAMT)
  669. +#define MATCH_SHAMT_UNZIP2_H_32 (0b0110 << OP_SH_SHAMT)
  670. +#define MATCH_SHAMT_UNZIP2_H_64 (0b00110 << OP_SH_SHAMT)
  671. +#define MATCH_SHAMT_UNZIP2_W_64 (0b01110 << OP_SH_SHAMT)
  672. +#define MATCH_SHAMT_UNZIP4_32 (0b1100 << OP_SH_SHAMT)
  673. +#define MATCH_SHAMT_UNZIP4_64 (0b11100 << OP_SH_SHAMT)
  674. +#define MATCH_SHAMT_UNZIP4_H_32 (0b0100 << OP_SH_SHAMT)
  675. +#define MATCH_SHAMT_UNZIP4_H_64 (0b00100 << OP_SH_SHAMT)
  676. +#define MATCH_SHAMT_UNZIP4_W_64 (0b01100 << OP_SH_SHAMT)
  677. +#define MATCH_SHAMT_UNZIP8_32 (0b1000 << OP_SH_SHAMT)
  678. +#define MATCH_SHAMT_UNZIP8_64 (0b11000 << OP_SH_SHAMT)
  679. +#define MATCH_SHAMT_UNZIP8_W_64 (0b01000 << OP_SH_SHAMT)
  680. +#define MATCH_SHAMT_UNZIP16_64 (0b10000 << OP_SH_SHAMT)
  681. +#define MATCH_SHAMT_ORC_32 (0b11111 << OP_SH_SHAMT)
  682. +#define MATCH_SHAMT_ORC_64 (0b111111 << OP_SH_SHAMT)
  683. +#define MATCH_SHAMT_ORC_P_32 (0b00001 << OP_SH_SHAMT)
  684. +#define MATCH_SHAMT_ORC_P_64 (0b000001 << OP_SH_SHAMT)
  685. +#define MATCH_SHAMT_ORC_N_32 (0b00011 << OP_SH_SHAMT)
  686. +#define MATCH_SHAMT_ORC_N_64 (0b000011 << OP_SH_SHAMT)
  687. +#define MATCH_SHAMT_ORC_B_32 (0b00111 << OP_SH_SHAMT)
  688. +#define MATCH_SHAMT_ORC_B_64 (0b000111 << OP_SH_SHAMT)
  689. +#define MATCH_SHAMT_ORC_H_32 (0b01111 << OP_SH_SHAMT)
  690. +#define MATCH_SHAMT_ORC_H_64 (0b001111 << OP_SH_SHAMT)
  691. +#define MATCH_SHAMT_ORC_W_64 (0b011111 << OP_SH_SHAMT)
  692. +#define MATCH_SHAMT_ORC2_32 (0b11110 << OP_SH_SHAMT)
  693. +#define MATCH_SHAMT_ORC2_64 (0b111110 << OP_SH_SHAMT)
  694. +#define MATCH_SHAMT_ORC2_N_32 (0b00010 << OP_SH_SHAMT)
  695. +#define MATCH_SHAMT_ORC2_N_64 (0b000010 << OP_SH_SHAMT)
  696. +#define MATCH_SHAMT_ORC2_B_32 (0b00110 << OP_SH_SHAMT)
  697. +#define MATCH_SHAMT_ORC2_B_64 (0b000110 << OP_SH_SHAMT)
  698. +#define MATCH_SHAMT_ORC2_H_32 (0b01110 << OP_SH_SHAMT)
  699. +#define MATCH_SHAMT_ORC2_H_64 (0b001110 << OP_SH_SHAMT)
  700. +#define MATCH_SHAMT_ORC2_W_64 (0b011110 << OP_SH_SHAMT)
  701. +#define MATCH_SHAMT_ORC4_32 (0b11100 << OP_SH_SHAMT)
  702. +#define MATCH_SHAMT_ORC4_64 (0b111100 << OP_SH_SHAMT)
  703. +#define MATCH_SHAMT_ORC4_B_32 (0b00100 << OP_SH_SHAMT)
  704. +#define MATCH_SHAMT_ORC4_B_64 (0b000100 << OP_SH_SHAMT)
  705. +#define MATCH_SHAMT_ORC4_H_32 (0b01100 << OP_SH_SHAMT)
  706. +#define MATCH_SHAMT_ORC4_H_64 (0b001100 << OP_SH_SHAMT)
  707. +#define MATCH_SHAMT_ORC4_W_64 (0b011100 << OP_SH_SHAMT)
  708. +#define MATCH_SHAMT_ORC8_32 (0b11000 << OP_SH_SHAMT)
  709. +#define MATCH_SHAMT_ORC8_64 (0b111000 << OP_SH_SHAMT)
  710. +#define MATCH_SHAMT_ORC8_H_32 (0b01000 << OP_SH_SHAMT)
  711. +#define MATCH_SHAMT_ORC8_H_64 (0b001000 << OP_SH_SHAMT)
  712. +#define MATCH_SHAMT_ORC8_W_64 (0b011000 << OP_SH_SHAMT)
  713. +#define MATCH_SHAMT_ORC16_32 (0b10000 << OP_SH_SHAMT)
  714. +#define MATCH_SHAMT_ORC16_64 (0b110000 << OP_SH_SHAMT)
  715. +#define MATCH_SHAMT_ORC16_W_64 (0b010000 << OP_SH_SHAMT)
  716. +#define MATCH_SHAMT_ORC32_64 (0b100000 << OP_SH_SHAMT)
  717. +
  718. /* Register names used by gas and objdump. */
  719. const char * const riscv_gpr_names_numeric[NGPR] =
  720. @@ -827,6 +951,198 @@ const struct riscv_opcode riscv_opcodes[] =
  721. {"clmulh", 0, INSN_CLASS_ZBC, "d,s,t", MATCH_CLMULH, MASK_CLMULH, match_opcode, 0 },
  722. {"clmulr", 0, INSN_CLASS_ZBC, "d,s,t", MATCH_CLMULR, MASK_CLMULR, match_opcode, 0 },
  723. +/* ZBS instructions */
  724. +{"bclr", 0, INSN_CLASS_ZBS, "d,s,t", MATCH_BCLR, MASK_BCLR, match_opcode, 0 },
  725. +{"bclri", 0, INSN_CLASS_ZBS, "d,s,>", MATCH_BCLRI, MASK_BCLRI, match_opcode, 0 },
  726. +{"bext", 0, INSN_CLASS_ZBS_OR_ZBE, "d,s,t", MATCH_BEXT, MASK_BEXT, match_opcode, 0 },
  727. +{"bexti", 0, INSN_CLASS_ZBS, "d,s,>", MATCH_BEXTI, MASK_BEXTI, match_opcode, 0 },
  728. +{"binv", 0, INSN_CLASS_ZBS, "d,s,t", MATCH_BINV, MASK_BINV, match_opcode, 0 },
  729. +{"binvi", 0, INSN_CLASS_ZBS, "d,s,>", MATCH_BINVI, MASK_BINVI, match_opcode, 0 },
  730. +{"bset", 0, INSN_CLASS_ZBS, "d,s,t", MATCH_BSET, MASK_BSET, match_opcode, 0 },
  731. +{"bseti", 0, INSN_CLASS_ZBS, "d,s,>", MATCH_BSETI, MASK_BSETI, match_opcode, 0 },
  732. +
  733. +/* B instructions excluded from spec1.0 */
  734. +{"rev", 32, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV_32, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  735. +{"rev", 64, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV_64, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  736. +{"rev.p", 32, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV_P_32, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  737. +{"rev.p", 64, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV_P_64, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  738. +{"rev.n", 32, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV_N_32, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  739. +{"rev.n", 64, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV_N_64, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  740. +{"rev.b", 32, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV_B_32, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  741. +{"rev.b", 64, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV_B_64, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  742. +{"rev.h", 32, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV_H_32, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  743. +{"rev.h", 64, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV_H_64, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  744. +{"rev.w", 64, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV_W_64, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  745. +{"rev2", 32, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV2_32, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  746. +{"rev2", 64, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV2_64, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  747. +{"rev2.n", 32, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV2_N_32, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  748. +{"rev2.n", 64, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV2_N_64, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  749. +{"rev2.b", 32, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV2_B_32, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  750. +{"rev2.b", 64, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV2_B_64, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  751. +{"rev2.h", 32, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV2_H_32, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  752. +{"rev2.h", 64, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV2_H_64, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  753. +{"rev2.w", 64, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV2_W_64, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  754. +{"rev4", 32, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV4_32, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  755. +{"rev4", 64, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV4_64, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  756. +{"rev4.b", 32, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV4_B_32, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  757. +{"rev4.b", 64, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV4_B_64, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  758. +{"rev4.h", 32, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV4_H_32, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  759. +{"rev4.h", 64, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV4_H_64, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  760. +{"rev4.w", 64, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV4_W_64, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  761. +{"rev8.h", 32, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV8_H_32, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  762. +{"rev8.h", 64, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV8_H_64, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  763. +{"rev8.w", 64, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV8_W_64, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  764. +{"rev16", 32, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV16_32, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  765. +{"rev16", 64, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV16_64, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  766. +{"rev16.w", 64, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV16_W_64, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  767. +{"rev32", 64, INSN_CLASS_ZBP, "d,s", MATCH_GREVI|MATCH_SHAMT_REV32_64, MASK_GREVI|MASK_SHAMT, match_opcode, 0 },
  768. +{"zip", 32, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP_32, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  769. +{"zip", 64, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP_64, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  770. +{"zip.n", 32, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP_N_32, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  771. +{"zip.n", 64, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP_N_64, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  772. +{"zip.b", 32, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP_B_32, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  773. +{"zip.b", 64, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP_B_64, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  774. +{"zip.h", 32, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP_H_32, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  775. +{"zip.h", 64, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP_H_64, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  776. +{"zip.w", 64, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP_W_64, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  777. +{"zip2", 32, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP2_32, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  778. +{"zip2", 64, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP2_64, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  779. +{"zip2.b", 32, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP2_B_32, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  780. +{"zip2.b", 64, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP2_B_64, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  781. +{"zip2.h", 32, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP2_H_32, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  782. +{"zip2.h", 64, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP2_H_64, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  783. +{"zip2.w", 64, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP2_W_64, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  784. +{"zip4", 32, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP4_32, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  785. +{"zip4", 64, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP4_64, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  786. +{"zip4.h", 32, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP4_H_32, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  787. +{"zip4.h", 64, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP4_H_64, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  788. +{"zip4.w", 64, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP4_W_64, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  789. +{"zip8", 32, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP8_32, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  790. +{"zip8", 64, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP8_64, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  791. +{"zip8.w", 64, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP8_W_64, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  792. +{"zip16", 64, INSN_CLASS_ZBP, "d,s", MATCH_SHFLI|MATCH_SHAMT_ZIP16_64, MASK_SHFLI|MASK_SHAMT, match_opcode, 0 },
  793. +{"unzip", 32, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP_32, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  794. +{"unzip", 64, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP_64, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  795. +{"unzip.n", 32, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP_N_32, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  796. +{"unzip.n", 64, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP_N_64, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  797. +{"unzip.b", 32, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP_B_32, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  798. +{"unzip.b", 64, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP_B_64, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  799. +{"unzip.h", 32, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP_H_32, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  800. +{"unzip.h", 64, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP_H_64, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  801. +{"unzip.w", 64, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP_W_64, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  802. +{"unzip2", 32, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP2_32, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  803. +{"unzip2", 64, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP2_64, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  804. +{"unzip2.b", 32, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP2_B_32, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  805. +{"unzip2.b", 64, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP2_B_64, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  806. +{"unzip2.h", 32, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP2_H_32, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  807. +{"unzip2.h", 64, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP2_H_64, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  808. +{"unzip2.w", 64, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP2_W_64, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  809. +{"unzip4", 32, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP4_32, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  810. +{"unzip4", 64, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP4_64, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  811. +{"unzip4.h", 32, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP4_H_32, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  812. +{"unzip4.h", 64, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP4_H_64, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  813. +{"unzip4.w", 64, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP4_W_64, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  814. +{"unzip8", 32, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP8_32, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  815. +{"unzip8", 64, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP8_64, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  816. +{"unzip8.w", 64, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP8_W_64, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  817. +{"unzip16", 64, INSN_CLASS_ZBP, "d,s", MATCH_UNSHFLI|MATCH_SHAMT_UNZIP16_64, MASK_UNSHFLI|MASK_SHAMT, match_opcode, 0 },
  818. +{"orc", 32, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC_32, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  819. +{"orc", 64, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC_64, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  820. +{"orc.p", 32, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC_P_32, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  821. +{"orc.p", 64, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC_P_64, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  822. +{"orc.n", 32, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC_N_32, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  823. +{"orc.n", 64, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC_N_64, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  824. +{"orc.h", 32, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC_H_32, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  825. +{"orc.h", 64, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC_H_64, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  826. +{"orc.w", 64, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC_W_64, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  827. +{"orc2", 32, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC2_32, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  828. +{"orc2", 64, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC2_64, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  829. +{"orc2.n", 32, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC2_N_32, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  830. +{"orc2.n", 64, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC2_N_64, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  831. +{"orc2.b", 32, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC2_B_32, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  832. +{"orc2.b", 64, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC2_B_64, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  833. +{"orc2.h", 32, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC2_H_32, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  834. +{"orc2.h", 64, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC2_H_64, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  835. +{"orc2.w", 64, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC2_W_64, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  836. +{"orc4", 32, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC4_32, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  837. +{"orc4", 64, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC4_64, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  838. +{"orc4.b", 32, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC4_B_32, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  839. +{"orc4.b", 64, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC4_B_64, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  840. +{"orc4.h", 32, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC4_H_32, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  841. +{"orc4.h", 64, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC4_H_64, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  842. +{"orc4.w", 64, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC4_W_64, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  843. +{"orc8", 32, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC8_32, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  844. +{"orc8", 64, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC8_64, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  845. +{"orc8.h", 32, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC8_H_32, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  846. +{"orc8.h", 64, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC8_H_64, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  847. +{"orc8.w", 64, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC8_W_64, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  848. +{"orc16", 32, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC16_32, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  849. +{"orc16", 64, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC16_64, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  850. +{"orc16.w", 64, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC16_W_64, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  851. +{"orc32", 64, INSN_CLASS_ZBP, "d,s", MATCH_GORCI|MATCH_SHAMT_ORC32_64, MASK_GORCI|MASK_SHAMT, match_opcode, 0 },
  852. +{"pack", 0, INSN_CLASS_ZBP_OR_ZBE_OR_ZBF_OR_ZBM, "d,s,t", MATCH_PACK, MASK_PACK, match_opcode, 0 },
  853. +{"packu", 0, INSN_CLASS_ZBP_OR_ZBM, "d,s,t", MATCH_PACKU, MASK_PACKU, match_opcode, 0 },
  854. +{"packh", 0, INSN_CLASS_ZBP_OR_ZBE_OR_ZBF, "d,s,t", MATCH_PACKH, MASK_PACKH, match_opcode, 0 },
  855. +{"packw", 64, INSN_CLASS_ZBP_OR_ZBE_OR_ZBF, "d,s,<", MATCH_PACKW, MASK_PACKW, match_opcode, 0 },
  856. +{"packuw", 64, INSN_CLASS_ZBP, "d,s,<", MATCH_PACKUW, MASK_PACKUW, match_opcode, 0 },
  857. +{"grev", 0, INSN_CLASS_ZBP, "d,s,t", MATCH_GREV, MASK_GREV, match_opcode, 0 },
  858. +{"grevi", 0, INSN_CLASS_ZBP, "d,s,>", MATCH_GREVI, MASK_GREVI, match_opcode, 0 },
  859. +{"grevw", 64, INSN_CLASS_ZBP, "d,s,<", MATCH_GREVW, MASK_GREVW, match_opcode, 0 },
  860. +{"greviw", 64, INSN_CLASS_ZBP, "d,s,<", MATCH_GREVIW, MASK_GREVIW, match_opcode, 0 },
  861. +{"gorc", 0, INSN_CLASS_ZBP, "d,s,t", MATCH_GORC, MASK_GORC, match_opcode, 0 },
  862. +{"gorci", 0, INSN_CLASS_ZBP, "d,s,>", MATCH_GORCI, MASK_GORCI, match_opcode, 0 },
  863. +{"gorcw", 64, INSN_CLASS_ZBP, "d,s,<", MATCH_GORCW, MASK_GORCW, match_opcode, 0 },
  864. +{"gorciw", 64, INSN_CLASS_ZBP, "d,s,<", MATCH_GORCIW, MASK_GORCIW, match_opcode, 0 },
  865. +{"shfl", 0, INSN_CLASS_ZBP, "d,s,t", MATCH_SHFL, MASK_SHFL, match_opcode, 0 },
  866. +{"shfli", 0, INSN_CLASS_ZBP, "d,s,>", MATCH_SHFLI, MASK_SHFLI, match_opcode, 0 },
  867. +{"shflw", 64, INSN_CLASS_ZBP, "d,s,<", MATCH_SHFLW, MASK_SHFLW, match_opcode, 0 },
  868. +{"unshfl", 0, INSN_CLASS_ZBP, "d,s,t", MATCH_UNSHFL, MASK_UNSHFL, match_opcode, 0 },
  869. +{"unshfli", 0, INSN_CLASS_ZBP, "d,s,>", MATCH_UNSHFLI, MASK_UNSHFLI, match_opcode, 0 },
  870. +{"unshflw", 64, INSN_CLASS_ZBP, "d,s,<", MATCH_UNSHFLW, MASK_UNSHFLW, match_opcode, 0 },
  871. +{"xperm.n", 0, INSN_CLASS_ZBP, "d,s,t", MATCH_XPERM_N, MASK_XPERM_N, match_opcode, 0 },
  872. +{"xperm.b", 0, INSN_CLASS_ZBP, "d,s,t", MATCH_XPERM_B, MASK_XPERM_B, match_opcode, 0 },
  873. +{"xperm.h", 0, INSN_CLASS_ZBP, "d,s,t", MATCH_XPERM_H, MASK_XPERM_H, match_opcode, 0 },
  874. +{"xperm.w", 64, INSN_CLASS_ZBP, "d,s,<", MATCH_XPERM_W, MASK_XPERM_W, match_opcode, 0 },
  875. +{"bcompress",0, INSN_CLASS_ZBE, "d,s,t", MATCH_BCOMPRESS, MASK_BCOMPRESS, match_opcode, 0 },
  876. +{"bdecompress",0, INSN_CLASS_ZBE, "d,s,t", MATCH_BDECOMPRESS, MASK_BDECOMPRESS, match_opcode, 0 },
  877. +{"bsetw", 64, INSN_CLASS_ZBS, "d,s,t", MATCH_BSETW, MASK_BSETW, match_opcode, 0 },
  878. +{"bclrw", 64, INSN_CLASS_ZBS, "d,s,t", MATCH_BCLRW, MASK_BCLRW, match_opcode, 0 },
  879. +{"binvw", 64, INSN_CLASS_ZBS, "d,s,t", MATCH_BINVW, MASK_BINVW, match_opcode, 0 },
  880. +{"bextw", 64, INSN_CLASS_ZBS_OR_ZBE, "d,s,t", MATCH_BEXTW, MASK_BEXTW, match_opcode, 0 },
  881. +{"bcompressw",64, INSN_CLASS_ZBE, "d,s,<", MATCH_BCOMPRESSW, MASK_BCOMPRESSW, match_opcode, 0 },
  882. +{"bdecompressw",64, INSN_CLASS_ZBE, "d,s,<", MATCH_BDECOMPRESSW, MASK_BDECOMPRESSW, match_opcode, 0 },
  883. +{"bsetiw", 64, INSN_CLASS_ZBS, "d,s,<", MATCH_BSETIW, MASK_BSETIW, match_opcode, 0 },
  884. +{"bclriw", 64, INSN_CLASS_ZBS, "d,s,<", MATCH_BCLRIW, MASK_BCLRIW, match_opcode, 0 },
  885. +{"binviw", 64, INSN_CLASS_ZBS, "d,s,<", MATCH_BINVIW, MASK_BINVIW, match_opcode, 0 },
  886. +{"slo", 0, INSN_CLASS_ZBS, "d,s,t", MATCH_SLO, MASK_SLO, match_opcode, 0 },
  887. +{"sro", 0, INSN_CLASS_ZBS, "d,s,t", MATCH_SRO, MASK_SRO, match_opcode, 0 },
  888. +{"sloi", 0, INSN_CLASS_ZBS, "d,s,>", MATCH_SLOI, MASK_SLOI, match_opcode, 0 },
  889. +{"sroi", 0, INSN_CLASS_ZBS, "d,s,>", MATCH_SROI, MASK_SROI, match_opcode, 0 },
  890. +{"slow", 64, INSN_CLASS_ZBS, "d,s,<", MATCH_SLOW, MASK_SLOW, match_opcode, 0 },
  891. +{"srow", 64, INSN_CLASS_ZBS, "d,s,<", MATCH_SROW, MASK_SROW, match_opcode, 0 },
  892. +{"sloiw", 64, INSN_CLASS_ZBS, "d,s,<", MATCH_SLOIW, MASK_SLOIW, match_opcode, 0 },
  893. +{"sroiw", 64, INSN_CLASS_ZBS, "d,s,<", MATCH_SROIW, MASK_SROIW, match_opcode, 0 },
  894. +{"bfp", 0, INSN_CLASS_ZBF, "d,s,t", MATCH_BFP, MASK_BFP, match_opcode, 0 },
  895. +{"bfpw", 64, INSN_CLASS_ZBF, "d,s,<", MATCH_BFPW, MASK_BFPW, match_opcode, 0 },
  896. +{"bmator", 64, INSN_CLASS_ZBM, "d,s,t", MATCH_BMATOR, MASK_BMATOR, match_opcode, 0 },
  897. +{"bmatxor", 64, INSN_CLASS_ZBM, "d,s,t", MATCH_BMATXOR, MASK_BMATXOR, match_opcode, 0 },
  898. +{"bmatflip", 64, INSN_CLASS_ZBM, "d,s", MATCH_BMATFLIP, MASK_BMATFLIP, match_opcode, 0 },
  899. +{"crc32.b", 0, INSN_CLASS_ZBR, "d,s", MATCH_CRC32_B, MASK_CRC32_B, match_opcode, 0 },
  900. +{"crc32.h", 0, INSN_CLASS_ZBR, "d,s", MATCH_CRC32_H, MASK_CRC32_H, match_opcode, 0 },
  901. +{"crc32.w", 0, INSN_CLASS_ZBR, "d,s", MATCH_CRC32_W, MASK_CRC32_W, match_opcode, 0 },
  902. +{"crc32c.b", 0, INSN_CLASS_ZBR, "d,s", MATCH_CRC32C_B, MASK_CRC32C_B, match_opcode, 0 },
  903. +{"crc32c.h", 0, INSN_CLASS_ZBR, "d,s", MATCH_CRC32C_H, MASK_CRC32C_H, match_opcode, 0 },
  904. +{"crc32c.w", 0, INSN_CLASS_ZBR, "d,s", MATCH_CRC32C_W, MASK_CRC32C_W, match_opcode, 0 },
  905. +{"crc32.d", 64, INSN_CLASS_ZBR, "d,s", MATCH_CRC32_D, MASK_CRC32_D, match_opcode, 0 },
  906. +{"crc32c.d", 64, INSN_CLASS_ZBR, "d,s", MATCH_CRC32C_D, MASK_CRC32C_D, match_opcode, 0 },
  907. +{"cmix", 0, INSN_CLASS_ZBT, "d,s,t,r", MATCH_CMIX, MASK_CMIX, match_opcode, 0 },
  908. +{"cmov", 0, INSN_CLASS_ZBT, "d,s,t,r", MATCH_CMOV, MASK_CMOV, match_opcode, 0 },
  909. +{"fsl", 0, INSN_CLASS_ZBT, "d,s,t,r", MATCH_FSL, MASK_FSL, match_opcode, 0 },
  910. +{"fsr", 0, INSN_CLASS_ZBT, "d,s,t,r", MATCH_FSR, MASK_FSR, match_opcode, 0 },
  911. +{"fsri", 0, INSN_CLASS_ZBT, "d,s,>,r", MATCH_FSRI, MASK_FSRI, match_opcode, 0 },
  912. +{"fslw", 64, INSN_CLASS_ZBT, "d,s,<,r", MATCH_FSLW, MASK_FSLW, match_opcode, 0 },
  913. +{"fsrw", 64, INSN_CLASS_ZBT, "d,s,<,r", MATCH_FSRW, MASK_FSRW, match_opcode, 0 },
  914. +{"fsriw", 64, INSN_CLASS_ZBT, "d,s,<,r", MATCH_FSRIW, MASK_FSRIW, match_opcode, 0 },
  915. /* Terminate the list. */
  916. {0, 0, INSN_CLASS_NONE, 0, 0, 0, 0, 0}
  917. --
  918. 2.33.1