Bug 278722 - graphics/bgfx: build error on i386 with CPUTYPE=nehalem and newer
Summary: graphics/bgfx: build error on i386 with CPUTYPE=nehalem and newer
Status: New
Alias: None
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s) (show other bugs)
Version: Latest
Hardware: i386 Any
: --- Affects Some People
Assignee: Yuri Victorovich
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2024-05-03 17:38 UTC by Vladimir Druzenko
Modified: 2024-05-03 17:38 UTC (History)
0 users

See Also:
bugzilla: maintainer-feedback? (yuri)


Attachments
Fix build error on i386 with CPUTYPE=nehalem and newer (481 bytes, patch)
2024-05-03 17:38 UTC, Vladimir Druzenko
vvd: maintainer-approval?
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Vladimir Druzenko freebsd_committer freebsd_triage 2024-05-03 17:38:31 UTC
Created attachment 250356 [details]
Fix build error on i386 with CPUTYPE=nehalem and newer

Tested on 13.2 i386 with CPUTYPE=nehalem and newer:

/wrkdirs/usr/ports/graphics/bgfx/work/bgfx.cmake-1.127.8725-465/bimg/3rdparty/astc-encoder/source/astcenc_vecmathlib_sse_4.h:1313:26: error: use of undeclared identifier '_mm_popcnt_u64'; did you mean '_mm_popcnt_u32'?
        return static_cast<int>(_mm_popcnt_u64(v));
                                ^~~~~~~~~~~~~~
                                _mm_popcnt_u32
/usr/lib/clang/14.0.5/include/popcntintrin.h:33:1: note: '_mm_popcnt_u32' declared here
_mm_popcnt_u32(unsigned int __A)
^
1 error generated.
===============================
This patch work for me:

--- bimg/3rdparty/astc-encoder/source/astcenc_vecmathlib_sse_4.h.orig
+++ bimg/3rdparty/astc-encoder/source/astcenc_vecmathlib_sse_4.h
@@ -1309,5 +1309,7 @@ ASTCENC_SIMD_INLINE int popcount(uint64_t v)
 {
 #if defined(__MINGW32__)
        return static_cast<int>(__builtin_popcountll(v));
+#elif defined(__FreeBSD__) && !defined(__x86_64__)
+       return static_cast<int>(_mm_popcnt_u32(static_cast<uint32_t>(v)));
 #else
        return static_cast<int>(_mm_popcnt_u64(v));
 #endif // defined(__MINGW32__)
===============================
Reported upstream: https://github.com/bkaradzic/bgfx/pull/2929#issuecomment-2093377116