fisk 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1245) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +35 -0
  3. data/CODE_OF_CONDUCT.md +78 -0
  4. data/Gemfile +1 -2
  5. data/Rakefile +4 -2
  6. data/bin/build-machine.rb +14 -0
  7. data/bin/instruction.rb.erb +29 -56
  8. data/fisk.gemspec +5 -0
  9. data/lib/fisk.rb +269 -71
  10. data/lib/fisk/encoding.rb +67 -5
  11. data/lib/fisk/errors.rb +5 -0
  12. data/lib/fisk/instructions/adc.rb +505 -539
  13. data/lib/fisk/instructions/adcx.rb +74 -78
  14. data/lib/fisk/instructions/add.rb +505 -539
  15. data/lib/fisk/instructions/addpd.rb +36 -38
  16. data/lib/fisk/instructions/addps.rb +34 -36
  17. data/lib/fisk/instructions/addsd.rb +36 -38
  18. data/lib/fisk/instructions/addss.rb +36 -38
  19. data/lib/fisk/instructions/addsubpd.rb +36 -38
  20. data/lib/fisk/instructions/addsubps.rb +36 -38
  21. data/lib/fisk/instructions/adox.rb +74 -78
  22. data/lib/fisk/instructions/aesdec.rb +38 -40
  23. data/lib/fisk/instructions/aesdeclast.rb +38 -40
  24. data/lib/fisk/instructions/aesenc.rb +38 -40
  25. data/lib/fisk/instructions/aesenclast.rb +38 -40
  26. data/lib/fisk/instructions/aesimc.rb +38 -40
  27. data/lib/fisk/instructions/aeskeygenassist.rb +42 -44
  28. data/lib/fisk/instructions/and.rb +505 -539
  29. data/lib/fisk/instructions/andn.rb +62 -66
  30. data/lib/fisk/instructions/andnpd.rb +36 -38
  31. data/lib/fisk/instructions/andnps.rb +34 -36
  32. data/lib/fisk/instructions/andpd.rb +36 -38
  33. data/lib/fisk/instructions/andps.rb +34 -36
  34. data/lib/fisk/instructions/bextr.rb +126 -134
  35. data/lib/fisk/instructions/blcfill.rb +58 -62
  36. data/lib/fisk/instructions/blci.rb +58 -62
  37. data/lib/fisk/instructions/blcic.rb +58 -62
  38. data/lib/fisk/instructions/blcmsk.rb +58 -62
  39. data/lib/fisk/instructions/blcs.rb +58 -62
  40. data/lib/fisk/instructions/blendpd.rb +42 -44
  41. data/lib/fisk/instructions/blendps.rb +42 -44
  42. data/lib/fisk/instructions/blendvpd.rb +40 -42
  43. data/lib/fisk/instructions/blendvps.rb +40 -42
  44. data/lib/fisk/instructions/blsfill.rb +58 -62
  45. data/lib/fisk/instructions/blsi.rb +58 -62
  46. data/lib/fisk/instructions/blsic.rb +58 -62
  47. data/lib/fisk/instructions/blsmsk.rb +58 -62
  48. data/lib/fisk/instructions/blsr.rb +58 -62
  49. data/lib/fisk/instructions/bsf.rb +100 -106
  50. data/lib/fisk/instructions/bsr.rb +100 -106
  51. data/lib/fisk/instructions/bswap.rb +28 -30
  52. data/lib/fisk/instructions/bt.rb +204 -216
  53. data/lib/fisk/instructions/btc.rb +204 -216
  54. data/lib/fisk/instructions/btr.rb +204 -216
  55. data/lib/fisk/instructions/bts.rb +204 -216
  56. data/lib/fisk/instructions/bzhi.rb +62 -66
  57. data/lib/fisk/instructions/call.rb +41 -44
  58. data/lib/fisk/instructions/cbw.rb +12 -13
  59. data/lib/fisk/instructions/cdq.rb +11 -12
  60. data/lib/fisk/instructions/cdqe.rb +13 -14
  61. data/lib/fisk/instructions/clc.rb +11 -12
  62. data/lib/fisk/instructions/cld.rb +11 -12
  63. data/lib/fisk/instructions/clflush.rb +17 -18
  64. data/lib/fisk/instructions/clflushopt.rb +18 -19
  65. data/lib/fisk/instructions/clwb.rb +18 -19
  66. data/lib/fisk/instructions/clzero.rb +13 -14
  67. data/lib/fisk/instructions/cmc.rb +11 -12
  68. data/lib/fisk/instructions/cmova.rb +100 -106
  69. data/lib/fisk/instructions/cmovae.rb +100 -106
  70. data/lib/fisk/instructions/cmovb.rb +100 -106
  71. data/lib/fisk/instructions/cmovbe.rb +100 -106
  72. data/lib/fisk/instructions/cmovc.rb +100 -106
  73. data/lib/fisk/instructions/cmove.rb +100 -106
  74. data/lib/fisk/instructions/cmovg.rb +100 -106
  75. data/lib/fisk/instructions/cmovge.rb +100 -106
  76. data/lib/fisk/instructions/cmovl.rb +100 -106
  77. data/lib/fisk/instructions/cmovle.rb +100 -106
  78. data/lib/fisk/instructions/cmovna.rb +100 -106
  79. data/lib/fisk/instructions/cmovnae.rb +100 -106
  80. data/lib/fisk/instructions/cmovnb.rb +100 -106
  81. data/lib/fisk/instructions/cmovnbe.rb +100 -106
  82. data/lib/fisk/instructions/cmovnc.rb +100 -106
  83. data/lib/fisk/instructions/cmovne.rb +100 -106
  84. data/lib/fisk/instructions/cmovng.rb +100 -106
  85. data/lib/fisk/instructions/cmovnge.rb +100 -106
  86. data/lib/fisk/instructions/cmovnl.rb +100 -106
  87. data/lib/fisk/instructions/cmovnle.rb +100 -106
  88. data/lib/fisk/instructions/cmovno.rb +100 -106
  89. data/lib/fisk/instructions/cmovnp.rb +100 -106
  90. data/lib/fisk/instructions/cmovns.rb +100 -106
  91. data/lib/fisk/instructions/cmovnz.rb +100 -106
  92. data/lib/fisk/instructions/cmovo.rb +100 -106
  93. data/lib/fisk/instructions/cmovp.rb +100 -106
  94. data/lib/fisk/instructions/cmovpe.rb +100 -106
  95. data/lib/fisk/instructions/cmovpo.rb +100 -106
  96. data/lib/fisk/instructions/cmovs.rb +100 -106
  97. data/lib/fisk/instructions/cmovz.rb +100 -106
  98. data/lib/fisk/instructions/cmp.rb +505 -539
  99. data/lib/fisk/instructions/cmppd.rb +40 -42
  100. data/lib/fisk/instructions/cmpps.rb +38 -40
  101. data/lib/fisk/instructions/cmpsd.rb +40 -42
  102. data/lib/fisk/instructions/cmpss.rb +40 -42
  103. data/lib/fisk/instructions/cmpxchg.rb +132 -140
  104. data/lib/fisk/instructions/cmpxchg16b.rb +17 -18
  105. data/lib/fisk/instructions/cmpxchg8b.rb +17 -18
  106. data/lib/fisk/instructions/comisd.rb +36 -38
  107. data/lib/fisk/instructions/comiss.rb +34 -36
  108. data/lib/fisk/instructions/cpuid.rb +12 -13
  109. data/lib/fisk/instructions/cqo.rb +13 -14
  110. data/lib/fisk/instructions/crc32.rb +184 -194
  111. data/lib/fisk/instructions/cvtdq2pd.rb +36 -38
  112. data/lib/fisk/instructions/cvtdq2ps.rb +34 -36
  113. data/lib/fisk/instructions/cvtpd2dq.rb +36 -38
  114. data/lib/fisk/instructions/cvtpd2pi.rb +36 -38
  115. data/lib/fisk/instructions/cvtpd2ps.rb +36 -38
  116. data/lib/fisk/instructions/cvtpi2pd.rb +36 -38
  117. data/lib/fisk/instructions/cvtpi2ps.rb +34 -36
  118. data/lib/fisk/instructions/cvtps2dq.rb +36 -38
  119. data/lib/fisk/instructions/cvtps2pd.rb +34 -36
  120. data/lib/fisk/instructions/cvtps2pi.rb +34 -36
  121. data/lib/fisk/instructions/cvtsd2si.rb +70 -74
  122. data/lib/fisk/instructions/cvtsd2ss.rb +36 -38
  123. data/lib/fisk/instructions/cvtsi2sd.rb +70 -74
  124. data/lib/fisk/instructions/cvtsi2ss.rb +70 -74
  125. data/lib/fisk/instructions/cvtss2sd.rb +36 -38
  126. data/lib/fisk/instructions/cvtss2si.rb +70 -74
  127. data/lib/fisk/instructions/cvttpd2dq.rb +36 -38
  128. data/lib/fisk/instructions/cvttpd2pi.rb +36 -38
  129. data/lib/fisk/instructions/cvttps2dq.rb +36 -38
  130. data/lib/fisk/instructions/cvttps2pi.rb +34 -36
  131. data/lib/fisk/instructions/cvttsd2si.rb +70 -74
  132. data/lib/fisk/instructions/cvttss2si.rb +70 -74
  133. data/lib/fisk/instructions/cwd.rb +12 -13
  134. data/lib/fisk/instructions/cwde.rb +11 -12
  135. data/lib/fisk/instructions/dec.rb +116 -124
  136. data/lib/fisk/instructions/div.rb +116 -124
  137. data/lib/fisk/instructions/divpd.rb +36 -38
  138. data/lib/fisk/instructions/divps.rb +34 -36
  139. data/lib/fisk/instructions/divsd.rb +36 -38
  140. data/lib/fisk/instructions/divss.rb +36 -38
  141. data/lib/fisk/instructions/dppd.rb +42 -44
  142. data/lib/fisk/instructions/dpps.rb +42 -44
  143. data/lib/fisk/instructions/emms.rb +12 -13
  144. data/lib/fisk/instructions/extractps.rb +42 -44
  145. data/lib/fisk/instructions/extrq.rb +39 -41
  146. data/lib/fisk/instructions/femms.rb +12 -13
  147. data/lib/fisk/instructions/haddpd.rb +36 -38
  148. data/lib/fisk/instructions/haddps.rb +36 -38
  149. data/lib/fisk/instructions/hsubpd.rb +36 -38
  150. data/lib/fisk/instructions/hsubps.rb +36 -38
  151. data/lib/fisk/instructions/idiv.rb +116 -124
  152. data/lib/fisk/instructions/imul.rb +422 -448
  153. data/lib/fisk/instructions/inc.rb +116 -124
  154. data/lib/fisk/instructions/insertps.rb +42 -44
  155. data/lib/fisk/instructions/insertq.rb +40 -42
  156. data/lib/fisk/instructions/int.rb +23 -25
  157. data/lib/fisk/instructions/ja.rb +25 -27
  158. data/lib/fisk/instructions/jae.rb +25 -27
  159. data/lib/fisk/instructions/jb.rb +25 -27
  160. data/lib/fisk/instructions/jbe.rb +25 -27
  161. data/lib/fisk/instructions/jc.rb +25 -27
  162. data/lib/fisk/instructions/je.rb +25 -27
  163. data/lib/fisk/instructions/jecxz.rb +13 -14
  164. data/lib/fisk/instructions/jg.rb +25 -27
  165. data/lib/fisk/instructions/jge.rb +25 -27
  166. data/lib/fisk/instructions/jl.rb +25 -27
  167. data/lib/fisk/instructions/jle.rb +25 -27
  168. data/lib/fisk/instructions/jmp.rb +52 -56
  169. data/lib/fisk/instructions/jna.rb +25 -27
  170. data/lib/fisk/instructions/jnae.rb +25 -27
  171. data/lib/fisk/instructions/jnb.rb +25 -27
  172. data/lib/fisk/instructions/jnbe.rb +25 -27
  173. data/lib/fisk/instructions/jnc.rb +25 -27
  174. data/lib/fisk/instructions/jne.rb +25 -27
  175. data/lib/fisk/instructions/jng.rb +25 -27
  176. data/lib/fisk/instructions/jnge.rb +25 -27
  177. data/lib/fisk/instructions/jnl.rb +25 -27
  178. data/lib/fisk/instructions/jnle.rb +25 -27
  179. data/lib/fisk/instructions/jno.rb +25 -27
  180. data/lib/fisk/instructions/jnp.rb +25 -27
  181. data/lib/fisk/instructions/jns.rb +25 -27
  182. data/lib/fisk/instructions/jnz.rb +25 -27
  183. data/lib/fisk/instructions/jo.rb +25 -27
  184. data/lib/fisk/instructions/jp.rb +25 -27
  185. data/lib/fisk/instructions/jpe.rb +25 -27
  186. data/lib/fisk/instructions/jpo.rb +25 -27
  187. data/lib/fisk/instructions/jrcxz.rb +13 -14
  188. data/lib/fisk/instructions/js.rb +25 -27
  189. data/lib/fisk/instructions/jz.rb +25 -27
  190. data/lib/fisk/instructions/kaddb.rb +17 -18
  191. data/lib/fisk/instructions/kaddd.rb +17 -18
  192. data/lib/fisk/instructions/kaddq.rb +17 -18
  193. data/lib/fisk/instructions/kaddw.rb +17 -18
  194. data/lib/fisk/instructions/kandb.rb +17 -18
  195. data/lib/fisk/instructions/kandd.rb +17 -18
  196. data/lib/fisk/instructions/kandnb.rb +17 -18
  197. data/lib/fisk/instructions/kandnd.rb +17 -18
  198. data/lib/fisk/instructions/kandnq.rb +17 -18
  199. data/lib/fisk/instructions/kandnw.rb +17 -18
  200. data/lib/fisk/instructions/kandq.rb +17 -18
  201. data/lib/fisk/instructions/kandw.rb +17 -18
  202. data/lib/fisk/instructions/kmovb.rb +72 -77
  203. data/lib/fisk/instructions/kmovd.rb +72 -77
  204. data/lib/fisk/instructions/kmovq.rb +72 -77
  205. data/lib/fisk/instructions/kmovw.rb +72 -77
  206. data/lib/fisk/instructions/knotb.rb +16 -17
  207. data/lib/fisk/instructions/knotd.rb +16 -17
  208. data/lib/fisk/instructions/knotq.rb +16 -17
  209. data/lib/fisk/instructions/knotw.rb +16 -17
  210. data/lib/fisk/instructions/korb.rb +17 -18
  211. data/lib/fisk/instructions/kord.rb +17 -18
  212. data/lib/fisk/instructions/korq.rb +17 -18
  213. data/lib/fisk/instructions/kortestb.rb +16 -17
  214. data/lib/fisk/instructions/kortestd.rb +16 -17
  215. data/lib/fisk/instructions/kortestq.rb +16 -17
  216. data/lib/fisk/instructions/kortestw.rb +16 -17
  217. data/lib/fisk/instructions/korw.rb +17 -18
  218. data/lib/fisk/instructions/kshiftlb.rb +18 -19
  219. data/lib/fisk/instructions/kshiftld.rb +18 -19
  220. data/lib/fisk/instructions/kshiftlq.rb +18 -19
  221. data/lib/fisk/instructions/kshiftlw.rb +18 -19
  222. data/lib/fisk/instructions/kshiftrb.rb +18 -19
  223. data/lib/fisk/instructions/kshiftrd.rb +18 -19
  224. data/lib/fisk/instructions/kshiftrq.rb +18 -19
  225. data/lib/fisk/instructions/kshiftrw.rb +18 -19
  226. data/lib/fisk/instructions/ktestb.rb +16 -17
  227. data/lib/fisk/instructions/ktestd.rb +16 -17
  228. data/lib/fisk/instructions/ktestq.rb +16 -17
  229. data/lib/fisk/instructions/ktestw.rb +16 -17
  230. data/lib/fisk/instructions/kunpckbw.rb +17 -18
  231. data/lib/fisk/instructions/kunpckdq.rb +17 -18
  232. data/lib/fisk/instructions/kunpckwd.rb +17 -18
  233. data/lib/fisk/instructions/kxnorb.rb +17 -18
  234. data/lib/fisk/instructions/kxnord.rb +17 -18
  235. data/lib/fisk/instructions/kxnorq.rb +17 -18
  236. data/lib/fisk/instructions/kxnorw.rb +17 -18
  237. data/lib/fisk/instructions/kxorb.rb +17 -18
  238. data/lib/fisk/instructions/kxord.rb +17 -18
  239. data/lib/fisk/instructions/kxorq.rb +17 -18
  240. data/lib/fisk/instructions/kxorw.rb +17 -18
  241. data/lib/fisk/instructions/lddqu.rb +19 -20
  242. data/lib/fisk/instructions/ldmxcsr.rb +17 -18
  243. data/lib/fisk/instructions/lea.rb +48 -51
  244. data/lib/fisk/instructions/lfence.rb +13 -14
  245. data/lib/fisk/instructions/lzcnt.rb +106 -112
  246. data/lib/fisk/instructions/maskmovdqu.rb +19 -20
  247. data/lib/fisk/instructions/maskmovq.rb +18 -19
  248. data/lib/fisk/instructions/maxpd.rb +36 -38
  249. data/lib/fisk/instructions/maxps.rb +34 -36
  250. data/lib/fisk/instructions/maxsd.rb +36 -38
  251. data/lib/fisk/instructions/maxss.rb +36 -38
  252. data/lib/fisk/instructions/mfence.rb +13 -14
  253. data/lib/fisk/instructions/minpd.rb +36 -38
  254. data/lib/fisk/instructions/minps.rb +34 -36
  255. data/lib/fisk/instructions/minsd.rb +36 -38
  256. data/lib/fisk/instructions/minss.rb +36 -38
  257. data/lib/fisk/instructions/monitor.rb +13 -14
  258. data/lib/fisk/instructions/monitorx.rb +13 -14
  259. data/lib/fisk/instructions/mov.rb +450 -482
  260. data/lib/fisk/instructions/movapd.rb +65 -69
  261. data/lib/fisk/instructions/movaps.rb +61 -65
  262. data/lib/fisk/instructions/movbe.rb +106 -112
  263. data/lib/fisk/instructions/movd.rb +134 -142
  264. data/lib/fisk/instructions/movddup.rb +36 -38
  265. data/lib/fisk/instructions/movdq2q.rb +19 -20
  266. data/lib/fisk/instructions/movdqa.rb +65 -69
  267. data/lib/fisk/instructions/movdqu.rb +65 -69
  268. data/lib/fisk/instructions/movhlps.rb +18 -19
  269. data/lib/fisk/instructions/movhpd.rb +36 -38
  270. data/lib/fisk/instructions/movhps.rb +34 -36
  271. data/lib/fisk/instructions/movlhps.rb +18 -19
  272. data/lib/fisk/instructions/movlpd.rb +36 -38
  273. data/lib/fisk/instructions/movlps.rb +34 -36
  274. data/lib/fisk/instructions/movmskpd.rb +19 -20
  275. data/lib/fisk/instructions/movmskps.rb +18 -19
  276. data/lib/fisk/instructions/movntdq.rb +19 -20
  277. data/lib/fisk/instructions/movntdqa.rb +20 -21
  278. data/lib/fisk/instructions/movnti.rb +34 -36
  279. data/lib/fisk/instructions/movntpd.rb +19 -20
  280. data/lib/fisk/instructions/movntps.rb +18 -19
  281. data/lib/fisk/instructions/movntq.rb +18 -19
  282. data/lib/fisk/instructions/movntsd.rb +19 -20
  283. data/lib/fisk/instructions/movntss.rb +19 -20
  284. data/lib/fisk/instructions/movq.rb +236 -252
  285. data/lib/fisk/instructions/movq2dq.rb +19 -20
  286. data/lib/fisk/instructions/movsd.rb +65 -69
  287. data/lib/fisk/instructions/movshdup.rb +36 -38
  288. data/lib/fisk/instructions/movsldup.rb +36 -38
  289. data/lib/fisk/instructions/movss.rb +65 -69
  290. data/lib/fisk/instructions/movsx.rb +164 -174
  291. data/lib/fisk/instructions/movsxd.rb +32 -34
  292. data/lib/fisk/instructions/movupd.rb +65 -69
  293. data/lib/fisk/instructions/movups.rb +61 -65
  294. data/lib/fisk/instructions/movzx.rb +164 -174
  295. data/lib/fisk/instructions/mpsadbw.rb +42 -44
  296. data/lib/fisk/instructions/mul.rb +116 -124
  297. data/lib/fisk/instructions/mulpd.rb +36 -38
  298. data/lib/fisk/instructions/mulps.rb +34 -36
  299. data/lib/fisk/instructions/mulsd.rb +36 -38
  300. data/lib/fisk/instructions/mulss.rb +36 -38
  301. data/lib/fisk/instructions/mulx.rb +62 -66
  302. data/lib/fisk/instructions/mwait.rb +13 -14
  303. data/lib/fisk/instructions/mwaitx.rb +13 -14
  304. data/lib/fisk/instructions/neg.rb +116 -124
  305. data/lib/fisk/instructions/nop.rb +11 -12
  306. data/lib/fisk/instructions/not.rb +116 -124
  307. data/lib/fisk/instructions/or.rb +505 -539
  308. data/lib/fisk/instructions/orpd.rb +36 -38
  309. data/lib/fisk/instructions/orps.rb +34 -36
  310. data/lib/fisk/instructions/pabsb.rb +72 -76
  311. data/lib/fisk/instructions/pabsd.rb +72 -76
  312. data/lib/fisk/instructions/pabsw.rb +72 -76
  313. data/lib/fisk/instructions/packssdw.rb +68 -72
  314. data/lib/fisk/instructions/packsswb.rb +68 -72
  315. data/lib/fisk/instructions/packusdw.rb +38 -40
  316. data/lib/fisk/instructions/packuswb.rb +68 -72
  317. data/lib/fisk/instructions/paddb.rb +68 -72
  318. data/lib/fisk/instructions/paddd.rb +68 -72
  319. data/lib/fisk/instructions/paddq.rb +68 -72
  320. data/lib/fisk/instructions/paddsb.rb +68 -72
  321. data/lib/fisk/instructions/paddsw.rb +68 -72
  322. data/lib/fisk/instructions/paddusb.rb +68 -72
  323. data/lib/fisk/instructions/paddusw.rb +68 -72
  324. data/lib/fisk/instructions/paddw.rb +68 -72
  325. data/lib/fisk/instructions/palignr.rb +80 -84
  326. data/lib/fisk/instructions/pand.rb +68 -72
  327. data/lib/fisk/instructions/pandn.rb +68 -72
  328. data/lib/fisk/instructions/pause.rb +12 -13
  329. data/lib/fisk/instructions/pavgb.rb +68 -72
  330. data/lib/fisk/instructions/pavgusb.rb +36 -38
  331. data/lib/fisk/instructions/pavgw.rb +68 -72
  332. data/lib/fisk/instructions/pblendvb.rb +40 -42
  333. data/lib/fisk/instructions/pblendw.rb +42 -44
  334. data/lib/fisk/instructions/pclmulqdq.rb +42 -44
  335. data/lib/fisk/instructions/pcmpeqb.rb +68 -72
  336. data/lib/fisk/instructions/pcmpeqd.rb +68 -72
  337. data/lib/fisk/instructions/pcmpeqq.rb +38 -40
  338. data/lib/fisk/instructions/pcmpeqw.rb +68 -72
  339. data/lib/fisk/instructions/pcmpestri.rb +42 -44
  340. data/lib/fisk/instructions/pcmpestrm.rb +42 -44
  341. data/lib/fisk/instructions/pcmpgtb.rb +68 -72
  342. data/lib/fisk/instructions/pcmpgtd.rb +68 -72
  343. data/lib/fisk/instructions/pcmpgtq.rb +38 -40
  344. data/lib/fisk/instructions/pcmpgtw.rb +68 -72
  345. data/lib/fisk/instructions/pcmpistri.rb +42 -44
  346. data/lib/fisk/instructions/pcmpistrm.rb +42 -44
  347. data/lib/fisk/instructions/pdep.rb +62 -66
  348. data/lib/fisk/instructions/pext.rb +62 -66
  349. data/lib/fisk/instructions/pextrb.rb +42 -44
  350. data/lib/fisk/instructions/pextrd.rb +42 -44
  351. data/lib/fisk/instructions/pextrq.rb +42 -44
  352. data/lib/fisk/instructions/pextrw.rb +73 -77
  353. data/lib/fisk/instructions/pf2id.rb +36 -38
  354. data/lib/fisk/instructions/pf2iw.rb +36 -38
  355. data/lib/fisk/instructions/pfacc.rb +36 -38
  356. data/lib/fisk/instructions/pfadd.rb +36 -38
  357. data/lib/fisk/instructions/pfcmpeq.rb +36 -38
  358. data/lib/fisk/instructions/pfcmpge.rb +36 -38
  359. data/lib/fisk/instructions/pfcmpgt.rb +36 -38
  360. data/lib/fisk/instructions/pfmax.rb +36 -38
  361. data/lib/fisk/instructions/pfmin.rb +36 -38
  362. data/lib/fisk/instructions/pfmul.rb +36 -38
  363. data/lib/fisk/instructions/pfnacc.rb +36 -38
  364. data/lib/fisk/instructions/pfpnacc.rb +36 -38
  365. data/lib/fisk/instructions/pfrcp.rb +36 -38
  366. data/lib/fisk/instructions/pfrcpit1.rb +36 -38
  367. data/lib/fisk/instructions/pfrcpit2.rb +36 -38
  368. data/lib/fisk/instructions/pfrsqit1.rb +36 -38
  369. data/lib/fisk/instructions/pfrsqrt.rb +36 -38
  370. data/lib/fisk/instructions/pfsub.rb +36 -38
  371. data/lib/fisk/instructions/pfsubr.rb +36 -38
  372. data/lib/fisk/instructions/phaddd.rb +72 -76
  373. data/lib/fisk/instructions/phaddsw.rb +72 -76
  374. data/lib/fisk/instructions/phaddw.rb +72 -76
  375. data/lib/fisk/instructions/phminposuw.rb +38 -40
  376. data/lib/fisk/instructions/phsubd.rb +72 -76
  377. data/lib/fisk/instructions/phsubsw.rb +72 -76
  378. data/lib/fisk/instructions/phsubw.rb +72 -76
  379. data/lib/fisk/instructions/pi2fd.rb +36 -38
  380. data/lib/fisk/instructions/pi2fw.rb +36 -38
  381. data/lib/fisk/instructions/pinsrb.rb +42 -44
  382. data/lib/fisk/instructions/pinsrd.rb +42 -44
  383. data/lib/fisk/instructions/pinsrq.rb +42 -44
  384. data/lib/fisk/instructions/pinsrw.rb +76 -80
  385. data/lib/fisk/instructions/pmaddubsw.rb +72 -76
  386. data/lib/fisk/instructions/pmaddwd.rb +68 -72
  387. data/lib/fisk/instructions/pmaxsb.rb +38 -40
  388. data/lib/fisk/instructions/pmaxsd.rb +38 -40
  389. data/lib/fisk/instructions/pmaxsw.rb +68 -72
  390. data/lib/fisk/instructions/pmaxub.rb +68 -72
  391. data/lib/fisk/instructions/pmaxud.rb +38 -40
  392. data/lib/fisk/instructions/pmaxuw.rb +38 -40
  393. data/lib/fisk/instructions/pminsb.rb +38 -40
  394. data/lib/fisk/instructions/pminsd.rb +38 -40
  395. data/lib/fisk/instructions/pminsw.rb +68 -72
  396. data/lib/fisk/instructions/pminub.rb +68 -72
  397. data/lib/fisk/instructions/pminud.rb +38 -40
  398. data/lib/fisk/instructions/pminuw.rb +38 -40
  399. data/lib/fisk/instructions/pmovmskb.rb +35 -37
  400. data/lib/fisk/instructions/pmovsxbd.rb +38 -40
  401. data/lib/fisk/instructions/pmovsxbq.rb +38 -40
  402. data/lib/fisk/instructions/pmovsxbw.rb +38 -40
  403. data/lib/fisk/instructions/pmovsxdq.rb +38 -40
  404. data/lib/fisk/instructions/pmovsxwd.rb +38 -40
  405. data/lib/fisk/instructions/pmovsxwq.rb +38 -40
  406. data/lib/fisk/instructions/pmovzxbd.rb +38 -40
  407. data/lib/fisk/instructions/pmovzxbq.rb +38 -40
  408. data/lib/fisk/instructions/pmovzxbw.rb +38 -40
  409. data/lib/fisk/instructions/pmovzxdq.rb +38 -40
  410. data/lib/fisk/instructions/pmovzxwd.rb +38 -40
  411. data/lib/fisk/instructions/pmovzxwq.rb +38 -40
  412. data/lib/fisk/instructions/pmuldq.rb +38 -40
  413. data/lib/fisk/instructions/pmulhrsw.rb +72 -76
  414. data/lib/fisk/instructions/pmulhrw.rb +36 -38
  415. data/lib/fisk/instructions/pmulhuw.rb +68 -72
  416. data/lib/fisk/instructions/pmulhw.rb +68 -72
  417. data/lib/fisk/instructions/pmulld.rb +38 -40
  418. data/lib/fisk/instructions/pmullw.rb +68 -72
  419. data/lib/fisk/instructions/pmuludq.rb +68 -72
  420. data/lib/fisk/instructions/pop.rb +77 -83
  421. data/lib/fisk/instructions/popcnt.rb +106 -112
  422. data/lib/fisk/instructions/por.rb +68 -72
  423. data/lib/fisk/instructions/prefetch.rb +17 -18
  424. data/lib/fisk/instructions/prefetchnta.rb +17 -18
  425. data/lib/fisk/instructions/prefetcht0.rb +17 -18
  426. data/lib/fisk/instructions/prefetcht1.rb +17 -18
  427. data/lib/fisk/instructions/prefetcht2.rb +17 -18
  428. data/lib/fisk/instructions/prefetchw.rb +17 -18
  429. data/lib/fisk/instructions/prefetchwt1.rb +17 -18
  430. data/lib/fisk/instructions/psadbw.rb +68 -72
  431. data/lib/fisk/instructions/pshufb.rb +72 -76
  432. data/lib/fisk/instructions/pshufd.rb +40 -42
  433. data/lib/fisk/instructions/pshufhw.rb +40 -42
  434. data/lib/fisk/instructions/pshuflw.rb +40 -42
  435. data/lib/fisk/instructions/pshufw.rb +38 -40
  436. data/lib/fisk/instructions/psignb.rb +72 -76
  437. data/lib/fisk/instructions/psignd.rb +72 -76
  438. data/lib/fisk/instructions/psignw.rb +72 -76
  439. data/lib/fisk/instructions/pslld.rb +103 -109
  440. data/lib/fisk/instructions/pslldq.rb +20 -21
  441. data/lib/fisk/instructions/psllq.rb +103 -109
  442. data/lib/fisk/instructions/psllw.rb +103 -109
  443. data/lib/fisk/instructions/psrad.rb +103 -109
  444. data/lib/fisk/instructions/psraw.rb +103 -109
  445. data/lib/fisk/instructions/psrld.rb +103 -109
  446. data/lib/fisk/instructions/psrldq.rb +20 -21
  447. data/lib/fisk/instructions/psrlq.rb +103 -109
  448. data/lib/fisk/instructions/psrlw.rb +103 -109
  449. data/lib/fisk/instructions/psubb.rb +68 -72
  450. data/lib/fisk/instructions/psubd.rb +68 -72
  451. data/lib/fisk/instructions/psubq.rb +68 -72
  452. data/lib/fisk/instructions/psubsb.rb +68 -72
  453. data/lib/fisk/instructions/psubsw.rb +68 -72
  454. data/lib/fisk/instructions/psubusb.rb +68 -72
  455. data/lib/fisk/instructions/psubusw.rb +68 -72
  456. data/lib/fisk/instructions/psubw.rb +68 -72
  457. data/lib/fisk/instructions/pswapd.rb +36 -38
  458. data/lib/fisk/instructions/ptest.rb +38 -40
  459. data/lib/fisk/instructions/punpckhbw.rb +68 -72
  460. data/lib/fisk/instructions/punpckhdq.rb +68 -72
  461. data/lib/fisk/instructions/punpckhqdq.rb +36 -38
  462. data/lib/fisk/instructions/punpckhwd.rb +68 -72
  463. data/lib/fisk/instructions/punpcklbw.rb +68 -72
  464. data/lib/fisk/instructions/punpckldq.rb +68 -72
  465. data/lib/fisk/instructions/punpcklqdq.rb +36 -38
  466. data/lib/fisk/instructions/punpcklwd.rb +68 -72
  467. data/lib/fisk/instructions/push.rb +99 -107
  468. data/lib/fisk/instructions/pxor.rb +68 -72
  469. data/lib/fisk/instructions/rcl.rb +376 -400
  470. data/lib/fisk/instructions/rcpps.rb +34 -36
  471. data/lib/fisk/instructions/rcpss.rb +36 -38
  472. data/lib/fisk/instructions/rcr.rb +376 -400
  473. data/lib/fisk/instructions/rdrand.rb +48 -51
  474. data/lib/fisk/instructions/rdseed.rb +48 -51
  475. data/lib/fisk/instructions/rdtsc.rb +12 -13
  476. data/lib/fisk/instructions/rdtscp.rb +13 -14
  477. data/lib/fisk/instructions/ret.rb +22 -24
  478. data/lib/fisk/instructions/rol.rb +376 -400
  479. data/lib/fisk/instructions/ror.rb +376 -400
  480. data/lib/fisk/instructions/rorx.rb +66 -70
  481. data/lib/fisk/instructions/roundpd.rb +42 -44
  482. data/lib/fisk/instructions/roundps.rb +42 -44
  483. data/lib/fisk/instructions/roundsd.rb +42 -44
  484. data/lib/fisk/instructions/roundss.rb +42 -44
  485. data/lib/fisk/instructions/rsqrtps.rb +34 -36
  486. data/lib/fisk/instructions/rsqrtss.rb +36 -38
  487. data/lib/fisk/instructions/sal.rb +376 -400
  488. data/lib/fisk/instructions/sar.rb +376 -400
  489. data/lib/fisk/instructions/sarx.rb +62 -66
  490. data/lib/fisk/instructions/sbb.rb +505 -539
  491. data/lib/fisk/instructions/seta.rb +34 -36
  492. data/lib/fisk/instructions/setae.rb +34 -36
  493. data/lib/fisk/instructions/setb.rb +34 -36
  494. data/lib/fisk/instructions/setbe.rb +34 -36
  495. data/lib/fisk/instructions/setc.rb +34 -36
  496. data/lib/fisk/instructions/sete.rb +34 -36
  497. data/lib/fisk/instructions/setg.rb +34 -36
  498. data/lib/fisk/instructions/setge.rb +34 -36
  499. data/lib/fisk/instructions/setl.rb +34 -36
  500. data/lib/fisk/instructions/setle.rb +34 -36
  501. data/lib/fisk/instructions/setna.rb +34 -36
  502. data/lib/fisk/instructions/setnae.rb +34 -36
  503. data/lib/fisk/instructions/setnb.rb +34 -36
  504. data/lib/fisk/instructions/setnbe.rb +34 -36
  505. data/lib/fisk/instructions/setnc.rb +34 -36
  506. data/lib/fisk/instructions/setne.rb +34 -36
  507. data/lib/fisk/instructions/setng.rb +34 -36
  508. data/lib/fisk/instructions/setnge.rb +34 -36
  509. data/lib/fisk/instructions/setnl.rb +34 -36
  510. data/lib/fisk/instructions/setnle.rb +34 -36
  511. data/lib/fisk/instructions/setno.rb +34 -36
  512. data/lib/fisk/instructions/setnp.rb +34 -36
  513. data/lib/fisk/instructions/setns.rb +34 -36
  514. data/lib/fisk/instructions/setnz.rb +34 -36
  515. data/lib/fisk/instructions/seto.rb +34 -36
  516. data/lib/fisk/instructions/setp.rb +34 -36
  517. data/lib/fisk/instructions/setpe.rb +34 -36
  518. data/lib/fisk/instructions/setpo.rb +34 -36
  519. data/lib/fisk/instructions/sets.rb +34 -36
  520. data/lib/fisk/instructions/setz.rb +34 -36
  521. data/lib/fisk/instructions/sfence.rb +13 -14
  522. data/lib/fisk/instructions/sha1msg1.rb +36 -38
  523. data/lib/fisk/instructions/sha1msg2.rb +36 -38
  524. data/lib/fisk/instructions/sha1nexte.rb +36 -38
  525. data/lib/fisk/instructions/sha1rnds4.rb +40 -42
  526. data/lib/fisk/instructions/sha256msg1.rb +36 -38
  527. data/lib/fisk/instructions/sha256msg2.rb +36 -38
  528. data/lib/fisk/instructions/sha256rnds2.rb +38 -40
  529. data/lib/fisk/instructions/shl.rb +376 -400
  530. data/lib/fisk/instructions/shld.rb +216 -228
  531. data/lib/fisk/instructions/shlx.rb +62 -66
  532. data/lib/fisk/instructions/shr.rb +376 -400
  533. data/lib/fisk/instructions/shrd.rb +216 -228
  534. data/lib/fisk/instructions/shrx.rb +62 -66
  535. data/lib/fisk/instructions/shufpd.rb +40 -42
  536. data/lib/fisk/instructions/shufps.rb +38 -40
  537. data/lib/fisk/instructions/sqrtpd.rb +36 -38
  538. data/lib/fisk/instructions/sqrtps.rb +34 -36
  539. data/lib/fisk/instructions/sqrtsd.rb +36 -38
  540. data/lib/fisk/instructions/sqrtss.rb +36 -38
  541. data/lib/fisk/instructions/stc.rb +11 -12
  542. data/lib/fisk/instructions/std.rb +11 -12
  543. data/lib/fisk/instructions/stmxcsr.rb +17 -18
  544. data/lib/fisk/instructions/sub.rb +505 -539
  545. data/lib/fisk/instructions/subpd.rb +36 -38
  546. data/lib/fisk/instructions/subps.rb +34 -36
  547. data/lib/fisk/instructions/subsd.rb +36 -38
  548. data/lib/fisk/instructions/subss.rb +36 -38
  549. data/lib/fisk/instructions/syscall.rb +12 -13
  550. data/lib/fisk/instructions/t1mskc.rb +58 -62
  551. data/lib/fisk/instructions/test.rb +305 -325
  552. data/lib/fisk/instructions/tzcnt.rb +106 -112
  553. data/lib/fisk/instructions/tzmsk.rb +58 -62
  554. data/lib/fisk/instructions/ucomisd.rb +36 -38
  555. data/lib/fisk/instructions/ucomiss.rb +34 -36
  556. data/lib/fisk/instructions/ud2.rb +12 -13
  557. data/lib/fisk/instructions/unpckhpd.rb +36 -38
  558. data/lib/fisk/instructions/unpckhps.rb +34 -36
  559. data/lib/fisk/instructions/unpcklpd.rb +36 -38
  560. data/lib/fisk/instructions/unpcklps.rb +34 -36
  561. data/lib/fisk/instructions/vaddpd.rb +153 -163
  562. data/lib/fisk/instructions/vaddps.rb +153 -163
  563. data/lib/fisk/instructions/vaddsd.rb +63 -67
  564. data/lib/fisk/instructions/vaddss.rb +63 -67
  565. data/lib/fisk/instructions/vaddsubpd.rb +62 -66
  566. data/lib/fisk/instructions/vaddsubps.rb +62 -66
  567. data/lib/fisk/instructions/vaesdec.rb +32 -34
  568. data/lib/fisk/instructions/vaesdeclast.rb +32 -34
  569. data/lib/fisk/instructions/vaesenc.rb +32 -34
  570. data/lib/fisk/instructions/vaesenclast.rb +32 -34
  571. data/lib/fisk/instructions/vaesimc.rb +30 -32
  572. data/lib/fisk/instructions/vaeskeygenassist.rb +34 -36
  573. data/lib/fisk/instructions/valignd.rb +104 -110
  574. data/lib/fisk/instructions/valignq.rb +104 -110
  575. data/lib/fisk/instructions/vandnpd.rb +152 -162
  576. data/lib/fisk/instructions/vandnps.rb +152 -162
  577. data/lib/fisk/instructions/vandpd.rb +152 -162
  578. data/lib/fisk/instructions/vandps.rb +152 -162
  579. data/lib/fisk/instructions/vblendmpd.rb +92 -98
  580. data/lib/fisk/instructions/vblendmps.rb +92 -98
  581. data/lib/fisk/instructions/vblendpd.rb +70 -74
  582. data/lib/fisk/instructions/vblendps.rb +70 -74
  583. data/lib/fisk/instructions/vblendvpd.rb +70 -74
  584. data/lib/fisk/instructions/vblendvps.rb +70 -74
  585. data/lib/fisk/instructions/vbroadcastf128.rb +16 -17
  586. data/lib/fisk/instructions/vbroadcastf32x2.rb +58 -62
  587. data/lib/fisk/instructions/vbroadcastf32x4.rb +30 -32
  588. data/lib/fisk/instructions/vbroadcastf32x8.rb +16 -17
  589. data/lib/fisk/instructions/vbroadcastf64x2.rb +30 -32
  590. data/lib/fisk/instructions/vbroadcastf64x4.rb +16 -17
  591. data/lib/fisk/instructions/vbroadcasti128.rb +16 -17
  592. data/lib/fisk/instructions/vbroadcasti32x2.rb +86 -92
  593. data/lib/fisk/instructions/vbroadcasti32x4.rb +30 -32
  594. data/lib/fisk/instructions/vbroadcasti32x8.rb +16 -17
  595. data/lib/fisk/instructions/vbroadcasti64x2.rb +30 -32
  596. data/lib/fisk/instructions/vbroadcasti64x4.rb +16 -17
  597. data/lib/fisk/instructions/vbroadcastsd.rb +86 -92
  598. data/lib/fisk/instructions/vbroadcastss.rb +114 -122
  599. data/lib/fisk/instructions/vcmppd.rb +173 -183
  600. data/lib/fisk/instructions/vcmpps.rb +173 -183
  601. data/lib/fisk/instructions/vcmpsd.rb +71 -75
  602. data/lib/fisk/instructions/vcmpss.rb +71 -75
  603. data/lib/fisk/instructions/vcomisd.rb +59 -63
  604. data/lib/fisk/instructions/vcomiss.rb +59 -63
  605. data/lib/fisk/instructions/vcompresspd.rb +86 -92
  606. data/lib/fisk/instructions/vcompressps.rb +86 -92
  607. data/lib/fisk/instructions/vcvtdq2pd.rb +142 -152
  608. data/lib/fisk/instructions/vcvtdq2ps.rb +143 -153
  609. data/lib/fisk/instructions/vcvtpd2dq.rb +143 -153
  610. data/lib/fisk/instructions/vcvtpd2ps.rb +143 -153
  611. data/lib/fisk/instructions/vcvtpd2qq.rb +87 -93
  612. data/lib/fisk/instructions/vcvtpd2udq.rb +87 -93
  613. data/lib/fisk/instructions/vcvtpd2uqq.rb +87 -93
  614. data/lib/fisk/instructions/vcvtph2ps.rb +143 -153
  615. data/lib/fisk/instructions/vcvtps2dq.rb +143 -153
  616. data/lib/fisk/instructions/vcvtps2pd.rb +143 -153
  617. data/lib/fisk/instructions/vcvtps2ph.rb +163 -173
  618. data/lib/fisk/instructions/vcvtps2qq.rb +87 -93
  619. data/lib/fisk/instructions/vcvtps2udq.rb +87 -93
  620. data/lib/fisk/instructions/vcvtps2uqq.rb +87 -93
  621. data/lib/fisk/instructions/vcvtqq2pd.rb +87 -93
  622. data/lib/fisk/instructions/vcvtqq2ps.rb +87 -93
  623. data/lib/fisk/instructions/vcvtsd2si.rb +116 -124
  624. data/lib/fisk/instructions/vcvtsd2ss.rb +63 -67
  625. data/lib/fisk/instructions/vcvtsd2usi.rb +60 -64
  626. data/lib/fisk/instructions/vcvtsi2sd.rb +123 -131
  627. data/lib/fisk/instructions/vcvtsi2ss.rb +124 -132
  628. data/lib/fisk/instructions/vcvtss2sd.rb +63 -67
  629. data/lib/fisk/instructions/vcvtss2si.rb +116 -124
  630. data/lib/fisk/instructions/vcvtss2usi.rb +60 -64
  631. data/lib/fisk/instructions/vcvttpd2dq.rb +143 -153
  632. data/lib/fisk/instructions/vcvttpd2qq.rb +87 -93
  633. data/lib/fisk/instructions/vcvttpd2udq.rb +87 -93
  634. data/lib/fisk/instructions/vcvttpd2uqq.rb +87 -93
  635. data/lib/fisk/instructions/vcvttps2dq.rb +143 -153
  636. data/lib/fisk/instructions/vcvttps2qq.rb +87 -93
  637. data/lib/fisk/instructions/vcvttps2udq.rb +87 -93
  638. data/lib/fisk/instructions/vcvttps2uqq.rb +87 -93
  639. data/lib/fisk/instructions/vcvttsd2si.rb +116 -124
  640. data/lib/fisk/instructions/vcvttsd2usi.rb +60 -64
  641. data/lib/fisk/instructions/vcvttss2si.rb +116 -124
  642. data/lib/fisk/instructions/vcvttss2usi.rb +60 -64
  643. data/lib/fisk/instructions/vcvtudq2pd.rb +86 -92
  644. data/lib/fisk/instructions/vcvtudq2ps.rb +87 -93
  645. data/lib/fisk/instructions/vcvtuqq2pd.rb +87 -93
  646. data/lib/fisk/instructions/vcvtuqq2ps.rb +87 -93
  647. data/lib/fisk/instructions/vcvtusi2sd.rb +63 -67
  648. data/lib/fisk/instructions/vcvtusi2ss.rb +64 -68
  649. data/lib/fisk/instructions/vdbpsadbw.rb +104 -110
  650. data/lib/fisk/instructions/vdivpd.rb +153 -163
  651. data/lib/fisk/instructions/vdivps.rb +153 -163
  652. data/lib/fisk/instructions/vdivsd.rb +63 -67
  653. data/lib/fisk/instructions/vdivss.rb +63 -67
  654. data/lib/fisk/instructions/vdppd.rb +36 -38
  655. data/lib/fisk/instructions/vdpps.rb +70 -74
  656. data/lib/fisk/instructions/vexp2pd.rb +31 -33
  657. data/lib/fisk/instructions/vexp2ps.rb +31 -33
  658. data/lib/fisk/instructions/vexpandpd.rb +86 -92
  659. data/lib/fisk/instructions/vexpandps.rb +86 -92
  660. data/lib/fisk/instructions/vextractf128.rb +34 -36
  661. data/lib/fisk/instructions/vextractf32x4.rb +66 -70
  662. data/lib/fisk/instructions/vextractf32x8.rb +34 -36
  663. data/lib/fisk/instructions/vextractf64x2.rb +66 -70
  664. data/lib/fisk/instructions/vextractf64x4.rb +34 -36
  665. data/lib/fisk/instructions/vextracti128.rb +34 -36
  666. data/lib/fisk/instructions/vextracti32x4.rb +66 -70
  667. data/lib/fisk/instructions/vextracti32x8.rb +34 -36
  668. data/lib/fisk/instructions/vextracti64x2.rb +66 -70
  669. data/lib/fisk/instructions/vextracti64x4.rb +34 -36
  670. data/lib/fisk/instructions/vextractps.rb +66 -70
  671. data/lib/fisk/instructions/vfixupimmpd.rb +105 -111
  672. data/lib/fisk/instructions/vfixupimmps.rb +105 -111
  673. data/lib/fisk/instructions/vfixupimmsd.rb +37 -39
  674. data/lib/fisk/instructions/vfixupimmss.rb +37 -39
  675. data/lib/fisk/instructions/vfmadd132pd.rb +153 -163
  676. data/lib/fisk/instructions/vfmadd132ps.rb +153 -163
  677. data/lib/fisk/instructions/vfmadd132sd.rb +63 -67
  678. data/lib/fisk/instructions/vfmadd132ss.rb +63 -67
  679. data/lib/fisk/instructions/vfmadd213pd.rb +153 -163
  680. data/lib/fisk/instructions/vfmadd213ps.rb +153 -163
  681. data/lib/fisk/instructions/vfmadd213sd.rb +63 -67
  682. data/lib/fisk/instructions/vfmadd213ss.rb +63 -67
  683. data/lib/fisk/instructions/vfmadd231pd.rb +153 -163
  684. data/lib/fisk/instructions/vfmadd231ps.rb +153 -163
  685. data/lib/fisk/instructions/vfmadd231sd.rb +63 -67
  686. data/lib/fisk/instructions/vfmadd231ss.rb +63 -67
  687. data/lib/fisk/instructions/vfmaddpd.rb +124 -132
  688. data/lib/fisk/instructions/vfmaddps.rb +124 -132
  689. data/lib/fisk/instructions/vfmaddsd.rb +63 -67
  690. data/lib/fisk/instructions/vfmaddss.rb +63 -67
  691. data/lib/fisk/instructions/vfmaddsub132pd.rb +153 -163
  692. data/lib/fisk/instructions/vfmaddsub132ps.rb +153 -163
  693. data/lib/fisk/instructions/vfmaddsub213pd.rb +153 -163
  694. data/lib/fisk/instructions/vfmaddsub213ps.rb +153 -163
  695. data/lib/fisk/instructions/vfmaddsub231pd.rb +153 -163
  696. data/lib/fisk/instructions/vfmaddsub231ps.rb +153 -163
  697. data/lib/fisk/instructions/vfmaddsubpd.rb +124 -132
  698. data/lib/fisk/instructions/vfmaddsubps.rb +124 -132
  699. data/lib/fisk/instructions/vfmsub132pd.rb +153 -163
  700. data/lib/fisk/instructions/vfmsub132ps.rb +153 -163
  701. data/lib/fisk/instructions/vfmsub132sd.rb +63 -67
  702. data/lib/fisk/instructions/vfmsub132ss.rb +63 -67
  703. data/lib/fisk/instructions/vfmsub213pd.rb +153 -163
  704. data/lib/fisk/instructions/vfmsub213ps.rb +153 -163
  705. data/lib/fisk/instructions/vfmsub213sd.rb +63 -67
  706. data/lib/fisk/instructions/vfmsub213ss.rb +63 -67
  707. data/lib/fisk/instructions/vfmsub231pd.rb +153 -163
  708. data/lib/fisk/instructions/vfmsub231ps.rb +153 -163
  709. data/lib/fisk/instructions/vfmsub231sd.rb +63 -67
  710. data/lib/fisk/instructions/vfmsub231ss.rb +63 -67
  711. data/lib/fisk/instructions/vfmsubadd132pd.rb +153 -163
  712. data/lib/fisk/instructions/vfmsubadd132ps.rb +153 -163
  713. data/lib/fisk/instructions/vfmsubadd213pd.rb +153 -163
  714. data/lib/fisk/instructions/vfmsubadd213ps.rb +153 -163
  715. data/lib/fisk/instructions/vfmsubadd231pd.rb +153 -163
  716. data/lib/fisk/instructions/vfmsubadd231ps.rb +153 -163
  717. data/lib/fisk/instructions/vfmsubaddpd.rb +124 -132
  718. data/lib/fisk/instructions/vfmsubaddps.rb +124 -132
  719. data/lib/fisk/instructions/vfmsubpd.rb +124 -132
  720. data/lib/fisk/instructions/vfmsubps.rb +124 -132
  721. data/lib/fisk/instructions/vfmsubsd.rb +63 -67
  722. data/lib/fisk/instructions/vfmsubss.rb +63 -67
  723. data/lib/fisk/instructions/vfnmadd132pd.rb +153 -163
  724. data/lib/fisk/instructions/vfnmadd132ps.rb +153 -163
  725. data/lib/fisk/instructions/vfnmadd132sd.rb +63 -67
  726. data/lib/fisk/instructions/vfnmadd132ss.rb +63 -67
  727. data/lib/fisk/instructions/vfnmadd213pd.rb +153 -163
  728. data/lib/fisk/instructions/vfnmadd213ps.rb +153 -163
  729. data/lib/fisk/instructions/vfnmadd213sd.rb +63 -67
  730. data/lib/fisk/instructions/vfnmadd213ss.rb +63 -67
  731. data/lib/fisk/instructions/vfnmadd231pd.rb +153 -163
  732. data/lib/fisk/instructions/vfnmadd231ps.rb +153 -163
  733. data/lib/fisk/instructions/vfnmadd231sd.rb +63 -67
  734. data/lib/fisk/instructions/vfnmadd231ss.rb +63 -67
  735. data/lib/fisk/instructions/vfnmaddpd.rb +124 -132
  736. data/lib/fisk/instructions/vfnmaddps.rb +124 -132
  737. data/lib/fisk/instructions/vfnmaddsd.rb +63 -67
  738. data/lib/fisk/instructions/vfnmaddss.rb +63 -67
  739. data/lib/fisk/instructions/vfnmsub132pd.rb +153 -163
  740. data/lib/fisk/instructions/vfnmsub132ps.rb +153 -163
  741. data/lib/fisk/instructions/vfnmsub132sd.rb +63 -67
  742. data/lib/fisk/instructions/vfnmsub132ss.rb +63 -67
  743. data/lib/fisk/instructions/vfnmsub213pd.rb +153 -163
  744. data/lib/fisk/instructions/vfnmsub213ps.rb +153 -163
  745. data/lib/fisk/instructions/vfnmsub213sd.rb +63 -67
  746. data/lib/fisk/instructions/vfnmsub213ss.rb +63 -67
  747. data/lib/fisk/instructions/vfnmsub231pd.rb +153 -163
  748. data/lib/fisk/instructions/vfnmsub231ps.rb +153 -163
  749. data/lib/fisk/instructions/vfnmsub231sd.rb +63 -67
  750. data/lib/fisk/instructions/vfnmsub231ss.rb +63 -67
  751. data/lib/fisk/instructions/vfnmsubpd.rb +124 -132
  752. data/lib/fisk/instructions/vfnmsubps.rb +124 -132
  753. data/lib/fisk/instructions/vfnmsubsd.rb +63 -67
  754. data/lib/fisk/instructions/vfnmsubss.rb +63 -67
  755. data/lib/fisk/instructions/vfpclasspd.rb +98 -104
  756. data/lib/fisk/instructions/vfpclassps.rb +98 -104
  757. data/lib/fisk/instructions/vfpclasssd.rb +34 -36
  758. data/lib/fisk/instructions/vfpclassss.rb +34 -36
  759. data/lib/fisk/instructions/vfrczpd.rb +58 -62
  760. data/lib/fisk/instructions/vfrczps.rb +58 -62
  761. data/lib/fisk/instructions/vfrczsd.rb +30 -32
  762. data/lib/fisk/instructions/vfrczss.rb +30 -32
  763. data/lib/fisk/instructions/vgatherdpd.rb +74 -79
  764. data/lib/fisk/instructions/vgatherdps.rb +74 -79
  765. data/lib/fisk/instructions/vgatherpf0dpd.rb +15 -16
  766. data/lib/fisk/instructions/vgatherpf0dps.rb +15 -16
  767. data/lib/fisk/instructions/vgatherpf0qpd.rb +15 -16
  768. data/lib/fisk/instructions/vgatherpf0qps.rb +15 -16
  769. data/lib/fisk/instructions/vgatherpf1dpd.rb +15 -16
  770. data/lib/fisk/instructions/vgatherpf1dps.rb +15 -16
  771. data/lib/fisk/instructions/vgatherpf1qpd.rb +15 -16
  772. data/lib/fisk/instructions/vgatherpf1qps.rb +15 -16
  773. data/lib/fisk/instructions/vgatherqpd.rb +74 -79
  774. data/lib/fisk/instructions/vgatherqps.rb +74 -79
  775. data/lib/fisk/instructions/vgetexppd.rb +87 -93
  776. data/lib/fisk/instructions/vgetexpps.rb +87 -93
  777. data/lib/fisk/instructions/vgetexpsd.rb +33 -35
  778. data/lib/fisk/instructions/vgetexpss.rb +33 -35
  779. data/lib/fisk/instructions/vgetmantpd.rb +99 -105
  780. data/lib/fisk/instructions/vgetmantps.rb +99 -105
  781. data/lib/fisk/instructions/vgetmantsd.rb +37 -39
  782. data/lib/fisk/instructions/vgetmantss.rb +37 -39
  783. data/lib/fisk/instructions/vhaddpd.rb +62 -66
  784. data/lib/fisk/instructions/vhaddps.rb +62 -66
  785. data/lib/fisk/instructions/vhsubpd.rb +62 -66
  786. data/lib/fisk/instructions/vhsubps.rb +62 -66
  787. data/lib/fisk/instructions/vinsertf128.rb +36 -38
  788. data/lib/fisk/instructions/vinsertf32x4.rb +70 -74
  789. data/lib/fisk/instructions/vinsertf32x8.rb +36 -38
  790. data/lib/fisk/instructions/vinsertf64x2.rb +70 -74
  791. data/lib/fisk/instructions/vinsertf64x4.rb +36 -38
  792. data/lib/fisk/instructions/vinserti128.rb +36 -38
  793. data/lib/fisk/instructions/vinserti32x4.rb +70 -74
  794. data/lib/fisk/instructions/vinserti32x8.rb +36 -38
  795. data/lib/fisk/instructions/vinserti64x2.rb +70 -74
  796. data/lib/fisk/instructions/vinserti64x4.rb +36 -38
  797. data/lib/fisk/instructions/vinsertps.rb +70 -74
  798. data/lib/fisk/instructions/vlddqu.rb +30 -32
  799. data/lib/fisk/instructions/vldmxcsr.rb +15 -16
  800. data/lib/fisk/instructions/vmaskmovdqu.rb +16 -17
  801. data/lib/fisk/instructions/vmaskmovpd.rb +62 -66
  802. data/lib/fisk/instructions/vmaskmovps.rb +62 -66
  803. data/lib/fisk/instructions/vmaxpd.rb +153 -163
  804. data/lib/fisk/instructions/vmaxps.rb +153 -163
  805. data/lib/fisk/instructions/vmaxsd.rb +63 -67
  806. data/lib/fisk/instructions/vmaxss.rb +63 -67
  807. data/lib/fisk/instructions/vminpd.rb +153 -163
  808. data/lib/fisk/instructions/vminps.rb +153 -163
  809. data/lib/fisk/instructions/vminsd.rb +63 -67
  810. data/lib/fisk/instructions/vminss.rb +63 -67
  811. data/lib/fisk/instructions/vmovapd.rb +257 -277
  812. data/lib/fisk/instructions/vmovaps.rb +257 -277
  813. data/lib/fisk/instructions/vmovd.rb +114 -122
  814. data/lib/fisk/instructions/vmovddup.rb +142 -152
  815. data/lib/fisk/instructions/vmovdqa.rb +104 -112
  816. data/lib/fisk/instructions/vmovdqa32.rb +155 -167
  817. data/lib/fisk/instructions/vmovdqa64.rb +155 -167
  818. data/lib/fisk/instructions/vmovdqu.rb +104 -112
  819. data/lib/fisk/instructions/vmovdqu16.rb +155 -167
  820. data/lib/fisk/instructions/vmovdqu32.rb +155 -167
  821. data/lib/fisk/instructions/vmovdqu64.rb +155 -167
  822. data/lib/fisk/instructions/vmovdqu8.rb +155 -167
  823. data/lib/fisk/instructions/vmovhlps.rb +32 -34
  824. data/lib/fisk/instructions/vmovhpd.rb +60 -64
  825. data/lib/fisk/instructions/vmovhps.rb +60 -64
  826. data/lib/fisk/instructions/vmovlhps.rb +32 -34
  827. data/lib/fisk/instructions/vmovlpd.rb +60 -64
  828. data/lib/fisk/instructions/vmovlps.rb +60 -64
  829. data/lib/fisk/instructions/vmovmskpd.rb +30 -32
  830. data/lib/fisk/instructions/vmovmskps.rb +30 -32
  831. data/lib/fisk/instructions/vmovntdq.rb +72 -77
  832. data/lib/fisk/instructions/vmovntdqa.rb +72 -77
  833. data/lib/fisk/instructions/vmovntpd.rb +72 -77
  834. data/lib/fisk/instructions/vmovntps.rb +72 -77
  835. data/lib/fisk/instructions/vmovq.rb +196 -212
  836. data/lib/fisk/instructions/vmovsd.rb +106 -114
  837. data/lib/fisk/instructions/vmovshdup.rb +142 -152
  838. data/lib/fisk/instructions/vmovsldup.rb +142 -152
  839. data/lib/fisk/instructions/vmovss.rb +106 -114
  840. data/lib/fisk/instructions/vmovupd.rb +257 -277
  841. data/lib/fisk/instructions/vmovups.rb +257 -277
  842. data/lib/fisk/instructions/vmpsadbw.rb +70 -74
  843. data/lib/fisk/instructions/vmulpd.rb +153 -163
  844. data/lib/fisk/instructions/vmulps.rb +153 -163
  845. data/lib/fisk/instructions/vmulsd.rb +63 -67
  846. data/lib/fisk/instructions/vmulss.rb +63 -67
  847. data/lib/fisk/instructions/vorpd.rb +152 -162
  848. data/lib/fisk/instructions/vorps.rb +152 -162
  849. data/lib/fisk/instructions/vpabsb.rb +142 -152
  850. data/lib/fisk/instructions/vpabsd.rb +142 -152
  851. data/lib/fisk/instructions/vpabsq.rb +86 -92
  852. data/lib/fisk/instructions/vpabsw.rb +142 -152
  853. data/lib/fisk/instructions/vpackssdw.rb +152 -162
  854. data/lib/fisk/instructions/vpacksswb.rb +152 -162
  855. data/lib/fisk/instructions/vpackusdw.rb +152 -162
  856. data/lib/fisk/instructions/vpackuswb.rb +152 -162
  857. data/lib/fisk/instructions/vpaddb.rb +152 -162
  858. data/lib/fisk/instructions/vpaddd.rb +152 -162
  859. data/lib/fisk/instructions/vpaddq.rb +152 -162
  860. data/lib/fisk/instructions/vpaddsb.rb +152 -162
  861. data/lib/fisk/instructions/vpaddsw.rb +152 -162
  862. data/lib/fisk/instructions/vpaddusb.rb +152 -162
  863. data/lib/fisk/instructions/vpaddusw.rb +152 -162
  864. data/lib/fisk/instructions/vpaddw.rb +152 -162
  865. data/lib/fisk/instructions/vpalignr.rb +172 -182
  866. data/lib/fisk/instructions/vpand.rb +62 -66
  867. data/lib/fisk/instructions/vpandd.rb +92 -98
  868. data/lib/fisk/instructions/vpandn.rb +62 -66
  869. data/lib/fisk/instructions/vpandnd.rb +92 -98
  870. data/lib/fisk/instructions/vpandnq.rb +92 -98
  871. data/lib/fisk/instructions/vpandq.rb +92 -98
  872. data/lib/fisk/instructions/vpavgb.rb +152 -162
  873. data/lib/fisk/instructions/vpavgw.rb +152 -162
  874. data/lib/fisk/instructions/vpblendd.rb +70 -74
  875. data/lib/fisk/instructions/vpblendmb.rb +92 -98
  876. data/lib/fisk/instructions/vpblendmd.rb +92 -98
  877. data/lib/fisk/instructions/vpblendmq.rb +92 -98
  878. data/lib/fisk/instructions/vpblendmw.rb +92 -98
  879. data/lib/fisk/instructions/vpblendvb.rb +70 -74
  880. data/lib/fisk/instructions/vpblendw.rb +70 -74
  881. data/lib/fisk/instructions/vpbroadcastb.rb +184 -197
  882. data/lib/fisk/instructions/vpbroadcastd.rb +184 -197
  883. data/lib/fisk/instructions/vpbroadcastmb2q.rb +44 -47
  884. data/lib/fisk/instructions/vpbroadcastmw2d.rb +44 -47
  885. data/lib/fisk/instructions/vpbroadcastq.rb +184 -197
  886. data/lib/fisk/instructions/vpbroadcastw.rb +184 -197
  887. data/lib/fisk/instructions/vpclmulqdq.rb +36 -38
  888. data/lib/fisk/instructions/vpcmov.rb +124 -132
  889. data/lib/fisk/instructions/vpcmpb.rb +104 -110
  890. data/lib/fisk/instructions/vpcmpd.rb +104 -110
  891. data/lib/fisk/instructions/vpcmpeqb.rb +152 -162
  892. data/lib/fisk/instructions/vpcmpeqd.rb +152 -162
  893. data/lib/fisk/instructions/vpcmpeqq.rb +152 -162
  894. data/lib/fisk/instructions/vpcmpeqw.rb +152 -162
  895. data/lib/fisk/instructions/vpcmpestri.rb +34 -36
  896. data/lib/fisk/instructions/vpcmpestrm.rb +34 -36
  897. data/lib/fisk/instructions/vpcmpgtb.rb +152 -162
  898. data/lib/fisk/instructions/vpcmpgtd.rb +152 -162
  899. data/lib/fisk/instructions/vpcmpgtq.rb +152 -162
  900. data/lib/fisk/instructions/vpcmpgtw.rb +152 -162
  901. data/lib/fisk/instructions/vpcmpistri.rb +34 -36
  902. data/lib/fisk/instructions/vpcmpistrm.rb +34 -36
  903. data/lib/fisk/instructions/vpcmpq.rb +104 -110
  904. data/lib/fisk/instructions/vpcmpub.rb +104 -110
  905. data/lib/fisk/instructions/vpcmpud.rb +104 -110
  906. data/lib/fisk/instructions/vpcmpuq.rb +104 -110
  907. data/lib/fisk/instructions/vpcmpuw.rb +104 -110
  908. data/lib/fisk/instructions/vpcmpw.rb +104 -110
  909. data/lib/fisk/instructions/vpcomb.rb +36 -38
  910. data/lib/fisk/instructions/vpcomd.rb +36 -38
  911. data/lib/fisk/instructions/vpcompressd.rb +86 -92
  912. data/lib/fisk/instructions/vpcompressq.rb +86 -92
  913. data/lib/fisk/instructions/vpcomq.rb +36 -38
  914. data/lib/fisk/instructions/vpcomub.rb +36 -38
  915. data/lib/fisk/instructions/vpcomud.rb +36 -38
  916. data/lib/fisk/instructions/vpcomuq.rb +36 -38
  917. data/lib/fisk/instructions/vpcomuw.rb +36 -38
  918. data/lib/fisk/instructions/vpcomw.rb +36 -38
  919. data/lib/fisk/instructions/vpconflictd.rb +86 -92
  920. data/lib/fisk/instructions/vpconflictq.rb +86 -92
  921. data/lib/fisk/instructions/vperm2f128.rb +36 -38
  922. data/lib/fisk/instructions/vperm2i128.rb +36 -38
  923. data/lib/fisk/instructions/vpermb.rb +92 -98
  924. data/lib/fisk/instructions/vpermd.rb +92 -98
  925. data/lib/fisk/instructions/vpermi2b.rb +92 -98
  926. data/lib/fisk/instructions/vpermi2d.rb +92 -98
  927. data/lib/fisk/instructions/vpermi2pd.rb +92 -98
  928. data/lib/fisk/instructions/vpermi2ps.rb +92 -98
  929. data/lib/fisk/instructions/vpermi2q.rb +92 -98
  930. data/lib/fisk/instructions/vpermi2w.rb +92 -98
  931. data/lib/fisk/instructions/vpermil2pd.rb +130 -138
  932. data/lib/fisk/instructions/vpermil2ps.rb +130 -138
  933. data/lib/fisk/instructions/vpermilpd.rb +312 -332
  934. data/lib/fisk/instructions/vpermilps.rb +312 -332
  935. data/lib/fisk/instructions/vpermpd.rb +158 -168
  936. data/lib/fisk/instructions/vpermps.rb +92 -98
  937. data/lib/fisk/instructions/vpermq.rb +158 -168
  938. data/lib/fisk/instructions/vpermt2b.rb +92 -98
  939. data/lib/fisk/instructions/vpermt2d.rb +92 -98
  940. data/lib/fisk/instructions/vpermt2pd.rb +92 -98
  941. data/lib/fisk/instructions/vpermt2ps.rb +92 -98
  942. data/lib/fisk/instructions/vpermt2q.rb +92 -98
  943. data/lib/fisk/instructions/vpermt2w.rb +92 -98
  944. data/lib/fisk/instructions/vpermw.rb +92 -98
  945. data/lib/fisk/instructions/vpexpandd.rb +86 -92
  946. data/lib/fisk/instructions/vpexpandq.rb +86 -92
  947. data/lib/fisk/instructions/vpextrb.rb +66 -70
  948. data/lib/fisk/instructions/vpextrd.rb +66 -70
  949. data/lib/fisk/instructions/vpextrq.rb +66 -70
  950. data/lib/fisk/instructions/vpextrw.rb +86 -92
  951. data/lib/fisk/instructions/vpgatherdd.rb +74 -79
  952. data/lib/fisk/instructions/vpgatherdq.rb +74 -79
  953. data/lib/fisk/instructions/vpgatherqd.rb +74 -79
  954. data/lib/fisk/instructions/vpgatherqq.rb +74 -79
  955. data/lib/fisk/instructions/vphaddbd.rb +30 -32
  956. data/lib/fisk/instructions/vphaddbq.rb +30 -32
  957. data/lib/fisk/instructions/vphaddbw.rb +30 -32
  958. data/lib/fisk/instructions/vphaddd.rb +62 -66
  959. data/lib/fisk/instructions/vphadddq.rb +30 -32
  960. data/lib/fisk/instructions/vphaddsw.rb +62 -66
  961. data/lib/fisk/instructions/vphaddubd.rb +30 -32
  962. data/lib/fisk/instructions/vphaddubq.rb +30 -32
  963. data/lib/fisk/instructions/vphaddubw.rb +30 -32
  964. data/lib/fisk/instructions/vphaddudq.rb +30 -32
  965. data/lib/fisk/instructions/vphadduwd.rb +30 -32
  966. data/lib/fisk/instructions/vphadduwq.rb +30 -32
  967. data/lib/fisk/instructions/vphaddw.rb +62 -66
  968. data/lib/fisk/instructions/vphaddwd.rb +30 -32
  969. data/lib/fisk/instructions/vphaddwq.rb +30 -32
  970. data/lib/fisk/instructions/vphminposuw.rb +30 -32
  971. data/lib/fisk/instructions/vphsubbw.rb +30 -32
  972. data/lib/fisk/instructions/vphsubd.rb +62 -66
  973. data/lib/fisk/instructions/vphsubdq.rb +30 -32
  974. data/lib/fisk/instructions/vphsubsw.rb +62 -66
  975. data/lib/fisk/instructions/vphsubw.rb +62 -66
  976. data/lib/fisk/instructions/vphsubwd.rb +30 -32
  977. data/lib/fisk/instructions/vpinsrb.rb +70 -74
  978. data/lib/fisk/instructions/vpinsrd.rb +70 -74
  979. data/lib/fisk/instructions/vpinsrq.rb +70 -74
  980. data/lib/fisk/instructions/vpinsrw.rb +70 -74
  981. data/lib/fisk/instructions/vplzcntd.rb +86 -92
  982. data/lib/fisk/instructions/vplzcntq.rb +86 -92
  983. data/lib/fisk/instructions/vpmacsdd.rb +36 -38
  984. data/lib/fisk/instructions/vpmacsdqh.rb +36 -38
  985. data/lib/fisk/instructions/vpmacsdql.rb +36 -38
  986. data/lib/fisk/instructions/vpmacssdd.rb +36 -38
  987. data/lib/fisk/instructions/vpmacssdqh.rb +36 -38
  988. data/lib/fisk/instructions/vpmacssdql.rb +36 -38
  989. data/lib/fisk/instructions/vpmacsswd.rb +36 -38
  990. data/lib/fisk/instructions/vpmacssww.rb +36 -38
  991. data/lib/fisk/instructions/vpmacswd.rb +36 -38
  992. data/lib/fisk/instructions/vpmacsww.rb +36 -38
  993. data/lib/fisk/instructions/vpmadcsswd.rb +36 -38
  994. data/lib/fisk/instructions/vpmadcswd.rb +36 -38
  995. data/lib/fisk/instructions/vpmadd52huq.rb +92 -98
  996. data/lib/fisk/instructions/vpmadd52luq.rb +92 -98
  997. data/lib/fisk/instructions/vpmaddubsw.rb +152 -162
  998. data/lib/fisk/instructions/vpmaddwd.rb +152 -162
  999. data/lib/fisk/instructions/vpmaskmovd.rb +62 -66
  1000. data/lib/fisk/instructions/vpmaskmovq.rb +62 -66
  1001. data/lib/fisk/instructions/vpmaxsb.rb +152 -162
  1002. data/lib/fisk/instructions/vpmaxsd.rb +152 -162
  1003. data/lib/fisk/instructions/vpmaxsq.rb +92 -98
  1004. data/lib/fisk/instructions/vpmaxsw.rb +152 -162
  1005. data/lib/fisk/instructions/vpmaxub.rb +152 -162
  1006. data/lib/fisk/instructions/vpmaxud.rb +152 -162
  1007. data/lib/fisk/instructions/vpmaxuq.rb +92 -98
  1008. data/lib/fisk/instructions/vpmaxuw.rb +152 -162
  1009. data/lib/fisk/instructions/vpminsb.rb +152 -162
  1010. data/lib/fisk/instructions/vpminsd.rb +152 -162
  1011. data/lib/fisk/instructions/vpminsq.rb +92 -98
  1012. data/lib/fisk/instructions/vpminsw.rb +152 -162
  1013. data/lib/fisk/instructions/vpminub.rb +152 -162
  1014. data/lib/fisk/instructions/vpminud.rb +152 -162
  1015. data/lib/fisk/instructions/vpminuq.rb +92 -98
  1016. data/lib/fisk/instructions/vpminuw.rb +152 -162
  1017. data/lib/fisk/instructions/vpmovb2m.rb +44 -47
  1018. data/lib/fisk/instructions/vpmovd2m.rb +44 -47
  1019. data/lib/fisk/instructions/vpmovdb.rb +86 -92
  1020. data/lib/fisk/instructions/vpmovdw.rb +86 -92
  1021. data/lib/fisk/instructions/vpmovm2b.rb +44 -47
  1022. data/lib/fisk/instructions/vpmovm2d.rb +44 -47
  1023. data/lib/fisk/instructions/vpmovm2q.rb +44 -47
  1024. data/lib/fisk/instructions/vpmovm2w.rb +44 -47
  1025. data/lib/fisk/instructions/vpmovmskb.rb +30 -32
  1026. data/lib/fisk/instructions/vpmovq2m.rb +44 -47
  1027. data/lib/fisk/instructions/vpmovqb.rb +86 -92
  1028. data/lib/fisk/instructions/vpmovqd.rb +86 -92
  1029. data/lib/fisk/instructions/vpmovqw.rb +86 -92
  1030. data/lib/fisk/instructions/vpmovsdb.rb +86 -92
  1031. data/lib/fisk/instructions/vpmovsdw.rb +86 -92
  1032. data/lib/fisk/instructions/vpmovsqb.rb +86 -92
  1033. data/lib/fisk/instructions/vpmovsqd.rb +86 -92
  1034. data/lib/fisk/instructions/vpmovsqw.rb +86 -92
  1035. data/lib/fisk/instructions/vpmovswb.rb +86 -92
  1036. data/lib/fisk/instructions/vpmovsxbd.rb +142 -152
  1037. data/lib/fisk/instructions/vpmovsxbq.rb +142 -152
  1038. data/lib/fisk/instructions/vpmovsxbw.rb +142 -152
  1039. data/lib/fisk/instructions/vpmovsxdq.rb +142 -152
  1040. data/lib/fisk/instructions/vpmovsxwd.rb +142 -152
  1041. data/lib/fisk/instructions/vpmovsxwq.rb +142 -152
  1042. data/lib/fisk/instructions/vpmovusdb.rb +86 -92
  1043. data/lib/fisk/instructions/vpmovusdw.rb +86 -92
  1044. data/lib/fisk/instructions/vpmovusqb.rb +86 -92
  1045. data/lib/fisk/instructions/vpmovusqd.rb +86 -92
  1046. data/lib/fisk/instructions/vpmovusqw.rb +86 -92
  1047. data/lib/fisk/instructions/vpmovuswb.rb +86 -92
  1048. data/lib/fisk/instructions/vpmovw2m.rb +44 -47
  1049. data/lib/fisk/instructions/vpmovwb.rb +86 -92
  1050. data/lib/fisk/instructions/vpmovzxbd.rb +142 -152
  1051. data/lib/fisk/instructions/vpmovzxbq.rb +142 -152
  1052. data/lib/fisk/instructions/vpmovzxbw.rb +142 -152
  1053. data/lib/fisk/instructions/vpmovzxdq.rb +142 -152
  1054. data/lib/fisk/instructions/vpmovzxwd.rb +142 -152
  1055. data/lib/fisk/instructions/vpmovzxwq.rb +142 -152
  1056. data/lib/fisk/instructions/vpmuldq.rb +152 -162
  1057. data/lib/fisk/instructions/vpmulhrsw.rb +152 -162
  1058. data/lib/fisk/instructions/vpmulhuw.rb +152 -162
  1059. data/lib/fisk/instructions/vpmulhw.rb +152 -162
  1060. data/lib/fisk/instructions/vpmulld.rb +152 -162
  1061. data/lib/fisk/instructions/vpmullq.rb +92 -98
  1062. data/lib/fisk/instructions/vpmullw.rb +152 -162
  1063. data/lib/fisk/instructions/vpmultishiftqb.rb +92 -98
  1064. data/lib/fisk/instructions/vpmuludq.rb +152 -162
  1065. data/lib/fisk/instructions/vpopcntd.rb +30 -32
  1066. data/lib/fisk/instructions/vpopcntq.rb +30 -32
  1067. data/lib/fisk/instructions/vpor.rb +62 -66
  1068. data/lib/fisk/instructions/vpord.rb +92 -98
  1069. data/lib/fisk/instructions/vporq.rb +92 -98
  1070. data/lib/fisk/instructions/vpperm.rb +63 -67
  1071. data/lib/fisk/instructions/vprold.rb +98 -104
  1072. data/lib/fisk/instructions/vprolq.rb +98 -104
  1073. data/lib/fisk/instructions/vprolvd.rb +92 -98
  1074. data/lib/fisk/instructions/vprolvq.rb +92 -98
  1075. data/lib/fisk/instructions/vprord.rb +98 -104
  1076. data/lib/fisk/instructions/vprorq.rb +98 -104
  1077. data/lib/fisk/instructions/vprorvd.rb +92 -98
  1078. data/lib/fisk/instructions/vprorvq.rb +92 -98
  1079. data/lib/fisk/instructions/vprotb.rb +88 -94
  1080. data/lib/fisk/instructions/vprotd.rb +88 -94
  1081. data/lib/fisk/instructions/vprotq.rb +88 -94
  1082. data/lib/fisk/instructions/vprotw.rb +88 -94
  1083. data/lib/fisk/instructions/vpsadbw.rb +152 -162
  1084. data/lib/fisk/instructions/vpscatterdd.rb +44 -47
  1085. data/lib/fisk/instructions/vpscatterdq.rb +44 -47
  1086. data/lib/fisk/instructions/vpscatterqd.rb +44 -47
  1087. data/lib/fisk/instructions/vpscatterqq.rb +44 -47
  1088. data/lib/fisk/instructions/vpshab.rb +56 -60
  1089. data/lib/fisk/instructions/vpshad.rb +56 -60
  1090. data/lib/fisk/instructions/vpshaq.rb +56 -60
  1091. data/lib/fisk/instructions/vpshaw.rb +56 -60
  1092. data/lib/fisk/instructions/vpshlb.rb +56 -60
  1093. data/lib/fisk/instructions/vpshld.rb +56 -60
  1094. data/lib/fisk/instructions/vpshlq.rb +56 -60
  1095. data/lib/fisk/instructions/vpshlw.rb +56 -60
  1096. data/lib/fisk/instructions/vpshufb.rb +152 -162
  1097. data/lib/fisk/instructions/vpshufd.rb +162 -172
  1098. data/lib/fisk/instructions/vpshufhw.rb +162 -172
  1099. data/lib/fisk/instructions/vpshuflw.rb +162 -172
  1100. data/lib/fisk/instructions/vpsignb.rb +62 -66
  1101. data/lib/fisk/instructions/vpsignd.rb +62 -66
  1102. data/lib/fisk/instructions/vpsignw.rb +62 -66
  1103. data/lib/fisk/instructions/vpslld.rb +280 -298
  1104. data/lib/fisk/instructions/vpslldq.rb +130 -138
  1105. data/lib/fisk/instructions/vpsllq.rb +280 -298
  1106. data/lib/fisk/instructions/vpsllvd.rb +152 -162
  1107. data/lib/fisk/instructions/vpsllvq.rb +152 -162
  1108. data/lib/fisk/instructions/vpsllvw.rb +92 -98
  1109. data/lib/fisk/instructions/vpsllw.rb +280 -298
  1110. data/lib/fisk/instructions/vpsrad.rb +280 -298
  1111. data/lib/fisk/instructions/vpsraq.rb +188 -200
  1112. data/lib/fisk/instructions/vpsravd.rb +152 -162
  1113. data/lib/fisk/instructions/vpsravq.rb +92 -98
  1114. data/lib/fisk/instructions/vpsravw.rb +92 -98
  1115. data/lib/fisk/instructions/vpsraw.rb +280 -298
  1116. data/lib/fisk/instructions/vpsrld.rb +280 -298
  1117. data/lib/fisk/instructions/vpsrldq.rb +130 -138
  1118. data/lib/fisk/instructions/vpsrlq.rb +280 -298
  1119. data/lib/fisk/instructions/vpsrlvd.rb +152 -162
  1120. data/lib/fisk/instructions/vpsrlvq.rb +152 -162
  1121. data/lib/fisk/instructions/vpsrlvw.rb +92 -98
  1122. data/lib/fisk/instructions/vpsrlw.rb +280 -298
  1123. data/lib/fisk/instructions/vpsubb.rb +152 -162
  1124. data/lib/fisk/instructions/vpsubd.rb +152 -162
  1125. data/lib/fisk/instructions/vpsubq.rb +152 -162
  1126. data/lib/fisk/instructions/vpsubsb.rb +152 -162
  1127. data/lib/fisk/instructions/vpsubsw.rb +152 -162
  1128. data/lib/fisk/instructions/vpsubusb.rb +152 -162
  1129. data/lib/fisk/instructions/vpsubusw.rb +152 -162
  1130. data/lib/fisk/instructions/vpsubw.rb +152 -162
  1131. data/lib/fisk/instructions/vpternlogd.rb +104 -110
  1132. data/lib/fisk/instructions/vpternlogq.rb +104 -110
  1133. data/lib/fisk/instructions/vptest.rb +58 -62
  1134. data/lib/fisk/instructions/vptestmb.rb +92 -98
  1135. data/lib/fisk/instructions/vptestmd.rb +92 -98
  1136. data/lib/fisk/instructions/vptestmq.rb +92 -98
  1137. data/lib/fisk/instructions/vptestmw.rb +92 -98
  1138. data/lib/fisk/instructions/vptestnmb.rb +92 -98
  1139. data/lib/fisk/instructions/vptestnmd.rb +92 -98
  1140. data/lib/fisk/instructions/vptestnmq.rb +92 -98
  1141. data/lib/fisk/instructions/vptestnmw.rb +92 -98
  1142. data/lib/fisk/instructions/vpunpckhbw.rb +152 -162
  1143. data/lib/fisk/instructions/vpunpckhdq.rb +152 -162
  1144. data/lib/fisk/instructions/vpunpckhqdq.rb +152 -162
  1145. data/lib/fisk/instructions/vpunpckhwd.rb +152 -162
  1146. data/lib/fisk/instructions/vpunpcklbw.rb +152 -162
  1147. data/lib/fisk/instructions/vpunpckldq.rb +152 -162
  1148. data/lib/fisk/instructions/vpunpcklqdq.rb +152 -162
  1149. data/lib/fisk/instructions/vpunpcklwd.rb +152 -162
  1150. data/lib/fisk/instructions/vpxor.rb +62 -66
  1151. data/lib/fisk/instructions/vpxord.rb +92 -98
  1152. data/lib/fisk/instructions/vpxorq.rb +92 -98
  1153. data/lib/fisk/instructions/vrangepd.rb +105 -111
  1154. data/lib/fisk/instructions/vrangeps.rb +105 -111
  1155. data/lib/fisk/instructions/vrangesd.rb +37 -39
  1156. data/lib/fisk/instructions/vrangess.rb +37 -39
  1157. data/lib/fisk/instructions/vrcp14pd.rb +86 -92
  1158. data/lib/fisk/instructions/vrcp14ps.rb +86 -92
  1159. data/lib/fisk/instructions/vrcp14sd.rb +32 -34
  1160. data/lib/fisk/instructions/vrcp14ss.rb +32 -34
  1161. data/lib/fisk/instructions/vrcp28pd.rb +31 -33
  1162. data/lib/fisk/instructions/vrcp28ps.rb +31 -33
  1163. data/lib/fisk/instructions/vrcp28sd.rb +33 -35
  1164. data/lib/fisk/instructions/vrcp28ss.rb +33 -35
  1165. data/lib/fisk/instructions/vrcpps.rb +58 -62
  1166. data/lib/fisk/instructions/vrcpss.rb +32 -34
  1167. data/lib/fisk/instructions/vreducepd.rb +98 -104
  1168. data/lib/fisk/instructions/vreduceps.rb +98 -104
  1169. data/lib/fisk/instructions/vreducesd.rb +36 -38
  1170. data/lib/fisk/instructions/vreducess.rb +36 -38
  1171. data/lib/fisk/instructions/vrndscalepd.rb +99 -105
  1172. data/lib/fisk/instructions/vrndscaleps.rb +99 -105
  1173. data/lib/fisk/instructions/vrndscalesd.rb +37 -39
  1174. data/lib/fisk/instructions/vrndscaless.rb +37 -39
  1175. data/lib/fisk/instructions/vroundpd.rb +66 -70
  1176. data/lib/fisk/instructions/vroundps.rb +66 -70
  1177. data/lib/fisk/instructions/vroundsd.rb +36 -38
  1178. data/lib/fisk/instructions/vroundss.rb +36 -38
  1179. data/lib/fisk/instructions/vrsqrt14pd.rb +86 -92
  1180. data/lib/fisk/instructions/vrsqrt14ps.rb +86 -92
  1181. data/lib/fisk/instructions/vrsqrt14sd.rb +32 -34
  1182. data/lib/fisk/instructions/vrsqrt14ss.rb +32 -34
  1183. data/lib/fisk/instructions/vrsqrt28pd.rb +31 -33
  1184. data/lib/fisk/instructions/vrsqrt28ps.rb +31 -33
  1185. data/lib/fisk/instructions/vrsqrt28sd.rb +33 -35
  1186. data/lib/fisk/instructions/vrsqrt28ss.rb +33 -35
  1187. data/lib/fisk/instructions/vrsqrtps.rb +58 -62
  1188. data/lib/fisk/instructions/vrsqrtss.rb +32 -34
  1189. data/lib/fisk/instructions/vscalefpd.rb +93 -99
  1190. data/lib/fisk/instructions/vscalefps.rb +93 -99
  1191. data/lib/fisk/instructions/vscalefsd.rb +33 -35
  1192. data/lib/fisk/instructions/vscalefss.rb +33 -35
  1193. data/lib/fisk/instructions/vscatterdpd.rb +44 -47
  1194. data/lib/fisk/instructions/vscatterdps.rb +44 -47
  1195. data/lib/fisk/instructions/vscatterpf0dpd.rb +15 -16
  1196. data/lib/fisk/instructions/vscatterpf0dps.rb +15 -16
  1197. data/lib/fisk/instructions/vscatterpf0qpd.rb +15 -16
  1198. data/lib/fisk/instructions/vscatterpf0qps.rb +15 -16
  1199. data/lib/fisk/instructions/vscatterpf1dpd.rb +15 -16
  1200. data/lib/fisk/instructions/vscatterpf1dps.rb +15 -16
  1201. data/lib/fisk/instructions/vscatterpf1qpd.rb +15 -16
  1202. data/lib/fisk/instructions/vscatterpf1qps.rb +15 -16
  1203. data/lib/fisk/instructions/vscatterqpd.rb +44 -47
  1204. data/lib/fisk/instructions/vscatterqps.rb +44 -47
  1205. data/lib/fisk/instructions/vshuff32x4.rb +70 -74
  1206. data/lib/fisk/instructions/vshuff64x2.rb +70 -74
  1207. data/lib/fisk/instructions/vshufi32x4.rb +70 -74
  1208. data/lib/fisk/instructions/vshufi64x2.rb +70 -74
  1209. data/lib/fisk/instructions/vshufpd.rb +172 -182
  1210. data/lib/fisk/instructions/vshufps.rb +172 -182
  1211. data/lib/fisk/instructions/vsqrtpd.rb +143 -153
  1212. data/lib/fisk/instructions/vsqrtps.rb +143 -153
  1213. data/lib/fisk/instructions/vsqrtsd.rb +63 -67
  1214. data/lib/fisk/instructions/vsqrtss.rb +63 -67
  1215. data/lib/fisk/instructions/vstmxcsr.rb +15 -16
  1216. data/lib/fisk/instructions/vsubpd.rb +153 -163
  1217. data/lib/fisk/instructions/vsubps.rb +153 -163
  1218. data/lib/fisk/instructions/vsubsd.rb +63 -67
  1219. data/lib/fisk/instructions/vsubss.rb +63 -67
  1220. data/lib/fisk/instructions/vtestpd.rb +58 -62
  1221. data/lib/fisk/instructions/vtestps.rb +58 -62
  1222. data/lib/fisk/instructions/vucomisd.rb +59 -63
  1223. data/lib/fisk/instructions/vucomiss.rb +59 -63
  1224. data/lib/fisk/instructions/vunpckhpd.rb +152 -162
  1225. data/lib/fisk/instructions/vunpckhps.rb +152 -162
  1226. data/lib/fisk/instructions/vunpcklpd.rb +152 -162
  1227. data/lib/fisk/instructions/vunpcklps.rb +152 -162
  1228. data/lib/fisk/instructions/vxorpd.rb +152 -162
  1229. data/lib/fisk/instructions/vxorps.rb +152 -162
  1230. data/lib/fisk/instructions/vzeroall.rb +12 -13
  1231. data/lib/fisk/instructions/vzeroupper.rb +12 -13
  1232. data/lib/fisk/instructions/xadd.rb +132 -140
  1233. data/lib/fisk/instructions/xchg.rb +306 -328
  1234. data/lib/fisk/instructions/xgetbv.rb +13 -14
  1235. data/lib/fisk/instructions/xlatb.rb +22 -24
  1236. data/lib/fisk/instructions/xor.rb +505 -539
  1237. data/lib/fisk/instructions/xorpd.rb +36 -38
  1238. data/lib/fisk/instructions/xorps.rb +34 -36
  1239. data/lib/fisk/version.rb +1 -1
  1240. data/test/test_cfg.rb +1 -2
  1241. data/test/test_fisk.rb +228 -0
  1242. data/test/test_fisk_written_size.rb +21 -0
  1243. data/test/test_register_allocation.rb +19 -0
  1244. data/test/test_run_fisk.rb +16 -0
  1245. metadata +63 -3
data/lib/fisk/encoding.rb CHANGED
@@ -2,11 +2,11 @@ class Fisk
2
2
  class Encoding
3
3
  private
4
4
 
5
- def add_modrm buffer, operands, mode, reg, rm
5
+ def add_modrm buffer, mode, reg, rm, operands
6
6
  offset_bytes = 0
7
- if mem = operands.find(&:m64?)
7
+ if mem = operands.find(&:memory?)
8
8
  if mem.displacement != 0
9
- if 0xFF == mem.displacement | 0xFF
9
+ if mem.displacement >= -0x7F - 1 && mem.displacement < 0x7F
10
10
  offset_bytes = 1
11
11
  mode |= 0x1
12
12
  else
@@ -19,7 +19,61 @@ class Fisk
19
19
  rm = rm & 0x7
20
20
  buffer.putc ((mode << 6) | (reg << 3) | rm)
21
21
  if mem && mem.displacement != 0
22
- write_num buffer, mem.displacement, offset_bytes
22
+ 1 + write_num(buffer, mem.displacement, offset_bytes)
23
+ else
24
+ 1
25
+ end
26
+ end
27
+
28
+ # Add ModRM with one mem operand and one register operand
29
+ def add_modrm_mem_reg buffer, mode, reg, rm, operands
30
+ add_modrm_mem_reg_ buffer, mode, reg, rm, operands[0], operands[1]
31
+ end
32
+
33
+ # Add ModRM with one mem operand and one register operand
34
+ def add_modrm_reg_mem buffer, mode, reg, rm, operands
35
+ add_modrm_mem_reg_ buffer, mode, reg, rm, operands[1], operands[0]
36
+ end
37
+
38
+ def add_modrm_mem_reg_ buffer, mode, reg, rm, mem, reg_opnd
39
+ offset_bytes = 0
40
+
41
+ if mem.rip?
42
+ buffer.putc 0x5 + ((reg_opnd.value % 8) * 8)
43
+ return 1 + write_num(buffer, mem.displacement, 4)
44
+ end
45
+
46
+ if mem.displacement != 0
47
+ if mem.displacement >= -0x7F - 1 && mem.displacement < 0x7F
48
+ offset_bytes = 1
49
+ mode |= 0x1
50
+ else
51
+ offset_bytes = 4
52
+ mode |= 0x2
53
+ end
54
+ end
55
+
56
+ reg = reg & 0x7
57
+ rm = rm & 0x7
58
+ buffer.putc ((mode << 6) | (reg << 3) | rm)
59
+
60
+ if mem.displacement != 0
61
+ 1 + write_num(buffer, mem.displacement, offset_bytes)
62
+ else
63
+ 1
64
+ end
65
+ end
66
+
67
+ # Add ModRM with two register operands
68
+ def add_modrm_reg_reg buffer, mode, reg, rm, operands
69
+ if rip = operands.find(&:rip?)
70
+ buffer.putc 0x5
71
+ 1 + write_num(buffer, rip.displacement, 4)
72
+ else
73
+ reg = reg & 0x7
74
+ rm = rm & 0x7
75
+ buffer.putc ((mode << 6) | (reg << 3) | rm)
76
+ 1
23
77
  end
24
78
  end
25
79
 
@@ -36,7 +90,7 @@ class Fisk
36
90
  end
37
91
 
38
92
  def add_rex buffer, operands, mandatory, w, r, x, b
39
- return if mandatory == false && !operands.any?(&:extended_register?)
93
+ return 0 if mandatory == false && !operands.any?(&:extended_register?)
40
94
 
41
95
  rex = 0b0100
42
96
  rex = (rex << 1) | w
@@ -44,11 +98,13 @@ class Fisk
44
98
  rex = (rex << 1) | x
45
99
  rex = (rex << 1) | b
46
100
  buffer.putc rex
101
+ 1
47
102
  end
48
103
 
49
104
  def add_opcode buffer, byte, addend
50
105
  byte |= addend
51
106
  buffer.putc byte
107
+ 1
52
108
  end
53
109
 
54
110
  def write_num buffer, num, size
@@ -56,6 +112,12 @@ class Fisk
56
112
  buffer.putc(num & 0xFF)
57
113
  num >>= 8
58
114
  }
115
+ size
116
+ end
117
+
118
+ def add_prefix buffer, operands, byte, mandatory
119
+ buffer.putc byte
120
+ 1
59
121
  end
60
122
  end
61
123
  end
data/lib/fisk/errors.rb CHANGED
@@ -15,5 +15,10 @@ class Fisk
15
15
  # allocation was requested
