Messages in this thread | ![/](/images/icornerl.gif) | | From | David Laight <> | Subject | RE: [PATCH v4 2/5] m68k/bitops: use __builtin_{clz,ctzl,ffs} to evaluate constant expressions | Date | Sun, 28 Jan 2024 12:16:41 +0000 |
| |
From: Vincent MAILHOL > Sent: 28 January 2024 06:27 > > On Sun. 28 Jan. 2024 at 14:39, Finn Thain <fthain@linux-m68k.org> wrote: > > On Sun, 28 Jan 2024, Vincent Mailhol wrote: > > > > > The compiler is not able to do constant folding on "asm volatile" code. > > > > > > Evaluate whether or not the function argument is a constant expression > > > and if this is the case, return an equivalent builtin expression. > > > ... > > If the builtin has the desired behaviour, why do we reimplement it in asm? > > Shouldn't we abandon one or the other to avoid having to prove (and > > maintain) their equivalence? > > The asm is meant to produce better results when the argument is not a > constant expression. Below commit is a good illustration of why we > want both the asm and the built: > > https://git.kernel.org/torvalds/c/146034fed6ee > > I say "is meant", because I did not assert whether this is still true. > Note that there are some cases in which the asm is not better anymore, > for example, see this thread: > > https://lore.kernel.org/lkml/20221106095106.849154-2-mailhol.vincent@wanadoo.fr/ > > but I did not receive more answers, so I stopped trying to investigate > the subject. > > If you want, you can check the produced assembly of both the asm and > the builtin for both clang and gcc, and if the builtin is always > either better or equivalent, then the asm can be removed. That said, I > am not spending more effort there after being ghosted once (c.f. above > thread).
I don't see any example there of why the __builtin_xxx() versions shouldn't be used all the time. (The x86-64 asm blocks contain unrelated call instructions and objdump wasn't passed -d to show what they were. One even has the 'return thunk pessimisation showing.)
I actually suspect the asm versions predate the builtins.
Does (or can) the outer common header use the __builtin functions if no asm version exists?
David
- Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)
| ![\](/images/icornerr.gif) |