On Thu, Nov 19, 2015 at 12:30 PM, Kristian Høgsberg <k...@bitplanet.net> wrote: > On Thu, Nov 19, 2015 at 2:05 AM, Iago Toral Quiroga <ito...@igalia.com> wrote: >> From: Connor Abbott <connor.w.abb...@intel.com> >> >> If we tried to get/set something that was exactly 64 bits, we would >> try to do (1 << 64) - 1 to calculate the mask which doesn't give us all >> 1's like we want. >> >> v2 (Iago) >> - Replace ~0 by ~0ull >> - Removed unnecessary parenthesis >> >> Reviewed-by: Iago Toral Quiroga <ito...@igalia.com> >> --- >> src/mesa/drivers/dri/i965/brw_inst.h | 6 ++++-- >> 1 file changed, 4 insertions(+), 2 deletions(-) >> >> diff --git a/src/mesa/drivers/dri/i965/brw_inst.h >> b/src/mesa/drivers/dri/i965/brw_inst.h >> index 4ed95c4..ec08194 100644 >> --- a/src/mesa/drivers/dri/i965/brw_inst.h >> +++ b/src/mesa/drivers/dri/i965/brw_inst.h >> @@ -694,7 +694,8 @@ brw_inst_bits(const brw_inst *inst, unsigned high, >> unsigned low) >> high %= 64; >> low %= 64; >> >> - const uint64_t mask = (1ull << (high - low + 1)) - 1; >> + const uint64_t mask = (high - low == 63) ? ~0ull : >> + (1ull << (high - low + 1)) - 1; > > Can we do > > const uint64_t mask = (~0ul >> (64 - (high - low + 1))); > > instead? > > Kristian > >> return (inst->data[word] >> low) & mask; >> } >> @@ -713,7 +714,8 @@ brw_inst_set_bits(brw_inst *inst, unsigned high, >> unsigned low, uint64_t value) >> high %= 64; >> low %= 64; >> >> - const uint64_t mask = ((1ull << (high - low + 1)) - 1) << low; >> + const uint64_t mask = (high - low == 63) ? ~0ull : >> + ((1ull << (high - low + 1)) - 1) << low;
Or if you feel like reusing exising logic, there's BITFIELD64_MASK/BITFIELD64_RANGE in mtypes.h [which does it the ? : way... could be fixed though]. -ilia _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev