Lines Matching defs:mask
15 // * `M` for a constant mask,
24 // * `$mask(N)` is used for `((1 << N) -1)`
25 // * `$trunc(x, N)` is used for `(x & $mask(N))`
38 // - `TRUNC(x, N)`, with `M` = $mask(N)
39 // - `ZEXT(x, N)`, with `M` = $mask(N)
635 long long res, mask, bits;
637 mask = 1ULL << (size-1);
638 bits = mask | (mask-1);
640 if (left & mask)
642 if (right & mask)
672 if (left == mask && right == -1)
684 if (left == mask && right == -1)
773 // @mask: the associated mask (M)
777 static int simplify_mask_or_and(struct instruction *insn, unsigned long long mask,
789 nmask = omask & mask;
796 if (nmask == mask) {
813 // @mask: the associated mask (M)
816 static int simplify_mask_or(struct instruction *insn, unsigned long long mask, struct instruction *or)
823 if ((rc = simplify_mask_or_and(insn, mask, src1, src2)))
827 if ((rc = simplify_mask_or_and(insn, mask, src2, src1)))
831 unsigned long long nval = oval & mask;
838 if (nval == mask) {
840 return replace_pseudo(insn, &insn->src1, value_pseudo(mask));
854 // @mask: the mask associated to MASK (M):
856 static int simplify_mask_shift_or(struct instruction *sh, struct instruction *or, unsigned long long mask)
862 mask <<= shift;
864 mask >>= shift;
865 return simplify_mask_or(sh, smask & mask, or);
868 static int simplify_mask_shift(struct instruction *sh, unsigned long long mask)
877 return simplify_mask_shift_or(sh, inner, mask);
914 unsigned long long mask, omask, nmask;
972 mask = bits_mask(insn->size - value) << value;
974 nmask = omask & mask;
977 if (nmask == mask)
989 mask = bits_mask(size);
990 return simplify_mask_shift_or(insn, def, mask);
996 mask = bits_mask(insn->size - value);
1008 mask = bits_mask(insn->size) >> value;
1010 nmask = omask & mask;
1013 if (nmask == mask)
1022 mask = bits_mask(insn->size - value) << value;
1025 mask = bits_mask(size);
1026 return simplify_mask_shift_or(insn, def, mask);
1053 insn->src2 = value_pseudo(mask);
1468 static int simplify_constant_mask(struct instruction *insn, unsigned long long mask)
1481 return simplify_mask_or(insn, mask, def);
1484 return simplify_mask_shift(def, mask);
1490 nmask = mask & omask;
1492 // the AND mask is redundant
1494 if (nmask != mask) {
1495 // can use a smaller mask
2102 long long res, mask;
2112 mask = 1ULL << (insn->orig_type->bit_size-1);
2113 if (val & mask)
2114 val |= ~(mask | (mask-1));
2123 mask = 1ULL << (insn->size-1);
2124 res &= mask | (mask-1);
2262 unsigned long long mask;
2292 mask = val->value;
2293 mask &= (1ULL << size) - 1;
2294 insn->src2 = value_pseudo(mask);
2310 // For ZEXT, the mask will always be small
2312 // the mask force the sign bit to 0.
2360 mask = bits_mask(insn->size);
2361 return simplify_mask_or(insn, mask, def);
2368 mask = bits_mask(insn->size);
2369 return simplify_mask_shift(def, mask);