fisk 2.0.0 → 2.3.1

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