LOONGARCH_GPR_ZERO
return emit_jump_and_link(&ctx, is_call ? LOONGARCH_GPR_RA : LOONGARCH_GPR_ZERO, (u64)target);
emit_insn(ctx, std, LOONGARCH_GPR_ZERO, LOONGARCH_GPR_FP, -run_ctx_off + cookie_off);
*branch = larch_insn_gen_beq(LOONGARCH_GPR_A0, LOONGARCH_GPR_ZERO, offset);
emit_insn(ctx, std, LOONGARCH_GPR_ZERO, LOONGARCH_GPR_FP, -retval_off);
emit_insn(ctx, addid, REG_TCC, LOONGARCH_GPR_ZERO, 0);
*branches[i] = larch_insn_gen_bne(LOONGARCH_GPR_T1, LOONGARCH_GPR_ZERO, offset);
emit_insn(ctx, jirl, LOONGARCH_GPR_ZERO, LOONGARCH_GPR_RA, 0);
emit_insn(ctx, jirl, LOONGARCH_GPR_ZERO, LOONGARCH_GPR_T0, 0);
emit_insn(ctx, jirl, LOONGARCH_GPR_ZERO, LOONGARCH_GPR_T1, 0);
emit_insn(ctx, jirl, LOONGARCH_GPR_ZERO, LOONGARCH_GPR_RA, 0);
emit_insn(ctx, jirl, LOONGARCH_GPR_ZERO, LOONGARCH_GPR_T3, 7);
emit_insn(ctx, addid, t2, LOONGARCH_GPR_ZERO, MAX_TAIL_CALL_CNT);
if (emit_tailcall_jmp(ctx, BPF_JEQ, t2, LOONGARCH_GPR_ZERO, jmp_offset) < 0)
emit_insn(ctx, beq, t3, LOONGARCH_GPR_ZERO, -4);
emit_insn(ctx, beq, t3, LOONGARCH_GPR_ZERO, -6);
emit_insn(ctx, beq, t1, LOONGARCH_GPR_ZERO, 1);
emit_insn(ctx, addw, dst, src, LOONGARCH_GPR_ZERO);
emit_insn(ctx, addid, LOONGARCH_GPR_T3, LOONGARCH_GPR_ZERO, MAX_TAIL_CALL_CNT);
emit_insn(ctx, subd, dst, LOONGARCH_GPR_ZERO, dst);
tm = LOONGARCH_GPR_ZERO;
if (emit_cond_jmp(ctx, cond, t1, LOONGARCH_GPR_ZERO, jmp_offset) < 0)
if (emit_cond_jmp(ctx, cond, t1, LOONGARCH_GPR_ZERO, jmp_offset) < 0)
emit_insn(ctx, or, rd, LOONGARCH_GPR_ZERO, LOONGARCH_GPR_ZERO);
emit_insn(ctx, addiw, rd, LOONGARCH_GPR_ZERO, imm);
emit_insn(ctx, ori, rd, LOONGARCH_GPR_ZERO, imm);
emit_insn(ctx, lu52id, rd, LOONGARCH_GPR_ZERO, imm_63_52);
emit_insn(ctx, or, rd, rj, LOONGARCH_GPR_ZERO);
if (inst.reg3_format.rd == LOONGARCH_GPR_ZERO &&
inst.reg3_format.rj == LOONGARCH_GPR_ZERO) {
emit_jirl((union loongarch_instruction *)&ret, LOONGARCH_GPR_RA, LOONGARCH_GPR_ZERO, 0);