public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: Bart Van Assche <bvanassche@acm.org>
Cc: Ingo Molnar <mingo@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Christoph Hellwig <hch@lst.de>,
	"Martin K . Petersen" <martin.petersen@oracle.com>,
	linux-kernel@vger.kernel.org, linux-scsi@vger.kernel.org,
	Jonathan Cameron <jic23@kernel.org>,
	Hartmut Knaack <knaack.h@gmx.de>,
	Lars-Peter Clausen <lars@metafoo.de>,
	Peter Meerwald-Stadler <pmeerw@pmeerw.net>
Subject: Re: [PATCH 4/9] drivers/iio: Sign extend without triggering implementation-defined behavior
Date: Wed, 30 Oct 2019 21:02:32 +0100	[thread overview]
Message-ID: <20191030200232.GC3079@worktop.programming.kicks-ass.net> (raw)
In-Reply-To: <20191028200700.213753-5-bvanassche@acm.org>

On Mon, Oct 28, 2019 at 01:06:55PM -0700, Bart Van Assche wrote:
> From the C standard: "The result of E1 >> E2 is E1 right-shifted E2 bit
> positions. If E1 has an unsigned type or if E1 has a signed type and a
> nonnegative value, the value of the result is the integral part of the
> quotient of E1 / 2E2 . If E1 has a signed type and a negative value, the
> resulting value is implementation-defined."

FWIW, we actually hard rely on this implementation defined behaviour all
over the kernel. See for example the generic sign_extend{32,64}()
functions.

AFAIR the only reason the C standard says this is implementation defined
is because it wants to support daft things like 1s complement and
saturating integers.

Luckily, Linux doesn't run on any such hardware and we hard rely on
signed being 2s complement and tell the compiler that by using
-fno-strict-overflow (which implies -fwrapv).

And the only sane choice for 2s complement signed shift right is
arithmetic shift right.

(this recently came up in another thread, which I can't remember enough
of to find just now, and I'm not sure we got a GCC person to confirm if
-fwrapv does indeed guarantee arithmetic shift, the GCC documentation
does not mention this)

  parent reply	other threads:[~2019-10-30 20:03 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-28 20:06 [PATCH 0/9] Consolidate {get,put}_unaligned_[bl]e24() definitions Bart Van Assche
2019-10-28 20:06 ` [PATCH 1/9] linux/unaligned/byteshift.h: Remove superfluous casts Bart Van Assche
2019-10-28 20:06 ` [PATCH 2/9] c6x: Include <linux/unaligned/generic.h> instead of duplicating it Bart Van Assche
2019-11-07  3:09   ` Bart Van Assche
2019-11-07 13:54   ` Mark Salter
2019-10-28 20:06 ` [PATCH 3/9] treewide: Consolidate {get,put}_unaligned_[bl]e24() definitions Bart Van Assche
2019-10-28 20:06 ` [PATCH 4/9] drivers/iio: Sign extend without triggering implementation-defined behavior Bart Van Assche
2019-10-30 19:43   ` Jonathan Cameron
2019-10-30 20:02   ` Peter Zijlstra [this message]
2019-10-30 22:13     ` Douglas Gilbert
2019-10-31 17:55       ` Bart Van Assche
2019-10-28 20:06 ` [PATCH 5/9] scsi/st: Use get_unaligned_signed_be24() Bart Van Assche
2019-10-28 20:06 ` [PATCH 6/9] scsi/trace: Use get_unaligned_be*() Bart Van Assche
2019-10-28 20:06 ` [PATCH 7/9] arm/ecard: Use get_unaligned_le{16,24}() Bart Van Assche
2019-10-28 20:06 ` [PATCH 8/9] IB/qib: Sign extend without triggering implementation-defined behavior Bart Van Assche
2019-10-28 20:07 ` [PATCH 9/9] ASoC/fsl_spdif: Use put_unaligned_be24() instead of open-coding it Bart Van Assche
2019-10-28 20:24   ` Mark Brown
2019-10-28 20:49     ` Bart Van Assche
2019-10-28 21:52 ` [PATCH 0/9] Consolidate {get,put}_unaligned_[bl]e24() definitions Peter Zijlstra
2019-10-28 22:02   ` Bart Van Assche
2019-10-29  1:10 ` Douglas Gilbert

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=20191030200232.GC3079@worktop.programming.kicks-ass.net \
    --to=peterz@infradead.org \
    --cc=bvanassche@acm.org \
    --cc=hch@lst.de \
    --cc=jic23@kernel.org \
    --cc=knaack.h@gmx.de \
    --cc=lars@metafoo.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=mingo@kernel.org \
    --cc=pmeerw@pmeerw.net \
    --cc=tglx@linutronix.de \
    /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