> On 12 May 2020, at 14:37, Andreas Schultz <andreas.schu...@travelping.com> > wrote: > > > Am Di., 12. Mai 2020 um 13:53 Uhr schrieb Damjan Marion <dmar...@me.com > <mailto:dmar...@me.com>>: > > > > On 12 May 2020, at 11:41, Andreas Schultz <andreas.schu...@travelping.com > > <mailto:andreas.schu...@travelping.com>> wrote: > > > > Hi, > > > > There are few places in VPP (most notable when trying to convert a netmask > > into a length) that can pass 0 (zero) into min_log2 and expect to get a > > meaningful result. > > > > Obviously log2(0) is undefined. It turns out that this also applies to the > > return of min_log2. Under the hood the function uses __builtin_clzl, and > > the return of that function is also undefined for input 0. > > > > __builtin_clzl could be replaced with __builtin_ia32_lzcnt_u64 on > > supported CPUs to avoid the undefined behaviour. That would still not fix > > the problem that passing 0 into a log function is broken by design. > > Compiler uses LZCNT for __builtin_clzl when target -march supports it. Today > we use -march=corei7 as baseline and that one doesn’t know about LZCNT, so > BSR is emitted instead, which indeed have undefined behaviour. In other words > replacing __builtin_clzl with __builtin_ia32_lzcnt_u64 will not work, but > simply changing baseline -march= to something newer will address that > transparently... > > Even using -march doesn't change the fact that __builtin_clzl is documented > to have undefined behavior for zero inputs. Relying on undocumented side > effects is IMHO not a good idea. Not to mention that clang and gcc might > behave differently.
I was not questioning your statement about undefined behaviour. I was just saying that your proposal about swapping __builtin_clzl with __builtin_ia32_lzcnt_u64 will not work...
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#16337): https://lists.fd.io/g/vpp-dev/message/16337 Mute This Topic: https://lists.fd.io/mt/74155196/21656 Group Owner: vpp-dev+ow...@lists.fd.io Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-