Lines Matching refs:dst
173 /* dst = imm (sign-extended) */
174 static void emit_mov_se_i64(struct jit_context *ctx, const u8 dst[], s32 imm)
176 emit_mov_i(ctx, lo(dst), imm);
178 emit(ctx, addiu, hi(dst), MIPS_R_ZERO, -1);
180 emit(ctx, move, hi(dst), MIPS_R_ZERO);
181 clobber_reg64(ctx, dst);
185 static void emit_zext_ver(struct jit_context *ctx, const u8 dst[])
188 emit(ctx, move, hi(dst), MIPS_R_ZERO);
189 clobber_reg(ctx, hi(dst));
202 const u8 dst[], s32 imm, u8 op)
226 /* dst = dst + imm */
228 emit(ctx, addu, lo(dst), lo(dst), src);
229 emit(ctx, sltu, MIPS_R_T9, lo(dst), src);
230 emit(ctx, addu, hi(dst), hi(dst), MIPS_R_T9);
232 emit(ctx, addiu, hi(dst), hi(dst), -1);
234 /* dst = dst - imm */
236 emit(ctx, sltu, MIPS_R_T9, lo(dst), src);
237 emit(ctx, subu, lo(dst), lo(dst), src);
238 emit(ctx, subu, hi(dst), hi(dst), MIPS_R_T9);
240 emit(ctx, addiu, hi(dst), hi(dst), 1);
242 /* dst = dst | imm */
244 emit(ctx, or, lo(dst), lo(dst), src);
246 emit(ctx, addiu, hi(dst), MIPS_R_ZERO, -1);
248 /* dst = dst & imm */
250 emit(ctx, and, lo(dst), lo(dst), src);
252 emit(ctx, move, hi(dst), MIPS_R_ZERO);
254 /* dst = dst ^ imm */
256 emit(ctx, xor, lo(dst), lo(dst), src);
258 emit(ctx, subu, hi(dst), MIPS_R_ZERO, hi(dst));
259 emit(ctx, addiu, hi(dst), hi(dst), -1);
263 clobber_reg64(ctx, dst);
268 const u8 dst[], const u8 src[], u8 op)
271 /* dst = dst + src */
273 if (src == dst) {
274 emit(ctx, srl, MIPS_R_T9, lo(dst), 31);
275 emit(ctx, addu, lo(dst), lo(dst), lo(dst));
277 emit(ctx, addu, lo(dst), lo(dst), lo(src));
278 emit(ctx, sltu, MIPS_R_T9, lo(dst), lo(src));
280 emit(ctx, addu, hi(dst), hi(dst), hi(src));
281 emit(ctx, addu, hi(dst), hi(dst), MIPS_R_T9);
283 /* dst = dst - src */
285 emit(ctx, sltu, MIPS_R_T9, lo(dst), lo(src));
286 emit(ctx, subu, lo(dst), lo(dst), lo(src));
287 emit(ctx, subu, hi(dst), hi(dst), hi(src));
288 emit(ctx, subu, hi(dst), hi(dst), MIPS_R_T9);
290 /* dst = dst | src */
292 emit(ctx, or, lo(dst), lo(dst), lo(src));
293 emit(ctx, or, hi(dst), hi(dst), hi(src));
295 /* dst = dst & src */
297 emit(ctx, and, lo(dst), lo(dst), lo(src));
298 emit(ctx, and, hi(dst), hi(dst), hi(src));
300 /* dst = dst ^ src */
302 emit(ctx, xor, lo(dst), lo(dst), lo(src));
303 emit(ctx, xor, hi(dst), hi(dst), hi(src));
306 clobber_reg64(ctx, dst);
310 static void emit_neg_i64(struct jit_context *ctx, const u8 dst[])
312 emit(ctx, sltu, MIPS_R_T9, MIPS_R_ZERO, lo(dst));
313 emit(ctx, subu, lo(dst), MIPS_R_ZERO, lo(dst));
314 emit(ctx, subu, hi(dst), MIPS_R_ZERO, hi(dst));
315 emit(ctx, subu, hi(dst), hi(dst), MIPS_R_T9);
317 clobber_reg64(ctx, dst);
322 const u8 dst[], u32 imm, u8 op)
325 /* dst = dst << imm */
328 emit(ctx, srl, MIPS_R_T9, lo(dst), 32 - imm);
329 emit(ctx, sll, lo(dst), lo(dst), imm);
330 emit(ctx, sll, hi(dst), hi(dst), imm);
331 emit(ctx, or, hi(dst), hi(dst), MIPS_R_T9);
333 emit(ctx, sll, hi(dst), lo(dst), imm - 32);
334 emit(ctx, move, lo(dst), MIPS_R_ZERO);
337 /* dst = dst >> imm */
340 emit(ctx, sll, MIPS_R_T9, hi(dst), 32 - imm);
341 emit(ctx, srl, lo(dst), lo(dst), imm);
342 emit(ctx, srl, hi(dst), hi(dst), imm);
343 emit(ctx, or, lo(dst), lo(dst), MIPS_R_T9);
345 emit(ctx, srl, lo(dst), hi(dst), imm - 32);
346 emit(ctx, move, hi(dst), MIPS_R_ZERO);
349 /* dst = dst >> imm (arithmetic) */
352 emit(ctx, sll, MIPS_R_T9, hi(dst), 32 - imm);
353 emit(ctx, srl, lo(dst), lo(dst), imm);
354 emit(ctx, sra, hi(dst), hi(dst), imm);
355 emit(ctx, or, lo(dst), lo(dst), MIPS_R_T9);
357 emit(ctx, sra, lo(dst), hi(dst), imm - 32);
358 emit(ctx, sra, hi(dst), hi(dst), 31);
362 clobber_reg64(ctx, dst);
367 const u8 dst[], u8 src, u8 op)
377 /* dst = dst << src */
380 emit(ctx, sllv, hi(dst), lo(dst), src); /* dh = dl << src */
381 emit(ctx, move, lo(dst), MIPS_R_ZERO); /* dl = 0 */
384 emit(ctx, srl, t1, lo(dst), 1); /* t1 = dl >> 1 */
386 emit(ctx, sllv, lo(dst), lo(dst), src); /* dl = dl << src */
387 emit(ctx, sllv, hi(dst), hi(dst), src); /* dh = dh << src */
388 emit(ctx, or, hi(dst), hi(dst), t1); /* dh = dh | t1 */
390 /* dst = dst >> src */
393 emit(ctx, srlv, lo(dst), hi(dst), src); /* dl = dh >> src */
394 emit(ctx, move, hi(dst), MIPS_R_ZERO); /* dh = 0 */
397 emit(ctx, sll, t1, hi(dst), 1); /* t1 = dl << 1 */
399 emit(ctx, srlv, lo(dst), lo(dst), src); /* dl = dl >> src */
400 emit(ctx, srlv, hi(dst), hi(dst), src); /* dh = dh >> src */
401 emit(ctx, or, lo(dst), lo(dst), t1); /* dl = dl | t1 */
403 /* dst = dst >> src (arithmetic) */
406 emit(ctx, srav, lo(dst), hi(dst), src); /* dl = dh >>a src */
407 emit(ctx, sra, hi(dst), hi(dst), 31); /* dh = dh >>a 31 */
410 emit(ctx, sll, t1, hi(dst), 1); /* t1 = dl << 1 */
412 emit(ctx, srlv, lo(dst), lo(dst), src); /* dl = dl >>a src */
413 emit(ctx, srav, hi(dst), hi(dst), src); /* dh = dh >> src */
414 emit(ctx, or, lo(dst), lo(dst), t1); /* dl = dl | t1 */
419 clobber_reg64(ctx, dst);
423 static void emit_mul_i64(struct jit_context *ctx, const u8 dst[], s32 imm)
429 /* dst = dst * 1 is a no-op */
432 /* dst = dst * -1 */
434 emit_neg_i64(ctx, dst);
437 emit_mov_r(ctx, lo(dst), MIPS_R_ZERO);
438 emit_mov_r(ctx, hi(dst), MIPS_R_ZERO);
442 /* hi(dst) = hi(dst) * src(imm) */
445 emit(ctx, mul, hi(dst), hi(dst), src);
447 emit(ctx, multu, hi(dst), src);
448 emit(ctx, mflo, hi(dst));
451 /* hi(dst) = hi(dst) - lo(dst) */
453 emit(ctx, subu, hi(dst), hi(dst), lo(dst));
455 /* tmp = lo(dst) * src(imm) >> 32 */
456 /* lo(dst) = lo(dst) * src(imm) */
458 emit(ctx, muhu, tmp, lo(dst), src);
459 emit(ctx, mulu, lo(dst), lo(dst), src);
461 emit(ctx, multu, lo(dst), src);
462 emit(ctx, mflo, lo(dst));
466 /* hi(dst) += tmp */
467 emit(ctx, addu, hi(dst), hi(dst), tmp);
468 clobber_reg64(ctx, dst);
475 const u8 dst[], const u8 src[])
480 /* acc = hi(dst) * lo(src) */
482 emit(ctx, mul, acc, hi(dst), lo(src));
484 emit(ctx, multu, hi(dst), lo(src));
488 /* tmp = lo(dst) * hi(src) */
490 emit(ctx, mul, tmp, lo(dst), hi(src));
492 emit(ctx, multu, lo(dst), hi(src));
499 /* tmp = lo(dst) * lo(src) >> 32 */
500 /* lo(dst) = lo(dst) * lo(src) */
502 emit(ctx, muhu, tmp, lo(dst), lo(src));
503 emit(ctx, mulu, lo(dst), lo(dst), lo(src));
505 emit(ctx, multu, lo(dst), lo(src));
506 emit(ctx, mflo, lo(dst));
510 /* hi(dst) = acc + tmp */
511 emit(ctx, addu, hi(dst), acc, tmp);
512 clobber_reg64(ctx, dst);
526 const u8 dst[], const u8 src[], u8 op)
541 emit(ctx, move, r1[k], dst[k]);
547 /* dst = dst / src */
551 /* dst = dst % src */
560 /* Store the 64-bit result in dst */
561 emit(ctx, move, dst[0], r0[0]);
562 emit(ctx, move, dst[1], r0[1]);
565 exclude = BIT(lo(dst)) | BIT(hi(dst));
570 clobber_reg64(ctx, dst);
577 static void emit_swap8_r(struct jit_context *ctx, u8 dst, u8 src, u8 mask)
583 emit(ctx, srl, dst, src, 8); /* dst = src >> 8 */
584 emit(ctx, and, dst, dst, mask); /* dst = dst & 0x00ff00ff */
585 emit(ctx, or, dst, dst, tmp); /* dst = dst | tmp */
589 static void emit_swap16_r(struct jit_context *ctx, u8 dst, u8 src)
594 emit(ctx, srl, dst, src, 16); /* dst = src >> 16 */
595 emit(ctx, or, dst, dst, tmp); /* dst = dst | tmp */
599 static void emit_bswap_r64(struct jit_context *ctx, const u8 dst[], u32 width)
607 emit(ctx, rotr, tmp, hi(dst), 16);
608 emit(ctx, rotr, hi(dst), lo(dst), 16);
609 emit(ctx, wsbh, lo(dst), tmp);
610 emit(ctx, wsbh, hi(dst), hi(dst));
612 emit_swap16_r(ctx, tmp, lo(dst));
613 emit_swap16_r(ctx, lo(dst), hi(dst));
614 emit(ctx, move, hi(dst), tmp);
618 emit_swap8_r(ctx, lo(dst), lo(dst), tmp);
619 emit_swap8_r(ctx, hi(dst), hi(dst), tmp);
626 emit_bswap_r(ctx, lo(dst), width);
627 emit(ctx, move, hi(dst), MIPS_R_ZERO);
630 clobber_reg64(ctx, dst);
634 static void emit_trunc_r64(struct jit_context *ctx, const u8 dst[], u32 width)
641 emit(ctx, move, hi(dst), MIPS_R_ZERO);
642 clobber_reg(ctx, hi(dst));
646 emit(ctx, move, hi(dst), MIPS_R_ZERO);
647 emit(ctx, andi, lo(dst), lo(dst), 0xffff);
648 clobber_reg64(ctx, dst);
653 /* Load operation: dst = *(size*)(src + off) */
655 const u8 dst[], u8 src, s16 off, u8 size)
660 emit(ctx, lbu, lo(dst), off, src);
661 emit(ctx, move, hi(dst), MIPS_R_ZERO);
665 emit(ctx, lhu, lo(dst), off, src);
666 emit(ctx, move, hi(dst), MIPS_R_ZERO);
670 emit(ctx, lw, lo(dst), off, src);
671 emit(ctx, move, hi(dst), MIPS_R_ZERO);
675 if (dst[1] == src) {
676 emit(ctx, lw, dst[0], off + 4, src);
677 emit(ctx, lw, dst[1], off, src);
679 emit(ctx, lw, dst[1], off, src);
680 emit(ctx, lw, dst[0], off + 4, src);
685 clobber_reg64(ctx, dst);
688 /* Store operation: *(size *)(dst + off) = src */
690 const u8 dst, const u8 src[], s16 off, u8 size)
695 emit(ctx, sb, lo(src), off, dst);
699 emit(ctx, sh, lo(src), off, dst);
703 emit(ctx, sw, lo(src), off, dst);
707 emit(ctx, sw, src[1], off, dst);
708 emit(ctx, sw, src[0], off + 4, dst);
715 u8 dst, u8 src, s16 off, u8 code)
724 * Argument 1: dst+off if xchg, otherwise src, passed in register a0
725 * Argument 2: src if xchg, otherwise dst+off, passed in register a1
727 emit(ctx, move, MIPS_R_T9, dst);
798 u8 dst, const u8 src[], s16 off, u8 code)
810 * Argument 2: 32-bit dst+off, passed in register a2
812 emit(ctx, move, MIPS_R_T9, dst);
873 static void emit_cmpxchg_r32(struct jit_context *ctx, u8 dst, u8 src, s16 off)
881 * Argument 1: 32-bit dst+off, passed in register a0
885 emit(ctx, addiu, MIPS_R_T9, dst, off);
910 u8 dst, const u8 src[], s16 off)
919 * Argument 1: 32-bit dst+off, passed in register a0 (a1 unused)
924 emit(ctx, addiu, MIPS_R_T9, dst, off);
1093 const u8 dst[], s32 imm, s32 off, u8 op)
1101 /* PC += off if dst == imm */
1102 /* PC += off if dst != imm */
1106 emit(ctx, addiu, tmp, lo(dst), -imm);
1108 emit(ctx, xori, tmp, lo(dst), imm);
1111 emit(ctx, xor, tmp, lo(dst), tmp);
1114 emit(ctx, addu, MIPS_R_T9, hi(dst), 1);
1117 emit(ctx, or, tmp, tmp, hi(dst));
1124 /* PC += off if dst & imm */
1125 /* PC += off if (dst & imm) == 0 (not in BPF, used for long jumps) */
1129 emit(ctx, andi, tmp, lo(dst), imm);
1132 emit(ctx, and, tmp, lo(dst), tmp);
1135 emit(ctx, or, tmp, tmp, hi(dst));
1141 /* PC += off if dst > imm */
1143 emit_sltiu_r64(ctx, tmp, dst, (s64)imm + 1);
1146 /* PC += off if dst >= imm */
1148 emit_sltiu_r64(ctx, tmp, dst, imm);
1151 /* PC += off if dst < imm */
1153 emit_sltiu_r64(ctx, tmp, dst, imm);
1156 /* PC += off if dst <= imm */
1158 emit_sltiu_r64(ctx, tmp, dst, (s64)imm + 1);
1161 /* PC += off if dst > imm (signed) */
1163 emit_slti_r64(ctx, tmp, dst, (s64)imm + 1);
1166 /* PC += off if dst >= imm (signed) */
1168 emit_slti_r64(ctx, tmp, dst, imm);
1171 /* PC += off if dst < imm (signed) */
1173 emit_slti_r64(ctx, tmp, dst, imm);
1176 /* PC += off if dst <= imm (signed) */
1178 emit_slti_r64(ctx, tmp, dst, (s64)imm + 1);
1186 const u8 dst[], const u8 src[], s32 off, u8 op)
1195 /* PC += off if dst == src */
1196 /* PC += off if dst != src */
1199 emit(ctx, subu, t1, lo(dst), lo(src));
1200 emit(ctx, subu, t2, hi(dst), hi(src));
1207 /* PC += off if dst & src */
1208 /* PC += off if (dst & imm) == 0 (not in BPF, used for long jumps) */
1211 emit(ctx, and, t1, lo(dst), lo(src));
1212 emit(ctx, and, t2, hi(dst), hi(src));
1219 /* PC += off if dst > src */
1221 emit_sltu_r64(ctx, t1, src, dst);
1224 /* PC += off if dst >= src */
1226 emit_sltu_r64(ctx, t1, dst, src);
1229 /* PC += off if dst < src */
1231 emit_sltu_r64(ctx, t1, dst, src);
1234 /* PC += off if dst <= src */
1236 emit_sltu_r64(ctx, t1, src, dst);
1239 /* PC += off if dst > src (signed) */
1241 emit_slt_r64(ctx, t1, src, dst);
1244 /* PC += off if dst >= src (signed) */
1246 emit_slt_r64(ctx, t1, dst, src);
1249 /* PC += off if dst < src (signed) */
1251 emit_slt_r64(ctx, t1, dst, src);
1254 /* PC += off if dst <= src (signed) */
1256 emit_slt_r64(ctx, t1, src, dst);
1465 const u8 *dst = bpf2mips32[insn->dst_reg];
1477 /* dst = imm */
1479 emit_mov_i(ctx, lo(dst), imm);
1480 emit_zext_ver(ctx, dst);
1482 /* dst = src */
1486 emit_mov_i(ctx, hi(dst), 0);
1488 emit_mov_r(ctx, lo(dst), lo(src));
1489 emit_zext_ver(ctx, dst);
1492 /* dst = -dst */
1494 emit_alu_i(ctx, lo(dst), 0, BPF_NEG);
1495 emit_zext_ver(ctx, dst);
1497 /* dst = dst & imm */
1498 /* dst = dst | imm */
1499 /* dst = dst ^ imm */
1500 /* dst = dst << imm */
1501 /* dst = dst >> imm */
1502 /* dst = dst >> imm (arithmetic) */
1503 /* dst = dst + imm */
1504 /* dst = dst - imm */
1505 /* dst = dst * imm */
1506 /* dst = dst / imm */
1507 /* dst = dst % imm */
1521 emit_alu_r(ctx, lo(dst), MIPS_R_T6, BPF_OP(code));
1523 emit_alu_i(ctx, lo(dst), val, alu);
1525 emit_zext_ver(ctx, dst);
1527 /* dst = dst & src */
1528 /* dst = dst | src */
1529 /* dst = dst ^ src */
1530 /* dst = dst << src */
1531 /* dst = dst >> src */
1532 /* dst = dst >> src (arithmetic) */
1533 /* dst = dst + src */
1534 /* dst = dst - src */
1535 /* dst = dst * src */
1536 /* dst = dst / src */
1537 /* dst = dst % src */
1549 emit_alu_r(ctx, lo(dst), lo(src), BPF_OP(code));
1550 emit_zext_ver(ctx, dst);
1552 /* dst = imm (64-bit) */
1554 emit_mov_se_i64(ctx, dst, imm);
1556 /* dst = src (64-bit) */
1558 emit_mov_r(ctx, lo(dst), lo(src));
1559 emit_mov_r(ctx, hi(dst), hi(src));
1561 /* dst = -dst (64-bit) */
1563 emit_neg_i64(ctx, dst);
1565 /* dst = dst & imm (64-bit) */
1567 emit_alu_i64(ctx, dst, imm, BPF_OP(code));
1569 /* dst = dst | imm (64-bit) */
1570 /* dst = dst ^ imm (64-bit) */
1571 /* dst = dst + imm (64-bit) */
1572 /* dst = dst - imm (64-bit) */
1578 emit_alu_i64(ctx, dst, imm, BPF_OP(code));
1580 /* dst = dst << imm (64-bit) */
1581 /* dst = dst >> imm (64-bit) */
1582 /* dst = dst >> imm (64-bit, arithmetic) */
1587 emit_shift_i64(ctx, dst, imm, BPF_OP(code));
1589 /* dst = dst * imm (64-bit) */
1591 emit_mul_i64(ctx, dst, imm);
1593 /* dst = dst / imm (64-bit) */
1594 /* dst = dst % imm (64-bit) */
1602 emit_divmod_r64(ctx, dst, tmp, BPF_OP(code));
1604 /* dst = dst & src (64-bit) */
1605 /* dst = dst | src (64-bit) */
1606 /* dst = dst ^ src (64-bit) */
1607 /* dst = dst + src (64-bit) */
1608 /* dst = dst - src (64-bit) */
1614 emit_alu_r64(ctx, dst, src, BPF_OP(code));
1616 /* dst = dst << src (64-bit) */
1617 /* dst = dst >> src (64-bit) */
1618 /* dst = dst >> src (64-bit, arithmetic) */
1622 emit_shift_r64(ctx, dst, lo(src), BPF_OP(code));
1624 /* dst = dst * src (64-bit) */
1626 emit_mul_r64(ctx, dst, src);
1628 /* dst = dst / src (64-bit) */
1629 /* dst = dst % src (64-bit) */
1632 emit_divmod_r64(ctx, dst, src, BPF_OP(code));
1634 /* dst = htole(dst) */
1635 /* dst = htobe(dst) */
1645 emit_bswap_r64(ctx, dst, imm);
1647 emit_trunc_r64(ctx, dst, imm);
1649 /* dst = imm64 */
1651 emit_mov_i(ctx, lo(dst), imm);
1652 emit_mov_i(ctx, hi(dst), insn[1].imm);
1654 /* LDX: dst = *(size *)(src + off) */
1659 emit_ldx(ctx, dst, lo(src), off, BPF_SIZE(code));
1661 /* ST: *(size *)(dst + off) = imm */
1677 emit_stx(ctx, lo(dst), tmp, off, BPF_SIZE(code));
1679 /* STX: *(size *)(dst + off) = src */
1684 emit_stx(ctx, lo(dst), src, off, BPF_SIZE(code));
1702 emit_atomic_r(ctx, lo(dst), lo(src), off, imm);
1704 emit_atomic_r32(ctx, lo(dst), lo(src),
1711 emit_cmpxchg_r(ctx, lo(dst), lo(src),
1714 emit_cmpxchg_r32(ctx, lo(dst), lo(src), off);
1733 emit_atomic_r64(ctx, lo(dst), src, off, imm);
1736 emit_cmpxchg_r64(ctx, lo(dst), src, off);
1742 /* PC += off if dst == src */
1743 /* PC += off if dst != src */
1744 /* PC += off if dst & src */
1745 /* PC += off if dst > src */
1746 /* PC += off if dst >= src */
1747 /* PC += off if dst < src */
1748 /* PC += off if dst <= src */
1749 /* PC += off if dst > src (signed) */
1750 /* PC += off if dst >= src (signed) */
1751 /* PC += off if dst < src (signed) */
1752 /* PC += off if dst <= src (signed) */
1766 setup_jmp_r(ctx, dst == src, BPF_OP(code), off, &jmp, &rel);
1767 emit_jmp_r(ctx, lo(dst), lo(src), rel, jmp);
1771 /* PC += off if dst == imm */
1772 /* PC += off if dst != imm */
1773 /* PC += off if dst & imm */
1774 /* PC += off if dst > imm */
1775 /* PC += off if dst >= imm */
1776 /* PC += off if dst < imm */
1777 /* PC += off if dst <= imm */
1778 /* PC += off if dst > imm (signed) */
1779 /* PC += off if dst >= imm (signed) */
1780 /* PC += off if dst < imm (signed) */
1781 /* PC += off if dst <= imm (signed) */
1797 emit_jmp_i(ctx, lo(dst), imm, rel, jmp);
1801 emit_jmp_r(ctx, lo(dst), MIPS_R_T6, rel, jmp);
1806 /* PC += off if dst == src */
1807 /* PC += off if dst != src */
1808 /* PC += off if dst & src */
1809 /* PC += off if dst > src */
1810 /* PC += off if dst >= src */
1811 /* PC += off if dst < src */
1812 /* PC += off if dst <= src */
1813 /* PC += off if dst > src (signed) */
1814 /* PC += off if dst >= src (signed) */
1815 /* PC += off if dst < src (signed) */
1816 /* PC += off if dst <= src (signed) */
1830 setup_jmp_r(ctx, dst == src, BPF_OP(code), off, &jmp, &rel);
1831 emit_jmp_r64(ctx, dst, src, rel, jmp);
1835 /* PC += off if dst == imm */
1836 /* PC += off if dst != imm */
1837 /* PC += off if dst & imm */
1838 /* PC += off if dst > imm */
1839 /* PC += off if dst >= imm */
1840 /* PC += off if dst < imm */
1841 /* PC += off if dst <= imm */
1842 /* PC += off if dst > imm (signed) */
1843 /* PC += off if dst >= imm (signed) */
1844 /* PC += off if dst < imm (signed) */
1845 /* PC += off if dst <= imm (signed) */
1860 emit_jmp_i64(ctx, dst, imm, rel, jmp);