Lines Matching refs:imm
367 u32 dst, u8 imm, u8 byte, u16 addr, u8 defer) in emit_br_byte_neq() argument
372 err = swreg_to_restricted(reg_none(), dst, reg_imm(imm), ®, true); in emit_br_byte_neq()
402 emit_immed(struct nfp_prog *nfp_prog, u32 dst, u16 imm, in emit_immed() argument
413 err = swreg_to_unrestricted(dst, dst, reg_imm(imm & 0xff), ®); in emit_immed()
419 __emit_immed(nfp_prog, reg.areg, reg.breg, imm >> 8, width, in emit_immed()
550 static bool pack_immed(u32 imm, u16 *val, enum immed_shift *shift) in pack_immed() argument
552 if (!(imm & 0xffff0000)) { in pack_immed()
553 *val = imm; in pack_immed()
555 } else if (!(imm & 0xff0000ff)) { in pack_immed()
556 *val = imm >> 8; in pack_immed()
558 } else if (!(imm & 0x0000ffff)) { in pack_immed()
559 *val = imm >> 16; in pack_immed()
568 static void wrp_immed(struct nfp_prog *nfp_prog, u32 dst, u32 imm) in wrp_immed() argument
573 if (pack_immed(imm, &val, &shift)) { in wrp_immed()
575 } else if (pack_immed(~imm, &val, &shift)) { in wrp_immed()
578 emit_immed(nfp_prog, dst, imm & 0xffff, IMMED_WIDTH_ALL, in wrp_immed()
580 emit_immed(nfp_prog, dst, imm >> 16, IMMED_WIDTH_WORD, in wrp_immed()
589 static u32 ur_load_imm_any(struct nfp_prog *nfp_prog, u32 imm, u32 tmp_reg) in ur_load_imm_any() argument
591 if (FIELD_FIT(UR_REG_IMM_MAX, imm)) in ur_load_imm_any()
592 return reg_imm(imm); in ur_load_imm_any()
594 wrp_immed(nfp_prog, tmp_reg, imm); in ur_load_imm_any()
602 static u32 re_load_imm_any(struct nfp_prog *nfp_prog, u32 imm, u32 tmp_reg) in re_load_imm_any() argument
604 if (FIELD_FIT(RE_REG_IMM_MAX, imm)) in re_load_imm_any()
605 return reg_imm(imm); in re_load_imm_any()
607 wrp_immed(nfp_prog, tmp_reg, imm); in re_load_imm_any()
698 wrp_alu_imm(struct nfp_prog *nfp_prog, u8 dst, enum alu_op alu_op, u32 imm) in wrp_alu_imm() argument
703 if (!imm) in wrp_alu_imm()
705 if (!imm || !~imm) in wrp_alu_imm()
709 if (!~imm) in wrp_alu_imm()
711 if (!imm || !~imm) in wrp_alu_imm()
715 if (!~imm) in wrp_alu_imm()
718 if (!imm || !~imm) in wrp_alu_imm()
722 tmp_reg = ur_load_imm_any(nfp_prog, imm, imm_b(nfp_prog)); in wrp_alu_imm()
731 u64 imm = insn->imm; /* sign extend */ in wrp_alu64_imm() local
738 wrp_alu_imm(nfp_prog, insn->dst_reg * 2, alu_op, imm & ~0U); in wrp_alu64_imm()
739 wrp_alu_imm(nfp_prog, insn->dst_reg * 2 + 1, alu_op, imm >> 32); in wrp_alu64_imm()
763 wrp_alu_imm(nfp_prog, insn->dst_reg * 2, alu_op, insn->imm); in wrp_alu32_imm()
811 u64 imm = insn->imm; /* sign extend */ in wrp_cmp_imm() local
818 tmp_reg = ur_load_imm_any(nfp_prog, imm & ~0U, imm_b(nfp_prog)); in wrp_cmp_imm()
824 tmp_reg = ur_load_imm_any(nfp_prog, imm >> 32, imm_b(nfp_prog)); in wrp_cmp_imm()
874 u64 imm = meta->insn.imm; /* sign extend */ in mov_imm64() local
876 wrp_immed(nfp_prog, reg_both(meta->insn.dst_reg * 2), imm & ~0U); in mov_imm64()
877 wrp_immed(nfp_prog, reg_both(meta->insn.dst_reg * 2 + 1), imm >> 32); in mov_imm64()
889 return wrp_alu64_imm(nfp_prog, meta, ALU_OP_XOR, !meta->insn.imm); in xor_imm64()
899 return wrp_alu64_imm(nfp_prog, meta, ALU_OP_AND, !~meta->insn.imm); in and_imm64()
909 return wrp_alu64_imm(nfp_prog, meta, ALU_OP_OR, !meta->insn.imm); in or_imm64()
929 u64 imm = insn->imm; /* sign extend */ in add_imm64() local
931 wrp_alu_imm(nfp_prog, insn->dst_reg * 2, ALU_OP_ADD, imm & ~0U); in add_imm64()
932 wrp_alu_imm(nfp_prog, insn->dst_reg * 2 + 1, ALU_OP_ADD_C, imm >> 32); in add_imm64()
954 u64 imm = insn->imm; /* sign extend */ in sub_imm64() local
956 wrp_alu_imm(nfp_prog, insn->dst_reg * 2, ALU_OP_SUB, imm & ~0U); in sub_imm64()
957 wrp_alu_imm(nfp_prog, insn->dst_reg * 2 + 1, ALU_OP_SUB_C, imm >> 32); in sub_imm64()
966 if (insn->imm != 32) in shl_imm64()
979 if (insn->imm != 32) in shr_imm64()
1002 wrp_immed(nfp_prog, reg_both(insn->dst_reg * 2), insn->imm); in mov_imm()
1062 if (!insn->imm) in shl_imm()
1067 SHF_SC_L_SHF, insn->imm); in shl_imm()
1076 meta->insn.imm); in imm_ld8_part2()
1086 wrp_immed(nfp_prog, reg_both(insn->dst_reg * 2), insn->imm); in imm_ld8()
1093 return construct_data_ld(nfp_prog, meta->insn.imm, 1); in data_ld1()
1098 return construct_data_ld(nfp_prog, meta->insn.imm, 2); in data_ld2()
1103 return construct_data_ld(nfp_prog, meta->insn.imm, 4); in data_ld4()
1108 return construct_data_ind_ld(nfp_prog, meta->insn.imm, in data_ind_ld1()
1114 return construct_data_ind_ld(nfp_prog, meta->insn.imm, in data_ind_ld2()
1120 return construct_data_ind_ld(nfp_prog, meta->insn.imm, in data_ind_ld4()
1199 u64 imm = insn->imm; /* sign extend */ in jeq_imm() local
1206 if (imm & ~0U) { in jeq_imm()
1207 tmp_reg = ur_load_imm_any(nfp_prog, imm & ~0U, imm_b(nfp_prog)); in jeq_imm()
1213 if (imm >> 32) { in jeq_imm()
1214 tmp_reg = ur_load_imm_any(nfp_prog, imm >> 32, imm_b(nfp_prog)); in jeq_imm()
1249 u64 imm = insn->imm; /* sign extend */ in jset_imm() local
1255 if (!imm) { in jset_imm()
1260 if (imm & ~0U) { in jset_imm()
1261 tmp_reg = ur_load_imm_any(nfp_prog, imm & ~0U, imm_b(nfp_prog)); in jset_imm()
1267 if (imm >> 32) { in jset_imm()
1268 tmp_reg = ur_load_imm_any(nfp_prog, imm >> 32, imm_b(nfp_prog)); in jset_imm()
1280 u64 imm = insn->imm; /* sign extend */ in jne_imm() local
1286 if (!imm) { in jne_imm()
1292 tmp_reg = ur_load_imm_any(nfp_prog, imm & ~0U, imm_b(nfp_prog)); in jne_imm()
1297 tmp_reg = ur_load_imm_any(nfp_prog, imm >> 32, imm_b(nfp_prog)); in jne_imm()
1794 if (exp_mask[BPF_SIZE(insn.code)] != next.imm) in nfp_bpf_opt_ld_mask()
1833 if (next1.imm != 0x20 || next2.imm != 0x20) in nfp_bpf_opt_ld_shift()