Lines Matching refs:imm
384 s32 imm = insn[i].imm;
426 case BPF_ALU | BPF_ADD | BPF_K: /* (u32) dst += (u32) imm */
427 case BPF_ALU64 | BPF_ADD | BPF_K: /* dst += imm */
428 if (!imm) {
430 } else if (imm >= -32768 && imm < 32768) {
431 EMIT(PPC_RAW_ADDI(dst_reg, dst_reg, IMM_L(imm)));
433 PPC_LI32(tmp1_reg, imm);
437 case BPF_ALU | BPF_SUB | BPF_K: /* (u32) dst -= (u32) imm */
438 case BPF_ALU64 | BPF_SUB | BPF_K: /* dst -= imm */
439 if (!imm) {
441 } else if (imm > -32768 && imm <= 32768) {
442 EMIT(PPC_RAW_ADDI(dst_reg, dst_reg, IMM_L(-imm)));
444 PPC_LI32(tmp1_reg, imm);
455 case BPF_ALU | BPF_MUL | BPF_K: /* (u32) dst *= (u32) imm */
456 case BPF_ALU64 | BPF_MUL | BPF_K: /* dst *= imm */
457 if (imm >= -32768 && imm < 32768)
458 EMIT(PPC_RAW_MULI(dst_reg, dst_reg, IMM_L(imm)));
460 PPC_LI32(tmp1_reg, imm);
485 case BPF_ALU | BPF_MOD | BPF_K: /* (u32) dst %= (u32) imm */
486 case BPF_ALU | BPF_DIV | BPF_K: /* (u32) dst /= (u32) imm */
487 case BPF_ALU64 | BPF_MOD | BPF_K: /* dst %= imm */
488 case BPF_ALU64 | BPF_DIV | BPF_K: /* dst /= imm */
489 if (imm == 0)
491 if (imm == 1) {
500 PPC_LI32(tmp1_reg, imm);
532 case BPF_ALU | BPF_AND | BPF_K: /* (u32) dst = dst & imm */
533 case BPF_ALU64 | BPF_AND | BPF_K: /* dst = dst & imm */
534 if (!IMM_H(imm))
535 EMIT(PPC_RAW_ANDI(dst_reg, dst_reg, IMM_L(imm)));
538 PPC_LI32(tmp1_reg, imm);
546 case BPF_ALU | BPF_OR | BPF_K:/* dst = (u32) dst | (u32) imm */
547 case BPF_ALU64 | BPF_OR | BPF_K:/* dst = dst | imm */
548 if (imm < 0 && BPF_CLASS(code) == BPF_ALU64) {
550 PPC_LI32(tmp1_reg, imm);
553 if (IMM_L(imm))
554 EMIT(PPC_RAW_ORI(dst_reg, dst_reg, IMM_L(imm)));
555 if (IMM_H(imm))
556 EMIT(PPC_RAW_ORIS(dst_reg, dst_reg, IMM_H(imm)));
563 case BPF_ALU | BPF_XOR | BPF_K: /* (u32) dst ^= (u32) imm */
564 case BPF_ALU64 | BPF_XOR | BPF_K: /* dst ^= imm */
565 if (imm < 0 && BPF_CLASS(code) == BPF_ALU64) {
567 PPC_LI32(tmp1_reg, imm);
570 if (IMM_L(imm))
571 EMIT(PPC_RAW_XORI(dst_reg, dst_reg, IMM_L(imm)));
572 if (IMM_H(imm))
573 EMIT(PPC_RAW_XORIS(dst_reg, dst_reg, IMM_H(imm)));
586 case BPF_ALU | BPF_LSH | BPF_K: /* (u32) dst <<== (u32) imm */
587 /* with imm 0, we still need to clear top 32 bits */
588 EMIT(PPC_RAW_SLWI(dst_reg, dst_reg, imm));
592 case BPF_ALU64 | BPF_LSH | BPF_K: /* dst <<== imm */
593 if (imm != 0)
594 EMIT(PPC_RAW_SLDI(dst_reg, dst_reg, imm));
604 case BPF_ALU | BPF_RSH | BPF_K: /* (u32) dst >>= (u32) imm */
605 EMIT(PPC_RAW_SRWI(dst_reg, dst_reg, imm));
609 case BPF_ALU64 | BPF_RSH | BPF_K: /* dst >>= imm */
610 if (imm != 0)
611 EMIT(PPC_RAW_SRDI(dst_reg, dst_reg, imm));
619 case BPF_ALU | BPF_ARSH | BPF_K: /* (s32) dst >>= imm */
620 EMIT(PPC_RAW_SRAWI(dst_reg, dst_reg, imm));
622 case BPF_ALU64 | BPF_ARSH | BPF_K: /* (s64) dst >>= imm */
623 if (imm != 0)
624 EMIT(PPC_RAW_SRADI(dst_reg, dst_reg, imm));
632 if (imm == 1) {
639 case BPF_ALU | BPF_MOV | BPF_K: /* (u32) dst = imm */
640 case BPF_ALU64 | BPF_MOV | BPF_K: /* dst = (s64) imm */
641 PPC_LI32(dst_reg, imm);
642 if (imm < 0)
666 switch (imm) {
709 switch (imm) {
759 case BPF_ST | BPF_MEM | BPF_B: /* *(u8 *)(dst + off) = imm */
761 EMIT(PPC_RAW_LI(tmp1_reg, imm));
767 case BPF_ST | BPF_MEM | BPF_H: /* (u16 *)(dst + off) = imm */
769 EMIT(PPC_RAW_LI(tmp1_reg, imm));
775 case BPF_ST | BPF_MEM | BPF_W: /* *(u32 *)(dst + off) = imm */
777 PPC_LI32(tmp1_reg, imm);
783 case BPF_ST | BPF_MEM | BPF_DW: /* *(u64 *)(dst + off) = imm */
785 PPC_LI32(tmp1_reg, imm);
814 if (imm & BPF_FETCH)
817 switch (imm) {
867 if (imm & BPF_FETCH) {
873 if (size != BPF_DW && imm == BPF_CMPXCHG &&
954 case BPF_LD | BPF_IMM | BPF_DW: /* dst = (u64) imm */
955 imm64 = ((u64)(u32) insn[i].imm) |
956 (((u64)(u32) insn[i+1].imm) << 32);
1133 * values can be used as imm in cmpldi
1135 if (imm >= 0 && imm < 32768) {
1137 EMIT(PPC_RAW_CMPLWI(dst_reg, imm));
1139 EMIT(PPC_RAW_CMPLDI(dst_reg, imm));
1142 PPC_LI32(tmp1_reg, imm);
1166 if (imm >= -32768 && imm < 32768) {
1168 EMIT(PPC_RAW_CMPWI(dst_reg, imm));
1170 EMIT(PPC_RAW_CMPDI(dst_reg, imm));
1172 PPC_LI32(tmp1_reg, imm);
1183 if (imm >= 0 && imm < 32768)
1185 EMIT(PPC_RAW_ANDI(tmp1_reg, dst_reg, imm));
1187 PPC_LI32(tmp1_reg, imm);