Class: Fisk
- Inherits:
-
Object
- Object
- Fisk
- Includes:
- Instructions::DSLMethods
- Defined in:
- lib/fisk.rb,
lib/fisk/errors.rb,
lib/fisk/helpers.rb,
lib/fisk/version.rb,
lib/fisk/encoding.rb,
lib/fisk/basic_block.rb,
lib/fisk/instructions.rb,
lib/fisk/instructions/bt.rb,
lib/fisk/instructions/ja.rb,
lib/fisk/instructions/jb.rb,
lib/fisk/instructions/jc.rb,
lib/fisk/instructions/je.rb,
lib/fisk/instructions/jg.rb,
lib/fisk/instructions/jl.rb,
lib/fisk/instructions/jo.rb,
lib/fisk/instructions/jp.rb,
lib/fisk/instructions/js.rb,
lib/fisk/instructions/jz.rb,
lib/fisk/instructions/or.rb,
lib/fisk/instructions/adc.rb,
lib/fisk/instructions/add.rb,
lib/fisk/instructions/and.rb,
lib/fisk/instructions/bsf.rb,
lib/fisk/instructions/bsr.rb,
lib/fisk/instructions/btc.rb,
lib/fisk/instructions/btr.rb,
lib/fisk/instructions/bts.rb,
lib/fisk/instructions/cbw.rb,
lib/fisk/instructions/cdq.rb,
lib/fisk/instructions/clc.rb,
lib/fisk/instructions/cld.rb,
lib/fisk/instructions/cmc.rb,
lib/fisk/instructions/cmp.rb,
lib/fisk/instructions/cqo.rb,
lib/fisk/instructions/cwd.rb,
lib/fisk/instructions/dec.rb,
lib/fisk/instructions/div.rb,
lib/fisk/instructions/inc.rb,
lib/fisk/instructions/int.rb,
lib/fisk/instructions/jae.rb,
lib/fisk/instructions/jbe.rb,
lib/fisk/instructions/jge.rb,
lib/fisk/instructions/jle.rb,
lib/fisk/instructions/jmp.rb,
lib/fisk/instructions/jna.rb,
lib/fisk/instructions/jnb.rb,
lib/fisk/instructions/jnc.rb,
lib/fisk/instructions/jne.rb,
lib/fisk/instructions/jng.rb,
lib/fisk/instructions/jnl.rb,
lib/fisk/instructions/jno.rb,
lib/fisk/instructions/jnp.rb,
lib/fisk/instructions/jns.rb,
lib/fisk/instructions/jnz.rb,
lib/fisk/instructions/jpe.rb,
lib/fisk/instructions/jpo.rb,
lib/fisk/instructions/lea.rb,
lib/fisk/instructions/mov.rb,
lib/fisk/instructions/mul.rb,
lib/fisk/instructions/neg.rb,
lib/fisk/instructions/nop.rb,
lib/fisk/instructions/not.rb,
lib/fisk/instructions/pop.rb,
lib/fisk/instructions/por.rb,
lib/fisk/instructions/rcl.rb,
lib/fisk/instructions/rcr.rb,
lib/fisk/instructions/ret.rb,
lib/fisk/instructions/rol.rb,
lib/fisk/instructions/ror.rb,
lib/fisk/instructions/sal.rb,
lib/fisk/instructions/sar.rb,
lib/fisk/instructions/sbb.rb,
lib/fisk/instructions/shl.rb,
lib/fisk/instructions/shr.rb,
lib/fisk/instructions/stc.rb,
lib/fisk/instructions/std.rb,
lib/fisk/instructions/sub.rb,
lib/fisk/instructions/ud2.rb,
lib/fisk/instructions/xor.rb,
lib/fisk/instructions/adcx.rb,
lib/fisk/instructions/adox.rb,
lib/fisk/instructions/andn.rb,
lib/fisk/instructions/blci.rb,
lib/fisk/instructions/blcs.rb,
lib/fisk/instructions/blsi.rb,
lib/fisk/instructions/blsr.rb,
lib/fisk/instructions/bzhi.rb,
lib/fisk/instructions/call.rb,
lib/fisk/instructions/cdqe.rb,
lib/fisk/instructions/clwb.rb,
lib/fisk/instructions/cwde.rb,
lib/fisk/instructions/dppd.rb,
lib/fisk/instructions/dpps.rb,
lib/fisk/instructions/emms.rb,
lib/fisk/instructions/idiv.rb,
lib/fisk/instructions/imul.rb,
lib/fisk/instructions/jnae.rb,
lib/fisk/instructions/jnbe.rb,
lib/fisk/instructions/jnge.rb,
lib/fisk/instructions/jnle.rb,
lib/fisk/instructions/korb.rb,
lib/fisk/instructions/kord.rb,
lib/fisk/instructions/korq.rb,
lib/fisk/instructions/korw.rb,
lib/fisk/instructions/movd.rb,
lib/fisk/instructions/movq.rb,
lib/fisk/instructions/mulx.rb,
lib/fisk/instructions/orpd.rb,
lib/fisk/instructions/orps.rb,
lib/fisk/instructions/pand.rb,
lib/fisk/instructions/pdep.rb,
lib/fisk/instructions/pext.rb,
lib/fisk/instructions/push.rb,
lib/fisk/instructions/pxor.rb,
lib/fisk/instructions/rorx.rb,
lib/fisk/instructions/sarx.rb,
lib/fisk/instructions/seta.rb,
lib/fisk/instructions/setb.rb,
lib/fisk/instructions/setc.rb,
lib/fisk/instructions/sete.rb,
lib/fisk/instructions/setg.rb,
lib/fisk/instructions/setl.rb,
lib/fisk/instructions/seto.rb,
lib/fisk/instructions/setp.rb,
lib/fisk/instructions/sets.rb,
lib/fisk/instructions/setz.rb,
lib/fisk/instructions/shld.rb,
lib/fisk/instructions/shlx.rb,
lib/fisk/instructions/shrd.rb,
lib/fisk/instructions/shrx.rb,
lib/fisk/instructions/test.rb,
lib/fisk/instructions/vpor.rb,
lib/fisk/instructions/xadd.rb,
lib/fisk/instructions/xchg.rb,
lib/fisk/instructions/addpd.rb,
lib/fisk/instructions/addps.rb,
lib/fisk/instructions/addsd.rb,
lib/fisk/instructions/addss.rb,
lib/fisk/instructions/andpd.rb,
lib/fisk/instructions/andps.rb,
lib/fisk/instructions/bextr.rb,
lib/fisk/instructions/blcic.rb,
lib/fisk/instructions/blsic.rb,
lib/fisk/instructions/bswap.rb,
lib/fisk/instructions/cmova.rb,
lib/fisk/instructions/cmovb.rb,
lib/fisk/instructions/cmovc.rb,
lib/fisk/instructions/cmove.rb,
lib/fisk/instructions/cmovg.rb,
lib/fisk/instructions/cmovl.rb,
lib/fisk/instructions/cmovo.rb,
lib/fisk/instructions/cmovp.rb,
lib/fisk/instructions/cmovs.rb,
lib/fisk/instructions/cmovz.rb,
lib/fisk/instructions/cmppd.rb,
lib/fisk/instructions/cmpps.rb,
lib/fisk/instructions/cmpsd.rb,
lib/fisk/instructions/cmpss.rb,
lib/fisk/instructions/cpuid.rb,
lib/fisk/instructions/crc32.rb,
lib/fisk/instructions/divpd.rb,
lib/fisk/instructions/divps.rb,
lib/fisk/instructions/divsd.rb,
lib/fisk/instructions/divss.rb,
lib/fisk/instructions/extrq.rb,
lib/fisk/instructions/femms.rb,
lib/fisk/instructions/jecxz.rb,
lib/fisk/instructions/jrcxz.rb,
lib/fisk/instructions/kaddb.rb,
lib/fisk/instructions/kaddd.rb,
lib/fisk/instructions/kaddq.rb,
lib/fisk/instructions/kaddw.rb,
lib/fisk/instructions/kandb.rb,
lib/fisk/instructions/kandd.rb,
lib/fisk/instructions/kandq.rb,
lib/fisk/instructions/kandw.rb,
lib/fisk/instructions/kmovb.rb,
lib/fisk/instructions/kmovd.rb,
lib/fisk/instructions/kmovq.rb,
lib/fisk/instructions/kmovw.rb,
lib/fisk/instructions/knotb.rb,
lib/fisk/instructions/knotd.rb,
lib/fisk/instructions/knotq.rb,
lib/fisk/instructions/knotw.rb,
lib/fisk/instructions/kxorb.rb,
lib/fisk/instructions/kxord.rb,
lib/fisk/instructions/kxorq.rb,
lib/fisk/instructions/kxorw.rb,
lib/fisk/instructions/lddqu.rb,
lib/fisk/instructions/lzcnt.rb,
lib/fisk/instructions/maxpd.rb,
lib/fisk/instructions/maxps.rb,
lib/fisk/instructions/maxsd.rb,
lib/fisk/instructions/maxss.rb,
lib/fisk/instructions/minpd.rb,
lib/fisk/instructions/minps.rb,
lib/fisk/instructions/minsd.rb,
lib/fisk/instructions/minss.rb,
lib/fisk/instructions/movbe.rb,
lib/fisk/instructions/movsd.rb,
lib/fisk/instructions/movss.rb,
lib/fisk/instructions/movsx.rb,
lib/fisk/instructions/movzx.rb,
lib/fisk/instructions/mulpd.rb,
lib/fisk/instructions/mulps.rb,
lib/fisk/instructions/mulsd.rb,
lib/fisk/instructions/mulss.rb,
lib/fisk/instructions/mwait.rb,
lib/fisk/instructions/pabsb.rb,
lib/fisk/instructions/pabsd.rb,
lib/fisk/instructions/pabsw.rb,
lib/fisk/instructions/paddb.rb,
lib/fisk/instructions/paddd.rb,
lib/fisk/instructions/paddq.rb,
lib/fisk/instructions/paddw.rb,
lib/fisk/instructions/pandn.rb,
lib/fisk/instructions/pause.rb,
lib/fisk/instructions/pavgb.rb,
lib/fisk/instructions/pavgw.rb,
lib/fisk/instructions/pf2id.rb,
lib/fisk/instructions/pf2iw.rb,
lib/fisk/instructions/pfacc.rb,
lib/fisk/instructions/pfadd.rb,
lib/fisk/instructions/pfmax.rb,
lib/fisk/instructions/pfmin.rb,
lib/fisk/instructions/pfmul.rb,
lib/fisk/instructions/pfrcp.rb,
lib/fisk/instructions/pfsub.rb,
lib/fisk/instructions/pi2fd.rb,
lib/fisk/instructions/pi2fw.rb,
lib/fisk/instructions/pslld.rb,
lib/fisk/instructions/psllq.rb,
lib/fisk/instructions/psllw.rb,
lib/fisk/instructions/psrad.rb,
lib/fisk/instructions/psraw.rb,
lib/fisk/instructions/psrld.rb,
lib/fisk/instructions/psrlq.rb,
lib/fisk/instructions/psrlw.rb,
lib/fisk/instructions/psubb.rb,
lib/fisk/instructions/psubd.rb,
lib/fisk/instructions/psubq.rb,
lib/fisk/instructions/psubw.rb,
lib/fisk/instructions/ptest.rb,
lib/fisk/instructions/rcpps.rb,
lib/fisk/instructions/rcpss.rb,
lib/fisk/instructions/rdtsc.rb,
lib/fisk/instructions/setae.rb,
lib/fisk/instructions/setbe.rb,
lib/fisk/instructions/setge.rb,
lib/fisk/instructions/setle.rb,
lib/fisk/instructions/setna.rb,
lib/fisk/instructions/setnb.rb,
lib/fisk/instructions/setnc.rb,
lib/fisk/instructions/setne.rb,
lib/fisk/instructions/setng.rb,
lib/fisk/instructions/setnl.rb,
lib/fisk/instructions/setno.rb,
lib/fisk/instructions/setnp.rb,
lib/fisk/instructions/setns.rb,
lib/fisk/instructions/setnz.rb,
lib/fisk/instructions/setpe.rb,
lib/fisk/instructions/setpo.rb,
lib/fisk/instructions/subpd.rb,
lib/fisk/instructions/subps.rb,
lib/fisk/instructions/subsd.rb,
lib/fisk/instructions/subss.rb,
lib/fisk/instructions/tzcnt.rb,
lib/fisk/instructions/tzmsk.rb,
lib/fisk/instructions/vdppd.rb,
lib/fisk/instructions/vdpps.rb,
lib/fisk/instructions/vmovd.rb,
lib/fisk/instructions/vmovq.rb,
lib/fisk/instructions/vorpd.rb,
lib/fisk/instructions/vorps.rb,
lib/fisk/instructions/vpand.rb,
lib/fisk/instructions/vpord.rb,
lib/fisk/instructions/vporq.rb,
lib/fisk/instructions/vpxor.rb,
lib/fisk/instructions/xlatb.rb,
lib/fisk/instructions/xorpd.rb,
lib/fisk/instructions/xorps.rb,
lib/fisk/instructions/aesdec.rb,
lib/fisk/instructions/aesenc.rb,
lib/fisk/instructions/aesimc.rb,
lib/fisk/instructions/andnpd.rb,
lib/fisk/instructions/andnps.rb,
lib/fisk/instructions/blcmsk.rb,
lib/fisk/instructions/blsmsk.rb,
lib/fisk/instructions/clzero.rb,
lib/fisk/instructions/cmovae.rb,
lib/fisk/instructions/cmovbe.rb,
lib/fisk/instructions/cmovge.rb,
lib/fisk/instructions/cmovle.rb,
lib/fisk/instructions/cmovna.rb,
lib/fisk/instructions/cmovnb.rb,
lib/fisk/instructions/cmovnc.rb,
lib/fisk/instructions/cmovne.rb,
lib/fisk/instructions/cmovng.rb,
lib/fisk/instructions/cmovnl.rb,
lib/fisk/instructions/cmovno.rb,
lib/fisk/instructions/cmovnp.rb,
lib/fisk/instructions/cmovns.rb,
lib/fisk/instructions/cmovnz.rb,
lib/fisk/instructions/cmovpe.rb,
lib/fisk/instructions/cmovpo.rb,
lib/fisk/instructions/comisd.rb,
lib/fisk/instructions/comiss.rb,
lib/fisk/instructions/haddpd.rb,
lib/fisk/instructions/haddps.rb,
lib/fisk/instructions/hsubpd.rb,
lib/fisk/instructions/hsubps.rb,
lib/fisk/instructions/kandnb.rb,
lib/fisk/instructions/kandnd.rb,
lib/fisk/instructions/kandnq.rb,
lib/fisk/instructions/kandnw.rb,
lib/fisk/instructions/ktestb.rb,
lib/fisk/instructions/ktestd.rb,
lib/fisk/instructions/ktestq.rb,
lib/fisk/instructions/ktestw.rb,
lib/fisk/instructions/kxnorb.rb,
lib/fisk/instructions/kxnord.rb,
lib/fisk/instructions/kxnorq.rb,
lib/fisk/instructions/kxnorw.rb,
lib/fisk/instructions/lfence.rb,
lib/fisk/instructions/mfence.rb,
lib/fisk/instructions/movapd.rb,
lib/fisk/instructions/movaps.rb,
lib/fisk/instructions/movdqa.rb,
lib/fisk/instructions/movdqu.rb,
lib/fisk/instructions/movhpd.rb,
lib/fisk/instructions/movhps.rb,
lib/fisk/instructions/movlpd.rb,
lib/fisk/instructions/movlps.rb,
lib/fisk/instructions/movnti.rb,
lib/fisk/instructions/movntq.rb,
lib/fisk/instructions/movsxd.rb,
lib/fisk/instructions/movupd.rb,
lib/fisk/instructions/movups.rb,
lib/fisk/instructions/mwaitx.rb,
lib/fisk/instructions/paddsb.rb,
lib/fisk/instructions/paddsw.rb,
lib/fisk/instructions/pextrb.rb,
lib/fisk/instructions/pextrd.rb,
lib/fisk/instructions/pextrq.rb,
lib/fisk/instructions/pextrw.rb,
lib/fisk/instructions/pfnacc.rb,
lib/fisk/instructions/pfsubr.rb,
lib/fisk/instructions/phaddd.rb,
lib/fisk/instructions/phaddw.rb,
lib/fisk/instructions/phsubd.rb,
lib/fisk/instructions/phsubw.rb,
lib/fisk/instructions/pinsrb.rb,
lib/fisk/instructions/pinsrd.rb,
lib/fisk/instructions/pinsrq.rb,
lib/fisk/instructions/pinsrw.rb,
lib/fisk/instructions/pmaxsb.rb,
lib/fisk/instructions/pmaxsd.rb,
lib/fisk/instructions/pmaxsw.rb,
lib/fisk/instructions/pmaxub.rb,
lib/fisk/instructions/pmaxud.rb,
lib/fisk/instructions/pmaxuw.rb,
lib/fisk/instructions/pminsb.rb,
lib/fisk/instructions/pminsd.rb,
lib/fisk/instructions/pminsw.rb,
lib/fisk/instructions/pminub.rb,
lib/fisk/instructions/pminud.rb,
lib/fisk/instructions/pminuw.rb,
lib/fisk/instructions/pmuldq.rb,
lib/fisk/instructions/pmulhw.rb,
lib/fisk/instructions/pmulld.rb,
lib/fisk/instructions/pmullw.rb,
lib/fisk/instructions/popcnt.rb,
lib/fisk/instructions/psadbw.rb,
lib/fisk/instructions/pshufb.rb,
lib/fisk/instructions/pshufd.rb,
lib/fisk/instructions/pshufw.rb,
lib/fisk/instructions/psignb.rb,
lib/fisk/instructions/psignd.rb,
lib/fisk/instructions/psignw.rb,
lib/fisk/instructions/pslldq.rb,
lib/fisk/instructions/psrldq.rb,
lib/fisk/instructions/psubsb.rb,
lib/fisk/instructions/psubsw.rb,
lib/fisk/instructions/pswapd.rb,
lib/fisk/instructions/rdrand.rb,
lib/fisk/instructions/rdseed.rb,
lib/fisk/instructions/rdtscp.rb,
lib/fisk/instructions/setnae.rb,
lib/fisk/instructions/setnbe.rb,
lib/fisk/instructions/setnge.rb,
lib/fisk/instructions/setnle.rb,
lib/fisk/instructions/sfence.rb,
lib/fisk/instructions/shufpd.rb,
lib/fisk/instructions/shufps.rb,
lib/fisk/instructions/sqrtpd.rb,
lib/fisk/instructions/sqrtps.rb,
lib/fisk/instructions/sqrtsd.rb,
lib/fisk/instructions/sqrtss.rb,
lib/fisk/instructions/t1mskc.rb,
lib/fisk/instructions/vaddpd.rb,
lib/fisk/instructions/vaddps.rb,
lib/fisk/instructions/vaddsd.rb,
lib/fisk/instructions/vaddss.rb,
lib/fisk/instructions/vandpd.rb,
lib/fisk/instructions/vandps.rb,
lib/fisk/instructions/vcmppd.rb,
lib/fisk/instructions/vcmpps.rb,
lib/fisk/instructions/vcmpsd.rb,
lib/fisk/instructions/vcmpss.rb,
lib/fisk/instructions/vdivpd.rb,
lib/fisk/instructions/vdivps.rb,
lib/fisk/instructions/vdivsd.rb,
lib/fisk/instructions/vdivss.rb,
lib/fisk/instructions/vlddqu.rb,
lib/fisk/instructions/vmaxpd.rb,
lib/fisk/instructions/vmaxps.rb,
lib/fisk/instructions/vmaxsd.rb,
lib/fisk/instructions/vmaxss.rb,
lib/fisk/instructions/vminpd.rb,
lib/fisk/instructions/vminps.rb,
lib/fisk/instructions/vminsd.rb,
lib/fisk/instructions/vminss.rb,
lib/fisk/instructions/vmovsd.rb,
lib/fisk/instructions/vmovss.rb,
lib/fisk/instructions/vmulpd.rb,
lib/fisk/instructions/vmulps.rb,
lib/fisk/instructions/vmulsd.rb,
lib/fisk/instructions/vmulss.rb,
lib/fisk/instructions/vpabsb.rb,
lib/fisk/instructions/vpabsd.rb,
lib/fisk/instructions/vpabsq.rb,
lib/fisk/instructions/vpabsw.rb,
lib/fisk/instructions/vpaddb.rb,
lib/fisk/instructions/vpaddd.rb,
lib/fisk/instructions/vpaddq.rb,
lib/fisk/instructions/vpaddw.rb,
lib/fisk/instructions/vpandd.rb,
lib/fisk/instructions/vpandn.rb,
lib/fisk/instructions/vpandq.rb,
lib/fisk/instructions/vpavgb.rb,
lib/fisk/instructions/vpavgw.rb,
lib/fisk/instructions/vpcmov.rb,
lib/fisk/instructions/vpcmpb.rb,
lib/fisk/instructions/vpcmpd.rb,
lib/fisk/instructions/vpcmpq.rb,
lib/fisk/instructions/vpcmpw.rb,
lib/fisk/instructions/vpcomb.rb,
lib/fisk/instructions/vpcomd.rb,
lib/fisk/instructions/vpcomq.rb,
lib/fisk/instructions/vpcomw.rb,
lib/fisk/instructions/vpermb.rb,
lib/fisk/instructions/vpermd.rb,
lib/fisk/instructions/vpermq.rb,
lib/fisk/instructions/vpermw.rb,
lib/fisk/instructions/vpperm.rb,
lib/fisk/instructions/vprold.rb,
lib/fisk/instructions/vprolq.rb,
lib/fisk/instructions/vprord.rb,
lib/fisk/instructions/vprorq.rb,
lib/fisk/instructions/vprotb.rb,
lib/fisk/instructions/vprotd.rb,
lib/fisk/instructions/vprotq.rb,
lib/fisk/instructions/vprotw.rb,
lib/fisk/instructions/vpshab.rb,
lib/fisk/instructions/vpshad.rb,
lib/fisk/instructions/vpshaq.rb,
lib/fisk/instructions/vpshaw.rb,
lib/fisk/instructions/vpshlb.rb,
lib/fisk/instructions/vpshld.rb,
lib/fisk/instructions/vpshlq.rb,
lib/fisk/instructions/vpshlw.rb,
lib/fisk/instructions/vpslld.rb,
lib/fisk/instructions/vpsllq.rb,
lib/fisk/instructions/vpsllw.rb,
lib/fisk/instructions/vpsrad.rb,
lib/fisk/instructions/vpsraq.rb,
lib/fisk/instructions/vpsraw.rb,
lib/fisk/instructions/vpsrld.rb,
lib/fisk/instructions/vpsrlq.rb,
lib/fisk/instructions/vpsrlw.rb,
lib/fisk/instructions/vpsubb.rb,
lib/fisk/instructions/vpsubd.rb,
lib/fisk/instructions/vpsubq.rb,
lib/fisk/instructions/vpsubw.rb,
lib/fisk/instructions/vptest.rb,
lib/fisk/instructions/vpxord.rb,
lib/fisk/instructions/vpxorq.rb,
lib/fisk/instructions/vrcpps.rb,
lib/fisk/instructions/vrcpss.rb,
lib/fisk/instructions/vsubpd.rb,
lib/fisk/instructions/vsubps.rb,
lib/fisk/instructions/vsubsd.rb,
lib/fisk/instructions/vsubss.rb,
lib/fisk/instructions/vxorpd.rb,
lib/fisk/instructions/vxorps.rb,
lib/fisk/instructions/xgetbv.rb,
lib/fisk/instructions/blcfill.rb,
lib/fisk/instructions/blendpd.rb,
lib/fisk/instructions/blendps.rb,
lib/fisk/instructions/blsfill.rb,
lib/fisk/instructions/clflush.rb,
lib/fisk/instructions/cmovnae.rb,
lib/fisk/instructions/cmovnbe.rb,
lib/fisk/instructions/cmovnge.rb,
lib/fisk/instructions/cmovnle.rb,
lib/fisk/instructions/cmpxchg.rb,
lib/fisk/instructions/insertq.rb,
lib/fisk/instructions/ldmxcsr.rb,
lib/fisk/instructions/monitor.rb,
lib/fisk/instructions/movddup.rb,
lib/fisk/instructions/movdq2q.rb,
lib/fisk/instructions/movhlps.rb,
lib/fisk/instructions/movlhps.rb,
lib/fisk/instructions/movntdq.rb,
lib/fisk/instructions/movntpd.rb,
lib/fisk/instructions/movntps.rb,
lib/fisk/instructions/movntsd.rb,
lib/fisk/instructions/movntss.rb,
lib/fisk/instructions/movq2dq.rb,
lib/fisk/instructions/mpsadbw.rb,
lib/fisk/instructions/paddusb.rb,
lib/fisk/instructions/paddusw.rb,
lib/fisk/instructions/palignr.rb,
lib/fisk/instructions/pavgusb.rb,
lib/fisk/instructions/pblendw.rb,
lib/fisk/instructions/pcmpeqb.rb,
lib/fisk/instructions/pcmpeqd.rb,
lib/fisk/instructions/pcmpeqq.rb,
lib/fisk/instructions/pcmpeqw.rb,
lib/fisk/instructions/pcmpgtb.rb,
lib/fisk/instructions/pcmpgtd.rb,
lib/fisk/instructions/pcmpgtq.rb,
lib/fisk/instructions/pcmpgtw.rb,
lib/fisk/instructions/pfcmpeq.rb,
lib/fisk/instructions/pfcmpge.rb,
lib/fisk/instructions/pfcmpgt.rb,
lib/fisk/instructions/pfpnacc.rb,
lib/fisk/instructions/pfrsqrt.rb,
lib/fisk/instructions/phaddsw.rb,
lib/fisk/instructions/phsubsw.rb,
lib/fisk/instructions/pmaddwd.rb,
lib/fisk/instructions/pmulhrw.rb,
lib/fisk/instructions/pmulhuw.rb,
lib/fisk/instructions/pmuludq.rb,
lib/fisk/instructions/pshufhw.rb,
lib/fisk/instructions/pshuflw.rb,
lib/fisk/instructions/psubusb.rb,
lib/fisk/instructions/psubusw.rb,
lib/fisk/instructions/roundpd.rb,
lib/fisk/instructions/roundps.rb,
lib/fisk/instructions/roundsd.rb,
lib/fisk/instructions/roundss.rb,
lib/fisk/instructions/rsqrtps.rb,
lib/fisk/instructions/rsqrtss.rb,
lib/fisk/instructions/stmxcsr.rb,
lib/fisk/instructions/syscall.rb,
lib/fisk/instructions/ucomisd.rb,
lib/fisk/instructions/ucomiss.rb,
lib/fisk/instructions/vaesdec.rb,
lib/fisk/instructions/vaesenc.rb,
lib/fisk/instructions/vaesimc.rb,
lib/fisk/instructions/valignd.rb,
lib/fisk/instructions/valignq.rb,
lib/fisk/instructions/vandnpd.rb,
lib/fisk/instructions/vandnps.rb,
lib/fisk/instructions/vcomisd.rb,
lib/fisk/instructions/vcomiss.rb,
lib/fisk/instructions/vexp2pd.rb,
lib/fisk/instructions/vexp2ps.rb,
lib/fisk/instructions/vfrczpd.rb,
lib/fisk/instructions/vfrczps.rb,
lib/fisk/instructions/vfrczsd.rb,
lib/fisk/instructions/vfrczss.rb,
lib/fisk/instructions/vhaddpd.rb,
lib/fisk/instructions/vhaddps.rb,
lib/fisk/instructions/vhsubpd.rb,
lib/fisk/instructions/vhsubps.rb,
lib/fisk/instructions/vmovapd.rb,
lib/fisk/instructions/vmovaps.rb,
lib/fisk/instructions/vmovdqa.rb,
lib/fisk/instructions/vmovdqu.rb,
lib/fisk/instructions/vmovhpd.rb,
lib/fisk/instructions/vmovhps.rb,
lib/fisk/instructions/vmovlpd.rb,
lib/fisk/instructions/vmovlps.rb,
lib/fisk/instructions/vmovupd.rb,
lib/fisk/instructions/vmovups.rb,
lib/fisk/instructions/vpaddsb.rb,
lib/fisk/instructions/vpaddsw.rb,
lib/fisk/instructions/vpandnd.rb,
lib/fisk/instructions/vpandnq.rb,
lib/fisk/instructions/vpcmpub.rb,
lib/fisk/instructions/vpcmpud.rb,
lib/fisk/instructions/vpcmpuq.rb,
lib/fisk/instructions/vpcmpuw.rb,
lib/fisk/instructions/vpcomub.rb,
lib/fisk/instructions/vpcomud.rb,
lib/fisk/instructions/vpcomuq.rb,
lib/fisk/instructions/vpcomuw.rb,
lib/fisk/instructions/vpermpd.rb,
lib/fisk/instructions/vpermps.rb,
lib/fisk/instructions/vpextrb.rb,
lib/fisk/instructions/vpextrd.rb,
lib/fisk/instructions/vpextrq.rb,
lib/fisk/instructions/vpextrw.rb,
lib/fisk/instructions/vphaddd.rb,
lib/fisk/instructions/vphaddw.rb,
lib/fisk/instructions/vphsubd.rb,
lib/fisk/instructions/vphsubw.rb,
lib/fisk/instructions/vpinsrb.rb,
lib/fisk/instructions/vpinsrd.rb,
lib/fisk/instructions/vpinsrq.rb,
lib/fisk/instructions/vpinsrw.rb,
lib/fisk/instructions/vpmaxsb.rb,
lib/fisk/instructions/vpmaxsd.rb,
lib/fisk/instructions/vpmaxsq.rb,
lib/fisk/instructions/vpmaxsw.rb,
lib/fisk/instructions/vpmaxub.rb,
lib/fisk/instructions/vpmaxud.rb,
lib/fisk/instructions/vpmaxuq.rb,
lib/fisk/instructions/vpmaxuw.rb,
lib/fisk/instructions/vpminsb.rb,
lib/fisk/instructions/vpminsd.rb,
lib/fisk/instructions/vpminsq.rb,
lib/fisk/instructions/vpminsw.rb,
lib/fisk/instructions/vpminub.rb,
lib/fisk/instructions/vpminud.rb,
lib/fisk/instructions/vpminuq.rb,
lib/fisk/instructions/vpminuw.rb,
lib/fisk/instructions/vpmovdb.rb,
lib/fisk/instructions/vpmovdw.rb,
lib/fisk/instructions/vpmovqb.rb,
lib/fisk/instructions/vpmovqd.rb,
lib/fisk/instructions/vpmovqw.rb,
lib/fisk/instructions/vpmovwb.rb,
lib/fisk/instructions/vpmuldq.rb,
lib/fisk/instructions/vpmulhw.rb,
lib/fisk/instructions/vpmulld.rb,
lib/fisk/instructions/vpmullq.rb,
lib/fisk/instructions/vpmullw.rb,
lib/fisk/instructions/vprolvd.rb,
lib/fisk/instructions/vprolvq.rb,
lib/fisk/instructions/vprorvd.rb,
lib/fisk/instructions/vprorvq.rb,
lib/fisk/instructions/vpsadbw.rb,
lib/fisk/instructions/vpshufb.rb,
lib/fisk/instructions/vpshufd.rb,
lib/fisk/instructions/vpsignb.rb,
lib/fisk/instructions/vpsignd.rb,
lib/fisk/instructions/vpsignw.rb,
lib/fisk/instructions/vpslldq.rb,
lib/fisk/instructions/vpsllvd.rb,
lib/fisk/instructions/vpsllvq.rb,
lib/fisk/instructions/vpsllvw.rb,
lib/fisk/instructions/vpsravd.rb,
lib/fisk/instructions/vpsravq.rb,
lib/fisk/instructions/vpsravw.rb,
lib/fisk/instructions/vpsrldq.rb,
lib/fisk/instructions/vpsrlvd.rb,
lib/fisk/instructions/vpsrlvq.rb,
lib/fisk/instructions/vpsrlvw.rb,
lib/fisk/instructions/vpsubsb.rb,
lib/fisk/instructions/vpsubsw.rb,
lib/fisk/instructions/vshufpd.rb,
lib/fisk/instructions/vshufps.rb,
lib/fisk/instructions/vsqrtpd.rb,
lib/fisk/instructions/vsqrtps.rb,
lib/fisk/instructions/vsqrtsd.rb,
lib/fisk/instructions/vsqrtss.rb,
lib/fisk/instructions/vtestpd.rb,
lib/fisk/instructions/vtestps.rb,
lib/fisk/instructions/addsubpd.rb,
lib/fisk/instructions/addsubps.rb,
lib/fisk/instructions/blendvpd.rb,
lib/fisk/instructions/blendvps.rb,
lib/fisk/instructions/cvtdq2pd.rb,
lib/fisk/instructions/cvtdq2ps.rb,
lib/fisk/instructions/cvtpd2dq.rb,
lib/fisk/instructions/cvtpd2pi.rb,
lib/fisk/instructions/cvtpd2ps.rb,
lib/fisk/instructions/cvtpi2pd.rb,
lib/fisk/instructions/cvtpi2ps.rb,
lib/fisk/instructions/cvtps2dq.rb,
lib/fisk/instructions/cvtps2pd.rb,
lib/fisk/instructions/cvtps2pi.rb,
lib/fisk/instructions/cvtsd2si.rb,
lib/fisk/instructions/cvtsd2ss.rb,
lib/fisk/instructions/cvtsi2sd.rb,
lib/fisk/instructions/cvtsi2ss.rb,
lib/fisk/instructions/cvtss2sd.rb,
lib/fisk/instructions/cvtss2si.rb,
lib/fisk/instructions/insertps.rb,
lib/fisk/instructions/kortestb.rb,
lib/fisk/instructions/kortestd.rb,
lib/fisk/instructions/kortestq.rb,
lib/fisk/instructions/kortestw.rb,
lib/fisk/instructions/kshiftlb.rb,
lib/fisk/instructions/kshiftld.rb,
lib/fisk/instructions/kshiftlq.rb,
lib/fisk/instructions/kshiftlw.rb,
lib/fisk/instructions/kshiftrb.rb,
lib/fisk/instructions/kshiftrd.rb,
lib/fisk/instructions/kshiftrq.rb,
lib/fisk/instructions/kshiftrw.rb,
lib/fisk/instructions/kunpckbw.rb,
lib/fisk/instructions/kunpckdq.rb,
lib/fisk/instructions/kunpckwd.rb,
lib/fisk/instructions/maskmovq.rb,
lib/fisk/instructions/monitorx.rb,
lib/fisk/instructions/movmskpd.rb,
lib/fisk/instructions/movmskps.rb,
lib/fisk/instructions/movntdqa.rb,
lib/fisk/instructions/movshdup.rb,
lib/fisk/instructions/movsldup.rb,
lib/fisk/instructions/packssdw.rb,
lib/fisk/instructions/packsswb.rb,
lib/fisk/instructions/packusdw.rb,
lib/fisk/instructions/packuswb.rb,
lib/fisk/instructions/pblendvb.rb,
lib/fisk/instructions/pfrcpit1.rb,
lib/fisk/instructions/pfrcpit2.rb,
lib/fisk/instructions/pfrsqit1.rb,
lib/fisk/instructions/pmovmskb.rb,
lib/fisk/instructions/pmovsxbd.rb,
lib/fisk/instructions/pmovsxbq.rb,
lib/fisk/instructions/pmovsxbw.rb,
lib/fisk/instructions/pmovsxdq.rb,
lib/fisk/instructions/pmovsxwd.rb,
lib/fisk/instructions/pmovsxwq.rb,
lib/fisk/instructions/pmovzxbd.rb,
lib/fisk/instructions/pmovzxbq.rb,
lib/fisk/instructions/pmovzxbw.rb,
lib/fisk/instructions/pmovzxdq.rb,
lib/fisk/instructions/pmovzxwd.rb,
lib/fisk/instructions/pmovzxwq.rb,
lib/fisk/instructions/pmulhrsw.rb,
lib/fisk/instructions/prefetch.rb,
lib/fisk/instructions/sha1msg1.rb,
lib/fisk/instructions/sha1msg2.rb,
lib/fisk/instructions/unpckhpd.rb,
lib/fisk/instructions/unpckhps.rb,
lib/fisk/instructions/unpcklpd.rb,
lib/fisk/instructions/unpcklps.rb,
lib/fisk/instructions/vblendpd.rb,
lib/fisk/instructions/vblendps.rb,
lib/fisk/instructions/vfmaddpd.rb,
lib/fisk/instructions/vfmaddps.rb,
lib/fisk/instructions/vfmaddsd.rb,
lib/fisk/instructions/vfmaddss.rb,
lib/fisk/instructions/vfmsubpd.rb,
lib/fisk/instructions/vfmsubps.rb,
lib/fisk/instructions/vfmsubsd.rb,
lib/fisk/instructions/vfmsubss.rb,
lib/fisk/instructions/vldmxcsr.rb,
lib/fisk/instructions/vmovddup.rb,
lib/fisk/instructions/vmovdqu8.rb,
lib/fisk/instructions/vmovhlps.rb,
lib/fisk/instructions/vmovlhps.rb,
lib/fisk/instructions/vmovntdq.rb,
lib/fisk/instructions/vmovntpd.rb,
lib/fisk/instructions/vmovntps.rb,
lib/fisk/instructions/vmpsadbw.rb,
lib/fisk/instructions/vpaddusb.rb,
lib/fisk/instructions/vpaddusw.rb,
lib/fisk/instructions/vpalignr.rb,
lib/fisk/instructions/vpblendd.rb,
lib/fisk/instructions/vpblendw.rb,
lib/fisk/instructions/vpcmpeqb.rb,
lib/fisk/instructions/vpcmpeqd.rb,
lib/fisk/instructions/vpcmpeqq.rb,
lib/fisk/instructions/vpcmpeqw.rb,
lib/fisk/instructions/vpcmpgtb.rb,
lib/fisk/instructions/vpcmpgtd.rb,
lib/fisk/instructions/vpcmpgtq.rb,
lib/fisk/instructions/vpcmpgtw.rb,
lib/fisk/instructions/vpermi2b.rb,
lib/fisk/instructions/vpermi2d.rb,
lib/fisk/instructions/vpermi2q.rb,
lib/fisk/instructions/vpermi2w.rb,
lib/fisk/instructions/vpermt2b.rb,
lib/fisk/instructions/vpermt2d.rb,
lib/fisk/instructions/vpermt2q.rb,
lib/fisk/instructions/vpermt2w.rb,
lib/fisk/instructions/vphaddbd.rb,
lib/fisk/instructions/vphaddbq.rb,
lib/fisk/instructions/vphaddbw.rb,
lib/fisk/instructions/vphadddq.rb,
lib/fisk/instructions/vphaddsw.rb,
lib/fisk/instructions/vphaddwd.rb,
lib/fisk/instructions/vphaddwq.rb,
lib/fisk/instructions/vphsubbw.rb,
lib/fisk/instructions/vphsubdq.rb,
lib/fisk/instructions/vphsubsw.rb,
lib/fisk/instructions/vphsubwd.rb,
lib/fisk/instructions/vplzcntd.rb,
lib/fisk/instructions/vplzcntq.rb,
lib/fisk/instructions/vpmacsdd.rb,
lib/fisk/instructions/vpmacswd.rb,
lib/fisk/instructions/vpmacsww.rb,
lib/fisk/instructions/vpmaddwd.rb,
lib/fisk/instructions/vpmovb2m.rb,
lib/fisk/instructions/vpmovd2m.rb,
lib/fisk/instructions/vpmovm2b.rb,
lib/fisk/instructions/vpmovm2d.rb,
lib/fisk/instructions/vpmovm2q.rb,
lib/fisk/instructions/vpmovm2w.rb,
lib/fisk/instructions/vpmovq2m.rb,
lib/fisk/instructions/vpmovsdb.rb,
lib/fisk/instructions/vpmovsdw.rb,
lib/fisk/instructions/vpmovsqb.rb,
lib/fisk/instructions/vpmovsqd.rb,
lib/fisk/instructions/vpmovsqw.rb,
lib/fisk/instructions/vpmovswb.rb,
lib/fisk/instructions/vpmovw2m.rb,
lib/fisk/instructions/vpmulhuw.rb,
lib/fisk/instructions/vpmuludq.rb,
lib/fisk/instructions/vpopcntd.rb,
lib/fisk/instructions/vpopcntq.rb,
lib/fisk/instructions/vpshufhw.rb,
lib/fisk/instructions/vpshuflw.rb,
lib/fisk/instructions/vpsubusb.rb,
lib/fisk/instructions/vpsubusw.rb,
lib/fisk/instructions/vptestmb.rb,
lib/fisk/instructions/vptestmd.rb,
lib/fisk/instructions/vptestmq.rb,
lib/fisk/instructions/vptestmw.rb,
lib/fisk/instructions/vrangepd.rb,
lib/fisk/instructions/vrangeps.rb,
lib/fisk/instructions/vrangesd.rb,
lib/fisk/instructions/vrangess.rb,
lib/fisk/instructions/vrcp14pd.rb,
lib/fisk/instructions/vrcp14ps.rb,
lib/fisk/instructions/vrcp14sd.rb,
lib/fisk/instructions/vrcp14ss.rb,
lib/fisk/instructions/vrcp28pd.rb,
lib/fisk/instructions/vrcp28ps.rb,
lib/fisk/instructions/vrcp28sd.rb,
lib/fisk/instructions/vrcp28ss.rb,
lib/fisk/instructions/vroundpd.rb,
lib/fisk/instructions/vroundps.rb,
lib/fisk/instructions/vroundsd.rb,
lib/fisk/instructions/vroundss.rb,
lib/fisk/instructions/vrsqrtps.rb,
lib/fisk/instructions/vrsqrtss.rb,
lib/fisk/instructions/vstmxcsr.rb,
lib/fisk/instructions/vucomisd.rb,
lib/fisk/instructions/vucomiss.rb,
lib/fisk/instructions/vzeroall.rb,
lib/fisk/instructions/cmpxchg8b.rb,
lib/fisk/instructions/cvttpd2dq.rb,
lib/fisk/instructions/cvttpd2pi.rb,
lib/fisk/instructions/cvttps2dq.rb,
lib/fisk/instructions/cvttps2pi.rb,
lib/fisk/instructions/cvttsd2si.rb,
lib/fisk/instructions/cvttss2si.rb,
lib/fisk/instructions/extractps.rb,
lib/fisk/instructions/pclmulqdq.rb,
lib/fisk/instructions/pcmpestri.rb,
lib/fisk/instructions/pcmpestrm.rb,
lib/fisk/instructions/pcmpistri.rb,
lib/fisk/instructions/pcmpistrm.rb,
lib/fisk/instructions/pmaddubsw.rb,
lib/fisk/instructions/prefetchw.rb,
lib/fisk/instructions/punpckhbw.rb,
lib/fisk/instructions/punpckhdq.rb,
lib/fisk/instructions/punpckhwd.rb,
lib/fisk/instructions/punpcklbw.rb,
lib/fisk/instructions/punpckldq.rb,
lib/fisk/instructions/punpcklwd.rb,
lib/fisk/instructions/sha1nexte.rb,
lib/fisk/instructions/sha1rnds4.rb,
lib/fisk/instructions/vaddsubpd.rb,
lib/fisk/instructions/vaddsubps.rb,
lib/fisk/instructions/vblendmpd.rb,
lib/fisk/instructions/vblendmps.rb,
lib/fisk/instructions/vblendvpd.rb,
lib/fisk/instructions/vblendvps.rb,
lib/fisk/instructions/vcvtdq2pd.rb,
lib/fisk/instructions/vcvtdq2ps.rb,
lib/fisk/instructions/vcvtpd2dq.rb,
lib/fisk/instructions/vcvtpd2ps.rb,
lib/fisk/instructions/vcvtpd2qq.rb,
lib/fisk/instructions/vcvtph2ps.rb,
lib/fisk/instructions/vcvtps2dq.rb,
lib/fisk/instructions/vcvtps2pd.rb,
lib/fisk/instructions/vcvtps2ph.rb,
lib/fisk/instructions/vcvtps2qq.rb,
lib/fisk/instructions/vcvtqq2pd.rb,
lib/fisk/instructions/vcvtqq2ps.rb,
lib/fisk/instructions/vcvtsd2si.rb,
lib/fisk/instructions/vcvtsd2ss.rb,
lib/fisk/instructions/vcvtsi2sd.rb,
lib/fisk/instructions/vcvtsi2ss.rb,
lib/fisk/instructions/vcvtss2sd.rb,
lib/fisk/instructions/vcvtss2si.rb,
lib/fisk/instructions/vdbpsadbw.rb,
lib/fisk/instructions/vexpandpd.rb,
lib/fisk/instructions/vexpandps.rb,
lib/fisk/instructions/vfnmaddpd.rb,
lib/fisk/instructions/vfnmaddps.rb,
lib/fisk/instructions/vfnmaddsd.rb,
lib/fisk/instructions/vfnmaddss.rb,
lib/fisk/instructions/vfnmsubpd.rb,
lib/fisk/instructions/vfnmsubps.rb,
lib/fisk/instructions/vfnmsubsd.rb,
lib/fisk/instructions/vfnmsubss.rb,
lib/fisk/instructions/vgetexppd.rb,
lib/fisk/instructions/vgetexpps.rb,
lib/fisk/instructions/vgetexpsd.rb,
lib/fisk/instructions/vgetexpss.rb,
lib/fisk/instructions/vinsertps.rb,
lib/fisk/instructions/vmovdqa32.rb,
lib/fisk/instructions/vmovdqa64.rb,
lib/fisk/instructions/vmovdqu16.rb,
lib/fisk/instructions/vmovdqu32.rb,
lib/fisk/instructions/vmovdqu64.rb,
lib/fisk/instructions/vmovmskpd.rb,
lib/fisk/instructions/vmovmskps.rb,
lib/fisk/instructions/vmovntdqa.rb,
lib/fisk/instructions/vmovshdup.rb,
lib/fisk/instructions/vmovsldup.rb,
lib/fisk/instructions/vpackssdw.rb,
lib/fisk/instructions/vpacksswb.rb,
lib/fisk/instructions/vpackusdw.rb,
lib/fisk/instructions/vpackuswb.rb,
lib/fisk/instructions/vpblendmb.rb,
lib/fisk/instructions/vpblendmd.rb,
lib/fisk/instructions/vpblendmq.rb,
lib/fisk/instructions/vpblendmw.rb,
lib/fisk/instructions/vpblendvb.rb,
lib/fisk/instructions/vpermi2pd.rb,
lib/fisk/instructions/vpermi2ps.rb,
lib/fisk/instructions/vpermilpd.rb,
lib/fisk/instructions/vpermilps.rb,
lib/fisk/instructions/vpermt2pd.rb,
lib/fisk/instructions/vpermt2ps.rb,
lib/fisk/instructions/vpexpandd.rb,
lib/fisk/instructions/vpexpandq.rb,
lib/fisk/instructions/vphaddubd.rb,
lib/fisk/instructions/vphaddubq.rb,
lib/fisk/instructions/vphaddubw.rb,
lib/fisk/instructions/vphaddudq.rb,
lib/fisk/instructions/vphadduwd.rb,
lib/fisk/instructions/vphadduwq.rb,
lib/fisk/instructions/vpmacsdqh.rb,
lib/fisk/instructions/vpmacsdql.rb,
lib/fisk/instructions/vpmacssdd.rb,
lib/fisk/instructions/vpmacsswd.rb,
lib/fisk/instructions/vpmacssww.rb,
lib/fisk/instructions/vpmadcswd.rb,
lib/fisk/instructions/vpmovmskb.rb,
lib/fisk/instructions/vpmovsxbd.rb,
lib/fisk/instructions/vpmovsxbq.rb,
lib/fisk/instructions/vpmovsxbw.rb,
lib/fisk/instructions/vpmovsxdq.rb,
lib/fisk/instructions/vpmovsxwd.rb,
lib/fisk/instructions/vpmovsxwq.rb,
lib/fisk/instructions/vpmovusdb.rb,
lib/fisk/instructions/vpmovusdw.rb,
lib/fisk/instructions/vpmovusqb.rb,
lib/fisk/instructions/vpmovusqd.rb,
lib/fisk/instructions/vpmovusqw.rb,
lib/fisk/instructions/vpmovuswb.rb,
lib/fisk/instructions/vpmovzxbd.rb,
lib/fisk/instructions/vpmovzxbq.rb,
lib/fisk/instructions/vpmovzxbw.rb,
lib/fisk/instructions/vpmovzxdq.rb,
lib/fisk/instructions/vpmovzxwd.rb,
lib/fisk/instructions/vpmovzxwq.rb,
lib/fisk/instructions/vpmulhrsw.rb,
lib/fisk/instructions/vptestnmb.rb,
lib/fisk/instructions/vptestnmd.rb,
lib/fisk/instructions/vptestnmq.rb,
lib/fisk/instructions/vptestnmw.rb,
lib/fisk/instructions/vreducepd.rb,
lib/fisk/instructions/vreduceps.rb,
lib/fisk/instructions/vreducesd.rb,
lib/fisk/instructions/vreducess.rb,
lib/fisk/instructions/vscalefpd.rb,
lib/fisk/instructions/vscalefps.rb,
lib/fisk/instructions/vscalefsd.rb,
lib/fisk/instructions/vscalefss.rb,
lib/fisk/instructions/vunpckhpd.rb,
lib/fisk/instructions/vunpckhps.rb,
lib/fisk/instructions/vunpcklpd.rb,
lib/fisk/instructions/vunpcklps.rb,
lib/fisk/instructions/aesdeclast.rb,
lib/fisk/instructions/aesenclast.rb,
lib/fisk/instructions/clflushopt.rb,
lib/fisk/instructions/cmpxchg16b.rb,
lib/fisk/instructions/maskmovdqu.rb,
lib/fisk/instructions/phminposuw.rb,
lib/fisk/instructions/prefetcht0.rb,
lib/fisk/instructions/prefetcht1.rb,
lib/fisk/instructions/prefetcht2.rb,
lib/fisk/instructions/punpckhqdq.rb,
lib/fisk/instructions/punpcklqdq.rb,
lib/fisk/instructions/sha256msg1.rb,
lib/fisk/instructions/sha256msg2.rb,
lib/fisk/instructions/vcvtpd2udq.rb,
lib/fisk/instructions/vcvtpd2uqq.rb,
lib/fisk/instructions/vcvtps2udq.rb,
lib/fisk/instructions/vcvtps2uqq.rb,
lib/fisk/instructions/vcvtsd2usi.rb,
lib/fisk/instructions/vcvtss2usi.rb,
lib/fisk/instructions/vcvttpd2dq.rb,
lib/fisk/instructions/vcvttpd2qq.rb,
lib/fisk/instructions/vcvttps2dq.rb,
lib/fisk/instructions/vcvttps2qq.rb,
lib/fisk/instructions/vcvttsd2si.rb,
lib/fisk/instructions/vcvttss2si.rb,
lib/fisk/instructions/vcvtudq2pd.rb,
lib/fisk/instructions/vcvtudq2ps.rb,
lib/fisk/instructions/vcvtuqq2pd.rb,
lib/fisk/instructions/vcvtuqq2ps.rb,
lib/fisk/instructions/vcvtusi2sd.rb,
lib/fisk/instructions/vcvtusi2ss.rb,
lib/fisk/instructions/vextractps.rb,
lib/fisk/instructions/vfpclasspd.rb,
lib/fisk/instructions/vfpclassps.rb,
lib/fisk/instructions/vfpclasssd.rb,
lib/fisk/instructions/vfpclassss.rb,
lib/fisk/instructions/vgatherdpd.rb,
lib/fisk/instructions/vgatherdps.rb,
lib/fisk/instructions/vgatherqpd.rb,
lib/fisk/instructions/vgatherqps.rb,
lib/fisk/instructions/vgetmantpd.rb,
lib/fisk/instructions/vgetmantps.rb,
lib/fisk/instructions/vgetmantsd.rb,
lib/fisk/instructions/vgetmantss.rb,
lib/fisk/instructions/vmaskmovpd.rb,
lib/fisk/instructions/vmaskmovps.rb,
lib/fisk/instructions/vpclmulqdq.rb,
lib/fisk/instructions/vpcmpestri.rb,
lib/fisk/instructions/vpcmpestrm.rb,
lib/fisk/instructions/vpcmpistri.rb,
lib/fisk/instructions/vpcmpistrm.rb,
lib/fisk/instructions/vperm2f128.rb,
lib/fisk/instructions/vperm2i128.rb,
lib/fisk/instructions/vpermil2pd.rb,
lib/fisk/instructions/vpermil2ps.rb,
lib/fisk/instructions/vpgatherdd.rb,
lib/fisk/instructions/vpgatherdq.rb,
lib/fisk/instructions/vpgatherqd.rb,
lib/fisk/instructions/vpgatherqq.rb,
lib/fisk/instructions/vpmacssdqh.rb,
lib/fisk/instructions/vpmacssdql.rb,
lib/fisk/instructions/vpmadcsswd.rb,
lib/fisk/instructions/vpmaddubsw.rb,
lib/fisk/instructions/vpmaskmovd.rb,
lib/fisk/instructions/vpmaskmovq.rb,
lib/fisk/instructions/vpternlogd.rb,
lib/fisk/instructions/vpternlogq.rb,
lib/fisk/instructions/vpunpckhbw.rb,
lib/fisk/instructions/vpunpckhdq.rb,
lib/fisk/instructions/vpunpckhwd.rb,
lib/fisk/instructions/vpunpcklbw.rb,
lib/fisk/instructions/vpunpckldq.rb,
lib/fisk/instructions/vpunpcklwd.rb,
lib/fisk/instructions/vrsqrt14pd.rb,
lib/fisk/instructions/vrsqrt14ps.rb,
lib/fisk/instructions/vrsqrt14sd.rb,
lib/fisk/instructions/vrsqrt14ss.rb,
lib/fisk/instructions/vrsqrt28pd.rb,
lib/fisk/instructions/vrsqrt28ps.rb,
lib/fisk/instructions/vrsqrt28sd.rb,
lib/fisk/instructions/vrsqrt28ss.rb,
lib/fisk/instructions/vshuff32x4.rb,
lib/fisk/instructions/vshuff64x2.rb,
lib/fisk/instructions/vshufi32x4.rb,
lib/fisk/instructions/vshufi64x2.rb,
lib/fisk/instructions/vzeroupper.rb,
lib/fisk/instructions/prefetchnta.rb,
lib/fisk/instructions/prefetchwt1.rb,
lib/fisk/instructions/sha256rnds2.rb,
lib/fisk/instructions/vaesdeclast.rb,
lib/fisk/instructions/vaesenclast.rb,
lib/fisk/instructions/vcompresspd.rb,
lib/fisk/instructions/vcompressps.rb,
lib/fisk/instructions/vcvttpd2udq.rb,
lib/fisk/instructions/vcvttpd2uqq.rb,
lib/fisk/instructions/vcvttps2udq.rb,
lib/fisk/instructions/vcvttps2uqq.rb,
lib/fisk/instructions/vcvttsd2usi.rb,
lib/fisk/instructions/vcvttss2usi.rb,
lib/fisk/instructions/vfixupimmpd.rb,
lib/fisk/instructions/vfixupimmps.rb,
lib/fisk/instructions/vfixupimmsd.rb,
lib/fisk/instructions/vfixupimmss.rb,
lib/fisk/instructions/vfmadd132pd.rb,
lib/fisk/instructions/vfmadd132ps.rb,
lib/fisk/instructions/vfmadd132sd.rb,
lib/fisk/instructions/vfmadd132ss.rb,
lib/fisk/instructions/vfmadd213pd.rb,
lib/fisk/instructions/vfmadd213ps.rb,
lib/fisk/instructions/vfmadd213sd.rb,
lib/fisk/instructions/vfmadd213ss.rb,
lib/fisk/instructions/vfmadd231pd.rb,
lib/fisk/instructions/vfmadd231ps.rb,
lib/fisk/instructions/vfmadd231sd.rb,
lib/fisk/instructions/vfmadd231ss.rb,
lib/fisk/instructions/vfmaddsubpd.rb,
lib/fisk/instructions/vfmaddsubps.rb,
lib/fisk/instructions/vfmsub132pd.rb,
lib/fisk/instructions/vfmsub132ps.rb,
lib/fisk/instructions/vfmsub132sd.rb,
lib/fisk/instructions/vfmsub132ss.rb,
lib/fisk/instructions/vfmsub213pd.rb,
lib/fisk/instructions/vfmsub213ps.rb,
lib/fisk/instructions/vfmsub213sd.rb,
lib/fisk/instructions/vfmsub213ss.rb,
lib/fisk/instructions/vfmsub231pd.rb,
lib/fisk/instructions/vfmsub231ps.rb,
lib/fisk/instructions/vfmsub231sd.rb,
lib/fisk/instructions/vfmsub231ss.rb,
lib/fisk/instructions/vfmsubaddpd.rb,
lib/fisk/instructions/vfmsubaddps.rb,
lib/fisk/instructions/vinsertf128.rb,
lib/fisk/instructions/vinserti128.rb,
lib/fisk/instructions/vmaskmovdqu.rb,
lib/fisk/instructions/vpcompressd.rb,
lib/fisk/instructions/vpcompressq.rb,
lib/fisk/instructions/vpconflictd.rb,
lib/fisk/instructions/vpconflictq.rb,
lib/fisk/instructions/vphminposuw.rb,
lib/fisk/instructions/vpmadd52huq.rb,
lib/fisk/instructions/vpmadd52luq.rb,
lib/fisk/instructions/vpscatterdd.rb,
lib/fisk/instructions/vpscatterdq.rb,
lib/fisk/instructions/vpscatterqd.rb,
lib/fisk/instructions/vpscatterqq.rb,
lib/fisk/instructions/vpunpckhqdq.rb,
lib/fisk/instructions/vpunpcklqdq.rb,
lib/fisk/instructions/vrndscalepd.rb,
lib/fisk/instructions/vrndscaleps.rb,
lib/fisk/instructions/vrndscalesd.rb,
lib/fisk/instructions/vrndscaless.rb,
lib/fisk/instructions/vscatterdpd.rb,
lib/fisk/instructions/vscatterdps.rb,
lib/fisk/instructions/vscatterqpd.rb,
lib/fisk/instructions/vscatterqps.rb,
lib/fisk/instructions/vbroadcastsd.rb,
lib/fisk/instructions/vbroadcastss.rb,
lib/fisk/instructions/vextractf128.rb,
lib/fisk/instructions/vextracti128.rb,
lib/fisk/instructions/vfnmadd132pd.rb,
lib/fisk/instructions/vfnmadd132ps.rb,
lib/fisk/instructions/vfnmadd132sd.rb,
lib/fisk/instructions/vfnmadd132ss.rb,
lib/fisk/instructions/vfnmadd213pd.rb,
lib/fisk/instructions/vfnmadd213ps.rb,
lib/fisk/instructions/vfnmadd213sd.rb,
lib/fisk/instructions/vfnmadd213ss.rb,
lib/fisk/instructions/vfnmadd231pd.rb,
lib/fisk/instructions/vfnmadd231ps.rb,
lib/fisk/instructions/vfnmadd231sd.rb,
lib/fisk/instructions/vfnmadd231ss.rb,
lib/fisk/instructions/vfnmsub132pd.rb,
lib/fisk/instructions/vfnmsub132ps.rb,
lib/fisk/instructions/vfnmsub132sd.rb,
lib/fisk/instructions/vfnmsub132ss.rb,
lib/fisk/instructions/vfnmsub213pd.rb,
lib/fisk/instructions/vfnmsub213ps.rb,
lib/fisk/instructions/vfnmsub213sd.rb,
lib/fisk/instructions/vfnmsub213ss.rb,
lib/fisk/instructions/vfnmsub231pd.rb,
lib/fisk/instructions/vfnmsub231ps.rb,
lib/fisk/instructions/vfnmsub231sd.rb,
lib/fisk/instructions/vfnmsub231ss.rb,
lib/fisk/instructions/vinsertf32x4.rb,
lib/fisk/instructions/vinsertf32x8.rb,
lib/fisk/instructions/vinsertf64x2.rb,
lib/fisk/instructions/vinsertf64x4.rb,
lib/fisk/instructions/vinserti32x4.rb,
lib/fisk/instructions/vinserti32x8.rb,
lib/fisk/instructions/vinserti64x2.rb,
lib/fisk/instructions/vinserti64x4.rb,
lib/fisk/instructions/vpbroadcastb.rb,
lib/fisk/instructions/vpbroadcastd.rb,
lib/fisk/instructions/vpbroadcastq.rb,
lib/fisk/instructions/vpbroadcastw.rb,
lib/fisk/instructions/vextractf32x4.rb,
lib/fisk/instructions/vextractf32x8.rb,
lib/fisk/instructions/vextractf64x2.rb,
lib/fisk/instructions/vextractf64x4.rb,
lib/fisk/instructions/vextracti32x4.rb,
lib/fisk/instructions/vextracti32x8.rb,
lib/fisk/instructions/vextracti64x2.rb,
lib/fisk/instructions/vextracti64x4.rb,
lib/fisk/instructions/vgatherpf0dpd.rb,
lib/fisk/instructions/vgatherpf0dps.rb,
lib/fisk/instructions/vgatherpf0qpd.rb,
lib/fisk/instructions/vgatherpf0qps.rb,
lib/fisk/instructions/vgatherpf1dpd.rb,
lib/fisk/instructions/vgatherpf1dps.rb,
lib/fisk/instructions/vgatherpf1qpd.rb,
lib/fisk/instructions/vgatherpf1qps.rb,
lib/fisk/instructions/vbroadcastf128.rb,
lib/fisk/instructions/vbroadcasti128.rb,
lib/fisk/instructions/vfmaddsub132pd.rb,
lib/fisk/instructions/vfmaddsub132ps.rb,
lib/fisk/instructions/vfmaddsub213pd.rb,
lib/fisk/instructions/vfmaddsub213ps.rb,
lib/fisk/instructions/vfmaddsub231pd.rb,
lib/fisk/instructions/vfmaddsub231ps.rb,
lib/fisk/instructions/vfmsubadd132pd.rb,
lib/fisk/instructions/vfmsubadd132ps.rb,
lib/fisk/instructions/vfmsubadd213pd.rb,
lib/fisk/instructions/vfmsubadd213ps.rb,
lib/fisk/instructions/vfmsubadd231pd.rb,
lib/fisk/instructions/vfmsubadd231ps.rb,
lib/fisk/instructions/vpmultishiftqb.rb,
lib/fisk/instructions/vscatterpf0dpd.rb,
lib/fisk/instructions/vscatterpf0dps.rb,
lib/fisk/instructions/vscatterpf0qpd.rb,
lib/fisk/instructions/vscatterpf0qps.rb,
lib/fisk/instructions/vscatterpf1dpd.rb,
lib/fisk/instructions/vscatterpf1dps.rb,
lib/fisk/instructions/vscatterpf1qpd.rb,
lib/fisk/instructions/vscatterpf1qps.rb,
lib/fisk/instructions/aeskeygenassist.rb,
lib/fisk/instructions/vbroadcastf32x2.rb,
lib/fisk/instructions/vbroadcastf32x4.rb,
lib/fisk/instructions/vbroadcastf32x8.rb,
lib/fisk/instructions/vbroadcastf64x2.rb,
lib/fisk/instructions/vbroadcastf64x4.rb,
lib/fisk/instructions/vbroadcasti32x2.rb,
lib/fisk/instructions/vbroadcasti32x4.rb,
lib/fisk/instructions/vbroadcasti32x8.rb,
lib/fisk/instructions/vbroadcasti64x2.rb,
lib/fisk/instructions/vbroadcasti64x4.rb,
lib/fisk/instructions/vpbroadcastmb2q.rb,
lib/fisk/instructions/vpbroadcastmw2d.rb,
lib/fisk/instructions/vaeskeygenassist.rb
Defined Under Namespace
Modules: Errors, Helpers, InstructionPredicates, Instructions, OperandPredicates, OperandSize, Registers Classes: AbsoluteJumpInstruction, AbsoluteLocation, CFG, Comment, Encoding, ImmediateOperand, Instruction, Label, Lazy, Lit, M, MOffs64, Memory, Operand, Rel32, Rel8, Relative, RetryRequest, UnknownLabel, UnresolvedJumpInstruction, UnresolvedRIPInstruction, ValueOperand
Constant Summary collapse
- VERSION =
"2.3.2"
Instance Method Summary collapse
-
#absolute(val) ⇒ Object
Creates an “absolute” location.
-
#asm(buf = StringIO.new(''.b), metadata: {}, &block) ⇒ Object
Instance eval’s a given block and writes encoded instructions to
buf. -
#assign_registers(list, local: false) ⇒ Object
Assign registers to any temporary registers.
-
#basic_blocks ⇒ Object
Return a list of basic blocks for the instructions.
-
#cfg ⇒ Object
Return a cfg for these instructions.
-
#comment(message) ⇒ Object
Insert a comment at the current position in the instructions.
-
#gen_with_insn(insns, params) ⇒ Object
If the performance check is enabled, warnings are added to @performance_warnings.
-
#imm(val) ⇒ Object
Create a signed immediate value of the right width.
-
#initialize(check_performance: false) {|_self| ... } ⇒ Fisk
constructor
params: :check_performance: Raise a SuboptimalPerformance error on write if suboptimal instructions are detected.
-
#label(name) ⇒ Object
Create a label to be used with jump instructions.
-
#lazy(&block) ⇒ Object
Record a block that will be called during instruction encoding.
- #lit(val) ⇒ Object
- #m(x, displacement = 0) ⇒ Object
- #moffs64(val) ⇒ Object
-
#put_label(name) ⇒ Object
(also: #make_label)
Insert a label named
nameat the current position in the instructions. -
#register(name = "temp") ⇒ Object
Allocate and return a new register.
- #rel32(val) ⇒ Object
- #rel8(val) ⇒ Object
-
#release_all_registers ⇒ Object
Releases all registers that haven’t already been released.
-
#release_register(reg) ⇒ Object
Mark a temporary register as “done being used” at this point in the instructions.
- #rip(displacement = 0) ⇒ Object
-
#to_binary(metadata: {}) ⇒ Object
Encodes all instructions and returns a binary string with the encoded instructions.
-
#uimm(val) ⇒ Object
Create an unsigned immediate value of the right width.
-
#with_register(name = "temp") {|reg| ... } ⇒ Object
Allocate a register and yield it to the block.
-
#write_to(buffer, metadata: {}) ⇒ Object
Encode all instructions and write them to
buffer.
Methods included from Instructions::DSLMethods
#adc, #adcx, #add, #addpd, #addps, #addsd, #addss, #addsubpd, #addsubps, #adox, #aesdec, #aesdeclast, #aesenc, #aesenclast, #aesimc, #aeskeygenassist, #and, #andn, #andnpd, #andnps, #andpd, #andps, #bextr, #blcfill, #blci, #blcic, #blcmsk, #blcs, #blendpd, #blendps, #blendvpd, #blendvps, #blsfill, #blsi, #blsic, #blsmsk, #blsr, #bsf, #bsr, #bswap, #bt, #btc, #btr, #bts, #bzhi, #call, #cbw, #cdq, #cdqe, #clc, #cld, #clflush, #clflushopt, #clwb, #clzero, #cmc, #cmova, #cmovae, #cmovb, #cmovbe, #cmovc, #cmove, #cmovg, #cmovge, #cmovl, #cmovle, #cmovna, #cmovnae, #cmovnb, #cmovnbe, #cmovnc, #cmovne, #cmovng, #cmovnge, #cmovnl, #cmovnle, #cmovno, #cmovnp, #cmovns, #cmovnz, #cmovo, #cmovp, #cmovpe, #cmovpo, #cmovs, #cmovz, #cmp, #cmppd, #cmpps, #cmpsd, #cmpss, #cmpxchg, #cmpxchg16b, #cmpxchg8b, #comisd, #comiss, #cpuid, #cqo, #crc32, #cvtdq2pd, #cvtdq2ps, #cvtpd2dq, #cvtpd2pi, #cvtpd2ps, #cvtpi2pd, #cvtpi2ps, #cvtps2dq, #cvtps2pd, #cvtps2pi, #cvtsd2si, #cvtsd2ss, #cvtsi2sd, #cvtsi2ss, #cvtss2sd, #cvtss2si, #cvttpd2dq, #cvttpd2pi, #cvttps2dq, #cvttps2pi, #cvttsd2si, #cvttss2si, #cwd, #cwde, #dec, #div, #divpd, #divps, #divsd, #divss, #dppd, #dpps, #emms, #extractps, #extrq, #femms, #haddpd, #haddps, #hsubpd, #hsubps, #idiv, #imul, #inc, #insertps, #insertq, #int, #ja, #jae, #jb, #jbe, #jc, #je, #jecxz, #jg, #jge, #jl, #jle, #jmp, #jna, #jnae, #jnb, #jnbe, #jnc, #jne, #jng, #jnge, #jnl, #jnle, #jno, #jnp, #jns, #jnz, #jo, #jp, #jpe, #jpo, #jrcxz, #js, #jz, #kaddb, #kaddd, #kaddq, #kaddw, #kandb, #kandd, #kandnb, #kandnd, #kandnq, #kandnw, #kandq, #kandw, #kmovb, #kmovd, #kmovq, #kmovw, #knotb, #knotd, #knotq, #knotw, #korb, #kord, #korq, #kortestb, #kortestd, #kortestq, #kortestw, #korw, #kshiftlb, #kshiftld, #kshiftlq, #kshiftlw, #kshiftrb, #kshiftrd, #kshiftrq, #kshiftrw, #ktestb, #ktestd, #ktestq, #ktestw, #kunpckbw, #kunpckdq, #kunpckwd, #kxnorb, #kxnord, #kxnorq, #kxnorw, #kxorb, #kxord, #kxorq, #kxorw, #lddqu, #ldmxcsr, #lea, #lfence, #lzcnt, #maskmovdqu, #maskmovq, #maxpd, #maxps, #maxsd, #maxss, #mfence, #minpd, #minps, #minsd, #minss, #monitor, #monitorx, #mov, #movapd, #movaps, #movbe, #movd, #movddup, #movdq2q, #movdqa, #movdqu, #movhlps, #movhpd, #movhps, #movlhps, #movlpd, #movlps, #movmskpd, #movmskps, #movntdq, #movntdqa, #movnti, #movntpd, #movntps, #movntq, #movntsd, #movntss, #movq, #movq2dq, #movsd, #movshdup, #movsldup, #movss, #movsx, #movsxd, #movupd, #movups, #movzx, #mpsadbw, #mul, #mulpd, #mulps, #mulsd, #mulss, #mulx, #mwait, #mwaitx, #neg, #nop, #not, #or, #orpd, #orps, #pabsb, #pabsd, #pabsw, #packssdw, #packsswb, #packusdw, #packuswb, #paddb, #paddd, #paddq, #paddsb, #paddsw, #paddusb, #paddusw, #paddw, #palignr, #pand, #pandn, #pause, #pavgb, #pavgusb, #pavgw, #pblendvb, #pblendw, #pclmulqdq, #pcmpeqb, #pcmpeqd, #pcmpeqq, #pcmpeqw, #pcmpestri, #pcmpestrm, #pcmpgtb, #pcmpgtd, #pcmpgtq, #pcmpgtw, #pcmpistri, #pcmpistrm, #pdep, #pext, #pextrb, #pextrd, #pextrq, #pextrw, #pf2id, #pf2iw, #pfacc, #pfadd, #pfcmpeq, #pfcmpge, #pfcmpgt, #pfmax, #pfmin, #pfmul, #pfnacc, #pfpnacc, #pfrcp, #pfrcpit1, #pfrcpit2, #pfrsqit1, #pfrsqrt, #pfsub, #pfsubr, #phaddd, #phaddsw, #phaddw, #phminposuw, #phsubd, #phsubsw, #phsubw, #pi2fd, #pi2fw, #pinsrb, #pinsrd, #pinsrq, #pinsrw, #pmaddubsw, #pmaddwd, #pmaxsb, #pmaxsd, #pmaxsw, #pmaxub, #pmaxud, #pmaxuw, #pminsb, #pminsd, #pminsw, #pminub, #pminud, #pminuw, #pmovmskb, #pmovsxbd, #pmovsxbq, #pmovsxbw, #pmovsxdq, #pmovsxwd, #pmovsxwq, #pmovzxbd, #pmovzxbq, #pmovzxbw, #pmovzxdq, #pmovzxwd, #pmovzxwq, #pmuldq, #pmulhrsw, #pmulhrw, #pmulhuw, #pmulhw, #pmulld, #pmullw, #pmuludq, #pop, #popcnt, #por, #prefetch, #prefetchnta, #prefetcht0, #prefetcht1, #prefetcht2, #prefetchw, #prefetchwt1, #psadbw, #pshufb, #pshufd, #pshufhw, #pshuflw, #pshufw, #psignb, #psignd, #psignw, #pslld, #pslldq, #psllq, #psllw, #psrad, #psraw, #psrld, #psrldq, #psrlq, #psrlw, #psubb, #psubd, #psubq, #psubsb, #psubsw, #psubusb, #psubusw, #psubw, #pswapd, #ptest, #punpckhbw, #punpckhdq, #punpckhqdq, #punpckhwd, #punpcklbw, #punpckldq, #punpcklqdq, #punpcklwd, #push, #pxor, #rcl, #rcpps, #rcpss, #rcr, #rdrand, #rdseed, #rdtsc, #rdtscp, #ret, #rol, #ror, #rorx, #roundpd, #roundps, #roundsd, #roundss, #rsqrtps, #rsqrtss, #sal, #sar, #sarx, #sbb, #seta, #setae, #setb, #setbe, #setc, #sete, #setg, #setge, #setl, #setle, #setna, #setnae, #setnb, #setnbe, #setnc, #setne, #setng, #setnge, #setnl, #setnle, #setno, #setnp, #setns, #setnz, #seto, #setp, #setpe, #setpo, #sets, #setz, #sfence, #sha1msg1, #sha1msg2, #sha1nexte, #sha1rnds4, #sha256msg1, #sha256msg2, #sha256rnds2, #shl, #shld, #shlx, #shr, #shrd, #shrx, #shufpd, #shufps, #sqrtpd, #sqrtps, #sqrtsd, #sqrtss, #stc, #std, #stmxcsr, #sub, #subpd, #subps, #subsd, #subss, #syscall, #t1mskc, #test, #tzcnt, #tzmsk, #ucomisd, #ucomiss, #ud2, #unpckhpd, #unpckhps, #unpcklpd, #unpcklps, #vaddpd, #vaddps, #vaddsd, #vaddss, #vaddsubpd, #vaddsubps, #vaesdec, #vaesdeclast, #vaesenc, #vaesenclast, #vaesimc, #vaeskeygenassist, #valignd, #valignq, #vandnpd, #vandnps, #vandpd, #vandps, #vblendmpd, #vblendmps, #vblendpd, #vblendps, #vblendvpd, #vblendvps, #vbroadcastf128, #vbroadcastf32x2, #vbroadcastf32x4, #vbroadcastf32x8, #vbroadcastf64x2, #vbroadcastf64x4, #vbroadcasti128, #vbroadcasti32x2, #vbroadcasti32x4, #vbroadcasti32x8, #vbroadcasti64x2, #vbroadcasti64x4, #vbroadcastsd, #vbroadcastss, #vcmppd, #vcmpps, #vcmpsd, #vcmpss, #vcomisd, #vcomiss, #vcompresspd, #vcompressps, #vcvtdq2pd, #vcvtdq2ps, #vcvtpd2dq, #vcvtpd2ps, #vcvtpd2qq, #vcvtpd2udq, #vcvtpd2uqq, #vcvtph2ps, #vcvtps2dq, #vcvtps2pd, #vcvtps2ph, #vcvtps2qq, #vcvtps2udq, #vcvtps2uqq, #vcvtqq2pd, #vcvtqq2ps, #vcvtsd2si, #vcvtsd2ss, #vcvtsd2usi, #vcvtsi2sd, #vcvtsi2ss, #vcvtss2sd, #vcvtss2si, #vcvtss2usi, #vcvttpd2dq, #vcvttpd2qq, #vcvttpd2udq, #vcvttpd2uqq, #vcvttps2dq, #vcvttps2qq, #vcvttps2udq, #vcvttps2uqq, #vcvttsd2si, #vcvttsd2usi, #vcvttss2si, #vcvttss2usi, #vcvtudq2pd, #vcvtudq2ps, #vcvtuqq2pd, #vcvtuqq2ps, #vcvtusi2sd, #vcvtusi2ss, #vdbpsadbw, #vdivpd, #vdivps, #vdivsd, #vdivss, #vdppd, #vdpps, #vexp2pd, #vexp2ps, #vexpandpd, #vexpandps, #vextractf128, #vextractf32x4, #vextractf32x8, #vextractf64x2, #vextractf64x4, #vextracti128, #vextracti32x4, #vextracti32x8, #vextracti64x2, #vextracti64x4, #vextractps, #vfixupimmpd, #vfixupimmps, #vfixupimmsd, #vfixupimmss, #vfmadd132pd, #vfmadd132ps, #vfmadd132sd, #vfmadd132ss, #vfmadd213pd, #vfmadd213ps, #vfmadd213sd, #vfmadd213ss, #vfmadd231pd, #vfmadd231ps, #vfmadd231sd, #vfmadd231ss, #vfmaddpd, #vfmaddps, #vfmaddsd, #vfmaddss, #vfmaddsub132pd, #vfmaddsub132ps, #vfmaddsub213pd, #vfmaddsub213ps, #vfmaddsub231pd, #vfmaddsub231ps, #vfmaddsubpd, #vfmaddsubps, #vfmsub132pd, #vfmsub132ps, #vfmsub132sd, #vfmsub132ss, #vfmsub213pd, #vfmsub213ps, #vfmsub213sd, #vfmsub213ss, #vfmsub231pd, #vfmsub231ps, #vfmsub231sd, #vfmsub231ss, #vfmsubadd132pd, #vfmsubadd132ps, #vfmsubadd213pd, #vfmsubadd213ps, #vfmsubadd231pd, #vfmsubadd231ps, #vfmsubaddpd, #vfmsubaddps, #vfmsubpd, #vfmsubps, #vfmsubsd, #vfmsubss, #vfnmadd132pd, #vfnmadd132ps, #vfnmadd132sd, #vfnmadd132ss, #vfnmadd213pd, #vfnmadd213ps, #vfnmadd213sd, #vfnmadd213ss, #vfnmadd231pd, #vfnmadd231ps, #vfnmadd231sd, #vfnmadd231ss, #vfnmaddpd, #vfnmaddps, #vfnmaddsd, #vfnmaddss, #vfnmsub132pd, #vfnmsub132ps, #vfnmsub132sd, #vfnmsub132ss, #vfnmsub213pd, #vfnmsub213ps, #vfnmsub213sd, #vfnmsub213ss, #vfnmsub231pd, #vfnmsub231ps, #vfnmsub231sd, #vfnmsub231ss, #vfnmsubpd, #vfnmsubps, #vfnmsubsd, #vfnmsubss, #vfpclasspd, #vfpclassps, #vfpclasssd, #vfpclassss, #vfrczpd, #vfrczps, #vfrczsd, #vfrczss, #vgatherdpd, #vgatherdps, #vgatherpf0dpd, #vgatherpf0dps, #vgatherpf0qpd, #vgatherpf0qps, #vgatherpf1dpd, #vgatherpf1dps, #vgatherpf1qpd, #vgatherpf1qps, #vgatherqpd, #vgatherqps, #vgetexppd, #vgetexpps, #vgetexpsd, #vgetexpss, #vgetmantpd, #vgetmantps, #vgetmantsd, #vgetmantss, #vhaddpd, #vhaddps, #vhsubpd, #vhsubps, #vinsertf128, #vinsertf32x4, #vinsertf32x8, #vinsertf64x2, #vinsertf64x4, #vinserti128, #vinserti32x4, #vinserti32x8, #vinserti64x2, #vinserti64x4, #vinsertps, #vlddqu, #vldmxcsr, #vmaskmovdqu, #vmaskmovpd, #vmaskmovps, #vmaxpd, #vmaxps, #vmaxsd, #vmaxss, #vminpd, #vminps, #vminsd, #vminss, #vmovapd, #vmovaps, #vmovd, #vmovddup, #vmovdqa, #vmovdqa32, #vmovdqa64, #vmovdqu, #vmovdqu16, #vmovdqu32, #vmovdqu64, #vmovdqu8, #vmovhlps, #vmovhpd, #vmovhps, #vmovlhps, #vmovlpd, #vmovlps, #vmovmskpd, #vmovmskps, #vmovntdq, #vmovntdqa, #vmovntpd, #vmovntps, #vmovq, #vmovsd, #vmovshdup, #vmovsldup, #vmovss, #vmovupd, #vmovups, #vmpsadbw, #vmulpd, #vmulps, #vmulsd, #vmulss, #vorpd, #vorps, #vpabsb, #vpabsd, #vpabsq, #vpabsw, #vpackssdw, #vpacksswb, #vpackusdw, #vpackuswb, #vpaddb, #vpaddd, #vpaddq, #vpaddsb, #vpaddsw, #vpaddusb, #vpaddusw, #vpaddw, #vpalignr, #vpand, #vpandd, #vpandn, #vpandnd, #vpandnq, #vpandq, #vpavgb, #vpavgw, #vpblendd, #vpblendmb, #vpblendmd, #vpblendmq, #vpblendmw, #vpblendvb, #vpblendw, #vpbroadcastb, #vpbroadcastd, #vpbroadcastmb2q, #vpbroadcastmw2d, #vpbroadcastq, #vpbroadcastw, #vpclmulqdq, #vpcmov, #vpcmpb, #vpcmpd, #vpcmpeqb, #vpcmpeqd, #vpcmpeqq, #vpcmpeqw, #vpcmpestri, #vpcmpestrm, #vpcmpgtb, #vpcmpgtd, #vpcmpgtq, #vpcmpgtw, #vpcmpistri, #vpcmpistrm, #vpcmpq, #vpcmpub, #vpcmpud, #vpcmpuq, #vpcmpuw, #vpcmpw, #vpcomb, #vpcomd, #vpcompressd, #vpcompressq, #vpcomq, #vpcomub, #vpcomud, #vpcomuq, #vpcomuw, #vpcomw, #vpconflictd, #vpconflictq, #vperm2f128, #vperm2i128, #vpermb, #vpermd, #vpermi2b, #vpermi2d, #vpermi2pd, #vpermi2ps, #vpermi2q, #vpermi2w, #vpermil2pd, #vpermil2ps, #vpermilpd, #vpermilps, #vpermpd, #vpermps, #vpermq, #vpermt2b, #vpermt2d, #vpermt2pd, #vpermt2ps, #vpermt2q, #vpermt2w, #vpermw, #vpexpandd, #vpexpandq, #vpextrb, #vpextrd, #vpextrq, #vpextrw, #vpgatherdd, #vpgatherdq, #vpgatherqd, #vpgatherqq, #vphaddbd, #vphaddbq, #vphaddbw, #vphaddd, #vphadddq, #vphaddsw, #vphaddubd, #vphaddubq, #vphaddubw, #vphaddudq, #vphadduwd, #vphadduwq, #vphaddw, #vphaddwd, #vphaddwq, #vphminposuw, #vphsubbw, #vphsubd, #vphsubdq, #vphsubsw, #vphsubw, #vphsubwd, #vpinsrb, #vpinsrd, #vpinsrq, #vpinsrw, #vplzcntd, #vplzcntq, #vpmacsdd, #vpmacsdqh, #vpmacsdql, #vpmacssdd, #vpmacssdqh, #vpmacssdql, #vpmacsswd, #vpmacssww, #vpmacswd, #vpmacsww, #vpmadcsswd, #vpmadcswd, #vpmadd52huq, #vpmadd52luq, #vpmaddubsw, #vpmaddwd, #vpmaskmovd, #vpmaskmovq, #vpmaxsb, #vpmaxsd, #vpmaxsq, #vpmaxsw, #vpmaxub, #vpmaxud, #vpmaxuq, #vpmaxuw, #vpminsb, #vpminsd, #vpminsq, #vpminsw, #vpminub, #vpminud, #vpminuq, #vpminuw, #vpmovb2m, #vpmovd2m, #vpmovdb, #vpmovdw, #vpmovm2b, #vpmovm2d, #vpmovm2q, #vpmovm2w, #vpmovmskb, #vpmovq2m, #vpmovqb, #vpmovqd, #vpmovqw, #vpmovsdb, #vpmovsdw, #vpmovsqb, #vpmovsqd, #vpmovsqw, #vpmovswb, #vpmovsxbd, #vpmovsxbq, #vpmovsxbw, #vpmovsxdq, #vpmovsxwd, #vpmovsxwq, #vpmovusdb, #vpmovusdw, #vpmovusqb, #vpmovusqd, #vpmovusqw, #vpmovuswb, #vpmovw2m, #vpmovwb, #vpmovzxbd, #vpmovzxbq, #vpmovzxbw, #vpmovzxdq, #vpmovzxwd, #vpmovzxwq, #vpmuldq, #vpmulhrsw, #vpmulhuw, #vpmulhw, #vpmulld, #vpmullq, #vpmullw, #vpmultishiftqb, #vpmuludq, #vpopcntd, #vpopcntq, #vpor, #vpord, #vporq, #vpperm, #vprold, #vprolq, #vprolvd, #vprolvq, #vprord, #vprorq, #vprorvd, #vprorvq, #vprotb, #vprotd, #vprotq, #vprotw, #vpsadbw, #vpscatterdd, #vpscatterdq, #vpscatterqd, #vpscatterqq, #vpshab, #vpshad, #vpshaq, #vpshaw, #vpshlb, #vpshld, #vpshlq, #vpshlw, #vpshufb, #vpshufd, #vpshufhw, #vpshuflw, #vpsignb, #vpsignd, #vpsignw, #vpslld, #vpslldq, #vpsllq, #vpsllvd, #vpsllvq, #vpsllvw, #vpsllw, #vpsrad, #vpsraq, #vpsravd, #vpsravq, #vpsravw, #vpsraw, #vpsrld, #vpsrldq, #vpsrlq, #vpsrlvd, #vpsrlvq, #vpsrlvw, #vpsrlw, #vpsubb, #vpsubd, #vpsubq, #vpsubsb, #vpsubsw, #vpsubusb, #vpsubusw, #vpsubw, #vpternlogd, #vpternlogq, #vptest, #vptestmb, #vptestmd, #vptestmq, #vptestmw, #vptestnmb, #vptestnmd, #vptestnmq, #vptestnmw, #vpunpckhbw, #vpunpckhdq, #vpunpckhqdq, #vpunpckhwd, #vpunpcklbw, #vpunpckldq, #vpunpcklqdq, #vpunpcklwd, #vpxor, #vpxord, #vpxorq, #vrangepd, #vrangeps, #vrangesd, #vrangess, #vrcp14pd, #vrcp14ps, #vrcp14sd, #vrcp14ss, #vrcp28pd, #vrcp28ps, #vrcp28sd, #vrcp28ss, #vrcpps, #vrcpss, #vreducepd, #vreduceps, #vreducesd, #vreducess, #vrndscalepd, #vrndscaleps, #vrndscalesd, #vrndscaless, #vroundpd, #vroundps, #vroundsd, #vroundss, #vrsqrt14pd, #vrsqrt14ps, #vrsqrt14sd, #vrsqrt14ss, #vrsqrt28pd, #vrsqrt28ps, #vrsqrt28sd, #vrsqrt28ss, #vrsqrtps, #vrsqrtss, #vscalefpd, #vscalefps, #vscalefsd, #vscalefss, #vscatterdpd, #vscatterdps, #vscatterpf0dpd, #vscatterpf0dps, #vscatterpf0qpd, #vscatterpf0qps, #vscatterpf1dpd, #vscatterpf1dps, #vscatterpf1qpd, #vscatterpf1qps, #vscatterqpd, #vscatterqps, #vshuff32x4, #vshuff64x2, #vshufi32x4, #vshufi64x2, #vshufpd, #vshufps, #vsqrtpd, #vsqrtps, #vsqrtsd, #vsqrtss, #vstmxcsr, #vsubpd, #vsubps, #vsubsd, #vsubss, #vtestpd, #vtestps, #vucomisd, #vucomiss, #vunpckhpd, #vunpckhps, #vunpcklpd, #vunpcklps, #vxorpd, #vxorps, #vzeroall, #vzeroupper, #xadd, #xchg, #xgetbv, #xlatb, #xor, #xorpd, #xorps
Constructor Details
#initialize(check_performance: false) {|_self| ... } ⇒ Fisk
params:
:check_performance: Raise a SuboptimalPerformance error on write if suboptimal
instructions are detected.
541 542 543 544 545 546 547 548 549 |
# File 'lib/fisk.rb', line 541 def initialize check_performance: false @instructions = [] @labels = {} @check_performance = check_performance @performance_warnings = [] # A set of temp registers recorded as we see them (not at allocation time) @temp_registers = Set.new yield self if block_given? end |
Instance Method Details
#absolute(val) ⇒ Object
Creates an “absolute” location. Use this for JUMP instructions where you know the absolute location but want a relative location calculated later.
For example:
fisk.jmp fisk.absolute(0xCAFE)
The emitted JMP instruction will use a calculated relative address (this is because x64 doesn’t have a jump to absolute position).
764 765 766 |
# File 'lib/fisk.rb', line 764 def absolute val AbsoluteLocation.new val end |
#asm(buf = StringIO.new(''.b), metadata: {}, &block) ⇒ Object
Instance eval’s a given block and writes encoded instructions to buf. For example:
fisk = Fisk.new
fisk.asm do
mov r9, imm64(32)
end
780 781 782 783 784 |
# File 'lib/fisk.rb', line 780 def asm buf = StringIO.new(''.b), metadata: {}, &block instance_eval(&block) write_to buf, metadata: buf end |
#assign_registers(list, local: false) ⇒ Object
Assign registers to any temporary registers. Only registers in list will be used when selecting register assignments
659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 |
# File 'lib/fisk.rb', line 659 def assign_registers list, local: false temp_registers = @temp_registers # This mutates the temp registers, setting their end_point based on # the CFG self.cfg unless local temp_registers.each do |reg| unless reg.end_point raise Errors::UnreleasedRegisterError, "Register #{reg.name} hasn't been released" end end temp_registers = temp_registers.sort_by(&:start_point) active = [] free_registers = list.reverse register_count = list.length temp_registers.each do |temp_reg| # expire old intervals active, dead = active.sort_by(&:end_point).partition do |j| j.end_point >= temp_reg.start_point end # Add unused registers back to the free register list dead.each { |tr| free_registers << tr.register } if active.length == register_count raise NotImplementedError, "Register spilled" end temp_reg.register = free_registers.pop active << temp_reg end end |
#basic_blocks ⇒ Object
Return a list of basic blocks for the instructions
571 572 573 |
# File 'lib/fisk.rb', line 571 def basic_blocks cfg.blocks end |
#cfg ⇒ Object
Return a cfg for these instructions. The CFG includes connected basic blocks as well as any temporary registers
577 578 579 |
# File 'lib/fisk.rb', line 577 def cfg CFG.build @instructions end |
#comment(message) ⇒ Object
Insert a comment at the current position in the instructions.
638 639 640 641 |
# File 'lib/fisk.rb', line 638 def comment @instructions << Comment.new() self end |
#gen_with_insn(insns, params) ⇒ Object
If the performance check is enabled, warnings are added to @performance_warnings.
848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 |
# File 'lib/fisk.rb', line 848 def gen_with_insn insns, params forms = insns.forms.find_all do |insn| if insn.operands.length == params.length params.zip(insn.operands).all? { |want_op, have_op| want_op.works?(have_op) } else false end end if forms.length == 0 valid_forms = insns.forms.map { |form| " #{insns.name} #{form.operands.map(&:type).join(", ")}" }.join "\n" msg = " Couldn't find instruction \#{insns.name} \#{params.map(&:type).join(\", \")}\n Valid forms:\n \#{valid_forms}\n eostr\n raise Errors::InvalidInstructionError, msg\n end\n\n form = forms.first\n\n insn = nil\n\n params.each do |param|\n if param.unresolved?\n if insns.name =~ /^J/ # I hope all jump instructions start with J!\n insn = UnresolvedJumpInstruction.new(insns, form, params.first)\n else\n # If it's not a jump instruction, assume unresolved RIP relative \u{1F62C}\n insn = UnresolvedRIPInstruction.new(insns, form, params)\n end\n end\n\n if param.absolute_location? && insns.name =~ /^(?:J|CALL)/\n insn = AbsoluteJumpInstruction.new(insns, form, params.first)\n end\n\n if param.temp_register?\n if param.end_point\n raise Errors::UseAfterInvalidationError, \"Register \#{param.name} used after release\"\n end\n @temp_registers << param\n\n param.start_point ||= @instructions.length\n end\n end\n\n if insn.nil?\n insn = Instruction.new(insns, form, params)\n\n if @check_performance\n warning = insns.check_performance(params)\n @performance_warnings << warning if warning\n end\n end\n\n @instructions << insn\n\n self\nend\n" |
#imm(val) ⇒ Object
Create a signed immediate value of the right width
708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 |
# File 'lib/fisk.rb', line 708 def imm val val = val.to_i if val >= -0x7F - 1 && val <= 0x7F imm8 val elsif val >= -0x7FFF - 1 && val <= 0x7FFF imm16 val elsif val >= -0x7FFFFFFF - 1 && val <= 0x7FFFFFFF imm32 val elsif val >= -0x7FFFFFFFFFFFFFFF - 1 && val <= 0x7FFFFFFFFFFFFFFF imm64 val else raise ArgumentError, "#{val} is larger than a 64 bit int" end end |
#label(name) ⇒ Object
Create a label to be used with jump instructions. For example:
fisk.jmp(fisk.label(:foo))
fisk.int(lit(3))
fisk.put_label(:foo)
587 588 589 |
# File 'lib/fisk.rb', line 587 def label name UnknownLabel.new(name) end |
#lazy(&block) ⇒ Object
Record a block that will be called during instruction encoding. The block will be yielded the current position of the buffer.
For example:
patch_position = nil
fisk.nop
fisk.lazy { |pos| patch_location = pos }
fisk.jmp(fisk.label(:foo))
fisk.lazy { |_|
fisk.mov(fisk.r8, fisk.imm64(patch_location))
}
fisk.write_to(buf)
The first lazy block will be yielded the position of the buffer immediately after encoding the ‘nop` instruction and before encoding the `jmp` instruction. The second lazy block will be yielded to after the `jmp` instruction has been encoded. This gives you a chance to write the buffer position from certain points in to your assembly
621 622 623 624 |
# File 'lib/fisk.rb', line 621 def lazy &block @instructions << Lazy.new(block) self end |
#lit(val) ⇒ Object
768 769 770 |
# File 'lib/fisk.rb', line 768 def lit val Lit.new val end |
#m(x, displacement = 0) ⇒ Object
283 284 285 |
# File 'lib/fisk.rb', line 283 def m x, displacement = 0 M.new x, displacement end |
#moffs64(val) ⇒ Object
703 704 705 |
# File 'lib/fisk.rb', line 703 def moffs64 val MOffs64.new val end |
#put_label(name) ⇒ Object Also known as: make_label
Insert a label named name at the current position in the instructions.
627 628 629 630 631 632 633 634 |
# File 'lib/fisk.rb', line 627 def put_label name if @labels.key? name raise Errors::LabelAlreadyDefined, "Label `#{name}` is already defined" end @labels[name] = nil @instructions << Label.new(name) self end |
#register(name = "temp") ⇒ Object
Allocate and return a new register. These registers will be replaced with real registers when ‘assign_registers` is called.
645 646 647 |
# File 'lib/fisk.rb', line 645 def register name = "temp" Registers::Temp.new name, "r64" end |
#rel32(val) ⇒ Object
747 748 749 |
# File 'lib/fisk.rb', line 747 def rel32 val Rel32.new val end |
#rel8(val) ⇒ Object
743 744 745 |
# File 'lib/fisk.rb', line 743 def rel8 val Rel8.new val end |
#release_all_registers ⇒ Object
Releases all registers that haven’t already been released
563 564 565 566 567 568 |
# File 'lib/fisk.rb', line 563 def release_all_registers @temp_registers.each do |reg| next if reg.end_point release_register reg end end |
#release_register(reg) ⇒ Object
Mark a temporary register as “done being used” at this point in the instructions. Using the register after passing the register to this method results in undefined behavior.
554 555 556 557 558 559 560 |
# File 'lib/fisk.rb', line 554 def release_register reg if reg.end_point raise Errors::AlreadyReleasedError, "register #{reg.name} already released at #{reg.end_point}" end reg.end_point = (@instructions.length - 1) end |
#rip(displacement = 0) ⇒ Object
279 280 281 |
# File 'lib/fisk.rb', line 279 def rip displacement = 0 Registers::Rip.new(displacement) end |
#to_binary(metadata: {}) ⇒ Object
Encodes all instructions and returns a binary string with the encoded instructions.
788 789 790 791 792 |
# File 'lib/fisk.rb', line 788 def to_binary(metadata: {}) io = StringIO.new ''.b write_to io, metadata: io.string end |
#uimm(val) ⇒ Object
Create an unsigned immediate value of the right width
725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 |
# File 'lib/fisk.rb', line 725 def uimm val val = val.to_i if val < 0 raise ArgumentError, "#{val} is negative" elsif val <= 0xFF imm8 val elsif val <= 0xFFFF imm16 val elsif val <= 0xFFFFFFFF imm32 val elsif val <= 0xFFFFFFFFFFFFFFFF imm64 val else raise ArgumentError, "#{val} is too large for a 64 bit int" end end |
#with_register(name = "temp") {|reg| ... } ⇒ Object
Allocate a register and yield it to the block. The register will be automatically released after the block is finished.
651 652 653 654 655 |
# File 'lib/fisk.rb', line 651 def with_register name = "temp" reg = register(name) yield reg release_register reg end |
#write_to(buffer, metadata: {}) ⇒ Object
Encode all instructions and write them to buffer. buffer should be an IO object. If the performance check is enabled, a runtime error is raised if suboptimal instructions are found.
800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 |
# File 'lib/fisk.rb', line 800 def write_to buffer, metadata: {} labels = {} comments = {} unresolved = [] instructions = @instructions.dup backup = @instructions.dup @instructions.clear while insn = instructions.shift if insn.label? labels[insn.name] = buffer.pos elsif insn.comment? comments.update({buffer.pos => insn.}) { |_, *lines| lines.join($/) } elsif insn.lazy? write_instruction insn, buffer, labels instructions.unshift(*@instructions) @instructions.clear else if insn.retry? retry_req = RetryRequest.new(insn, buffer.pos) unresolved << retry_req end write_instruction insn, buffer, labels end end [:comments] = comments @instructions = backup if !unresolved.empty? pos = buffer.pos unresolved.each do |req| insn = req.insn buffer.seek req.io_seek_pos, IO::SEEK_SET write_instruction insn, buffer, labels end buffer.seek pos, IO::SEEK_SET end if !@performance_warnings.empty? raise Errors::SuboptimalPerformance.new(@performance_warnings) end buffer end |