Mirror of the lttng-dev mailing list
 help / color / mirror / Atom feed
From: mathieu.desnoyers@efficios.com (Mathieu Desnoyers)
Subject: [lttng-dev] [PATCH lttng-ust 1/2] Fix: bitfield: shift undefined/implementation defined behaviors
Date: Wed, 15 May 2019 17:51:12 -0400 (EDT)	[thread overview]
Message-ID: <1143277706.1564.1557957072293.JavaMail.zimbra@efficios.com> (raw)
In-Reply-To: <20190514203629.24947-1-mathieu.desnoyers@efficios.com>

----- On May 14, 2019, at 4:36 PM, Mathieu Desnoyers mathieu.desnoyers at efficios.com wrote:

[...]
							\
> 
> #define _bt_bitfield_write_be(_ptr, type, _start, _length, _v)		\
> do {									\
> -	__typeof__(_v) __v = (_v);						\
> +	__typeof__(_v) __v = (_v);					\
> 	type *__ptr = (void *) (_ptr);					\
> 	unsigned long __start = (_start), __length = (_length);		\
> 	type mask, cmask;						\
> @@ -161,15 +263,15 @@ do {									\
> 									\
> 	/* Trim v high bits */						\
> 	if (__length < sizeof(__v) * CHAR_BIT)				\
> -		__v &= ~((~(__typeof__(__v)) 0) << __length);		\
> +		__v &= _bt_make_mask(__typeof__(__v), __length);	\
> 									\
> 	/* We can now append v with a simple "or", shift it piece-wise */ \
> 	this_unit = end_unit - 1;					\
> 	if (start_unit == end_unit - 1) {				\
> -		mask = ~((~(type) 0) << ((ts - (end % ts)) % ts));	\
> +		mask = _bt_make_mask(type, (ts - (end % ts)) % ts);	\
> 		if (__start % ts)					\
> -			mask |= (~((type) 0)) << (ts - (__start % ts));	\
> -		cmask = (type) __v << ((ts - (end % ts)) % ts);		\
> +			mask |= _bt_make_mask_complement(type, ts - (__start % ts)); \
> +		cmask = _bt_lshift((type) (__v), (ts - (end % ts)) % ts); \
> 		cmask &= ~mask;						\
> 		__ptr[this_unit] &= mask;				\
> 		__ptr[this_unit] |= cmask;				\
> @@ -177,22 +279,22 @@ do {									\
> 	}								\
> 	if (end % ts) {							\
> 		cshift = end % ts;					\
> -		mask = ~((~(type) 0) << (ts - cshift));			\
> -		cmask = (type) __v << (ts - cshift);			\
> +		mask = _bt_make_mask(type, ts - cshift);		\
> +		cmask = _bt_lshift((type) (__v), ts - cshift);		\
> 		cmask &= ~mask;						\
> 		__ptr[this_unit] &= mask;				\
> 		__ptr[this_unit] |= cmask;				\
> -		__v = _bt_piecewise_rshift(__v, cshift);		\
> +		_bt_piecewise_rshift(__v, cshift);			\
> 		end -= cshift;						\
> 		this_unit--;						\
> 	}								\
> 	for (; (long) this_unit >= (long) start_unit + 1; this_unit--) { \
> 		__ptr[this_unit] = (type) __v;				\
> -		__v = _bt_piecewise_rshift(__v, ts);			\
> +		_bt_piecewise_rshift(__v, ts);				\
> 		end -= ts;						\
> 	}								\
> 	if (__start % ts) {						\
> -		mask = (~(type) 0) << (ts - (__start % ts));		\
> +		mask = _bt_make_mask(type, ts - (__start % ts));	\

Should be:

+               mask = _bt_make_mask_complement(type, ts - (__start % ts)); \

Will fix before merging.

Mathieu


-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com


      parent reply	other threads:[~2019-05-15 21:51 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-14 20:36 Mathieu Desnoyers
2019-05-14 20:36 ` [lttng-dev] [PATCH lttng-ust 2/2] Silence compiler "always false comparison" warning Mathieu Desnoyers
2019-05-15 21:51 ` Mathieu Desnoyers [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1143277706.1564.1557957072293.JavaMail.zimbra@efficios.com \
    --to=mathieu.desnoyers@efficios.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox