Bug 89199

Summary: u_math.h:591:4: error: implicit declaration of function 'ffsll'
Product: Mesa Reporter: Vinson Lee <vlee>
Component: Mesa coreAssignee: mesa-dev
Status: RESOLVED FIXED QA Contact: mesa-dev
Severity: blocker    
Priority: medium CC: brianp, glenn.kennard, maraeo
Version: gitKeywords: bisected, regression
Hardware: x86-64 (AMD64)   
OS: NetBSD   
Whiteboard:
i915 platform: i915 features:
Attachments: proposed patch

Description Vinson Lee 2015-02-18 06:18:16 UTC
mesa: 599cbe5508ccb246fe06b64116c84ce976165fed (master 10.6.0-devel)

NetBSD build error

  CC       state_tracker/st_atom_array.lo
In file included from state_tracker/st_atom_array.c:46:0:
../../src/gallium/auxiliary/util/u_math.h: In function 'u_bit_scan64':
../../src/gallium/auxiliary/util/u_math.h:591:4: error: implicit declaration of function 'ffsll'
gmake[4]: *** [state_tracker/st_atom_array.lo] Error 1
Comment 1 Vinson Lee 2015-02-19 01:20:00 UTC
Introduced in 10.5.0-devel by this commit.

50433ea526942dbeac75cc415becadea157e5d33 is the first bad commit
commit 50433ea526942dbeac75cc415becadea157e5d33
Author: Marek Olšák <marek.olsak@amd.com>
Date:   Sat Jan 31 17:15:16 2015 +0100

    gallium/util: add u_bit_scan64
    
    Same as u_bit_scan, but for uint64_t.
    
    Reviewed-by: Glenn Kennard <glenn.kennard@gmail.com>
    Reviewed-by: Brian Paul <brianp@vmware.com>

:040000 040000 4eb1909ac455e690d7de4dbea87cb21b8678ed4b a1d1419d9af472fc2b366764bf8b2a772d11849d M      src
bisect run success
Comment 2 Brian Paul 2015-02-19 16:31:25 UTC
Hi Vinson,
Is that with gcc?  Which compiler version?

I'll attach a patch proposal for you to try...
Comment 3 Brian Paul 2015-02-19 16:33:14 UTC
Created attachment 113670 [details] [review]
proposed patch

If you're using gcc, maybe a gcc version check would be better.
This patch also assumes the radeonsi driver isn't used on NetBSD (the only user of u_bit_scan64() at this time.)
Comment 4 Vinson Lee 2015-02-19 23:56:56 UTC
$ gcc --version
gcc (NetBSD nb2 20110806) 4.5.3
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


attachment 113670 [details] [review] fixes the NetBSD build.

Tested-by: Vinson Lee <vlee@freedesktop.org>
Comment 5 Timothy Arceri 2019-05-06 06:50:50 UTC
We now have:

#ifdef HAVE___BUILTIN_FFSLL
#define ffsll __builtin_ffsll
#elif defined(_MSC_VER) && (_M_AMD64 || _M_ARM || _M_IA64)
static inline int
ffsll(long long int i)
{
   unsigned long index;
   if (_BitScanForward64(&index, i))
      return index + 1;
   else
      return 0;
}
#else
extern int
ffsll(long long int val);
#endif

So I'm assuming this was fixed long ago and closing.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.