Lines Matching defs:imm

186 #define EMIT4_IMM(op, b1, imm)					\
188 unsigned int __imm = (imm) & 0xffff; \
246 #define EMIT6_PCREL_RIEC(op1, op2, b1, imm, mask, target) \
250 (rel & 0xffff), (op2) | ((imm) & 0xff) << 8); \
252 BUILD_BUG_ON(((unsigned long) (imm)) > 0xff); \
281 #define _EMIT6_IMM(op, imm) \
283 unsigned int __imm = (imm); \
287 #define EMIT6_IMM(op, b1, imm) \
289 _EMIT6_IMM((op) | reg_high(b1) << 16, imm); \
783 s32 imm = insn->imm;
808 case BPF_ALU | BPF_MOV | BPF_K: /* dst = (u32) imm */
809 /* llilf %dst,imm */
810 EMIT6_IMM(0xc00f0000, dst_reg, imm);
814 case BPF_ALU64 | BPF_MOV | BPF_K: /* dst = imm */
815 /* lgfi %dst,imm */
816 EMIT6_IMM(0xc0010000, dst_reg, imm);
821 case BPF_LD | BPF_IMM | BPF_DW: /* dst = (u64) imm */
826 imm64 = (u64)(u32) insn[0].imm | ((u64)(u32) insn[1].imm) << 32;
827 /* lgrl %dst,imm */
844 case BPF_ALU | BPF_ADD | BPF_K: /* dst = (u32) dst + (u32) imm */
845 if (imm != 0) {
846 /* alfi %dst,imm */
847 EMIT6_IMM(0xc20b0000, dst_reg, imm);
851 case BPF_ALU64 | BPF_ADD | BPF_K: /* dst = dst + imm */
852 if (!imm)
854 /* agfi %dst,imm */
855 EMIT6_IMM(0xc2080000, dst_reg, imm);
869 case BPF_ALU | BPF_SUB | BPF_K: /* dst = (u32) dst - (u32) imm */
870 if (imm != 0) {
871 /* alfi %dst,-imm */
872 EMIT6_IMM(0xc20b0000, dst_reg, -imm);
876 case BPF_ALU64 | BPF_SUB | BPF_K: /* dst = dst - imm */
877 if (!imm)
879 if (imm == -0x80000000) {
883 /* agfi %dst,-imm */
884 EMIT6_IMM(0xc2080000, dst_reg, -imm);
899 case BPF_ALU | BPF_MUL | BPF_K: /* dst = (u32) dst * (u32) imm */
900 if (imm != 1) {
901 /* msfi %r5,imm */
902 EMIT6_IMM(0xc2010000, dst_reg, imm);
906 case BPF_ALU64 | BPF_MUL | BPF_K: /* dst = dst * imm */
907 if (imm == 1)
909 /* msgfi %dst,imm */
910 EMIT6_IMM(0xc2000000, dst_reg, imm);
947 case BPF_ALU | BPF_DIV | BPF_K: /* dst = (u32) dst / (u32) imm */
948 case BPF_ALU | BPF_MOD | BPF_K: /* dst = (u32) dst % (u32) imm */
952 if (imm == 1) {
965 /* dl %w0,<d(imm)>(%l) */
967 EMIT_CONST_U32(imm));
969 /* lgfrl %dst,imm */
971 _EMIT_CONST_U32(imm));
982 case BPF_ALU64 | BPF_DIV | BPF_K: /* dst = dst / imm */
983 case BPF_ALU64 | BPF_MOD | BPF_K: /* dst = dst % imm */
987 if (imm == 1) {
998 /* dlg %w0,<d(imm)>(%l) */
1000 EMIT_CONST_U64(imm));
1002 /* lgrl %dst,imm */
1004 _EMIT_CONST_U64(imm));
1025 case BPF_ALU | BPF_AND | BPF_K: /* dst = (u32) dst & (u32) imm */
1026 /* nilf %dst,imm */
1027 EMIT6_IMM(0xc00b0000, dst_reg, imm);
1030 case BPF_ALU64 | BPF_AND | BPF_K: /* dst = dst & imm */
1032 /* ng %dst,<d(imm)>(%l) */
1035 EMIT_CONST_U64(imm));
1037 /* lgrl %w0,imm */
1039 _EMIT_CONST_U64(imm));
1057 case BPF_ALU | BPF_OR | BPF_K: /* dst = (u32) dst | (u32) imm */
1058 /* oilf %dst,imm */
1059 EMIT6_IMM(0xc00d0000, dst_reg, imm);
1062 case BPF_ALU64 | BPF_OR | BPF_K: /* dst = dst | imm */
1064 /* og %dst,<d(imm)>(%l) */
1067 EMIT_CONST_U64(imm));
1069 /* lgrl %w0,imm */
1071 _EMIT_CONST_U64(imm));
1089 case BPF_ALU | BPF_XOR | BPF_K: /* dst = (u32) dst ^ (u32) imm */
1090 if (imm != 0) {
1091 /* xilf %dst,imm */
1092 EMIT6_IMM(0xc0070000, dst_reg, imm);
1096 case BPF_ALU64 | BPF_XOR | BPF_K: /* dst = dst ^ imm */
1098 /* xg %dst,<d(imm)>(%l) */
1101 EMIT_CONST_U64(imm));
1103 /* lgrl %w0,imm */
1105 _EMIT_CONST_U64(imm));
1123 case BPF_ALU | BPF_LSH | BPF_K: /* dst = (u32) dst << (u32) imm */
1124 if (imm != 0) {
1125 /* sll %dst,imm(%r0) */
1126 EMIT4_DISP(0x89000000, dst_reg, REG_0, imm);
1130 case BPF_ALU64 | BPF_LSH | BPF_K: /* dst = dst << imm */
1131 if (imm == 0)
1133 /* sllg %dst,%dst,imm(%r0) */
1134 EMIT6_DISP_LH(0xeb000000, 0x000d, dst_reg, dst_reg, REG_0, imm);
1148 case BPF_ALU | BPF_RSH | BPF_K: /* dst = (u32) dst >> (u32) imm */
1149 if (imm != 0) {
1150 /* srl %dst,imm(%r0) */
1151 EMIT4_DISP(0x88000000, dst_reg, REG_0, imm);
1155 case BPF_ALU64 | BPF_RSH | BPF_K: /* dst = dst >> imm */
1156 if (imm == 0)
1158 /* srlg %dst,%dst,imm(%r0) */
1159 EMIT6_DISP_LH(0xeb000000, 0x000c, dst_reg, dst_reg, REG_0, imm);
1173 case BPF_ALU | BPF_ARSH | BPF_K: /* ((s32) dst >> imm */
1174 if (imm != 0) {
1175 /* sra %dst,imm(%r0) */
1176 EMIT4_DISP(0x8a000000, dst_reg, REG_0, imm);
1180 case BPF_ALU64 | BPF_ARSH | BPF_K: /* ((s64) dst) >>= imm */
1181 if (imm == 0)
1183 /* srag %dst,%dst,imm(%r0) */
1184 EMIT6_DISP_LH(0xeb000000, 0x000a, dst_reg, dst_reg, REG_0, imm);
1203 switch (imm) {
1220 switch (imm) {
1272 case BPF_ST | BPF_MEM | BPF_B: /* *(u8 *)(dst + off) = imm */
1273 /* lhi %w0,imm */
1274 EMIT4_IMM(0xa7080000, REG_W0, (u8) imm);
1279 case BPF_ST | BPF_MEM | BPF_H: /* (u16 *)(dst + off) = imm */
1280 /* lhi %w0,imm */
1281 EMIT4_IMM(0xa7080000, REG_W0, (u16) imm);
1286 case BPF_ST | BPF_MEM | BPF_W: /* *(u32 *)(dst + off) = imm */
1287 /* llilf %w0,imm */
1288 EMIT6_IMM(0xc00f0000, REG_W0, (u32) imm);
1293 case BPF_ST | BPF_MEM | BPF_DW: /* *(u64 *)(dst + off) = imm */
1294 /* lgfi %w0,imm */
1295 EMIT6_IMM(0xc0010000, REG_W0, imm);
1308 switch (insn->imm) {
1312 (insn->imm & BPF_FETCH) ? src_reg : REG_W0, \
1314 if (is32 && (insn->imm & BPF_FETCH)) \
1359 pr_err("Unknown atomic operation %02x\n", insn->imm);
1576 case BPF_JMP | BPF_JSGT | BPF_K: /* ((s64) dst > (s64) imm) */
1577 case BPF_JMP32 | BPF_JSGT | BPF_K: /* ((s32) dst > (s32) imm) */
1580 case BPF_JMP | BPF_JSLT | BPF_K: /* ((s64) dst < (s64) imm) */
1581 case BPF_JMP32 | BPF_JSLT | BPF_K: /* ((s32) dst < (s32) imm) */
1584 case BPF_JMP | BPF_JSGE | BPF_K: /* ((s64) dst >= (s64) imm) */
1585 case BPF_JMP32 | BPF_JSGE | BPF_K: /* ((s32) dst >= (s32) imm) */
1588 case BPF_JMP | BPF_JSLE | BPF_K: /* ((s64) dst <= (s64) imm) */
1589 case BPF_JMP32 | BPF_JSLE | BPF_K: /* ((s32) dst <= (s32) imm) */
1592 case BPF_JMP | BPF_JGT | BPF_K: /* (dst_reg > imm) */
1593 case BPF_JMP32 | BPF_JGT | BPF_K: /* ((u32) dst_reg > (u32) imm) */
1596 case BPF_JMP | BPF_JLT | BPF_K: /* (dst_reg < imm) */
1597 case BPF_JMP32 | BPF_JLT | BPF_K: /* ((u32) dst_reg < (u32) imm) */
1600 case BPF_JMP | BPF_JGE | BPF_K: /* (dst_reg >= imm) */
1601 case BPF_JMP32 | BPF_JGE | BPF_K: /* ((u32) dst_reg >= (u32) imm) */
1604 case BPF_JMP | BPF_JLE | BPF_K: /* (dst_reg <= imm) */
1605 case BPF_JMP32 | BPF_JLE | BPF_K: /* ((u32) dst_reg <= (u32) imm) */
1608 case BPF_JMP | BPF_JNE | BPF_K: /* (dst_reg != imm) */
1609 case BPF_JMP32 | BPF_JNE | BPF_K: /* ((u32) dst_reg != (u32) imm) */
1612 case BPF_JMP | BPF_JEQ | BPF_K: /* (dst_reg == imm) */
1613 case BPF_JMP32 | BPF_JEQ | BPF_K: /* ((u32) dst_reg == (u32) imm) */
1616 case BPF_JMP | BPF_JSET | BPF_K: /* (dst_reg & imm) */
1617 case BPF_JMP32 | BPF_JSET | BPF_K: /* ((u32) dst_reg & (u32) imm) */
1620 /* llilf %w1,imm (load zero extend imm) */
1621 EMIT6_IMM(0xc00f0000, REG_W1, imm);
1625 /* lgfi %w1,imm (load sign extend imm) */
1626 EMIT6_IMM(0xc0010000, REG_W1, imm);
1684 /* cfi or cgfi %dst,imm */
1686 dst_reg, imm);
1699 /* lgfi %w1,imm (load sign extend imm) */
1701 EMIT6_IMM(0xc0010000, src_reg, imm);