Lines Matching refs:src

98 static void emit_sext(struct jit_context *ctx, u8 dst, u8 src)
100 emit(ctx, sll, dst, src, 0);
201 static void emit_alu_r64(struct jit_context *ctx, u8 dst, u8 src, u8 op)
204 /* dst = dst << src */
206 emit(ctx, dsllv, dst, dst, src);
208 /* dst = dst >> src */
210 emit(ctx, dsrlv, dst, dst, src);
212 /* dst = dst >> src (arithmetic) */
214 emit(ctx, dsrav, dst, dst, src);
216 /* dst = dst + src */
218 emit(ctx, daddu, dst, dst, src);
220 /* dst = dst - src */
222 emit(ctx, dsubu, dst, dst, src);
224 /* dst = dst * src */
227 emit(ctx, dmulu, dst, dst, src);
229 emit(ctx, dmultu, dst, src);
236 /* dst = dst / src */
239 emit(ctx, ddivu_r6, dst, dst, src);
241 emit(ctx, ddivu, dst, src);
245 /* dst = dst % src */
248 emit(ctx, dmodu, dst, dst, src);
250 emit(ctx, ddivu, dst, src);
256 emit_alu_r(ctx, dst, src, op);
333 /* Load operation: dst = *(size*)(src + off) */
334 static void emit_ldx(struct jit_context *ctx, u8 dst, u8 src, s16 off, u8 size)
339 emit(ctx, lbu, dst, off, src);
343 emit(ctx, lhu, dst, off, src);
347 emit(ctx, lwu, dst, off, src);
351 emit(ctx, ld, dst, off, src);
357 /* Store operation: *(size *)(dst + off) = src */
358 static void emit_stx(struct jit_context *ctx, u8 dst, u8 src, s16 off, u8 size)
363 emit(ctx, sb, src, off, dst);
367 emit(ctx, sh, src, off, dst);
371 emit(ctx, sw, src, off, dst);
375 emit(ctx, sd, src, off, dst);
382 u8 dst, u8 src, s16 off, u8 code)
392 emit(ctx, daddu, t2, t1, src);
396 emit(ctx, and, t2, t1, src);
400 emit(ctx, or, t2, t1, src);
404 emit(ctx, xor, t2, t1, src);
407 emit(ctx, move, t2, src);
415 emit(ctx, move, src, t1);
416 clobber_reg(ctx, src);
421 static void emit_cmpxchg_r64(struct jit_context *ctx, u8 dst, u8 src, s16 off)
430 emit(ctx, move, t2, src); /* Delay slot */
638 u8 src = bpf2mips64[insn->src_reg];
653 /* dst = src */
659 emit_mov_r(ctx, dst, src);
709 /* dst = dst & src */
710 /* dst = dst | src */
711 /* dst = dst ^ src */
712 /* dst = dst << src */
717 emit_alu_r(ctx, dst, src, BPF_OP(code));
720 /* dst = dst >> src */
721 /* dst = dst >> src (arithmetic) */
722 /* dst = dst + src */
723 /* dst = dst - src */
724 /* dst = dst * src */
725 /* dst = dst / src */
726 /* dst = dst % src */
735 emit_sext(ctx, MIPS_R_T4, src);
743 /* dst = src (64-bit) */
745 emit_mov_r(ctx, dst, src);
780 /* dst = dst & src (64-bit) */
781 /* dst = dst | src (64-bit) */
782 /* dst = dst ^ src (64-bit) */
783 /* dst = dst << src (64-bit) */
784 /* dst = dst >> src (64-bit) */
785 /* dst = dst >> src (64-bit, arithmetic) */
786 /* dst = dst + src (64-bit) */
787 /* dst = dst - src (64-bit) */
788 /* dst = dst * src (64-bit) */
789 /* dst = dst / src (64-bit) */
790 /* dst = dst % src (64-bit) */
802 emit_alu_r64(ctx, dst, src, BPF_OP(code));
823 /* LDX: dst = *(size *)(src + off) */
828 emit_ldx(ctx, dst, src, off, BPF_SIZE(code));
838 /* STX: *(size *)(dst + off) = src */
843 emit_stx(ctx, dst, src, off, BPF_SIZE(code));
862 emit_atomic_r64(ctx, dst, src, off, imm);
866 if (src == dst) { /* Don't overwrite dst */
870 emit_sext(ctx, src, src);
871 emit_atomic_r(ctx, tmp, src, off, imm);
872 emit_zext_ver(ctx, src);
874 emit_sext(ctx, MIPS_R_T4, src);
880 emit_cmpxchg_r64(ctx, dst, src, off);
887 emit_sext(ctx, MIPS_R_T5, src);
898 /* PC += off if dst == src */
899 /* PC += off if dst != src */
900 /* PC += off if dst & src */
901 /* PC += off if dst > src */
902 /* PC += off if dst >= src */
903 /* PC += off if dst < src */
904 /* PC += off if dst <= src */
905 /* PC += off if dst > src (signed) */
906 /* PC += off if dst >= src (signed) */
907 /* PC += off if dst < src (signed) */
908 /* PC += off if dst <= src (signed) */
922 setup_jmp_r(ctx, dst == src, BPF_OP(code), off, &jmp, &rel);
924 emit_sext(ctx, MIPS_R_T5, src); /* Sign-extended src */
965 /* PC += off if dst == src */
966 /* PC += off if dst != src */
967 /* PC += off if dst & src */
968 /* PC += off if dst > src */
969 /* PC += off if dst >= src */
970 /* PC += off if dst < src */
971 /* PC += off if dst <= src */
972 /* PC += off if dst > src (signed) */
973 /* PC += off if dst >= src (signed) */
974 /* PC += off if dst < src (signed) */
975 /* PC += off if dst <= src (signed) */
989 setup_jmp_r(ctx, dst == src, BPF_OP(code), off, &jmp, &rel);
990 emit_jmp_r(ctx, dst, src, rel, jmp);