fisk 2.0.0 → 2.3.1

Sign up to get free protection for your applications and to get access to all the features.
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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0809155eef95d321b2e39b2c3a801f5ed987f74e409ba40285a30f530964c558'
4
- data.tar.gz: 0b44765ae9dd4d4611c9db1af5a49bbe8659ce4dba3e6a7ac8887e17ebdb6e4a
3
+ metadata.gz: f39cf1256e6c2030ee2f0dee50d91995cb2efff76d457a5f4c9eb25ca543059b
4
+ data.tar.gz: c4b92832e08b09b3660efeea2f1c3a629053cc4651ce7f224404e3065a7c8640
5
5
  SHA512:
6
- metadata.gz: 1835a32e1579e07b1a7cf101a85ea94dee3471cb2c5c64e66a385a59807b8c049e1218c8b8152d7aa562757d585d3d7700b435b5791fd42ddaccabf99a403973
7
- data.tar.gz: 90a32029797fb6f0a101fcfc81e3352e69294ac2bd02a48f9f3e077dde900b4d3a917e413b4f65be599cdf3a0fd4f3b0a5419a043774d16292eae9821aaa6e82
6
+ metadata.gz: a8d6c2be54f415b76997a3ffd76ee1f690a7088c17df3a83efb9b6b2830804e6621d89c8b1aeb2b935f954d6efade6d8cc5480bf203078663d1e5a17a75f311c
7
+ data.tar.gz: e1368e7bab672530a501aea3e201cdd2f72f5083708102d631165b4468df56a842a9a36d8399a901d4c46d750a4c16f195059b2a7868fbc97a216f222f8bada9
@@ -0,0 +1,34 @@
1
+ name: CI
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ test:
7
+ runs-on: ${{ matrix.os }}-latest
8
+
9
+ strategy:
10
+ fail-fast: false
11
+ matrix:
12
+ os: [ubuntu, macos]
13
+
14
+ steps:
15
+ - uses: actions/checkout@v2
16
+ - name: Install libcapstone Linux
17
+ if: matrix.os == 'ubuntu'
18
+ run: |
19
+ sudo apt-get update -y
20
+ sudo apt-get install -y libcapstone-dev
21
+
22
+ - name: Install libcapstone macOS
23
+ if: matrix.os == 'macos'
24
+ run: |
25
+ brew update
26
+ brew install capstone
27
+
28
+ - name: Set up Ruby
29
+ uses: ruby/setup-ruby@477b21f02be01bcb8030d50f37cfec92bfa615b6
30
+ with:
31
+ ruby-version: 3.0
32
+ bundler-cache: true # 'bundle install' and cache
33
+ - name: Run tests
34
+ run: bundle exec rake
@@ -0,0 +1,78 @@
1
+
2
+ # Contributor Covenant Code of Conduct
3
+
4
+ ## Our Pledge
5
+
6
+ In the interest of fostering an open and welcoming environment, we as
7
+ contributors and maintainers pledge to make participation in our project and
8
+ our community a harassment-free experience for everyone, regardless of age, body
9
+ size, disability, ethnicity, sex characteristics, gender identity and expression,
10
+ level of experience, education, socio-economic status, nationality, personal
11
+ appearance, race, religion, or sexual identity and orientation.
12
+
13
+ ## Our Standards
14
+
15
+ Examples of behavior that contributes to creating a positive environment
16
+ include:
17
+
18
+ * Using welcoming and inclusive language
19
+ * Being respectful of differing viewpoints and experiences
20
+ * Gracefully accepting constructive criticism
21
+ * Focusing on what is best for the community
22
+ * Showing empathy towards other community members
23
+
24
+ Examples of unacceptable behavior by participants include:
25
+
26
+ * The use of sexualized language or imagery and unwelcome sexual attention or
27
+ advances
28
+ * Trolling, insulting/derogatory comments, and personal or political attacks
29
+ * Public or private harassment
30
+ * Publishing others' private information, such as a physical or electronic
31
+ address, without explicit permission
32
+ * Other conduct which could reasonably be considered inappropriate in a
33
+ professional setting
34
+
35
+ ## Our Responsibilities
36
+
37
+ Project maintainers are responsible for clarifying the standards of acceptable
38
+ behavior and are expected to take appropriate and fair corrective action in
39
+ response to any instances of unacceptable behavior.
40
+
41
+ Project maintainers have the right and responsibility to remove, edit, or
42
+ reject comments, commits, code, wiki edits, issues, and other contributions
43
+ that are not aligned to this Code of Conduct, or to ban temporarily or
44
+ permanently any contributor for other behaviors that they deem inappropriate,
45
+ threatening, offensive, or harmful.
46
+
47
+ ## Scope
48
+
49
+ This Code of Conduct applies within all project spaces, and it also applies when
50
+ an individual is representing the project or its community in public spaces.
51
+ Examples of representing a project or community include using an official
52
+ project e-mail address, posting via an official social media account, or acting
53
+ as an appointed representative at an online or offline event. Representation of
54
+ a project may be further defined and clarified by project maintainers.
55
+
56
+ ## Enforcement
57
+
58
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
59
+ reported by contacting the project team at aaron.patterson at gmail.com. All
60
+ complaints will be reviewed and investigated and will result in a response that
61
+ is deemed necessary and appropriate to the circumstances. The project team is
62
+ obligated to maintain confidentiality with regard to the reporter of an incident.
63
+ Further details of specific enforcement policies may be posted separately.
64
+
65
+ Project maintainers who do not follow or enforce the Code of Conduct in good
66
+ faith may face temporary or permanent repercussions as determined by other
67
+ members of the project's leadership.
68
+
69
+ ## Attribution
70
+
71
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
72
+ available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
73
+
74
+ [homepage]: https://www.contributor-covenant.org
75
+
76
+ For answers to common questions about this code of conduct, see
77
+ https://www.contributor-covenant.org/faq
78
+
data/Gemfile CHANGED
@@ -1,4 +1,3 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gem "minitest"
4
- gem "crabstone"
3
+ gemspec
data/README.md CHANGED
@@ -1,4 +1,6 @@
1
- # Fisk - A Pure Ruby Assembler
1
+ # Fisk - A Pure Ruby x86-64 Assembler
2
+
3
+ Tired of writing Ruby in Ruby? Now you can write assembly in Ruby with Fisk!
2
4
 
