Lines Matching refs:imm

305 		s32 imm = insn[i].imm;
315 insn[i - 1].dst_reg == insn[i].dst_reg && insn[i - 1].imm != 1) {
366 case BPF_ALU | BPF_SUB | BPF_K: /* (u32) dst -= (u32) imm */
367 imm = -imm;
369 case BPF_ALU | BPF_ADD | BPF_K: /* (u32) dst += (u32) imm */
370 if (!imm) {
372 } else if (IMM_HA(imm) & 0xffff) {
373 EMIT(PPC_RAW_ADDIS(dst_reg, src2_reg, IMM_HA(imm)));
376 if (IMM_L(imm))
377 EMIT(PPC_RAW_ADDI(dst_reg, src2_reg, IMM_L(imm)));
379 case BPF_ALU64 | BPF_SUB | BPF_K: /* dst -= imm */
380 imm = -imm;
382 case BPF_ALU64 | BPF_ADD | BPF_K: /* dst += imm */
383 if (!imm) {
388 if (imm >= -32768 && imm < 32768) {
389 EMIT(PPC_RAW_ADDIC(dst_reg, src2_reg, imm));
391 PPC_LI32(_R0, imm);
394 if (imm >= 0 || (BPF_OP(code) == BPF_SUB && imm == 0x80000000))
411 case BPF_ALU | BPF_MUL | BPF_K: /* (u32) dst *= (u32) imm */
412 if (imm == 1) {
414 } else if (imm == -1) {
416 } else if (is_power_of_2((u32)imm)) {
417 EMIT(PPC_RAW_SLWI(dst_reg, src2_reg, ilog2(imm)));
418 } else if (imm >= -32768 && imm < 32768) {
419 EMIT(PPC_RAW_MULI(dst_reg, src2_reg, imm));
421 PPC_LI32(_R0, imm);
425 case BPF_ALU64 | BPF_MUL | BPF_K: /* dst *= imm */
426 if (!imm) {
429 } else if (imm == 1) {
432 } else if (imm == -1) {
435 } else if (imm > 0 && is_power_of_2(imm)) {
436 imm = ilog2(imm);
437 EMIT(PPC_RAW_RLWINM(dst_reg_h, src2_reg_h, imm, 0, 31 - imm));
438 EMIT(PPC_RAW_RLWIMI(dst_reg_h, dst_reg, imm, 32 - imm, 31));
439 EMIT(PPC_RAW_SLWI(dst_reg, src2_reg, imm));
442 PPC_LI32(tmp_reg, imm);
444 if (imm < 0)
463 case BPF_ALU | BPF_DIV | BPF_K: /* (u32) dst /= (u32) imm */
464 if (!imm)
466 if (imm == 1) {
468 } else if (is_power_of_2((u32)imm)) {
469 EMIT(PPC_RAW_SRWI(dst_reg, src2_reg, ilog2(imm)));
471 PPC_LI32(_R0, imm);
475 case BPF_ALU | BPF_MOD | BPF_K: /* (u32) dst %= (u32) imm */
476 if (!imm)
479 if (!is_power_of_2((u32)imm)) {
481 PPC_LI32(tmp_reg, imm);
485 } else if (imm == 1) {
488 imm = ilog2((u32)imm);
489 EMIT(PPC_RAW_RLWINM(dst_reg, src2_reg, 0, 32 - imm, 31));
492 case BPF_ALU64 | BPF_MOD | BPF_K: /* dst %= imm */
493 if (!imm)
495 if (imm < 0)
496 imm = -imm;
497 if (!is_power_of_2(imm))
499 if (imm == 1)
502 EMIT(PPC_RAW_RLWINM(dst_reg, src2_reg, 0, 32 - ilog2(imm), 31));
505 case BPF_ALU64 | BPF_DIV | BPF_K: /* dst /= imm */
506 if (!imm)
508 if (!is_power_of_2(abs(imm)))
511 if (imm < 0) {
514 imm = -imm;
517 if (imm == 1) {
521 imm = ilog2(imm);
522 EMIT(PPC_RAW_RLWINM(dst_reg, src2_reg, 32 - imm, imm, 31));
523 EMIT(PPC_RAW_RLWIMI(dst_reg, src2_reg_h, 32 - imm, 0, imm - 1));
524 EMIT(PPC_RAW_SRAWI(dst_reg_h, src2_reg_h, imm));
545 case BPF_ALU64 | BPF_AND | BPF_K: /* dst = dst & imm */
546 if (imm >= 0)
549 case BPF_ALU | BPF_AND | BPF_K: /* (u32) dst = dst & imm */
550 if (!IMM_H(imm)) {
551 EMIT(PPC_RAW_ANDI(dst_reg, src2_reg, IMM_L(imm)));
552 } else if (!IMM_L(imm)) {
553 EMIT(PPC_RAW_ANDIS(dst_reg, src2_reg, IMM_H(imm)));
554 } else if (imm == (((1 << fls(imm)) - 1) ^ ((1 << (ffs(i) - 1)) - 1))) {
556 32 - fls(imm), 32 - ffs(imm)));
558 PPC_LI32(_R0, imm);
569 case BPF_ALU64 | BPF_OR | BPF_K:/* dst = dst | imm */
571 if (imm < 0)
574 case BPF_ALU | BPF_OR | BPF_K:/* dst = (u32) dst | (u32) imm */
575 if (IMM_L(imm)) {
576 EMIT(PPC_RAW_ORI(dst_reg, src2_reg, IMM_L(imm)));
579 if (IMM_H(imm))
580 EMIT(PPC_RAW_ORIS(dst_reg, src2_reg, IMM_H(imm)));
597 case BPF_ALU64 | BPF_XOR | BPF_K: /* dst ^= imm */
598 if (imm < 0)
601 case BPF_ALU | BPF_XOR | BPF_K: /* (u32) dst ^= (u32) imm */
602 if (IMM_L(imm)) {
603 EMIT(PPC_RAW_XORI(dst_reg, src2_reg, IMM_L(imm)));
606 if (IMM_H(imm))
607 EMIT(PPC_RAW_XORIS(dst_reg, src2_reg, IMM_H(imm)));
623 case BPF_ALU | BPF_LSH | BPF_K: /* (u32) dst <<= (u32) imm */
624 if (imm)
625 EMIT(PPC_RAW_SLWI(dst_reg, src2_reg, imm));
629 case BPF_ALU64 | BPF_LSH | BPF_K: /* dst <<= imm */
630 if (imm < 0)
632 if (!imm) {
634 } else if (imm < 32) {
635 EMIT(PPC_RAW_RLWINM(dst_reg_h, src2_reg_h, imm, 0, 31 - imm));
636 EMIT(PPC_RAW_RLWIMI(dst_reg_h, src2_reg, imm, 32 - imm, 31));
637 EMIT(PPC_RAW_RLWINM(dst_reg, src2_reg, imm, 0, 31 - imm));
638 } else if (imm < 64) {
639 EMIT(PPC_RAW_RLWINM(dst_reg_h, src2_reg, imm, 0, 31 - imm));
660 case BPF_ALU | BPF_RSH | BPF_K: /* (u32) dst >>= (u32) imm */
661 if (imm)
662 EMIT(PPC_RAW_SRWI(dst_reg, src2_reg, imm));
666 case BPF_ALU64 | BPF_RSH | BPF_K: /* dst >>= imm */
667 if (imm < 0)
669 if (!imm) {
672 } else if (imm < 32) {
673 EMIT(PPC_RAW_RLWINM(dst_reg, src2_reg, 32 - imm, imm, 31));
674 EMIT(PPC_RAW_RLWIMI(dst_reg, src2_reg_h, 32 - imm, 0, imm - 1));
675 EMIT(PPC_RAW_RLWINM(dst_reg_h, src2_reg_h, 32 - imm, imm, 31));
676 } else if (imm < 64) {
677 EMIT(PPC_RAW_RLWINM(dst_reg, src2_reg_h, 64 - imm, imm - 32, 31));
700 case BPF_ALU | BPF_ARSH | BPF_K: /* (s32) dst >>= imm */
701 if (imm)
702 EMIT(PPC_RAW_SRAWI(dst_reg, src2_reg, imm));
706 case BPF_ALU64 | BPF_ARSH | BPF_K: /* (s64) dst >>= imm */
707 if (imm < 0)
709 if (!imm) {
712 } else if (imm < 32) {
713 EMIT(PPC_RAW_RLWINM(dst_reg, src2_reg, 32 - imm, imm, 31));
714 EMIT(PPC_RAW_RLWIMI(dst_reg, src2_reg_h, 32 - imm, 0, imm - 1));
715 EMIT(PPC_RAW_SRAWI(dst_reg_h, src2_reg_h, imm));
716 } else if (imm < 64) {
717 EMIT(PPC_RAW_SRAWI(dst_reg, src2_reg_h, imm - 32));
736 if (imm == 1)
741 case BPF_ALU64 | BPF_MOV | BPF_K: /* dst = (s64) imm */
742 PPC_LI32(dst_reg, imm);
743 PPC_EX32(dst_reg_h, imm);
745 case BPF_ALU | BPF_MOV | BPF_K: /* (u32) dst = imm */
746 PPC_LI32(dst_reg, imm);
753 switch (imm) {
789 switch (imm) {
813 case BPF_ST | BPF_MEM | BPF_B: /* *(u8 *)(dst + off) = imm */
814 PPC_LI32(_R0, imm);
820 case BPF_ST | BPF_MEM | BPF_H: /* (u16 *)(dst + off) = imm */
821 PPC_LI32(_R0, imm);
827 case BPF_ST | BPF_MEM | BPF_W: /* *(u32 *)(dst + off) = imm */
828 PPC_LI32(_R0, imm);
835 case BPF_ST | BPF_MEM | BPF_DW: /* *(u64 *)(dst + off) = imm */
836 PPC_LI32(_R0, imm);
838 PPC_EX32(_R0, imm);
859 if (imm & BPF_FETCH)
862 switch (imm) {
906 if (imm & BPF_FETCH) {
1011 case BPF_LD | BPF_IMM | BPF_DW: /* dst = (u64) imm */
1013 PPC_LI32(dst_reg_h, (u32)insn[i + 1].imm);
1014 PPC_LI32(dst_reg, (u32)insn[i].imm);
1184 * values can be used as imm in cmplwi
1186 if (imm >= 0 && imm < 32768) {
1189 EMIT(PPC_RAW_CMPLWI(dst_reg, imm));
1192 PPC_EX32(_R0, imm);
1194 PPC_LI32(_R0, imm);
1205 if (imm >= 0 && imm < 65536) {
1206 EMIT(PPC_RAW_CMPLWI(dst_reg, imm));
1208 PPC_LI32(_R0, imm);
1217 if (imm >= 0 && imm < 65536) {
1218 EMIT(PPC_RAW_CMPWI(dst_reg_h, imm < 0 ? -1 : 0));
1220 EMIT(PPC_RAW_CMPLWI(dst_reg, imm));
1223 EMIT(PPC_RAW_CMPWI(dst_reg_h, imm < 0 ? -1 : 0));
1224 PPC_LI32(_R0, imm);
1237 if (imm >= -32768 && imm < 32768) {
1238 EMIT(PPC_RAW_CMPWI(dst_reg, imm));
1241 PPC_LI32(_R0, imm);
1247 if (imm >= 0 && imm < 32768) {
1249 EMIT(PPC_RAW_ANDI(_R0, dst_reg, imm));
1251 PPC_LI32(_R0, imm);
1252 if (imm < 0) {
1261 if (imm >= 0 && imm < 32768) {
1263 EMIT(PPC_RAW_ANDI(_R0, dst_reg, imm));
1265 PPC_LI32(_R0, imm);
1293 !insn_is_zext(&insn[i + 1]) && !(BPF_OP(code) == BPF_END && imm == 64))