16
16
  class UnreleasedRegisterError < Error
17
17
  end
18
+
19
+ # Raised when a temporary register hasn't been assigned a real register,
20
+ # but it's used in the encoding process.
21
+ class UnassignedRegister < Error
22
+ end
18
23
  end
19
24
  end
@@ -3,758 +3,724 @@
3
3
  class Fisk
4
4
  module Instructions
5
5
  # Instruction ADC
6
- forms = []
7
- operands = []
8
- encodings = []
6
+ ADC = Instruction.new("ADC", [
9
7
  # adcb: al, imm8
10
- operands << OPERAND_TYPES[0]
11
- operands << OPERAND_TYPES[1]
12
- encodings << Class.new(Fisk::Encoding) {
13
- def encode buffer, operands
14
- add_opcode buffer, 0x14, 0
15
- add_immediate buffer, operands[1].op_value, 1
16
- end
17
-
18
- def bytesize; 2; end
19
- }.new
20
- forms << Form.new(operands, encodings)
21
- operands = []
22
- encodings = []
8
+ Form.new([
9
+ OPERAND_TYPES[0],
10
+ OPERAND_TYPES[1],
11
+ ].freeze, [
12
+ Class.new(Fisk::Encoding) {
13
+ def encode buffer, operands
14
+ add_opcode(buffer, 0x14, 0) +
15
+ add_immediate(buffer, operands[1].op_value, 1) +
16
+ 0
17
+ end
18
+ }.new.freeze,
19
+ ].freeze).freeze,
23
20
  # adcb: r8, imm8
24
- operands << OPERAND_TYPES[2]
25
- operands << OPERAND_TYPES[1]
26
- encodings << Class.new(Fisk::Encoding) {
27
- def encode buffer, operands
28
- add_rex(buffer, operands,
21
+ Form.new([
22
+ OPERAND_TYPES[2],
23
+ OPERAND_TYPES[1],
24
+ ].freeze, [
25
+ Class.new(Fisk::Encoding) {
26
+ def encode buffer, operands
27
+ add_rex(buffer, operands,
29
28
  false,
30
29
  0,
31
30
  0,
32
31
  0,
33
- operands[0].rex_value)
34
- add_opcode buffer, 0x80, 0
35
- add_modrm(buffer, operands,
32
+ operands[0].rex_value) +
33
+ add_opcode(buffer, 0x80, 0) +
34
+ add_modrm(buffer,
36
35
  3,
37
36
  2,
38
- operands[0].op_value)
39
- add_immediate buffer, operands[1].op_value, 1
40
- end
41
-
42
- def bytesize; 3; end
43
- }.new
44
- forms << Form.new(operands, encodings)
45
- operands = []
46
- encodings = []
37
+ operands[0].op_value, operands) +
38
+ add_immediate(buffer, operands[1].op_value, 1) +
39
+ 0
40
+ end
41
+ }.new.freeze,
42
+ ].freeze).freeze,
47
43
  # adcb: r8, r8
48
- operands << OPERAND_TYPES[2]
49
- operands << OPERAND_TYPES[3]
50
- encodings << Class.new(Fisk::Encoding) {
51
- def encode buffer, operands
52
- add_rex(buffer, operands,
44
+ Form.new([
45
+ OPERAND_TYPES[2],
46
+ OPERAND_TYPES[3],
47
+ ].freeze, [
48
+ Class.new(Fisk::Encoding) {
49
+ def encode buffer, operands
50
+ add_rex(buffer, operands,
53
51
  false,
54
52
  0,
55
53
  operands[1].rex_value,
56
54
  0,
57
- operands[0].rex_value)
58
- add_opcode buffer, 0x10, 0
59
- add_modrm(buffer, operands,
55
+ operands[0].rex_value) +
56
+ add_opcode(buffer, 0x10, 0) +
57
+ add_modrm_reg_reg(buffer,
60
58
  3,
61
59
  operands[1].op_value,
62
- operands[0].op_value)
63
- end
64
-
65
- def bytesize; 2; end
66
- }.new
67
- encodings << Class.new(Fisk::Encoding) {
68
- def encode buffer, operands
69
- add_rex(buffer, operands,
60
+ operands[0].op_value, operands) +
61
+ 0
62
+ end
63
+ }.new.freeze,
64
+ Class.new(Fisk::Encoding) {
65
+ def encode buffer, operands
66
+ add_rex(buffer, operands,
70
67
  false,
71
68
  0,
72
69
  operands[0].rex_value,
73
70
  0,
74
- operands[1].rex_value)
75
- add_opcode buffer, 0x12, 0
76
- add_modrm(buffer, operands,
71
+ operands[1].rex_value) +
72
+ add_opcode(buffer, 0x12, 0) +
73
+ add_modrm_reg_reg(buffer,
77
74
  3,
78
75
  operands[0].op_value,
79
- operands[1].op_value)
80
- end
81
-
82
- def bytesize; 2; end
83
- }.new
84
- forms << Form.new(operands, encodings)
85
- operands = []
86
- encodings = []
76
+ operands[1].op_value, operands) +
77
+ 0
78
+ end
79
+ }.new.freeze,
80
+ ].freeze).freeze,
87
81
  # adcb: r8, m8
88
- operands << OPERAND_TYPES[2]
89
- operands << OPERAND_TYPES[4]
90
- encodings << Class.new(Fisk::Encoding) {
91
- def encode buffer, operands
92
- add_rex(buffer, operands,
82
+ Form.new([
83
+ OPERAND_TYPES[2],
84
+ OPERAND_TYPES[4],
85
+ ].freeze, [
86
+ Class.new(Fisk::Encoding) {
87
+ def encode buffer, operands
88
+ add_rex(buffer, operands,
93
89
  false,
94
90
  0,
95
91
  operands[0].rex_value,
96
92
  operands[1].rex_value,
97
- operands[1].rex_value)
98
- add_opcode buffer, 0x12, 0
99
- add_modrm(buffer, operands,
93
+ operands[1].rex_value) +
94
+ add_opcode(buffer, 0x12, 0) +
95
+ add_modrm_reg_mem(buffer,
100
96
  0,
101
97
  operands[0].op_value,
102
- operands[1].op_value)
103
- end
104
-
105
- def bytesize; 2; end
106
- }.new
107
- forms << Form.new(operands, encodings)
108
- operands = []
109
- encodings = []
98
+ operands[1].op_value, operands) +
99
+ 0
100
+ end
101
+ }.new.freeze,
102
+ ].freeze).freeze,
110
103
  # adcw: ax, imm16
111
- operands << OPERAND_TYPES[5]
112
- operands << OPERAND_TYPES[6]
113
- encodings << Class.new(Fisk::Encoding) {
114
- def encode buffer, operands
115
- add_prefix buffer, operands, 0x66, false
116
- add_opcode buffer, 0x15, 0
117
- add_immediate buffer, operands[1].op_value, 2
118
- end
119
-
120
- def bytesize; 3; end
121
- }.new
122
- forms << Form.new(operands, encodings)
123
- operands = []
124
- encodings = []
104
+ Form.new([
105
+ OPERAND_TYPES[5],
106
+ OPERAND_TYPES[6],
107
+ ].freeze, [
108
+ Class.new(Fisk::Encoding) {
109
+ def encode buffer, operands
110
+ add_prefix(buffer, operands, 0x66, false) +
111
+ add_opcode(buffer, 0x15, 0) +
112
+ add_immediate(buffer, operands[1].op_value, 2) +
113
+ 0
114
+ end
115
+ }.new.freeze,
116
+ ].freeze).freeze,
125
117
  # adcw: r16, imm8
126
- operands << OPERAND_TYPES[7]
127
- operands << OPERAND_TYPES[1]
128
- encodings << Class.new(Fisk::Encoding) {
129
- def encode buffer, operands
130
- add_prefix buffer, operands, 0x66, false
131
- add_rex(buffer, operands,
118
+ Form.new([
119
+ OPERAND_TYPES[7],
120
+ OPERAND_TYPES[1],
121
+ ].freeze, [
122
+ Class.new(Fisk::Encoding) {
123
+ def encode buffer, operands
124
+ add_prefix(buffer, operands, 0x66, false) +
125
+ add_rex(buffer, operands,
132
126
  false,
133
127
  0,
134
128
  0,
135
129
  0,
136
- operands[0].rex_value)
137
- add_opcode buffer, 0x83, 0
138
- add_modrm(buffer, operands,
130
+ operands[0].rex_value) +
131
+ add_opcode(buffer, 0x83, 0) +
132
+ add_modrm(buffer,
139
133
  3,
140
134
  2,
141
- operands[0].op_value)
142
- add_immediate buffer, operands[1].op_value, 1
143
- end
144
-
145
- def bytesize; 3; end
146
- }.new
147
- forms << Form.new(operands, encodings)
148
- operands = []
149
- encodings = []
135
+ operands[0].op_value, operands) +
136
+ add_immediate(buffer, operands[1].op_value, 1) +
137
+ 0
138
+ end
139
+ }.new.freeze,
140
+ ].freeze).freeze,
150
141
  # adcw: r16, imm16
151
- operands << OPERAND_TYPES[7]
152
- operands << OPERAND_TYPES[6]
153
- encodings << Class.new(Fisk::Encoding) {
154
- def encode buffer, operands
155
- add_prefix buffer, operands, 0x66, false
156
- add_rex(buffer, operands,
142
+ Form.new([
143
+ OPERAND_TYPES[7],
144
+ OPERAND_TYPES[6],
145
+ ].freeze, [
146
+ Class.new(Fisk::Encoding) {
147
+ def encode buffer, operands
148
+ add_prefix(buffer, operands, 0x66, false) +
149
+ add_rex(buffer, operands,
157
150
  false,
158
151
  0,
159
152
  0,
160
153
  0,
161
- operands[0].rex_value)
162
- add_opcode buffer, 0x81, 0
163
- add_modrm(buffer, operands,
154
+ operands[0].rex_value) +
155
+ add_opcode(buffer, 0x81, 0) +
156
+ add_modrm(buffer,
164
157
  3,
165
158
  2,
166
- operands[0].op_value)
167
- add_immediate buffer, operands[1].op_value, 2
168
- end
169
-
170
- def bytesize; 4; end
171
- }.new
172
- forms << Form.new(operands, encodings)
173
- operands = []
174
- encodings = []
159
+ operands[0].op_value, operands) +
160
+ add_immediate(buffer, operands[1].op_value, 2) +
161
+ 0
162
+ end
163
+ }.new.freeze,
164
+ ].freeze).freeze,
175
165
  # adcw: r16, r16
176
- operands << OPERAND_TYPES[7]
177
- operands << OPERAND_TYPES[8]
178
- encodings << Class.new(Fisk::Encoding) {
179
- def encode buffer, operands
180
- add_prefix buffer, operands, 0x66, false
181
- add_rex(buffer, operands,
166
+ Form.new([
167
+ OPERAND_TYPES[7],
168
+ OPERAND_TYPES[8],
169
+ ].freeze, [
170
+ Class.new(Fisk::Encoding) {
171
+ def encode buffer, operands
172
+ add_prefix(buffer, operands, 0x66, false) +
173
+ add_rex(buffer, operands,
182
174
  false,
183
175
  0,
184
176
  operands[1].rex_value,
185
177
  0,
186
- operands[0].rex_value)
187
- add_opcode buffer, 0x11, 0
188
- add_modrm(buffer, operands,
178
+ operands[0].rex_value) +
179
+ add_opcode(buffer, 0x11, 0) +
180
+ add_modrm_reg_reg(buffer,
189
181
  3,
190
182
  operands[1].op_value,
191
- operands[0].op_value)
192
- end
193
-
194
- def bytesize; 2; end
195
- }.new
196
- encodings << Class.new(Fisk::Encoding) {
197
- def encode buffer, operands
198
- add_prefix buffer, operands, 0x66, false
199
- add_rex(buffer, operands,
183
+ operands[0].op_value, operands) +
184
+ 0
185
+ end
186
+ }.new.freeze,
187
+ Class.new(Fisk::Encoding) {
188
+ def encode buffer, operands
189
+ add_prefix(buffer, operands, 0x66, false) +
190
+ add_rex(buffer, operands,
200
191
  false,
201
192
  0,
202
193
  operands[0].rex_value,
203
194
  0,
204
- operands[1].rex_value)
205
- add_opcode buffer, 0x13, 0
206
- add_modrm(buffer, operands,
195
+ operands[1].rex_value) +
196
+ add_opcode(buffer, 0x13, 0) +
197
+ add_modrm_reg_reg(buffer,
207
198
  3,
208
199
  operands[0].op_value,
209
- operands[1].op_value)
210
- end
211
-
212
- def bytesize; 2; end
213
- }.new
214
- forms << Form.new(operands, encodings)
215
- operands = []
216
- encodings = []
200
+ operands[1].op_value, operands) +
201
+ 0
202
+ end
203
+ }.new.freeze,
204
+ ].freeze).freeze,
217
205
  # adcw: r16, m16
218
- operands << OPERAND_TYPES[7]
219
- operands << OPERAND_TYPES[9]
220
- encodings << Class.new(Fisk::Encoding) {
221
- def encode buffer, operands
222
- add_prefix buffer, operands, 0x66, false
223
- add_rex(buffer, operands,
206
+ Form.new([
207
+ OPERAND_TYPES[7],
208
+ OPERAND_TYPES[9],
209
+ ].freeze, [
210
+ Class.new(Fisk::Encoding) {
211
+ def encode buffer, operands
212
+ add_prefix(buffer, operands, 0x66, false) +
213
+ add_rex(buffer, operands,
224
214
  false,
225
215
  0,
226
216
  operands[0].rex_value,
227
217
  operands[1].rex_value,
228
- operands[1].rex_value)
229
- add_opcode buffer, 0x13, 0
230
- add_modrm(buffer, operands,
218
+ operands[1].rex_value) +
219
+ add_opcode(buffer, 0x13, 0) +
220
+ add_modrm_reg_mem(buffer,
231
221
  0,
232
222
  operands[0].op_value,
233
- operands[1].op_value)
234
- end
235
-
236
- def bytesize; 2; end
237
- }.new
238
- forms << Form.new(operands, encodings)
239
- operands = []
240
- encodings = []
223
+ operands[1].op_value, operands) +
224
+ 0
225
+ end
226
+ }.new.freeze,
227
+ ].freeze).freeze,
241
228
  # adcl: eax, imm32
242
- operands << OPERAND_TYPES[10]
243
- operands << OPERAND_TYPES[11]
244
- encodings << Class.new(Fisk::Encoding) {
245
- def encode buffer, operands
246
- add_opcode buffer, 0x15, 0
247
- add_immediate buffer, operands[1].op_value, 4
248
- end
249
-
250
- def bytesize; 5; end
251
- }.new
252
- forms << Form.new(operands, encodings)
253
- operands = []
254
- encodings = []
229
+ Form.new([
230
+ OPERAND_TYPES[10],
231
+ OPERAND_TYPES[11],
232
+ ].freeze, [
233
+ Class.new(Fisk::Encoding) {
234
+ def encode buffer, operands
235
+ add_opcode(buffer, 0x15, 0) +
236
+ add_immediate(buffer, operands[1].op_value, 4) +
237
+ 0
238
+ end
239
+ }.new.freeze,
240
+ ].freeze).freeze,
255
241
  # adcl: r32, imm8
256
- operands << OPERAND_TYPES[12]
257
- operands << OPERAND_TYPES[1]
258
- encodings << Class.new(Fisk::Encoding) {
259
- def encode buffer, operands
260
- add_rex(buffer, operands,
242
+ Form.new([
243
+ OPERAND_TYPES[12],
244
+ OPERAND_TYPES[1],
245
+ ].freeze, [
246
+ Class.new(Fisk::Encoding) {
247
+ def encode buffer, operands
248
+ add_rex(buffer, operands,
261
249
  false,
262
250
  0,
263
251
  0,
264
252
  0,
265
- operands[0].rex_value)
266
- add_opcode buffer, 0x83, 0
267
- add_modrm(buffer, operands,
253
+ operands[0].rex_value) +
254
+ add_opcode(buffer, 0x83, 0) +
255
+ add_modrm(buffer,
268
256
  3,
269
257
  2,
270
- operands[0].op_value)
271
- add_immediate buffer, operands[1].op_value, 1
272
- end
273
-
274
- def bytesize; 3; end
275
- }.new
276
- forms << Form.new(operands, encodings)
277
- operands = []
278
- encodings = []
258
+ operands[0].op_value, operands) +
259
+ add_immediate(buffer, operands[1].op_value, 1) +
260
+ 0
261
+ end
262
+ }.new.freeze,
263
+ ].freeze).freeze,
279
264
  # adcl: r32, imm32
280
- operands << OPERAND_TYPES[12]
281
- operands << OPERAND_TYPES[11]
282
- encodings << Class.new(Fisk::Encoding) {
283
- def encode buffer, operands
284
- add_rex(buffer, operands,
265
+ Form.new([
266
+ OPERAND_TYPES[12],
267
+ OPERAND_TYPES[11],
268
+ ].freeze, [
269
+ Class.new(Fisk::Encoding) {
270
+ def encode buffer, operands
271
+ add_rex(buffer, operands,
285
272
  false,
286
273
  0,
287
274
  0,
288
275
  0,
289
- operands[0].rex_value)
290
- add_opcode buffer, 0x81, 0
291
- add_modrm(buffer, operands,
276
+ operands[0].rex_value) +
277
+ add_opcode(buffer, 0x81, 0) +
278
+ add_modrm(buffer,
292
279
  3,
293
280
  2,
294
- operands[0].op_value)
295
- add_immediate buffer, operands[1].op_value, 4
296
- end
297
-
298
- def bytesize; 6; end
299
- }.new
300
- forms << Form.new(operands, encodings)
301
- operands = []
302
- encodings = []
281
+ operands[0].op_value, operands) +
282
+ add_immediate(buffer, operands[1].op_value, 4) +
283
+ 0
284
+ end
285
+ }.new.freeze,
286
+ ].freeze).freeze,
303
287
  # adcl: r32, r32
304
- operands << OPERAND_TYPES[12]
305
- operands << OPERAND_TYPES[13]
306
- encodings << Class.new(Fisk::Encoding) {
307
- def encode buffer, operands
308
- add_rex(buffer, operands,
288
+ Form.new([
289
+ OPERAND_TYPES[12],
290
+ OPERAND_TYPES[13],
291
+ ].freeze, [
292
+ Class.new(Fisk::Encoding) {
293
+ def encode buffer, operands
294
+ add_rex(buffer, operands,
309
295
  false,
310
296
  0,
311
297
  operands[1].rex_value,
312
298
  0,
313
- operands[0].rex_value)
314
- add_opcode buffer, 0x11, 0
315
- add_modrm(buffer, operands,
299
+ operands[0].rex_value) +
300
+ add_opcode(buffer, 0x11, 0) +
301
+ add_modrm_reg_reg(buffer,
316
302
  3,
317
303
  operands[1].op_value,
318
- operands[0].op_value)
319
- end
320
-
321
- def bytesize; 2; end
322
- }.new
323
- encodings << Class.new(Fisk::Encoding) {
324
- def encode buffer, operands
325
- add_rex(buffer, operands,
304
+ operands[0].op_value, operands) +
305
+ 0
306
+ end
307
+ }.new.freeze,
308
+ Class.new(Fisk::Encoding) {
309
+ def encode buffer, operands
310
+ add_rex(buffer, operands,
326
311
  false,
327
312
  0,
328
313
  operands[0].rex_value,
329
314
  0,
330
- operands[1].rex_value)
331
- add_opcode buffer, 0x13, 0
332
- add_modrm(buffer, operands,
315
+ operands[1].rex_value) +
316
+ add_opcode(buffer, 0x13, 0) +
317
+ add_modrm_reg_reg(buffer,
333
318
  3,
334
319
  operands[0].op_value,
335
- operands[1].op_value)
336
- end
337
-
338
- def bytesize; 2; end
339
- }.new
340
- forms << Form.new(operands, encodings)
341
- operands = []
342
- encodings = []
320
+ operands[1].op_value, operands) +
321
+ 0
322
+ end
323
+ }.new.freeze,
324
+ ].freeze).freeze,
343
325
  # adcl: r32, m32
344
- operands << OPERAND_TYPES[12]
345
- operands << OPERAND_TYPES[14]
346
- encodings << Class.new(Fisk::Encoding) {
347
- def encode buffer, operands
348
- add_rex(buffer, operands,
326
+ Form.new([
327
+ OPERAND_TYPES[12],
328
+ OPERAND_TYPES[14],
329
+ ].freeze, [
330
+ Class.new(Fisk::Encoding) {
331
+ def encode buffer, operands
332
+ add_rex(buffer, operands,
349
333
  false,
350
334
  0,
351
335
  operands[0].rex_value,
352
336
  operands[1].rex_value,
353
- operands[1].rex_value)
354
- add_opcode buffer, 0x13, 0
355
- add_modrm(buffer, operands,
337
+ operands[1].rex_value) +
338
+ add_opcode(buffer, 0x13, 0) +
339
+ add_modrm_reg_mem(buffer,
356
340
  0,
357
341
  operands[0].op_value,
358
- operands[1].op_value)
359
- end
360
-
361
- def bytesize; 2; end
362
- }.new
363
- forms << Form.new(operands, encodings)
364
- operands = []
365
- encodings = []
342
+ operands[1].op_value, operands) +
343
+ 0
344
+ end
345
+ }.new.freeze,
346
+ ].freeze).freeze,
366
347
  # adcq: rax, imm32
367
- operands << OPERAND_TYPES[15]
368
- operands << OPERAND_TYPES[11]
369
- encodings << Class.new(Fisk::Encoding) {
370
- def encode buffer, operands
371
- add_rex(buffer, operands,
348
+ Form.new([
349
+ OPERAND_TYPES[15],
350
+ OPERAND_TYPES[11],
351
+ ].freeze, [
352
+ Class.new(Fisk::Encoding) {
353
+ def encode buffer, operands
354
+ add_rex(buffer, operands,
372
355
  true,
373
356
  1,
374
357
  0,
375
358
  0,
376
- 0)
377
- add_opcode buffer, 0x15, 0
378
- add_immediate buffer, operands[1].op_value, 4
379
- end
380
-
381
- def bytesize; 6; end
382
- }.new
383
- forms << Form.new(operands, encodings)
384
- operands = []
385
- encodings = []
359
+ 0) +
360
+ add_opcode(buffer, 0x15, 0) +
361
+ add_immediate(buffer, operands[1].op_value, 4) +
362
+ 0
363
+ end
364
+ }.new.freeze,
365
+ ].freeze).freeze,
386
366
  # adcq: r64, imm8
387
- operands << OPERAND_TYPES[16]
388
- operands << OPERAND_TYPES[1]
389
- encodings << Class.new(Fisk::Encoding) {
390
- def encode buffer, operands
391
- add_rex(buffer, operands,
367
+ Form.new([
368
+ OPERAND_TYPES[16],
369
+ OPERAND_TYPES[1],
370
+ ].freeze, [
371
+ Class.new(Fisk::Encoding) {
372
+ def encode buffer, operands
373
+ add_rex(buffer, operands,
392
374
  true,
393
375
  1,
394
376
  0,
395
377
  0,
396
- operands[0].rex_value)
397
- add_opcode buffer, 0x83, 0
398
- add_modrm(buffer, operands,
378
+ operands[0].rex_value) +
379
+ add_opcode(buffer, 0x83, 0) +
380
+ add_modrm(buffer,
399
381
  3,
400
382
  2,
401
- operands[0].op_value)
402
- add_immediate buffer, operands[1].op_value, 1
403
- end
404
-
405
- def bytesize; 4; end
406
- }.new
407
- forms << Form.new(operands, encodings)
408
- operands = []
409
- encodings = []
383
+ operands[0].op_value, operands) +
384
+ add_immediate(buffer, operands[1].op_value, 1) +
385
+ 0
386
+ end
387
+ }.new.freeze,
388
+ ].freeze).freeze,
410
389
  # adcq: r64, imm32
411
- operands << OPERAND_TYPES[16]
412
- operands << OPERAND_TYPES[11]
413
- encodings << Class.new(Fisk::Encoding) {
414
- def encode buffer, operands
415
- add_rex(buffer, operands,
390
+ Form.new([
391
+ OPERAND_TYPES[16],
392
+ OPERAND_TYPES[11],
393
+ ].freeze, [
394
+ Class.new(Fisk::Encoding) {
395
+ def encode buffer, operands
396
+ add_rex(buffer, operands,
416
397
  true,
417
398
  1,
418
399
  0,
419
400
  0,
420
- operands[0].rex_value)
421
- add_opcode buffer, 0x81, 0
422
- add_modrm(buffer, operands,
401
+ operands[0].rex_value) +
402
+ add_opcode(buffer, 0x81, 0) +
403
+ add_modrm(buffer,
423
404
  3,
424
405
  2,
425
- operands[0].op_value)
426
- add_immediate buffer, operands[1].op_value, 4
427
- end
428
-
429
- def bytesize; 7; end
430
- }.new
431
- forms << Form.new(operands, encodings)
432
- operands = []
433
- encodings = []
406
+ operands[0].op_value, operands) +
407
+ add_immediate(buffer, operands[1].op_value, 4) +
408
+ 0
409
+ end
410
+ }.new.freeze,
411
+ ].freeze).freeze,
434
412
  # adcq: r64, r64
435
- operands << OPERAND_TYPES[16]
436
- operands << OPERAND_TYPES[17]
437
- encodings << Class.new(Fisk::Encoding) {
438
- def encode buffer, operands
439
- add_rex(buffer, operands,
413
+ Form.new([
414
+ OPERAND_TYPES[16],
415
+ OPERAND_TYPES[17],
416
+ ].freeze, [
417
+ Class.new(Fisk::Encoding) {
418
+ def encode buffer, operands
419
+ add_rex(buffer, operands,
440
420
  true,
441
421
  1,
442
422
  operands[1].rex_value,
443
423
  0,
444
- operands[0].rex_value)
445
- add_opcode buffer, 0x11, 0
446
- add_modrm(buffer, operands,
424
+ operands[0].rex_value) +
425
+ add_opcode(buffer, 0x11, 0) +
426
+ add_modrm_reg_reg(buffer,
447
427
  3,
448
428
  operands[1].op_value,
449
- operands[0].op_value)
450
- end
451
-
452
- def bytesize; 3; end
453
- }.new
454
- encodings << Class.new(Fisk::Encoding) {
455
- def encode buffer, operands
456
- add_rex(buffer, operands,
429
+ operands[0].op_value, operands) +
430
+ 0
431
+ end
432
+ }.new.freeze,
433
+ Class.new(Fisk::Encoding) {
434
+ def encode buffer, operands
435
+ add_rex(buffer, operands,
457
436
  true,
458
437
  1,
459
438
  operands[0].rex_value,
460
439
  0,
461
- operands[1].rex_value)
462
- add_opcode buffer, 0x13, 0
463
- add_modrm(buffer, operands,
440
+ operands[1].rex_value) +
441
+ add_opcode(buffer, 0x13, 0) +
442
+ add_modrm_reg_reg(buffer,
464
443
  3,
465
444
  operands[0].op_value,
466
- operands[1].op_value)
467
- end
468
-
469
- def bytesize; 3; end
470
- }.new
471
- forms << Form.new(operands, encodings)
472
- operands = []
473
- encodings = []
445
+ operands[1].op_value, operands) +
446
+ 0
447
+ end
448
+ }.new.freeze,
449
+ ].freeze).freeze,
474
450
  # adcq: r64, m64
475
- operands << OPERAND_TYPES[16]
476
- operands << OPERAND_TYPES[18]
477
- encodings << Class.new(Fisk::Encoding) {
478
- def encode buffer, operands
479
- add_rex(buffer, operands,
451
+ Form.new([
452
+ OPERAND_TYPES[16],
453
+ OPERAND_TYPES[18],
454
+ ].freeze, [
455
+ Class.new(Fisk::Encoding) {
456
+ def encode buffer, operands
457
+ add_rex(buffer, operands,
480
458
  true,
481
459
  1,
482
460
  operands[0].rex_value,
483
461
  operands[1].rex_value,
484
- operands[1].rex_value)
485
- add_opcode buffer, 0x13, 0
486
- add_modrm(buffer, operands,
462
+ operands[1].rex_value) +
463
+ add_opcode(buffer, 0x13, 0) +
464
+ add_modrm_reg_mem(buffer,
487
465
  0,
488
466
  operands[0].op_value,
489
- operands[1].op_value)
490
- end
491
-
492
- def bytesize; 3; end
493
- }.new
494
- forms << Form.new(operands, encodings)
495
- operands = []
496
- encodings = []
467
+ operands[1].op_value, operands) +
468
+ 0
469
+ end
470
+ }.new.freeze,
471
+ ].freeze).freeze,
497
472
  # adcb: m8, imm8
498
- operands << OPERAND_TYPES[19]
499
- operands << OPERAND_TYPES[1]
500
- encodings << Class.new(Fisk::Encoding) {
501
- def encode buffer, operands
502
- add_rex(buffer, operands,
473
+ Form.new([
474
+ OPERAND_TYPES[19],
475
+ OPERAND_TYPES[1],
476
+ ].freeze, [
477
+ Class.new(Fisk::Encoding) {
478
+ def encode buffer, operands
479
+ add_rex(buffer, operands,
503
480
  false,
504
481
  0,
505
482
  0,
506
483
  operands[0].rex_value,
507
- operands[0].rex_value)
508
- add_opcode buffer, 0x80, 0
509
- add_modrm(buffer, operands,
484
+ operands[0].rex_value) +
485
+ add_opcode(buffer, 0x80, 0) +
486
+ add_modrm(buffer,
510
487
  0,
511
488
  2,
512
- operands[0].op_value)
513
- add_immediate buffer, operands[1].op_value, 1
514
- end
515
-
516
- def bytesize; 3; end
517
- }.new
518
- forms << Form.new(operands, encodings)
519
- operands = []
520
- encodings = []
489
+ operands[0].op_value, operands) +
490
+ add_immediate(buffer, operands[1].op_value, 1) +
491
+ 0
492
+ end
493
+ }.new.freeze,
494
+ ].freeze).freeze,
521
495
  # adcb: m8, r8
522
- operands << OPERAND_TYPES[19]
523
- operands << OPERAND_TYPES[3]
524
- encodings << Class.new(Fisk::Encoding) {
525
- def encode buffer, operands
526
- add_rex(buffer, operands,
496
+ Form.new([
497
+ OPERAND_TYPES[19],
498
+ OPERAND_TYPES[3],
499
+ ].freeze, [
500
+ Class.new(Fisk::Encoding) {
501
+ def encode buffer, operands
502
+ add_rex(buffer, operands,
527
503
  false,
528
504
  0,
529
505
  operands[1].rex_value,
530
506
  operands[0].rex_value,
531
- operands[0].rex_value)
532
- add_opcode buffer, 0x10, 0
533
- add_modrm(buffer, operands,
507
+ operands[0].rex_value) +
508
+ add_opcode(buffer, 0x10, 0) +
509
+ add_modrm_mem_reg(buffer,
534
510
  0,
535
511
  operands[1].op_value,
536
- operands[0].op_value)
537
- end
538
-
539
- def bytesize; 2; end
540
- }.new
541
- forms << Form.new(operands, encodings)
542
- operands = []
543
- encodings = []
512
+ operands[0].op_value, operands) +
513
+ 0
514
+ end
515
+ }.new.freeze,
516
+ ].freeze).freeze,
544
517
  # adcw: m16, imm8
545
- operands << OPERAND_TYPES[20]
546
- operands << OPERAND_TYPES[1]
547
- encodings << Class.new(Fisk::Encoding) {
548
- def encode buffer, operands
549
- add_prefix buffer, operands, 0x66, false
550
- add_rex(buffer, operands,
518
+ Form.new([
519
+ OPERAND_TYPES[20],
520
+ OPERAND_TYPES[1],
521
+ ].freeze, [
522
+ Class.new(Fisk::Encoding) {
523
+ def encode buffer, operands
524
+ add_prefix(buffer, operands, 0x66, false) +
525
+ add_rex(buffer, operands,
551
526
  false,
552
527
  0,
553
528
  0,
554
529
  operands[0].rex_value,
555
- operands[0].rex_value)
556
- add_opcode buffer, 0x83, 0
557
- add_modrm(buffer, operands,
530
+ operands[0].rex_value) +
531
+ add_opcode(buffer, 0x83, 0) +
532
+ add_modrm(buffer,
558
533
  0,
559
534
  2,
560
- operands[0].op_value)
561
- add_immediate buffer, operands[1].op_value, 1
562
- end
563
-
564
- def bytesize; 3; end
565
- }.new
566
- forms << Form.new(operands, encodings)
567
- operands = []
568
- encodings = []
535
+ operands[0].op_value, operands) +
536
+ add_immediate(buffer, operands[1].op_value, 1) +
537
+ 0
538
+ end
539
+ }.new.freeze,
540
+ ].freeze).freeze,
569
541
  # adcw: m16, imm16
570
- operands << OPERAND_TYPES[20]
571
- operands << OPERAND_TYPES[6]
572
- encodings << Class.new(Fisk::Encoding) {
573
- def encode buffer, operands
574
- add_prefix buffer, operands, 0x66, false
575
- add_rex(buffer, operands,
542
+ Form.new([
543
+ OPERAND_TYPES[20],
544
+ OPERAND_TYPES[6],
545
+ ].freeze, [
546
+ Class.new(Fisk::Encoding) {
547
+ def encode buffer, operands
548
+ add_prefix(buffer, operands, 0x66, false) +
549
+ add_rex(buffer, operands,
576
550
  false,
577
551
  0,
578
552
  0,
579
553
  operands[0].rex_value,
580
- operands[0].rex_value)
581
- add_opcode buffer, 0x81, 0
582
- add_modrm(buffer, operands,
554
+ operands[0].rex_value) +
555
+ add_opcode(buffer, 0x81, 0) +
556
+ add_modrm(buffer,
583
557
  0,
584
558
  2,
585
- operands[0].op_value)
586
- add_immediate buffer, operands[1].op_value, 2
587
- end
588
-
589
- def bytesize; 4; end
590
- }.new
591
- forms << Form.new(operands, encodings)
592
- operands = []
593
- encodings = []
559
+ operands[0].op_value, operands) +
560
+ add_immediate(buffer, operands[1].op_value, 2) +
561
+ 0
562
+ end
563
+ }.new.freeze,
564
+ ].freeze).freeze,
594
565
  # adcw: m16, r16
595
- operands << OPERAND_TYPES[20]
596
- operands << OPERAND_TYPES[8]
597
- encodings << Class.new(Fisk::Encoding) {
598
- def encode buffer, operands
599
- add_prefix buffer, operands, 0x66, false
600
- add_rex(buffer, operands,
566
+ Form.new([
567
+ OPERAND_TYPES[20],
568
+ OPERAND_TYPES[8],
569
+ ].freeze, [
570
+ Class.new(Fisk::Encoding) {
571
+ def encode buffer, operands
572
+ add_prefix(buffer, operands, 0x66, false) +
573
+ add_rex(buffer, operands,
601
574
  false,
602
575
  0,
603
576
  operands[1].rex_value,
604
577
  operands[0].rex_value,
605
- operands[0].rex_value)
606
- add_opcode buffer, 0x11, 0
607
- add_modrm(buffer, operands,
578
+ operands[0].rex_value) +
579
+ add_opcode(buffer, 0x11, 0) +
580
+ add_modrm_mem_reg(buffer,
608
581
  0,
609
582
  operands[1].op_value,
610
- operands[0].op_value)
611
- end
612
-
613
- def bytesize; 2; end
614
- }.new
615
- forms << Form.new(operands, encodings)
616
- operands = []
617
- encodings = []
583
+ operands[0].op_value, operands) +
584
+ 0
585
+ end
586
+ }.new.freeze,
587
+ ].freeze).freeze,
618
588
  # adcl: m32, imm8
619
- operands << OPERAND_TYPES[21]
620
- operands << OPERAND_TYPES[1]
621
- encodings << Class.new(Fisk::Encoding) {
622
- def encode buffer, operands
623
- add_rex(buffer, operands,
589
+ Form.new([
590
+ OPERAND_TYPES[21],
591
+ OPERAND_TYPES[1],
592
+ ].freeze, [
593
+ Class.new(Fisk::Encoding) {
594
+ def encode buffer, operands
595
+ add_rex(buffer, operands,
624
596
  false,
625
597
  0,
626
598
  0,
627
599
  operands[0].rex_value,
628
- operands[0].rex_value)
629
- add_opcode buffer, 0x83, 0
630
- add_modrm(buffer, operands,
600
+ operands[0].rex_value) +
601
+ add_opcode(buffer, 0x83, 0) +
602
+ add_modrm(buffer,
631
603
  0,
632
604
  2,
633
- operands[0].op_value)
634
- add_immediate buffer, operands[1].op_value, 1
635
- end
636
-
637
- def bytesize; 3; end
638
- }.new
639
- forms << Form.new(operands, encodings)
640
- operands = []
641
- encodings = []
605
+ operands[0].op_value, operands) +
606
+ add_immediate(buffer, operands[1].op_value, 1) +
607
+ 0
608
+ end
609
+ }.new.freeze,
610
+ ].freeze).freeze,
642
611
  # adcl: m32, imm32
643
- operands << OPERAND_TYPES[21]
644
- operands << OPERAND_TYPES[11]
645
- encodings << Class.new(Fisk::Encoding) {
646
- def encode buffer, operands
647
- add_rex(buffer, operands,
612
+ Form.new([
613
+ OPERAND_TYPES[21],
614
+ OPERAND_TYPES[11],
615
+ ].freeze, [
616
+ Class.new(Fisk::Encoding) {
617
+ def encode buffer, operands
618
+ add_rex(buffer, operands,
648
619
  false,
649
620
  0,
650
621
  0,
651
622
  operands[0].rex_value,
652
- operands[0].rex_value)
653
- add_opcode buffer, 0x81, 0
654
- add_modrm(buffer, operands,
623
+ operands[0].rex_value) +
624
+ add_opcode(buffer, 0x81, 0) +
625
+ add_modrm(buffer,
655
626
  0,
656
627
  2,
657
- operands[0].op_value)
658
- add_immediate buffer, operands[1].op_value, 4
659
- end
660
-
661
- def bytesize; 6; end
662
- }.new
663
- forms << Form.new(operands, encodings)
664
- operands = []
665
- encodings = []
628
+ operands[0].op_value, operands) +
629
+ add_immediate(buffer, operands[1].op_value, 4) +
630
+ 0
631
+ end
632
+ }.new.freeze,
633
+ ].freeze).freeze,
666
634
  # adcl: m32, r32
667
- operands << OPERAND_TYPES[21]
668
- operands << OPERAND_TYPES[13]
669
- encodings << Class.new(Fisk::Encoding) {
670
- def encode buffer, operands
671
- add_rex(buffer, operands,
635
+ Form.new([
636
+ OPERAND_TYPES[21],
637
+ OPERAND_TYPES[13],
638
+ ].freeze, [
639
+ Class.new(Fisk::Encoding) {
640
+ def encode buffer, operands
641
+ add_rex(buffer, operands,
672
642
  false,
673
643
  0,
674
644
  operands[1].rex_value,
675
645
  operands[0].rex_value,
676
- operands[0].rex_value)
677
- add_opcode buffer, 0x11, 0
678
- add_modrm(buffer, operands,
646
+ operands[0].rex_value) +
647
+ add_opcode(buffer, 0x11, 0) +
648
+ add_modrm_mem_reg(buffer,
679
649
  0,
680
650
  operands[1].op_value,
681
- operands[0].op_value)
682
- end
683
-
684
- def bytesize; 2; end
685
- }.new
686
- forms << Form.new(operands, encodings)
687
- operands = []
688
- encodings = []
651
+ operands[0].op_value, operands) +
652
+ 0
653
+ end
654
+ }.new.freeze,
655
+ ].freeze).freeze,
689
656
  # adcq: m64, imm8
690
- operands << OPERAND_TYPES[22]
691
- operands << OPERAND_TYPES[1]
692
- encodings << Class.new(Fisk::Encoding) {
693
- def encode buffer, operands
694
- add_rex(buffer, operands,
657
+ Form.new([
658
+ OPERAND_TYPES[22],
659
+ OPERAND_TYPES[1],
660
+ ].freeze, [
661
+ Class.new(Fisk::Encoding) {
662
+ def encode buffer, operands
663
+ add_rex(buffer, operands,
695
664
  true,
696
665
  1,
697
666
  0,
698
667
  operands[0].rex_value,
699
- operands[0].rex_value)
700
- add_opcode buffer, 0x83, 0
701
- add_modrm(buffer, operands,
668
+ operands[0].rex_value) +
669
+ add_opcode(buffer, 0x83, 0) +
670
+ add_modrm(buffer,
702
671
  0,
703
672
  2,
704
- operands[0].op_value)
705
- add_immediate buffer, operands[1].op_value, 1
706
- end
707
-
708
- def bytesize; 4; end
709
- }.new
710
- forms << Form.new(operands, encodings)
711
- operands = []
712
- encodings = []
673
+ operands[0].op_value, operands) +
674
+ add_immediate(buffer, operands[1].op_value, 1) +
675
+ 0
676
+ end
677
+ }.new.freeze,
678
+ ].freeze).freeze,
713
679
  # adcq: m64, imm32
714
- operands << OPERAND_TYPES[22]
715
- operands << OPERAND_TYPES[11]
716
- encodings << Class.new(Fisk::Encoding) {
717
- def encode buffer, operands
718
- add_rex(buffer, operands,
680
+ Form.new([
681
+ OPERAND_TYPES[22],
682
+ OPERAND_TYPES[11],
683
+ ].freeze, [
684
+ Class.new(Fisk::Encoding) {
685
+ def encode buffer, operands
686
+ add_rex(buffer, operands,
719
687
  true,
720
688
  1,
721
689
  0,
722
690
  operands[0].rex_value,
723
- operands[0].rex_value)
724
- add_opcode buffer, 0x81, 0
725
- add_modrm(buffer, operands,
691
+ operands[0].rex_value) +
692
+ add_opcode(buffer, 0x81, 0) +
693
+ add_modrm(buffer,
726
694
  0,
727
695
  2,
728
- operands[0].op_value)
729
- add_immediate buffer, operands[1].op_value, 4
730
- end
731
-
732
- def bytesize; 7; end
733
- }.new
734
- forms << Form.new(operands, encodings)
735
- operands = []
736
- encodings = []
696
+ operands[0].op_value, operands) +
697
+ add_immediate(buffer, operands[1].op_value, 4) +
698
+ 0
699
+ end
700
+ }.new.freeze,
701
+ ].freeze).freeze,
737
702
  # adcq: m64, r64
738
- operands << OPERAND_TYPES[22]
739
- operands << OPERAND_TYPES[17]
740
- encodings << Class.new(Fisk::Encoding) {
741
- def encode buffer, operands
742
- add_rex(buffer, operands,
703
+ Form.new([
704
+ OPERAND_TYPES[22],
705
+ OPERAND_TYPES[17],
706
+ ].freeze, [
707
+ Class.new(Fisk::Encoding) {
708
+ def encode buffer, operands
709
+ add_rex(buffer, operands,
743
710
  true,
744
711
  1,
745
712
  operands[1].rex_value,
746
713
  operands[0].rex_value,
747
- operands[0].rex_value)
748
- add_opcode buffer, 0x11, 0
749
- add_modrm(buffer, operands,
714
+ operands[0].rex_value) +
715
+ add_opcode(buffer, 0x11, 0) +
716
+ add_modrm_mem_reg(buffer,
750
717
  0,
751
718
  operands[1].op_value,
752
- operands[0].op_value)
753
- end
754
-
755
- def bytesize; 3; end
756
- }.new
757
- forms << Form.new(operands, encodings)
758
- ADC = Instruction.new("ADC", forms)
719
+ operands[0].op_value, operands) +
720
+ 0
721
+ end
722
+ }.new.freeze,
723
+ ].freeze).freeze,
724
+ ].freeze).freeze
759
725
  end
760
726
  end