3
5
  This is a pure Ruby x86-64 assembler (I guess). I'm not 100% sure if it counts
4
6
  as pure Ruby because it just reads an XML file and metaprograms most of it.
@@ -24,7 +26,60 @@ binary = fisk.asm do
24
26
  end
25
27
  ```
26
28
 
27
- Though, it's not very fun to assemble something unless you can execute it. So
29
+ Fisk uses Intel assembly syntax, so the first operand is the *destination*, and
30
+ the second operand is the source. So for example `mov rax, imm8(1)` means "put
31
+ an immediate that is 8 bits wide with the value of 1 in the RAX register".
32
+
33
+ ## Sizes and Memory Operands
34
+
35
+ In order to select the right x86 instruction to emit, Fisk needs to know the
36
+ types of the operands. Register types are already implied, but things like
37
+ immediates and memory operands need to be specified.
38
+
39
+ Below are a few examples.
40
+
41
+ Putting a 32 bit immediate in the RAX register:
42
+
43
+ ```ruby
44
+ mov rax, imm32(0xFFF)
45
+ ```
46
+
47
+ Dereferencing the value in RAX and storing the value in the RAX register:
48
+
49
+ ```ruby
50
+ mov rax, m64(rax)
51
+ ```
52
+
53
+ Dereferencing the value 8 bytes away RAX and storing the value in the R9 register:
54
+
55
+ ```ruby
56
+ mov r9, m64(rax, 8)
57
+ ```
58
+
59
+ ## Register Allocation
60
+
61
+ Fisk supports simple register assignment. You can make temporary registers,
62
+ then have Fisk assign registers for you. For example:
63
+
64
+ ```ruby
65
+ fisk = Fisk.new
66
+
67
+ # Make some temporary registers
68
+ reg1 = fisk.register("temp1")
69
+ reg2 = fisk.register("temp2")
70
+
71
+ # XOR the two virtual registers
72
+ fisk.xor reg1, reg2
73
+
74
+ # Ask Fisk to assign registers from the pool of registers passed in
75
+ fisk.assign_registers([fisk.r9, fisk.r10])
76
+ ```
77
+
78
+ Currently, Fisk won't spill registers for you, it just raises an exception.
79
+
80
+ ## Executing Assembly
81
+
82
+ Now, it's not very fun to assemble something unless you can execute it. So
28
83
  here is an example of how to execute the above assembly. This assembly code
29
84
  will send an interrupt and tell the debugger to stop. So let's write the
30
85
  machine code to some executable memory, and call it from a Ruby program that we
@@ -116,3 +171,8 @@ Target 0: (ruby) stopped.
116
171
  frame #32: 0x00007fff20530621 libdyld.dylib`start + 1
117
172
  frame #33: 0x00007fff20530621 libdyld.dylib`start + 1
118
173
  ```
174
+
175
+ Note that in order to produce a stack trace like the above, the Ruby binary must include the debugging symbols (otherwise, the `ruby` frames will not be displayed); this is accomplished by specifying the `--ggdb3` compiler flag:
176
+
177
+ - if compiling Ruby from source, use `./configure optflags=-gddb3` in the build process
178
+ - if using a version manager, refer to the help; example for RVM: `optflags="-ggdb3" rvm install 3.0.2 --disable-binary`
data/Rakefile CHANGED
@@ -10,8 +10,9 @@ INSNS_DIR = "lib/fisk/instructions"
10
10
 
11
11
  file XML_FILE do
12
12
  Dir.mkdir 'tmp' unless File.directory?("tmp")
13
- cd "tmp"
14
- sh "git clone https://github.com/Maratyszcza/Opcodes.git"
13
+ cd "tmp" do
14
+ sh "git clone https://github.com/Maratyszcza/Opcodes.git"
15
+ end
15
16
  end
16
17
 
17
18
  file INSNS_DIR do
@@ -33,3 +34,4 @@ Rake::TestTask.new do |t|
33
34
  end
34
35
 
35
36
  task :test => LIB_FILE
37
+ task :default => :test
data/bin/build-machine.rb CHANGED
@@ -2,13 +2,27 @@ require "nokogiri"
2
2
  require "stringio"
3
3
  require "erb"
4
4
 
5
+ def modrm_method operands
6
+ op_types = operands.map { |x| x["type"] }
7
+ case op_types
8
+ in [/^m\d*$/, /^r\d+$/]
9
+ "add_modrm_mem_reg"
10
+ in [/^r\d+$/, /^m\d*$/]
11
+ "add_modrm_reg_mem"
12
+ in [/^r\d+$/, /^r\d+$/]
13
+ "add_modrm_reg_reg"
14
+ else
15
+ "add_modrm"
16
+ end
17
+ end
18
+
5
19
  def parse_rex v
6
20
  if v
7
21
  case v
8
22
  when /^(\d+)$/
9
23
  v
10
24
  when /^#(\d+)$/
11
- "(operands[#{$1.to_i}].value >> 3)"
25
+ "operands[#{$1.to_i}].rex_value"
12
26
  else
13
27
  raise NotImplementedError, v
14
28
  end
@@ -23,7 +37,7 @@ def parse_operand_value v
23
37
  when /^(\d+)$/
24
38
  v
25
39
  when /^#(\d+)$/
26
- "operands[#{$1.to_i}].value"
40
+ "operands[#{$1.to_i}].op_value"
27
41
  else
28
42
  raise NotImplementedError, v
29
43
  end
@@ -3,89 +3,63 @@
3
3
  class Fisk
4
4
  module Instructions
5
5
  <%- name = instruction["name"] -%>
6
- # Instruction <%= name %>
7
- forms = []
6
+ <%- summary = instruction["summary"] -%>
7
+ # Instruction <%= name %>: <%= summary %>
8
+ <%= name %> = Instruction.new(<%= name.dump %>, [
8
9
  <%-
9
10
  instruction.children.each do |form|
10
11
  next unless form.name == "InstructionForm"
11
12
  -%>
12
- operands = []
13
- encodings = []
14
13
  <%-
15
14
  operands = form.children.reject(&:text?).find_all { |c| c.name == "Operand" }
15
+ encodings = form.children.reject(&:text?).find_all { |c| c.name == "Encoding" }
16
16
  -%>
17
17
  # <%= form["gas-name"] %>: <%= operands.map { |op| op["type"] }.join(", ") %>
18
- <%-
19
- form.children.each do |child|
20
- next if child.text?
21
- case child.name
22
- -%>
23
- <%- when "Operand" -%>
24
- operands << OPERAND_TYPES[<%= unique_operands.index(%w{ type input output }.map { |n| child[n] }) %>]
25
- <%-
26
- when "Encoding"
27
- size = 0
28
- -%>
29
- encodings << Class.new(Fisk::Encoding) {
30
- def encode buffer, operands
18
+ Form.new([
19
+ <%- operands.each do |child| -%>
20
+ OPERAND_TYPES[<%= unique_operands.index(%w{ type input output }.map { |n| child[n] }) %>],
21
+ <%- end -%>
22
+ ].freeze, [
23
+ <%- encodings.each do |child| -%>
24
+ Class.new(Fisk::Encoding) {
25
+ def encode buffer, operands
31
26
  <%-
32
27
  child.children.each do |encoding|
33
28
  next if encoding.text?
34
29
  case encoding.name
35
30
  when "Opcode"
36
- size += 1
37
31
  -%>
38
- add_opcode buffer, 0x<%= sprintf("%02X", encoding["byte"].to_i(16)) %>, <%= parse_operand_value encoding["addend"] %>
39
- <%-
40
- when "Immediate"
41
- size += encoding["size"].to_i
42
- -%>
43
- add_immediate buffer, <%= parse_operand_value encoding["value"] %>, <%= encoding["size"].to_i %>
44
- <%-
45
- when "CodeOffset"
46
- size += encoding["size"].to_i
47
- -%>
48
- add_code_offset buffer, <%= parse_operand_value encoding["value"] %>, <%= encoding["size"].to_i %>
49
- <%-
50
- when "REX"
51
- size += 1 unless encoding["mandatory"] == "false"
52
- -%>
53
- add_rex(buffer, operands,
32
+ add_opcode(buffer, 0x<%= sprintf("%02X", encoding["byte"].to_i(16)) %>, <%= parse_operand_value encoding["addend"] %>) +
33
+ <%- when "Immediate" -%>
34
+ add_immediate(buffer, <%= parse_operand_value encoding["value"] %>, <%= encoding["size"].to_i %>) +
35
+ <%- when "CodeOffset" -%>
36
+ add_code_offset(buffer, <%= parse_operand_value encoding["value"] %>, <%= encoding["size"].to_i %>) +
37
+ <%- when "REX" -%>
38
+ add_rex(buffer, operands,
54
39
  <%= !(encoding["mandatory"] == "false") %>,
55
40
  <%= parse_rex encoding["W"] %>,
56
41
  <%= parse_rex encoding["R"] %>,
57
42
  <%= parse_rex encoding["X"] %>,
58
- <%= parse_rex encoding["B"] %>)
59
- <%-
60
- when "ModRM"
61
- size += 1
62
- -%>
63
- add_modrm(buffer, operands,
43
+ <%= parse_rex encoding["B"] %>) +
44
+ <%- when "ModRM" -%>
45
+ <%= modrm_method(operands) %>(buffer,
64
46
  <%= encoding["mode"].to_i(2) %>,
65
47
  <%= parse_operand_value encoding["reg"] %>,
66
- <%= parse_operand_value encoding["rm"] %>)
48
+ <%= parse_operand_value encoding["rm"] %>, operands) +
67
49
  <%- when "Prefix" -%>
68
- add_prefix buffer, operands, 0x<%= sprintf("%02X", encoding["byte"].to_i(16)) %>, <%= encoding["mandatory"] %>
50
+ add_prefix(buffer, operands, 0x<%= sprintf("%02X", encoding["byte"].to_i(16)) %>, <%= encoding["mandatory"] %>) +
69
51
  <%- when "DataOffset" -%>
70
- add_data_offset buffer, <%= parse_operand_value encoding["value"] %>, <%= encoding["size"].to_i %>
52
+ add_data_offset(buffer, <%= parse_operand_value encoding["value"] %>, <%= encoding["size"].to_i %>) +
71
53
  <%- else -%>
72
- add_<%= encoding.name %> buffer, operands
54
+ add_<%= encoding.name %>(buffer, operands)
73
55
  <%- end -%>
74
56
  <%- end -%>
75
- end
76
-
77
- def bytesize; <%= size %>; end
78
- }.new
79
- <%- when "ISA" -%>
80
- <%- when "ImplicitOperand" -%>
81
- <%-
82
- else
83
- raise NotImplementedError, child.name
84
- -%>
57
+ 0
58
+ end
59
+ }.new.freeze,
85
60
  <%- end -%>
86
- <%- end -%>
87
- forms << Form.new(operands, encodings)
61
+ ].freeze).freeze,
88
62
  <%- end -%>
89
- <%= name %> = Instruction.new(<%= name.dump %>, forms)
63
+ ].freeze).freeze
90
64
  end
91
65
  end
@@ -6,14 +6,44 @@ require "fisk/encoding"
6
6
 
7
7
  class Fisk
8
8
  module Instructions
9
- Operand = Struct.new(:type, :input, :output)
9
+ Operand = Struct.new(:type, :input, :output) do
10
+ def immediate?; false; end
11
+ end
12
+
13
+ class Immediate < Operand
14
+ attr_reader :size
15
+
16
+ def initialize type, input, output, size
17
+ super(type, input, output)
18
+ @size = size
19
+ end
20
+
21
+ def immediate?; true; end
22
+ end
23
+
10
24
  Form = Struct.new(:operands, :encodings)
11
- Instruction = Struct.new(:name, :forms)
25
+ Instruction = Struct.new(:name, :forms) do
26
+ def check_performance(operands)
27
+ case name
28
+ when Instructions::MOV.name
29
+ if operands[0].register? && operands[1].register? && operands[0].name == operands[1].name
30
+ return "MOV with same register (#{operands[0].name})"
31
+ end
32
+ end
33
+ end
34
+ end
12
35
 
13
36
  OPERAND_TYPES = [
14
- <%- unique_operands.each do |u_op| -%>
37
+ <%-
38
+ unique_operands.each do |u_op|
39
+ if u_op[0] =~ /^imm(\d+)$/
40
+ size = $1.to_i
41
+ -%>
42
+ Immediate.new(<%= u_op[0].dump %>, <%= u_op[1] || "nil" %>, <%= u_op[2] || "nil" %>, <%= size %>),
43
+ <%- else -%>
15
44
  Operand.new(<%= u_op[0].dump %>, <%= u_op[1] || "nil" %>, <%= u_op[2] || "nil" %>),
16
- <% end %>
45
+ <%- end -%>
46
+ <%- end -%>
17
47
  ]
18
48
 
19
49
  def self.instruction_names
data/fisk.gemspec CHANGED
@@ -1,6 +1,10 @@
1
+ $: << File.expand_path("lib")
2
+
3
+ require "fisk/version"
4
+
1
5
  Gem::Specification.new do |s|
2
6
  s.name = "fisk"
3
- s.version = "2.0.0"
7
+ s.version = Fisk::VERSION
4
8
  s.summary = "Write assembly in Ruby!"
5
9
  s.description = "Tired of writing Ruby in Ruby? Now you can write assembly in Ruby!"
6
10
  s.authors = ["Aaron Patterson"]
@@ -9,4 +13,9 @@ Gem::Specification.new do |s|
9
13
  s.test_files = s.files.grep(%r{^test/})
10
14
  s.homepage = "https://github.com/tenderlove/fisk"
11
15
  s.license = "Apache-2.0"
16
+
17
+ s.add_development_dependency 'minitest', '~> 5.14'
18
+ s.add_development_dependency 'crabstone', '~> 4.0'
19
+ s.add_development_dependency 'rake', '~> 13.0'
20
+ s.add_development_dependency 'nokogiri', '~> 1.11'
12
21
  end
@@ -0,0 +1,162 @@
1
+ class Fisk
2
+ class CFG < Struct.new(:variables, :blocks)
3
+ class BasicBlock < Struct.new(:name, :insns, :fall, :jump, :def, :use, :in, :out, :pred, :start_point, :end_point)
4
+ def jump?
5
+ insns.last.jump?
6
+ end
7
+
8
+ def jump_name
9
+ insns.last.target
10
+ end
11
+
12
+ def succ
13
+ list = []
14
+ list << fall if fall
15
+ list << jump if jump
16
+ list
17
+ end
18
+
19
+ def live; self.def | self.use | self.out; end
20
+ end
21
+
22
+ def self.build instructions
23
+ blocks = []
24
+ bb_index = 0
25
+
26
+ chunks = instructions.chunk { |insn|
27
+ if insn.label?
28
+ # start a new block here
29
+ bb_index += 1
30
+ end
31
+
32
+ ret_idx = bb_index
33
+
34
+ if insn.jump?
35
+ # end the block here
36
+ bb_index += 1
37
+ end
38
+
39
+ ret_idx
40
+ }.to_a
41
+
42
+ chunk_name = ->(chunk_id, insns) {
43
+ if insns.first.label?
44
+ insns.first.name
45
+ else
46
+ :"bb_#{chunk_id}"
47
+ end
48
+ }
49
+
50
+ jump_targets = {}
51
+ wants_target = []
52
+ insn_idx = 0
53
+
54
+ chunks.each_with_index do |(chunk_id, insns), idx|
55
+ prev_block = blocks.last
56
+
57
+ name = chunk_name.(chunk_id, insns)
58
+
59
+ next_chunk_id, next_insns = chunks[idx + 1]
60
+
61
+ outgoing = []
62
+
63
+ if next_chunk_id
64
+ outgoing << chunk_name.(next_chunk_id, next_insns)
65
+ end
66
+
67
+ bb = BasicBlock.new(name, insns)
68
+ bb.pred = []
69
+ bb.start_point = insn_idx
70
+ insn_idx += insns.length
71
+ bb.end_point = insn_idx - 1
72
+
73
+ if bb.jump?
74
+ target_name = bb.jump_name
75
+
76
+ # if we need to jump backwards, the label should already be filled in.
77
+ # Otherwise we need to find the block later (we're jumping forward)
78
+ if jump_targets[target_name]
79
+ jt = jump_targets[target_name]
80
+ bb.jump = jt
81
+ jt.pred << bb
82
+ else
83
+ wants_target << bb
84
+ end
85
+ end
86
+
87
+ jump_targets[bb.name] = bb
88
+
89
+ if prev_block
90
+ prev_block.fall = bb
91
+ bb.pred << prev_block
92
+ end
93
+
94
+ blocks << bb
95
+ end
96
+
97
+ # fill in any forward jumps
98
+ wants_target.each { |bb|
99
+ jt = jump_targets[bb.jump_name]
100
+ bb.jump = jt
101
+ jt.pred << bb
102
+ }
103
+
104
+ variables = live_variables blocks
105
+
106
+ CFG.new variables, blocks
107
+ end
108
+
109
+ def self.live_variables blocks
110
+ seen = Set.new
111
+
112
+ blocks.each do |block|
113
+ used = Set.new
114
+ defd = Set.new
115
+
116
+ block.insns.each do |insn|
117
+ if insn.has_temp_registers?
118
+ insn.temp_registers.each do |reg|
119
+ defd << reg unless seen.include?(reg)
120
+ used << reg unless defd.include?(reg)
121
+ seen << reg
122
+ end
123
+ end
124
+ end
125
+
126
+ block.use = used.to_a
127
+ block.def = defd.to_a
128
+ block.in = []
129
+ block.out = []
130
+ end
131
+
132
+ worklist = blocks.dup
133
+ while block = worklist.pop
134
+ block.out = block.succ.inject([]) { |out_registers, succ_block|
135
+ out_registers | succ_block.in
136
+ }
137
+ ins = block.in | block.use | (block.out - block.def)
138
+
139
+ if ins == block.in
140
+ # Done with this block!
141
+ block.live.each do |live_register|
142
+ live_register.end_point ||= block.end_point
143
+
144
+ if live_register.start_point > block.start_point
145
+ live_register.start_point = block.start_point
146
+ end
147
+
148
+ if live_register.end_point < block.end_point
149
+ live_register.end_point = block.end_point
150
+ end
151
+ end
152
+ else
153
+ block.in = ins
154
+ worklist.concat(block.pred)
155
+ end
156
+ end
157
+
158
+ seen
159
+ end
160
+ end
161
+
162
+ end