Esempio n. 1
0
static ut64 mask64(ut64 mb, ut64 me) {
	int i;
	ut64 mask = 0;
	if (mb > 63 || me > 63) {
		return mask;
	}
	if (mb < (me + 1)) {
		for (i = mb; i <= me; i++) {
			mask = mask | (ut64) (1LL << (63 - i));
		}
	} else if (mb == (me + 1)) {
		mask = 0xffffffffffffffffull;
	} else if (mb > (me + 1)) {
		ut64 lo = mask64 (0, me);
		ut64 hi = mask64 (mb, 63);
		mask = lo | hi;
	}
	return mask;
}
Esempio n. 2
0
static const char* inv_mask64(const char *mb_c, const char *sh) {
	static char cmask[32];
	ut64 mb = 0;
	ut64 me = 0;
	if (mb_c) mb = atol (mb_c);
	if (sh) {
		me = atol (sh);
	}
	snprintf (cmask, sizeof (cmask), "0x%"PFMT64x"", mask64 (mb, ~me));
	return cmask;
}
Esempio n. 3
0
static const char* cmask64(const char *mb_c, const char *me_c) {
	static char cmask[32];
	ut64 mb = 0;
	ut64 me = 0;
	if (mb_c) {
		mb = strtol (mb_c, NULL, 16);
	}
	if (me_c) {
		me = strtol (me_c, NULL, 16);
	}
	snprintf (cmask, sizeof (cmask), "0x%"PFMT64x"", mask64 (mb, me));
	return cmask;
}
// pick bits [hi,...,lo] from val
static inline u_int64_t pick64(u_int64_t val, int hi = 31, int lo = 0)
{
  return (val & mask64(hi, lo));
}