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,759 +2,725 @@
2
2
 
3
3
  class Fisk
4
4
  module Instructions
5
- # Instruction CMP
6
- forms = []
7
- operands = []
8
- encodings = []
5
+ # Instruction CMP: Compare Two Operands
6
+ CMP = Instruction.new("CMP", [
9
7
  # cmpb: al, imm8
10
- operands << OPERAND_TYPES[31]
11
- operands << OPERAND_TYPES[1]
12
- encodings << Class.new(Fisk::Encoding) {
13
- def encode buffer, operands
14
- add_opcode buffer, 0x3C, 0
15
- add_immediate buffer, operands[1].value, 1
16
- end
17
-
18
- def bytesize; 2; end
19
- }.new
20
- forms << Form.new(operands, encodings)
21
- operands = []
22
- encodings = []
8
+ Form.new([
9
+ OPERAND_TYPES[31],
10
+ OPERAND_TYPES[1],
11
+ ].freeze, [
12
+ Class.new(Fisk::Encoding) {
13
+ def encode buffer, operands
14
+ add_opcode(buffer, 0x3C, 0) +
15
+ add_immediate(buffer, operands[1].op_value, 1) +
16
+ 0
17
+ end
18
+ }.new.freeze,
19
+ ].freeze).freeze,
23
20
  # cmpb: r8, imm8
24
- operands << OPERAND_TYPES[3]
25
- operands << OPERAND_TYPES[1]
26
- encodings << Class.new(Fisk::Encoding) {
27
- def encode buffer, operands
28
- add_rex(buffer, operands,
21
+ Form.new([
22
+ OPERAND_TYPES[3],
23
+ OPERAND_TYPES[1],
24
+ ].freeze, [
25
+ Class.new(Fisk::Encoding) {
26
+ def encode buffer, operands
27
+ add_rex(buffer, operands,
29
28
  false,
30
29
  0,
31
30
  0,
32
31
  0,
33
- (operands[0].value >> 3))
34
- add_opcode buffer, 0x80, 0
35
- add_modrm(buffer, operands,
32
+ operands[0].rex_value) +
33
+ add_opcode(buffer, 0x80, 0) +
34
+ add_modrm(buffer,
36
35
  3,
37
36
  7,
38
- operands[0].value)
39
- add_immediate buffer, operands[1].value, 1
40
- end
41
-
42
- def bytesize; 3; end
43
- }.new
44
- forms << Form.new(operands, encodings)
45
- operands = []
46
- encodings = []
37
+ operands[0].op_value, operands) +
38
+ add_immediate(buffer, operands[1].op_value, 1) +
39
+ 0
40
+ end
41
+ }.new.freeze,
42
+ ].freeze).freeze,
47
43
  # cmpb: r8, r8
48
- operands << OPERAND_TYPES[3]
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[3],
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, 0x38, 0
59
- add_modrm(buffer, operands,
55
+ operands[0].rex_value) +
56
+ add_opcode(buffer, 0x38, 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, 0x3A, 0
76
- add_modrm(buffer, operands,
71
+ operands[1].rex_value) +
72
+ add_opcode(buffer, 0x3A, 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
  # cmpb: r8, m8
88
- operands << OPERAND_TYPES[3]
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[3],
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, 0x3A, 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, 0x3A, 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
  # cmpw: ax, imm16
111
- operands << OPERAND_TYPES[32]
112
- operands << OPERAND_TYPES[6]
113
- encodings << Class.new(Fisk::Encoding) {
114
- def encode buffer, operands
115
- add_prefix buffer, operands, 0x66, false
116
- add_opcode buffer, 0x3D, 0
117
- add_immediate buffer, operands[1].value, 2
118
- end
119
-
120
- def bytesize; 3; end
121
- }.new
122
- forms << Form.new(operands, encodings)
123
- operands = []
124
- encodings = []
104
+ Form.new([
105
+ OPERAND_TYPES[32],
106
+ OPERAND_TYPES[6],
107
+ ].freeze, [
108
+ Class.new(Fisk::Encoding) {
109
+ def encode buffer, operands
110
+ add_prefix(buffer, operands, 0x66, false) +
111
+ add_opcode(buffer, 0x3D, 0) +
112
+ add_immediate(buffer, operands[1].op_value, 2) +
113
+ 0
114
+ end
115
+ }.new.freeze,
116
+ ].freeze).freeze,
125
117
  # cmpw: r16, imm8
126
- operands << OPERAND_TYPES[8]
127
- operands << OPERAND_TYPES[1]
128
- encodings << Class.new(Fisk::Encoding) {
129
- def encode buffer, operands
130
- add_prefix buffer, operands, 0x66, false
131
- add_rex(buffer, operands,
118
+ Form.new([
119
+ OPERAND_TYPES[8],
120
+ OPERAND_TYPES[1],
121
+ ].freeze, [
122
+ Class.new(Fisk::Encoding) {
123
+ def encode buffer, operands
124
+ add_prefix(buffer, operands, 0x66, false) +
125
+ add_rex(buffer, operands,
132
126
  false,
133
127
  0,
134
128
  0,
135
129
  0,
136
- (operands[0].value >> 3))
137
- add_opcode buffer, 0x83, 0
138
- add_modrm(buffer, operands,
130
+ operands[0].rex_value) +
131
+ add_opcode(buffer, 0x83, 0) +
132
+ add_modrm(buffer,
139
133
  3,
140
134
  7,
141
- operands[0].value)
142
- add_immediate buffer, operands[1].value, 1
143
- end
144
-
145
- def bytesize; 3; end
146
- }.new
147
- forms << Form.new(operands, encodings)
148
- operands = []
149
- encodings = []
135
+ operands[0].op_value, operands) +
136
+ add_immediate(buffer, operands[1].op_value, 1) +
137
+ 0
138
+ end
139
+ }.new.freeze,
140
+ ].freeze).freeze,
150
141
  # cmpw: r16, imm16
151
- operands << OPERAND_TYPES[8]
152
- operands << OPERAND_TYPES[6]
153
- encodings << Class.new(Fisk::Encoding) {
154
- def encode buffer, operands
155
- add_prefix buffer, operands, 0x66, false
156
- add_rex(buffer, operands,
142
+ Form.new([
143
+ OPERAND_TYPES[8],
144
+ OPERAND_TYPES[6],
145
+ ].freeze, [
146
+ Class.new(Fisk::Encoding) {
147
+ def encode buffer, operands
148
+ add_prefix(buffer, operands, 0x66, false) +
149
+ add_rex(buffer, operands,
157
150
  false,
158
151
  0,
159
152
  0,
160
153
  0,
161
- (operands[0].value >> 3))
162
- add_opcode buffer, 0x81, 0
163
- add_modrm(buffer, operands,
154
+ operands[0].rex_value) +
155
+ add_opcode(buffer, 0x81, 0) +
156
+ add_modrm(buffer,
164
157
  3,
165
158
  7,
166
- operands[0].value)
167
- add_immediate buffer, operands[1].value, 2
168
- end
169
-
170
- def bytesize; 4; end
171
- }.new
172
- forms << Form.new(operands, encodings)
173
- operands = []
174
- encodings = []
159
+ operands[0].op_value, operands) +
160
+ add_immediate(buffer, operands[1].op_value, 2) +
161
+ 0
162
+ end
163
+ }.new.freeze,
164
+ ].freeze).freeze,
175
165
  # cmpw: r16, r16
176
- operands << OPERAND_TYPES[8]
177
- operands << OPERAND_TYPES[8]
178
- encodings << Class.new(Fisk::Encoding) {
179
- def encode buffer, operands
180
- add_prefix buffer, operands, 0x66, false
181
- add_rex(buffer, operands,
166
+ Form.new([
167
+ OPERAND_TYPES[8],
168
+ OPERAND_TYPES[8],
169
+ ].freeze, [
170
+ Class.new(Fisk::Encoding) {
171
+ def encode buffer, operands
172
+ add_prefix(buffer, operands, 0x66, false) +
173
+ add_rex(buffer, operands,
182
174
  false,
183
175
  0,
184
- (operands[1].value >> 3),
176
+ operands[1].rex_value,
185
177
  0,
186
- (operands[0].value >> 3))
187
- add_opcode buffer, 0x39, 0
188
- add_modrm(buffer, operands,
178
+ operands[0].rex_value) +
179
+ add_opcode(buffer, 0x39, 0) +
180
+ add_modrm_reg_reg(buffer,
189
181
  3,
190
- operands[1].value,
191
- operands[0].value)
192
- end
193
-
194
- def bytesize; 2; end
195
- }.new
196
- encodings << Class.new(Fisk::Encoding) {
197
- def encode buffer, operands
198
- add_prefix buffer, operands, 0x66, false
199
- add_rex(buffer, operands,
182
+ operands[1].op_value,
183
+ operands[0].op_value, operands) +
184
+ 0
185
+ end
186
+ }.new.freeze,
187
+ Class.new(Fisk::Encoding) {
188
+ def encode buffer, operands
189
+ add_prefix(buffer, operands, 0x66, false) +
190
+ add_rex(buffer, operands,
200
191
  false,
201
192
  0,
202
- (operands[0].value >> 3),
193
+ operands[0].rex_value,
203
194
  0,
204
- (operands[1].value >> 3))
205
- add_opcode buffer, 0x3B, 0
206
- add_modrm(buffer, operands,
195
+ operands[1].rex_value) +
196
+ add_opcode(buffer, 0x3B, 0) +
197
+ add_modrm_reg_reg(buffer,
207
198
  3,
208
- operands[0].value,
209
- operands[1].value)
210
- end
211
-
212
- def bytesize; 2; end
213
- }.new
214
- forms << Form.new(operands, encodings)
215
- operands = []
216
- encodings = []
199
+ operands[0].op_value,
200
+ operands[1].op_value, operands) +
201
+ 0
202
+ end
203
+ }.new.freeze,
204
+ ].freeze).freeze,
217
205
  # cmpw: r16, m16
218
- operands << OPERAND_TYPES[8]
219
- operands << OPERAND_TYPES[9]
220
- encodings << Class.new(Fisk::Encoding) {
221
- def encode buffer, operands
222
- add_prefix buffer, operands, 0x66, false
223
- add_rex(buffer, operands,
206
+ Form.new([
207
+ OPERAND_TYPES[8],
208
+ OPERAND_TYPES[9],
209
+ ].freeze, [
210
+ Class.new(Fisk::Encoding) {
211
+ def encode buffer, operands
212
+ add_prefix(buffer, operands, 0x66, false) +
213
+ add_rex(buffer, operands,
224
214
  false,
225
215
  0,
226
- (operands[0].value >> 3),
227
- (operands[1].value >> 3),
228
- (operands[1].value >> 3))
229
- add_opcode buffer, 0x3B, 0
230
- add_modrm(buffer, operands,
231
- 0,
232
- operands[0].value,
233
- operands[1].value)
234
- end
235
-
236
- def bytesize; 2; end
237
- }.new
238
- forms << Form.new(operands, encodings)
239
- operands = []
240
- encodings = []
216
+ operands[0].rex_value,
217
+ operands[1].rex_value,
218
+ operands[1].rex_value) +
219
+ add_opcode(buffer, 0x3B, 0) +
220
+ add_modrm_reg_mem(buffer,
221
+ 0,
222
+ operands[0].op_value,
223
+ operands[1].op_value, operands) +
224
+ 0
225
+ end
226
+ }.new.freeze,
227
+ ].freeze).freeze,
241
228
  # cmpl: eax, imm32
242
- operands << OPERAND_TYPES[33]
243
- operands << OPERAND_TYPES[11]
244
- encodings << Class.new(Fisk::Encoding) {
245
- def encode buffer, operands
246
- add_opcode buffer, 0x3D, 0
247
- add_immediate buffer, operands[1].value, 4
248
- end
249
-
250
- def bytesize; 5; end
251
- }.new
252
- forms << Form.new(operands, encodings)
253
- operands = []
254
- encodings = []
229
+ Form.new([
230
+ OPERAND_TYPES[33],
231
+ OPERAND_TYPES[11],
232
+ ].freeze, [
233
+ Class.new(Fisk::Encoding) {
234
+ def encode buffer, operands
235
+ add_opcode(buffer, 0x3D, 0) +
236
+ add_immediate(buffer, operands[1].op_value, 4) +
237
+ 0
238
+ end
239
+ }.new.freeze,
240
+ ].freeze).freeze,
255
241
  # cmpl: r32, imm8
256
- operands << OPERAND_TYPES[13]
257
- operands << OPERAND_TYPES[1]
258
- encodings << Class.new(Fisk::Encoding) {
259
- def encode buffer, operands
260
- add_rex(buffer, operands,
242
+ Form.new([
243
+ OPERAND_TYPES[13],
244
+ OPERAND_TYPES[1],
245
+ ].freeze, [
246
+ Class.new(Fisk::Encoding) {
247
+ def encode buffer, operands
248
+ add_rex(buffer, operands,
261
249
  false,
262
250
  0,
263
251
  0,
264
252
  0,
265
- (operands[0].value >> 3))
266
- add_opcode buffer, 0x83, 0
267
- add_modrm(buffer, operands,
253
+ operands[0].rex_value) +
254
+ add_opcode(buffer, 0x83, 0) +
255
+ add_modrm(buffer,
268
256
  3,
269
257
  7,
270
- operands[0].value)
271
- add_immediate buffer, operands[1].value, 1
272
- end
273
-
274
- def bytesize; 3; end
275
- }.new
276
- forms << Form.new(operands, encodings)
277
- operands = []
278
- encodings = []
258
+ operands[0].op_value, operands) +
259
+ add_immediate(buffer, operands[1].op_value, 1) +
260
+ 0
261
+ end
262
+ }.new.freeze,
263
+ ].freeze).freeze,
279
264
  # cmpl: r32, imm32
280
- operands << OPERAND_TYPES[13]
281
- operands << OPERAND_TYPES[11]
282
- encodings << Class.new(Fisk::Encoding) {
283
- def encode buffer, operands
284
- add_rex(buffer, operands,
265
+ Form.new([
266
+ OPERAND_TYPES[13],
267
+ OPERAND_TYPES[11],
268
+ ].freeze, [
269
+ Class.new(Fisk::Encoding) {
270
+ def encode buffer, operands
271
+ add_rex(buffer, operands,
285
272
  false,
286
273
  0,
287
274
  0,
288
275
  0,
289
- (operands[0].value >> 3))
290
- add_opcode buffer, 0x81, 0
291
- add_modrm(buffer, operands,
276
+ operands[0].rex_value) +
277
+ add_opcode(buffer, 0x81, 0) +
278
+ add_modrm(buffer,
292
279
  3,
293
280
  7,
294
- operands[0].value)
295
- add_immediate buffer, operands[1].value, 4
296
- end
297
-
298
- def bytesize; 6; end
299
- }.new
300
- forms << Form.new(operands, encodings)
301
- operands = []
302
- encodings = []
281
+ operands[0].op_value, operands) +
282
+ add_immediate(buffer, operands[1].op_value, 4) +
283
+ 0
284
+ end
285
+ }.new.freeze,
286
+ ].freeze).freeze,
303
287
  # cmpl: r32, r32
304
- operands << OPERAND_TYPES[13]
305
- operands << OPERAND_TYPES[13]
306
- encodings << Class.new(Fisk::Encoding) {
307
- def encode buffer, operands
308
- add_rex(buffer, operands,
288
+ Form.new([
289
+ OPERAND_TYPES[13],
290
+ OPERAND_TYPES[13],
291
+ ].freeze, [
292
+ Class.new(Fisk::Encoding) {
293
+ def encode buffer, operands
294
+ add_rex(buffer, operands,
309
295
  false,
310
296
  0,
311
- (operands[1].value >> 3),
297
+ operands[1].rex_value,
312
298
  0,
313
- (operands[0].value >> 3))
314
- add_opcode buffer, 0x39, 0
315
- add_modrm(buffer, operands,
299
+ operands[0].rex_value) +
300
+ add_opcode(buffer, 0x39, 0) +
301
+ add_modrm_reg_reg(buffer,
316
302
  3,
317
- operands[1].value,
318
- operands[0].value)
319
- end
320
-
321
- def bytesize; 2; end
322
- }.new
323
- encodings << Class.new(Fisk::Encoding) {
324
- def encode buffer, operands
325
- add_rex(buffer, operands,
303
+ operands[1].op_value,
304
+ operands[0].op_value, operands) +
305
+ 0
306
+ end
307
+ }.new.freeze,
308
+ Class.new(Fisk::Encoding) {
309
+ def encode buffer, operands
310
+ add_rex(buffer, operands,
326
311
  false,
327
312
  0,
328
- (operands[0].value >> 3),
313
+ operands[0].rex_value,
329
314
  0,
330
- (operands[1].value >> 3))
331
- add_opcode buffer, 0x3B, 0
332
- add_modrm(buffer, operands,
315
+ operands[1].rex_value) +
316
+ add_opcode(buffer, 0x3B, 0) +
317
+ add_modrm_reg_reg(buffer,
333
318
  3,
334
- operands[0].value,
335
- operands[1].value)
336
- end
337
-
338
- def bytesize; 2; end
339
- }.new
340
- forms << Form.new(operands, encodings)
341
- operands = []
342
- encodings = []
319
+ operands[0].op_value,
320
+ operands[1].op_value, operands) +
321
+ 0
322
+ end
323
+ }.new.freeze,
324
+ ].freeze).freeze,
343
325
  # cmpl: r32, m32
344
- operands << OPERAND_TYPES[13]
345
- operands << OPERAND_TYPES[14]
346
- encodings << Class.new(Fisk::Encoding) {
347
- def encode buffer, operands
348
- add_rex(buffer, operands,
326
+ Form.new([
327
+ OPERAND_TYPES[13],
328
+ OPERAND_TYPES[14],
329
+ ].freeze, [
330
+ Class.new(Fisk::Encoding) {
331
+ def encode buffer, operands
332
+ add_rex(buffer, operands,
349
333
  false,
350
334
  0,
351
- (operands[0].value >> 3),
352
- (operands[1].value >> 3),
353
- (operands[1].value >> 3))
354
- add_opcode buffer, 0x3B, 0
355
- add_modrm(buffer, operands,
356
- 0,
357
- operands[0].value,
358
- operands[1].value)
359
- end
360
-
361
- def bytesize; 2; end
362
- }.new
363
- forms << Form.new(operands, encodings)
364
- operands = []
365
- encodings = []
335
+ operands[0].rex_value,
336
+ operands[1].rex_value,
337
+ operands[1].rex_value) +
338
+ add_opcode(buffer, 0x3B, 0) +
339
+ add_modrm_reg_mem(buffer,
340
+ 0,
341
+ operands[0].op_value,
342
+ operands[1].op_value, operands) +
343
+ 0
344
+ end
345
+ }.new.freeze,
346
+ ].freeze).freeze,
366
347
  # cmpq: rax, imm32
367
- operands << OPERAND_TYPES[34]
368
- operands << OPERAND_TYPES[11]
369
- encodings << Class.new(Fisk::Encoding) {
370
- def encode buffer, operands
371
- add_rex(buffer, operands,
348
+ Form.new([
349
+ OPERAND_TYPES[34],
350
+ OPERAND_TYPES[11],
351
+ ].freeze, [
352
+ Class.new(Fisk::Encoding) {
353
+ def encode buffer, operands
354
+ add_rex(buffer, operands,
372
355
  true,
373
356
  1,
374
357
  0,
375
358
  0,
376
- 0)
377
- add_opcode buffer, 0x3D, 0
378
- add_immediate buffer, operands[1].value, 4
379
- end
380
-
381
- def bytesize; 6; end
382
- }.new
383
- forms << Form.new(operands, encodings)
384
- operands = []
385
- encodings = []
359
+ 0) +
360
+ add_opcode(buffer, 0x3D, 0) +
361
+ add_immediate(buffer, operands[1].op_value, 4) +
362
+ 0
363
+ end
364
+ }.new.freeze,
365
+ ].freeze).freeze,
386
366
  # cmpq: r64, imm8
387
- operands << OPERAND_TYPES[17]
388
- operands << OPERAND_TYPES[1]
389
- encodings << Class.new(Fisk::Encoding) {
390
- def encode buffer, operands
391
- add_rex(buffer, operands,
367
+ Form.new([
368
+ OPERAND_TYPES[17],
369
+ OPERAND_TYPES[1],
370
+ ].freeze, [
371
+ Class.new(Fisk::Encoding) {
372
+ def encode buffer, operands
373
+ add_rex(buffer, operands,
392
374
  true,
393
375
  1,
394
376
  0,
395
377
  0,
396
- (operands[0].value >> 3))
397
- add_opcode buffer, 0x83, 0
398
- add_modrm(buffer, operands,
378
+ operands[0].rex_value) +
379
+ add_opcode(buffer, 0x83, 0) +
380
+ add_modrm(buffer,
399
381
  3,
400
382
  7,
401
- operands[0].value)
402
- add_immediate buffer, operands[1].value, 1
403
- end
404
-
405
- def bytesize; 4; end
406
- }.new
407
- forms << Form.new(operands, encodings)
408
- operands = []
409
- encodings = []
383
+ operands[0].op_value, operands) +
384
+ add_immediate(buffer, operands[1].op_value, 1) +
385
+ 0
386
+ end
387
+ }.new.freeze,
388
+ ].freeze).freeze,
410
389
  # cmpq: r64, imm32
411
- operands << OPERAND_TYPES[17]
412
- operands << OPERAND_TYPES[11]
413
- encodings << Class.new(Fisk::Encoding) {
414
- def encode buffer, operands
415
- add_rex(buffer, operands,
390
+ Form.new([
391
+ OPERAND_TYPES[17],
392
+ OPERAND_TYPES[11],
393
+ ].freeze, [
394
+ Class.new(Fisk::Encoding) {
395
+ def encode buffer, operands
396
+ add_rex(buffer, operands,
416
397
  true,
417
398
  1,
418
399
  0,
419
400
  0,
420
- (operands[0].value >> 3))
421
- add_opcode buffer, 0x81, 0
422
- add_modrm(buffer, operands,
401
+ operands[0].rex_value) +
402
+ add_opcode(buffer, 0x81, 0) +
403
+ add_modrm(buffer,
423
404
  3,
424
405
  7,
425
- operands[0].value)
426
- add_immediate buffer, operands[1].value, 4
427
- end
428
-
429
- def bytesize; 7; end
430
- }.new
431
- forms << Form.new(operands, encodings)
432
- operands = []
433
- encodings = []
406
+ operands[0].op_value, operands) +
407
+ add_immediate(buffer, operands[1].op_value, 4) +
408
+ 0
409
+ end
410
+ }.new.freeze,
411
+ ].freeze).freeze,
434
412
  # cmpq: r64, r64
435
- operands << OPERAND_TYPES[17]
436
- operands << OPERAND_TYPES[17]
437
- encodings << Class.new(Fisk::Encoding) {
438
- def encode buffer, operands
439
- add_rex(buffer, operands,
413
+ Form.new([
414
+ OPERAND_TYPES[17],
415
+ OPERAND_TYPES[17],
416
+ ].freeze, [
417
+ Class.new(Fisk::Encoding) {
418
+ def encode buffer, operands
419
+ add_rex(buffer, operands,
440
420
  true,
441
421
  1,
442
- (operands[1].value >> 3),
422
+ operands[1].rex_value,
443
423
  0,
444
- (operands[0].value >> 3))
445
- add_opcode buffer, 0x39, 0
446
- add_modrm(buffer, operands,
424
+ operands[0].rex_value) +
425
+ add_opcode(buffer, 0x39, 0) +
426
+ add_modrm_reg_reg(buffer,
447
427
  3,
448
- operands[1].value,
449
- operands[0].value)
450
- end
451
-
452
- def bytesize; 3; end
453
- }.new
454
- encodings << Class.new(Fisk::Encoding) {
455
- def encode buffer, operands
456
- add_rex(buffer, operands,
428
+ operands[1].op_value,
429
+ operands[0].op_value, operands) +
430
+ 0
431
+ end
432
+ }.new.freeze,
433
+ Class.new(Fisk::Encoding) {
434
+ def encode buffer, operands
435
+ add_rex(buffer, operands,
457
436
  true,
458
437
  1,
459
- (operands[0].value >> 3),
438
+ operands[0].rex_value,
460
439
  0,
461
- (operands[1].value >> 3))
462
- add_opcode buffer, 0x3B, 0
463
- add_modrm(buffer, operands,
440
+ operands[1].rex_value) +
441
+ add_opcode(buffer, 0x3B, 0) +
442
+ add_modrm_reg_reg(buffer,
464
443
  3,
465
- operands[0].value,
466
- operands[1].value)
467
- end
468
-
469
- def bytesize; 3; end
470
- }.new
471
- forms << Form.new(operands, encodings)
472
- operands = []
473
- encodings = []
444
+ operands[0].op_value,
445
+ operands[1].op_value, operands) +
446
+ 0
447
+ end
448
+ }.new.freeze,
449
+ ].freeze).freeze,
474
450
  # cmpq: r64, m64
475
- operands << OPERAND_TYPES[17]
476
- operands << OPERAND_TYPES[18]
477
- encodings << Class.new(Fisk::Encoding) {
478
- def encode buffer, operands
479
- add_rex(buffer, operands,
451
+ Form.new([
452
+ OPERAND_TYPES[17],
453
+ OPERAND_TYPES[18],
454
+ ].freeze, [
455
+ Class.new(Fisk::Encoding) {
456
+ def encode buffer, operands
457
+ add_rex(buffer, operands,
480
458
  true,
481
459
  1,
482
- (operands[0].value >> 3),
483
- (operands[1].value >> 3),
484
- (operands[1].value >> 3))
485
- add_opcode buffer, 0x3B, 0
486
- add_modrm(buffer, operands,
487
- 0,
488
- operands[0].value,
489
- operands[1].value)
490
- end
491
-
492
- def bytesize; 3; end
493
- }.new
494
- forms << Form.new(operands, encodings)
495
- operands = []
496
- encodings = []
460
+ operands[0].rex_value,
461
+ operands[1].rex_value,
462
+ operands[1].rex_value) +
463
+ add_opcode(buffer, 0x3B, 0) +
464
+ add_modrm_reg_mem(buffer,
465
+ 0,
466
+ operands[0].op_value,
467
+ operands[1].op_value, operands) +
468
+ 0
469
+ end
470
+ }.new.freeze,
471
+ ].freeze).freeze,
497
472
  # cmpb: m8, imm8
498
- operands << OPERAND_TYPES[4]
499
- operands << OPERAND_TYPES[1]
500
- encodings << Class.new(Fisk::Encoding) {
501
- def encode buffer, operands
502
- add_rex(buffer, operands,
473
+ Form.new([
474
+ OPERAND_TYPES[4],
475
+ OPERAND_TYPES[1],
476
+ ].freeze, [
477
+ Class.new(Fisk::Encoding) {
478
+ def encode buffer, operands
479
+ add_rex(buffer, operands,
503
480
  false,
504
481
  0,
505
482
  0,
506
- (operands[0].value >> 3),
507
- (operands[0].value >> 3))
508
- add_opcode buffer, 0x80, 0
509
- add_modrm(buffer, operands,
483
+ operands[0].rex_value,
484
+ operands[0].rex_value) +
485
+ add_opcode(buffer, 0x80, 0) +
486
+ add_modrm(buffer,
510
487
  0,
511
488
  7,
512
- operands[0].value)
513
- add_immediate buffer, operands[1].value, 1
514
- end
515
-
516
- def bytesize; 3; end
517
- }.new
518
- forms << Form.new(operands, encodings)
519
- operands = []
520
- encodings = []
489
+ operands[0].op_value, operands) +
490
+ add_immediate(buffer, operands[1].op_value, 1) +
491
+ 0
492
+ end
493
+ }.new.freeze,
494
+ ].freeze).freeze,
521
495
  # cmpb: m8, r8
522
- operands << OPERAND_TYPES[4]
523
- operands << OPERAND_TYPES[3]
524
- encodings << Class.new(Fisk::Encoding) {
525
- def encode buffer, operands
526
- add_rex(buffer, operands,
496
+ Form.new([
497
+ OPERAND_TYPES[4],
498
+ OPERAND_TYPES[3],
499
+ ].freeze, [
500
+ Class.new(Fisk::Encoding) {
501
+ def encode buffer, operands
502
+ add_rex(buffer, operands,
527
503
  false,
528
504
  0,
529
- (operands[1].value >> 3),
530
- (operands[0].value >> 3),
531
- (operands[0].value >> 3))
532
- add_opcode buffer, 0x38, 0
533
- add_modrm(buffer, operands,
534
- 0,
535
- operands[1].value,
536
- operands[0].value)
537
- end
538
-
539
- def bytesize; 2; end
540
- }.new
541
- forms << Form.new(operands, encodings)
542
- operands = []
543
- encodings = []
505
+ operands[1].rex_value,
506
+ operands[0].rex_value,
507
+ operands[0].rex_value) +
508
+ add_opcode(buffer, 0x38, 0) +
509
+ add_modrm_mem_reg(buffer,
510
+ 0,
511
+ operands[1].op_value,
512
+ operands[0].op_value, operands) +
513
+ 0
514
+ end
515
+ }.new.freeze,
516
+ ].freeze).freeze,
544
517
  # cmpw: m16, imm8
545
- operands << OPERAND_TYPES[9]
546
- operands << OPERAND_TYPES[1]
547
- encodings << Class.new(Fisk::Encoding) {
548
- def encode buffer, operands
549
- add_prefix buffer, operands, 0x66, false
550
- add_rex(buffer, operands,
518
+ Form.new([
519
+ OPERAND_TYPES[9],
520
+ OPERAND_TYPES[1],
521
+ ].freeze, [
522
+ Class.new(Fisk::Encoding) {
523
+ def encode buffer, operands
524
+ add_prefix(buffer, operands, 0x66, false) +
525
+ add_rex(buffer, operands,
551
526
  false,
552
527
  0,
553
528
  0,
554
- (operands[0].value >> 3),
555
- (operands[0].value >> 3))
556
- add_opcode buffer, 0x83, 0
557
- add_modrm(buffer, operands,
529
+ operands[0].rex_value,
530
+ operands[0].rex_value) +
531
+ add_opcode(buffer, 0x83, 0) +
532
+ add_modrm(buffer,
558
533
  0,
559
534
  7,
560
- operands[0].value)
561
- add_immediate buffer, operands[1].value, 1
562
- end
563
-
564
- def bytesize; 3; end
565
- }.new
566
- forms << Form.new(operands, encodings)
567
- operands = []
568
- encodings = []
535
+ operands[0].op_value, operands) +
536
+ add_immediate(buffer, operands[1].op_value, 1) +
537
+ 0
538
+ end
539
+ }.new.freeze,
540
+ ].freeze).freeze,
569
541
  # cmpw: m16, imm16
570
- operands << OPERAND_TYPES[9]
571
- operands << OPERAND_TYPES[6]
572
- encodings << Class.new(Fisk::Encoding) {
573
- def encode buffer, operands
574
- add_prefix buffer, operands, 0x66, false
575
- add_rex(buffer, operands,
542
+ Form.new([
543
+ OPERAND_TYPES[9],
544
+ OPERAND_TYPES[6],
545
+ ].freeze, [
546
+ Class.new(Fisk::Encoding) {
547
+ def encode buffer, operands
548
+ add_prefix(buffer, operands, 0x66, false) +
549
+ add_rex(buffer, operands,
576
550
  false,
577
551
  0,
578
552
  0,
579
- (operands[0].value >> 3),
580
- (operands[0].value >> 3))
581
- add_opcode buffer, 0x81, 0
582
- add_modrm(buffer, operands,
553
+ operands[0].rex_value,
554
+ operands[0].rex_value) +
555
+ add_opcode(buffer, 0x81, 0) +
556
+ add_modrm(buffer,
583
557
  0,
584
558
  7,
585
- operands[0].value)
586
- add_immediate buffer, operands[1].value, 2
587
- end
588
-
589
- def bytesize; 4; end
590
- }.new
591
- forms << Form.new(operands, encodings)
592
- operands = []
593
- encodings = []
559
+ operands[0].op_value, operands) +
560
+ add_immediate(buffer, operands[1].op_value, 2) +
561
+ 0
562
+ end
563
+ }.new.freeze,
564
+ ].freeze).freeze,
594
565
  # cmpw: m16, r16
595
- operands << OPERAND_TYPES[9]
596
- operands << OPERAND_TYPES[8]
597
- encodings << Class.new(Fisk::Encoding) {
598
- def encode buffer, operands
599
- add_prefix buffer, operands, 0x66, false
600
- add_rex(buffer, operands,
566
+ Form.new([
567
+ OPERAND_TYPES[9],
568
+ OPERAND_TYPES[8],
569
+ ].freeze, [
570
+ Class.new(Fisk::Encoding) {
571
+ def encode buffer, operands
572
+ add_prefix(buffer, operands, 0x66, false) +
573
+ add_rex(buffer, operands,
601
574
  false,
602
575
  0,
603
- (operands[1].value >> 3),
604
- (operands[0].value >> 3),
605
- (operands[0].value >> 3))
606
- add_opcode buffer, 0x39, 0
607
- add_modrm(buffer, operands,
608
- 0,
609
- operands[1].value,
610
- operands[0].value)
611
- end
612
-
613
- def bytesize; 2; end
614
- }.new
615
- forms << Form.new(operands, encodings)
616
- operands = []
617
- encodings = []
576
+ operands[1].rex_value,
577
+ operands[0].rex_value,
578
+ operands[0].rex_value) +
579
+ add_opcode(buffer, 0x39, 0) +
580
+ add_modrm_mem_reg(buffer,
581
+ 0,
582
+ operands[1].op_value,
583
+ operands[0].op_value, operands) +
584
+ 0
585
+ end
586
+ }.new.freeze,
587
+ ].freeze).freeze,
618
588
  # cmpl: m32, imm8
619
- operands << OPERAND_TYPES[14]
620
- operands << OPERAND_TYPES[1]
621
- encodings << Class.new(Fisk::Encoding) {
622
- def encode buffer, operands
623
- add_rex(buffer, operands,
589
+ Form.new([
590
+ OPERAND_TYPES[14],
591
+ OPERAND_TYPES[1],
592
+ ].freeze, [
593
+ Class.new(Fisk::Encoding) {
594
+ def encode buffer, operands
595
+ add_rex(buffer, operands,
624
596
  false,
625
597
  0,
626
598
  0,
627
- (operands[0].value >> 3),
628
- (operands[0].value >> 3))
629
- add_opcode buffer, 0x83, 0
630
- add_modrm(buffer, operands,
599
+ operands[0].rex_value,
600
+ operands[0].rex_value) +
601
+ add_opcode(buffer, 0x83, 0) +
602
+ add_modrm(buffer,
631
603
  0,
632
604
  7,
633
- operands[0].value)
634
- add_immediate buffer, operands[1].value, 1
635
- end
636
-
637
- def bytesize; 3; end
638
- }.new
639
- forms << Form.new(operands, encodings)
640
- operands = []
641
- encodings = []
605
+ operands[0].op_value, operands) +
606
+ add_immediate(buffer, operands[1].op_value, 1) +
607
+ 0
608
+ end
609
+ }.new.freeze,
610
+ ].freeze).freeze,
642
611
  # cmpl: m32, imm32
643
- operands << OPERAND_TYPES[14]
644
- operands << OPERAND_TYPES[11]
645
- encodings << Class.new(Fisk::Encoding) {
646
- def encode buffer, operands
647
- add_rex(buffer, operands,
612
+ Form.new([
613
+ OPERAND_TYPES[14],
614
+ OPERAND_TYPES[11],
615
+ ].freeze, [
616
+ Class.new(Fisk::Encoding) {
617
+ def encode buffer, operands
618
+ add_rex(buffer, operands,
648
619
  false,
649
620
  0,
650
621
  0,
651
- (operands[0].value >> 3),
652
- (operands[0].value >> 3))
653
- add_opcode buffer, 0x81, 0
654
- add_modrm(buffer, operands,
622
+ operands[0].rex_value,
623
+ operands[0].rex_value) +
624
+ add_opcode(buffer, 0x81, 0) +
625
+ add_modrm(buffer,
655
626
  0,
656
627
  7,
657
- operands[0].value)
658
- add_immediate buffer, operands[1].value, 4
659
- end
660
-
661
- def bytesize; 6; end
662
- }.new
663
- forms << Form.new(operands, encodings)
664
- operands = []
665
- encodings = []
628
+ operands[0].op_value, operands) +
629
+ add_immediate(buffer, operands[1].op_value, 4) +
630
+ 0
631
+ end
632
+ }.new.freeze,
633
+ ].freeze).freeze,
666
634
  # cmpl: m32, r32
667
- operands << OPERAND_TYPES[14]
668
- operands << OPERAND_TYPES[13]
669
- encodings << Class.new(Fisk::Encoding) {
670
- def encode buffer, operands
671
- add_rex(buffer, operands,
635
+ Form.new([
636
+ OPERAND_TYPES[14],
637
+ OPERAND_TYPES[13],
638
+ ].freeze, [
639
+ Class.new(Fisk::Encoding) {
640
+ def encode buffer, operands
641
+ add_rex(buffer, operands,
672
642
  false,
673
643
  0,
674
- (operands[1].value >> 3),
675
- (operands[0].value >> 3),
676
- (operands[0].value >> 3))
677
- add_opcode buffer, 0x39, 0
678
- add_modrm(buffer, operands,
679
- 0,
680
- operands[1].value,
681
- operands[0].value)
682
- end
683
-
684
- def bytesize; 2; end
685
- }.new
686
- forms << Form.new(operands, encodings)
687
- operands = []
688
- encodings = []
644
+ operands[1].rex_value,
645
+ operands[0].rex_value,
646
+ operands[0].rex_value) +
647
+ add_opcode(buffer, 0x39, 0) +
648
+ add_modrm_mem_reg(buffer,
649
+ 0,
650
+ operands[1].op_value,
651
+ operands[0].op_value, operands) +
652
+ 0
653
+ end
654
+ }.new.freeze,
655
+ ].freeze).freeze,
689
656
  # cmpq: m64, imm8
690
- operands << OPERAND_TYPES[18]
691
- operands << OPERAND_TYPES[1]
692
- encodings << Class.new(Fisk::Encoding) {
693
- def encode buffer, operands
694
- add_rex(buffer, operands,
657
+ Form.new([
658
+ OPERAND_TYPES[18],
659
+ OPERAND_TYPES[1],
660
+ ].freeze, [
661
+ Class.new(Fisk::Encoding) {
662
+ def encode buffer, operands
663
+ add_rex(buffer, operands,
695
664
  true,
696
665
  1,
697
666
  0,
698
- (operands[0].value >> 3),
699
- (operands[0].value >> 3))
700
- add_opcode buffer, 0x83, 0
701
- add_modrm(buffer, operands,
667
+ operands[0].rex_value,
668
+ operands[0].rex_value) +
669
+ add_opcode(buffer, 0x83, 0) +
670
+ add_modrm(buffer,
702
671
  0,
703
672
  7,
704
- operands[0].value)
705
- add_immediate buffer, operands[1].value, 1
706
- end
707
-
708
- def bytesize; 4; end
709
- }.new
710
- forms << Form.new(operands, encodings)
711
- operands = []
712
- encodings = []
673
+ operands[0].op_value, operands) +
674
+ add_immediate(buffer, operands[1].op_value, 1) +
675
+ 0
676
+ end
677
+ }.new.freeze,
678
+ ].freeze).freeze,
713
679
  # cmpq: m64, imm32
714
- operands << OPERAND_TYPES[18]
715
- operands << OPERAND_TYPES[11]
716
- encodings << Class.new(Fisk::Encoding) {
717
- def encode buffer, operands
718
- add_rex(buffer, operands,
680
+ Form.new([
681
+ OPERAND_TYPES[18],
682
+ OPERAND_TYPES[11],
683
+ ].freeze, [
684
+ Class.new(Fisk::Encoding) {
685
+ def encode buffer, operands
686
+ add_rex(buffer, operands,
719
687
  true,
720
688
  1,
721
689
  0,
722
- (operands[0].value >> 3),
723
- (operands[0].value >> 3))
724
- add_opcode buffer, 0x81, 0
725
- add_modrm(buffer, operands,
690
+ operands[0].rex_value,
691
+ operands[0].rex_value) +
692
+ add_opcode(buffer, 0x81, 0) +
693
+ add_modrm(buffer,
726
694
  0,
727
695
  7,
728
- operands[0].value)
729
- add_immediate buffer, operands[1].value, 4
730
- end
731
-
732
- def bytesize; 7; end
733
- }.new
734
- forms << Form.new(operands, encodings)
735
- operands = []
736
- encodings = []
696
+ operands[0].op_value, operands) +
697
+ add_immediate(buffer, operands[1].op_value, 4) +
698
+ 0
699
+ end
700
+ }.new.freeze,
701
+ ].freeze).freeze,
737
702
  # cmpq: m64, r64
738
- operands << OPERAND_TYPES[18]
739
- operands << OPERAND_TYPES[17]
740
- encodings << Class.new(Fisk::Encoding) {
741
- def encode buffer, operands
742
- add_rex(buffer, operands,
703
+ Form.new([
704
+ OPERAND_TYPES[18],
705
+ OPERAND_TYPES[17],
706
+ ].freeze, [
707
+ Class.new(Fisk::Encoding) {
708
+ def encode buffer, operands
709
+ add_rex(buffer, operands,
743
710
  true,
744
711
  1,
745
- (operands[1].value >> 3),
746
- (operands[0].value >> 3),
747
- (operands[0].value >> 3))
748
- add_opcode buffer, 0x39, 0
749
- add_modrm(buffer, operands,
750
- 0,
751
- operands[1].value,
752
- operands[0].value)
753
- end
754
-
755
- def bytesize; 3; end
756
- }.new
757
- forms << Form.new(operands, encodings)
758
- CMP = Instruction.new("CMP", forms)
712
+ operands[1].rex_value,
713
+ operands[0].rex_value,
714
+ operands[0].rex_value) +
715
+ add_opcode(buffer, 0x39, 0) +
716
+ add_modrm_mem_reg(buffer,
717
+ 0,
718
+ operands[1].op_value,
719
+ operands[0].op_value, operands) +
720
+ 0
721
+ end
722
+ }.new.freeze,
723
+ ].freeze).freeze,
724
+ ].freeze).freeze
759
725
  end
760
726
  end