From: Segher Boessenkool <segher@kernel.crashing.org>
To: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: linux-kernel@vger.kernel.org, npiggin@gmail.com,
Paul Mackerras <paulus@samba.org>,
linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH] powerpc/bug: Remove specific powerpc BUG_ON()
Date: Thu, 11 Feb 2021 05:49:10 -0600 [thread overview]
Message-ID: <20210211114910.GA28121@gate.crashing.org> (raw)
In-Reply-To: <694c7195c81d1bcc781b3c14f452886683d6c524.1613029237.git.christophe.leroy@csgroup.eu>
On Thu, Feb 11, 2021 at 07:41:52AM +0000, Christophe Leroy wrote:
> powerpc BUG_ON() is based on using twnei or tdnei instruction,
> which obliges gcc to format the condition into a 0 or 1 value
> in a register.
Huh? Why is that?
Will it work better if this used __builtin_trap? Or does the kernel only
detect very specific forms of trap instructions?
> By using a generic implementation, gcc will generate a branch
> to the unconditional trap generated by BUG().
That is many more instructions than ideal.
> As modern powerpc implement branch folding, that's even more efficient.
What PowerPC cpus implement branch folding? I know none.
Some example code generated via __builtin_trap:
void trap(void) { __builtin_trap(); }
void trap_if_0(int x) { if (x == 0) __builtin_trap(); }
void trap_if_not_0(int x) { if (x != 0) __builtin_trap(); }
-m64:
trap:
trap
trap_if_0:
tdeqi 3,0
blr
trap_if_not_0:
tdnei 3,0
blr
-m32:
trap:
trap
trap_if_0:
tweqi 3,0
blr
trap_if_not_0:
twnei 3,0
blr
Segher
WARNING: multiple messages have this Message-ID (diff)
From: Segher Boessenkool <segher@kernel.crashing.org>
To: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Paul Mackerras <paulus@samba.org>,
Michael Ellerman <mpe@ellerman.id.au>,
npiggin@gmail.com, linuxppc-dev@lists.ozlabs.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] powerpc/bug: Remove specific powerpc BUG_ON()
Date: Thu, 11 Feb 2021 05:49:10 -0600 [thread overview]
Message-ID: <20210211114910.GA28121@gate.crashing.org> (raw)
In-Reply-To: <694c7195c81d1bcc781b3c14f452886683d6c524.1613029237.git.christophe.leroy@csgroup.eu>
On Thu, Feb 11, 2021 at 07:41:52AM +0000, Christophe Leroy wrote:
> powerpc BUG_ON() is based on using twnei or tdnei instruction,
> which obliges gcc to format the condition into a 0 or 1 value
> in a register.
Huh? Why is that?
Will it work better if this used __builtin_trap? Or does the kernel only
detect very specific forms of trap instructions?
> By using a generic implementation, gcc will generate a branch
> to the unconditional trap generated by BUG().
That is many more instructions than ideal.
> As modern powerpc implement branch folding, that's even more efficient.
What PowerPC cpus implement branch folding? I know none.
Some example code generated via __builtin_trap:
void trap(void) { __builtin_trap(); }
void trap_if_0(int x) { if (x == 0) __builtin_trap(); }
void trap_if_not_0(int x) { if (x != 0) __builtin_trap(); }
-m64:
trap:
trap
trap_if_0:
tdeqi 3,0
blr
trap_if_not_0:
tdnei 3,0
blr
-m32:
trap:
trap
trap_if_0:
tweqi 3,0
blr
trap_if_not_0:
twnei 3,0
blr
Segher
next prev parent reply other threads:[~2021-02-11 11:57 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-11 7:41 [PATCH] powerpc/bug: Remove specific powerpc BUG_ON() Christophe Leroy
2021-02-11 7:41 ` Christophe Leroy
2021-02-11 10:04 ` Nicholas Piggin
2021-02-11 10:04 ` Nicholas Piggin
2021-02-11 11:50 ` Segher Boessenkool
2021-02-11 11:50 ` Segher Boessenkool
2021-02-11 22:47 ` Nicholas Piggin
2021-02-11 22:47 ` Nicholas Piggin
2021-02-11 12:22 ` Segher Boessenkool
2021-02-11 12:22 ` Segher Boessenkool
2021-02-11 11:49 ` Segher Boessenkool [this message]
2021-02-11 11:49 ` Segher Boessenkool
2021-02-11 12:26 ` Christophe Leroy
2021-02-11 12:26 ` Christophe Leroy
2021-02-11 12:39 ` Segher Boessenkool
2021-02-11 12:39 ` Segher Boessenkool
2021-02-11 14:09 ` Christophe Leroy
2021-02-11 14:09 ` Christophe Leroy
2021-02-11 14:30 ` Segher Boessenkool
2021-02-11 14:30 ` Segher Boessenkool
2021-02-11 15:30 ` Christophe Leroy
2021-02-11 15:30 ` Christophe Leroy
2021-02-27 10:31 ` Christophe Leroy
2021-02-27 10:31 ` Christophe Leroy
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=20210211114910.GA28121@gate.crashing.org \
--to=segher@kernel.crashing.org \
--cc=christophe.leroy@csgroup.eu \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=npiggin@gmail.com \
--cc=paulus@samba.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.