Home | History | Annotate | Download | only in libenc

Lines Matching full:stream

104 ENCODER_DECLARE_EXPORT char * prefix(char * stream, InstrPrefix p) {
105 *stream = (char)p;
106 return stream + 1;
110 ENCODER_DECLARE_EXPORT char * push(char * stream, const RM_Opnd & rm, Opnd_Size sz) {
113 return (char*)EncoderBase::encode(stream, Mnemonic_PUSH, args);
116 ENCODER_DECLARE_EXPORT char * push(char * stream, const Imm_Opnd & imm) {
124 return EncoderBase::encode(stream, Mnemonic_PUSH, args);
127 ENCODER_DECLARE_EXPORT char * pop(char * stream, const RM_Opnd & rm, Opnd_Size sz) {
130 return (char*)EncoderBase::encode(stream, Mnemonic_POP, args);
134 ENCODER_DECLARE_EXPORT char * cmpxchg(char * stream, const RM_Opnd & rm, const R_Opnd & r, Opnd_Size sz) {
140 return (char*)EncoderBase::encode(stream, Mnemonic_CMPXCHG, args);
143 ENCODER_DECLARE_EXPORT char * xchg(char * stream, const RM_Opnd & rm, const R_Opnd & r, Opnd_Size sz) {
147 return (char*)EncoderBase::encode(stream, Mnemonic_XCHG, args);
151 ENCODER_DECLARE_EXPORT char * inc(char * stream, const RM_Opnd & rm, Opnd_Size sz) {
154 return (char*)EncoderBase::encode(stream, Mnemonic_INC, args);
157 ENCODER_DECLARE_EXPORT char * dec(char * stream, const RM_Opnd & rm, Opnd_Size sz) {
160 return (char*)EncoderBase::encode(stream, Mnemonic_DEC, args);
163 ENCODER_DECLARE_EXPORT char * _not(char * stream, const RM_Opnd & rm, Opnd_Size sz) {
166 return (char*)EncoderBase::encode(stream, Mnemonic_NOT, args);
169 ENCODER_DECLARE_EXPORT char * neg(char * stream, const RM_Opnd & rm, Opnd_Size sz) {
172 return (char*)EncoderBase::encode(stream, Mnemonic_NEG, args);
175 ENCODER_DECLARE_EXPORT char * nop(char * stream) {
177 return (char*)EncoderBase::encode(stream, Mnemonic_NOP, args);
180 ENCODER_DECLARE_EXPORT char * int3(char * stream) {
182 return (char*)EncoderBase::encode(stream, Mnemonic_INT3, args);
186 ENCODER_DECLARE_EXPORT char * alu(char * stream, ALU_Opcode opc, const RM_Opnd & rm, const Imm_Opnd & imm, Opnd_Size sz) {
190 return (char*)EncoderBase::encode(stream, map_alu(opc), args);
193 ENCODER_DECLARE_EXPORT char * alu(char * stream, ALU_Opcode opc, const M_Opnd & m, const R_Opnd & r, Opnd_Size sz) {
197 return (char*)EncoderBase::encode(stream, map_alu(opc), args);
200 ENCODER_DECLARE_EXPORT char * alu(char * stream, ALU_Opcode opc, const R_Opnd & r, const RM_Opnd & rm, Opnd_Size sz) {
204 return (char*)EncoderBase::encode(stream, map_alu(opc), args);
208 ENCODER_DECLARE_EXPORT char * test(char * stream, const RM_Opnd & rm, const Imm_Opnd & imm, Opnd_Size sz) {
213 return (char*)EncoderBase::encode(stream, Mnemonic_TEST, args);
216 ENCODER_DECLARE_EXPORT char * test(char * stream, const RM_Opnd & rm, const R_Opnd & r, Opnd_Size sz) {
220 return (char*)EncoderBase::encode(stream, Mnemonic_TEST, args);
224 ENCODER_DECLARE_EXPORT char * shift(char * stream, Shift_Opcode shc, const RM_Opnd & rm, const Imm_Opnd & imm, Opnd_Size sz) {
228 return (char*)EncoderBase::encode(stream, map_shift(shc), args);
231 ENCODER_DECLARE_EXPORT char * shift(char * stream, Shift_Opcode shc, const RM_Opnd & rm, Opnd_Size sz) {
235 return (char*)EncoderBase::encode(stream, map_shift(shc), args);
238 ENCODER_DECLARE_EXPORT char * shift(char * stream, Shift_Opcode shc, const RM_Opnd & rm,
245 return (char*)EncoderBase::encode(stream, map_shift(shc), args);
248 ENCODER_DECLARE_EXPORT char * shift(char * stream, Shift_Opcode shc, const RM_Opnd & rm,
255 return (char*)EncoderBase::encode(stream, map_shift(shc), args);
259 ENCODER_DECLARE_EXPORT char * mul(char * stream, const RM_Opnd & rm, Opnd_Size sz) {
264 return (char*)EncoderBase::encode(stream, Mnemonic_MUL, args);
267 ENCODER_DECLARE_EXPORT char * imul(char * stream, const R_Opnd & r, const RM_Opnd & rm, Opnd_Size sz) {
271 return (char*)EncoderBase::encode(stream, Mnemonic_IMUL, args);
274 ENCODER_DECLARE_EXPORT char * imul(char * stream, const R_Opnd & r, const Imm_Opnd & imm, Opnd_Size sz) {
278 return (char*)EncoderBase::encode(stream, Mnemonic_IMUL, args);
281 ENCODER_DECLARE_EXPORT char * imul(char * stream, const R_Opnd & r, const RM_Opnd & rm,
287 return (char*)EncoderBase::encode(stream, Mnemonic_IMUL, args);
291 ENCODER_DECLARE_EXPORT char * idiv(char * stream, const RM_Opnd & rm, Opnd_Size sz) {
301 return (char*)EncoderBase::encode(stream, Mnemonic_IDIV, args);
305 ENCODER_DECLARE_EXPORT char * mov(char * stream, const M_Opnd & m, const R_Opnd & r, Opnd_Size sz) {
309 return (char*)EncoderBase::encode(stream, Mnemonic_MOV, args);
312 ENCODER_DECLARE_EXPORT char * mov(char * stream, const R_Opnd & r, const RM_Opnd & rm, Opnd_Size sz) {
316 return (char*)EncoderBase::encode(stream, Mnemonic_MOV, args);
319 ENCODER_DECLARE_EXPORT char * mov(char * stream, const RM_Opnd & rm, const Imm_Opnd & imm, Opnd_Size sz) {
323 return (char*)EncoderBase::encode(stream, Mnemonic_MOV, args);
326 ENCODER_DECLARE_EXPORT char * movd(char * stream, const RM_Opnd & rm, const XMM_Opnd & xmm) {
330 return (char*)EncoderBase::encode(stream, Mnemonic_MOVD, args);
333 ENCODER_DECLARE_EXPORT char * movd(char * stream, const XMM_Opnd & xmm, const RM_Opnd & rm) {
337 return (char*)EncoderBase::encode(stream, Mnemonic_MOVD, args);
340 ENCODER_DECLARE_EXPORT char * movq(char * stream, const RM_Opnd & rm, const XMM_Opnd & xmm) {
344 return (char*)EncoderBase::encode(stream, Mnemonic_MOVQ, args);
347 ENCODER_DECLARE_EXPORT char * movq(char * stream, const XMM_Opnd & xmm, const RM_Opnd & rm) {
351 return (char*)EncoderBase::encode(stream, Mnemonic_MOVQ, args);
354 ENCODER_DECLARE_EXPORT char * movsx(char * stream, const R_Opnd & r, const RM_Opnd & rm, Opnd_Size sz) {
358 return (char*)EncoderBase::encode(stream, Mnemonic_MOVSX, args);
361 ENCODER_DECLARE_EXPORT char * movzx(char * stream, const R_Opnd & r, const RM_Opnd & rm, Opnd_Size sz) {
368 return (char*)EncoderBase::encode(stream, Mnemonic_MOVZX, args);
372 ENCODER_DECLARE_EXPORT char * sse_mov(char * stream, const XMM_Opnd & xmm, const M_Opnd & mem, bool dbl) {
376 return (char*)EncoderBase::encode(stream, dbl ? Mnemonic_MOVSD : Mnemonic_MOVSS, args);
379 ENCODER_DECLARE_EXPORT char * sse_mov(char * stream, const M_Opnd & mem, const XMM_Opnd & xmm, bool dbl) {
383 return (char*)EncoderBase::encode(stream, dbl ? Mnemonic_MOVSD : Mnemonic_MOVSS, args);
386 ENCODER_DECLARE_EXPORT char * sse_mov(char * stream, const XMM_Opnd & xmm0, const XMM_Opnd & xmm1, bool dbl) {
390 return (char*)EncoderBase::encode(stream, dbl ? Mnemonic_MOVSD : Mnemonic_MOVSS, args );
394 ENCODER_DECLARE_EXPORT char * sse_add(char * stream, const XMM_Opnd & xmm, const M_Opnd & mem, bool dbl) {
398 return (char*)EncoderBase::encode(stream, dbl ? Mnemonic_ADDSD : Mnemonic_ADDSS, args);
401 ENCODER_DECLARE_EXPORT char * sse_add(char * stream, const XMM_Opnd & xmm0, const XMM_Opnd & xmm1, bool dbl) {
405 return (char*)EncoderBase::encode(stream, dbl ? Mnemonic_ADDSD : Mnemonic_ADDSS, args);
408 ENCODER_DECLARE_EXPORT char * sse_sub(char * stream, const XMM_Opnd & xmm, const M_Opnd & mem, bool dbl) {
412 return (char*)EncoderBase::encode(stream, dbl ? Mnemonic_SUBSD : Mnemonic_SUBSS, args);
415 ENCODER_DECLARE_EXPORT char * sse_sub(char * stream, const XMM_Opnd & xmm0, const XMM_Opnd & xmm1, bool dbl) {
419 return (char*)EncoderBase::encode(stream, dbl ? Mnemonic_SUBSD : Mnemonic_SUBSS, args);
422 ENCODER_DECLARE_EXPORT char * sse_mul( char * stream, const XMM_Opnd & xmm, const M_Opnd & mem, bool dbl) {
426 return (char*)EncoderBase::encode(stream, dbl ? Mnemonic_MULSD : Mnemonic_MULSS, args);
429 ENCODER_DECLARE_EXPORT char * sse_mul(char * stream, const XMM_Opnd& xmm0, const XMM_Opnd& xmm1, bool dbl) {
433 return (char*)EncoderBase::encode(stream, dbl ? Mnemonic_MULSD : Mnemonic_MULSS, args);
436 ENCODER_DECLARE_EXPORT char * sse_div(char * stream
440 return (char*)EncoderBase::encode(stream, dbl ? Mnemonic_DIVSD : Mnemonic_DIVSS, args);
443 ENCODER_DECLARE_EXPORT char * sse_div(char * stream, const XMM_Opnd & xmm0, const XMM_Opnd & xmm1, bool dbl) {
447 return (char*)EncoderBase::encode(stream, dbl ? Mnemonic_DIVSD : Mnemonic_DIVSS, args);
450 ENCODER_DECLARE_EXPORT char * sse_xor(char * stream, const XMM_Opnd & xmm0, const XMM_Opnd & xmm1) {
454 return (char*)EncoderBase::encode(stream, Mnemonic_PXOR, args);
457 ENCODER_DECLARE_EXPORT char * sse_compare(char * stream, const XMM_Opnd & xmm0, const XMM_Opnd & xmm1, bool dbl) {
461 return (char*)EncoderBase::encode(stream, dbl ? Mnemonic_COMISD : Mnemonic_COMISS, args);
464 ENCODER_DECLARE_EXPORT char * sse_compare(char * stream, const XMM_Opnd & xmm0, const M_Opnd & mem, bool dbl) {
468 return (char*)EncoderBase::encode(stream, dbl ? Mnemonic_COMISD : Mnemonic_COMISS, args);
472 ENCODER_DECLARE_EXPORT char * sse_cvt_si(char * stream, const XMM_Opnd & xmm, const M_Opnd & mem, bool dbl) {
476 return (char*)EncoderBase::encode(stream, dbl ? Mnemonic_CVTSI2SD : Mnemonic_CVTSI2SS, args);
479 ENCODER_DECLARE_EXPORT char * sse_cvtt2si(char * stream, const R_Opnd & reg, const M_Opnd & mem, bool dbl) {
483 return (char*)EncoderBase::encode(stream, dbl ? Mnemonic_CVTTSD2SI : Mnemonic_CVTTSS2SI, args);
486 ENCODER_DECLARE_EXPORT char * sse_cvtt2si(char * stream, const R_Opnd & reg, const XMM_Opnd & xmm, bool dbl) {
490 return (char*)EncoderBase::encode(stream, dbl ? Mnemonic_CVTTSD2SI : Mnemonic_CVTTSS2SI, args);
493 ENCODER_DECLARE_EXPORT char * sse_cvt_fp2dq(char * stream, const XMM_Opnd & xmm0, const XMM_Opnd & xmm1, bool dbl) {
497 return (char*)EncoderBase::encode(stream, dbl ? Mnemonic_CVTTPD2DQ : Mnemonic_CVTTPS2DQ, args);
500 ENCODER_DECLARE_EXPORT char * sse_cvt_dq2fp(char * stream, const XMM_Opnd & xmm0, const XMM_Opnd & xmm1, bool dbl) {
504 return (char*)EncoderBase::encode(stream, dbl ? Mnemonic_CVTDQ2PD : Mnemonic_CVTDQ2PS, args);
507 ENCODER_DECLARE_EXPORT char * sse_d2s(char * stream, const XMM_Opnd & xmm0, const M_Opnd & mem64) {
511 return (char*)EncoderBase::encode(stream, Mnemonic_CVTSD2SS, args);
514 ENCODER_DECLARE_EXPORT char * sse_d2s(char * stream, const XMM_Opnd & xmm0, const XMM_Opnd & xmm1) {
518 return (char*)EncoderBase::encode(stream, Mnemonic_CVTSD2SS, args);
521 ENCODER_DECLARE_EXPORT char * sse_s2d(char * stream, const XMM_Opnd & xmm0, const M_Opnd & mem32) {
525 return (char*)EncoderBase::encode(stream, Mnemonic_CVTSS2SD, args);
528 ENCODER_DECLARE_EXPORT char * sse_s2d(char * stream, const XMM_Opnd & xmm0, const XMM_Opnd & xmm1) {
532 return (char*)EncoderBase::encode(stream, Mnemonic_CVTSS2SD, args);
536 ENCODER_DECLARE_EXPORT char *cmov(char * stream, ConditionCode cc, const R_Opnd & r, const RM_Opnd & rm, Opnd_Size sz) {
540 return (char*)EncoderBase::encode(stream, (Mnemonic)(Mnemonic_CMOVcc + cc), args);
543 ENCODER_DECLARE_EXPORT char * setcc(char * stream, ConditionCode cc, const RM_Opnd & rm8) {
546 return (char*)EncoderBase::encode(stream, (Mnemonic)(Mnemonic_SETcc + cc), args);
550 ENCODER_DECLARE_EXPORT char * lea(char * stream, const R_Opnd & r, const M_Opnd & m, Opnd_Size sz) {
554 return (char*)EncoderBase::encode(stream, Mnemonic_LEA, args);
557 ENCODER_DECLARE_EXPORT char * cdq(char * stream) {
561 return (char*)EncoderBase::encode(stream, Mnemonic_CDQ, args);
564 ENCODER_DECLARE_EXPORT char * wait(char * stream) {
565 return (char*)EncoderBase::encode(stream, Mnemonic_WAIT, EncoderBase::Operands());
571 ENCODER_DECLARE_EXPORT char * loop(char * stream, const Imm_Opnd & imm) {
576 return (char*)EncoderBase::encode(stream, Mnemonic_LOOP, args);
580 ENCODER_DECLARE_EXPORT char * jump8(char * stream, const Imm_Opnd & imm) {
584 return (char*)EncoderBase::encode(stream, Mnemonic_JMP, args);
587 ENCODER_DECLARE_EXPORT char * jump32(char * stream, const Imm_Opnd & imm) {
591 return (char*)EncoderBase::encode(stream, Mnemonic_JMP, args);
594 ENCODER_DECLARE_EXPORT char * jump(char * stream, const RM_Opnd & rm, Opnd_Size sz) {
597 return (char*)EncoderBase::encode(stream, Mnemonic_JMP, args);
605 ENCODER_DECLARE_EXPORT char * jump(char * stream, char * target) {
607 int64 offset = target - stream;
612 return jump8(stream, Imm_Opnd(size_8, offset));
617 return jump32(stream, Imm_Opnd(size_32, offset));
620 stream = mov(stream, rax_opnd, Imm_Opnd(size_64, (int64)target), size_64);
621 return jump(stream, rax_opnd, size_64);
623 I_32 offset = target - stream;
628 return jump8(stream, Imm_Opnd(size_8, offset));
633 return jump32(stream, Imm_Opnd(size_32, offset));
638 ENCODER_DECLARE_EXPORT char * branch8(char * stream, ConditionCode cond,
644 stream = prefix(stream, pref);
650 return (char*)EncoderBase::encode(stream, m, args);
653 ENCODER_DECLARE_EXPORT char * branch32(char * stream, ConditionCode cond,
659 stream = prefix(stream, pref);
665 return (char*)EncoderBase::encode(stream, m, args);
669 ENCODER_DECLARE_EXPORT char * branch(char * stream, ConditionCode cc, const char * target, InstrPrefix prefix) {
671 int64 offset = stream-target-2;
673 return branch8(stream, cc, Imm_Opnd(size_8, (char)offset), is_signed);
675 return branch32(stream, cc, Imm_Opnd(size_32, (int)offset), is_signed);
680 ENCODER_DECLARE_EXPORT char * call(char * stream, const Imm_Opnd & imm)
684 return (char*)EncoderBase::encode(stream, Mnemonic_CALL, args);
687 ENCODER_DECLARE_EXPORT char * call(char * stream, const RM_Opnd & rm,
692 return (char*)EncoderBase::encode(stream, Mnemonic_CALL, args);
700 ENCODER_DECLARE_EXPORT char * call(char * stream, const char * target)
703 int64 offset = target - stream;
707 return call(stream, imm);
710 stream = mov(stream, rax_opnd, Imm_Opnd(size_64, (int64)target), size_64);
711 return call(stream, rax_opnd, size_64);
713 I_32 offset = target - stream;
716 return call(stream, imm);
721 ENCODER_DECLARE_EXPORT char * ret(char * stream)
724 return (char*)EncoderBase::encode(stream, Mnemonic_RET, args);
727 ENCODER_DECLARE_EXPORT char * ret(char * stream, const Imm_Opnd & imm)
733 return (char*)EncoderBase::encode(stream, Mnemonic_RET, args);
736 ENCODER_DECLARE_EXPORT char * ret(char * stream, unsigned short pop)
740 return (char*)EncoderBase::encode(stream, Mnemonic_RET, args);
744 ENCODER_DECLARE_EXPORT char * fld(char * stream, const M_Opnd & m,
750 return (char*)EncoderBase::encode(stream, Mnemonic_FLD, args);
753 ENCODER_DECLARE_EXPORT char * fist(char * stream, const M_Opnd & mem,
761 return (char*)EncoderBase::encode(stream, Mnemonic_FISTP, args);
767 return (char*)EncoderBase::encode(stream, Mnemonic_FIST, args);
770 ENCODER_DECLARE_EXPORT char * fst(char * stream, const M_Opnd & m,
777 return (char*)EncoderBase::encode(stream,
782 ENCODER_DECLARE_EXPORT char * fst(char * stream, unsigned i, bool pop_stk)
786 return (char*)EncoderBase::encode(stream,
791 ENCODER_DECLARE_EXPORT char * fldcw(char * stream, const M_Opnd & mem) {
794 return (char*)EncoderBase::encode(stream, Mnemonic_FLDCW, args);
797 ENCODER_DECLARE_EXPORT char * fnstcw(char * stream, const M_Opnd & mem) {
800 return (char*)EncoderBase::encode(stream, Mnemonic_FNSTCW, args);
803 ENCODER_DECLARE_EXPORT char * fnstsw(char * stream)
805 return (char*)EncoderBase::encode(stream, Mnemonic_FNSTCW,
810 ENCODER_DECLARE_EXPORT char * set_d(char * stream, bool set) {
812 return (char*)EncoderBase::encode(stream,
817 ENCODER_DECLARE_EXPORT char * scas(char * stream, unsigned char prefix)
822 *stream = prefix;
823 ++stream;
825 return (char*)EncoderBase::encode(stream, Mnemonic_SCAS, args);
828 ENCODER_DECLARE_EXPORT char * stos(char * stream, unsigned char prefix)
832 *stream = prefix;
833 ++stream;
837 return (char*)EncoderBase::encode(stream, Mnemonic_STOS, args);
842 ENCODER_DECLARE_EXPORT char * fprem(char * stream) {
843 return (char*)EncoderBase::encode(stream, Mnemonic_FPREM,
847 ENCODER_DECLARE_EXPORT char * fprem1(char * stream) {
848 return (char*)EncoderBase::encode(stream, Mnemonic_FPREM1,