Package: gcc-6 Version: 6.1.1-6 Severity: normal Hi! According to the documentation: (gcc-6.info.gz)PowerPC Built-in Functions __builtin_cpu_supports() can be used for detection of a number of CPU features, such as altivec. This is same as that function on x86, other than understandably a different list of features. The documentation lists no caveats or other hoops that one needs to jump through to get the function to work.
Thus, per analogy to x86, I expect the following code to work: .--====[ altivec.c ] int main() { __builtin_cpu_init(); // no-op on powerpc anyway return !__builtin_cpu_supports("altivec"); } `---- yet it always returns false. I've tested both in qemu: QEMU_CPU=7457_v1.2 ./altivec;echo $? # should succeed QEMU_CPU=401 ./altivec2;echo $? # should fail and on real hardware (partch.debian.org) whose /proc/cpuinfo says: cpu : POWER7 (architected), altivec supported On the other hand, detection via a "boom instruction" works: .--====[ altivec2.c ] int main() { asm("vsldoi %v1,%v1,%v1,0"); // or SIGILL return 0; } `---- Any other feature supposed to be supported by __builtin_cpu_supports() that I tested also fails, including "mmu" or "ppc32" which should be true on every powerpc machine that can run Linux. -- System Information: Debian Release: stretch/sid APT prefers unstable APT policy: (500, 'unstable') Architecture: powerpc (ppc) Kernel: Linux 4.6.0+ (SMP w/6 CPU cores) Locale: LANG=C.UTF-8, LC_CTYPE=C.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: sysvinit (via /sbin/init) Versions of packages gcc-6 depends on: ii binutils 2.26-10 ii cpp-6 6.1.1-6 ii gcc-6-base 6.1.1-6 ii libatomic1 6.1.1-6 ii libc6 2.22-11 ii libcc1-0 6.1.1-6 ii libgcc-6-dev 6.1.1-6 ii libgcc1 1:6.1.1-6 ii libgmp10 2:6.1.0+dfsg-2 ii libisl15 0.17.1-1 ii libmpc3 1.0.3-1 ii libmpfr4 3.1.4-2 ii libstdc++6 6.1.1-6 ii zlib1g 1:1.2.8.dfsg-2+b1 Versions of packages gcc-6 recommends: ii libc6-dev 2.22-11 Versions of packages gcc-6 suggests: pn gcc-6-doc <none> pn gcc-6-locales <none> pn gcc-6-multilib <none> pn libasan3-dbg <none> pn libatomic1-dbg <none> pn libcilkrts5-dbg <none> pn libgcc1-dbg <none> pn libgomp1-dbg <none> pn libitm1-dbg <none> pn liblsan0-dbg <none> pn libmpx2-dbg <none> pn libquadmath0-dbg <none> pn libtsan0-dbg <none> pn libubsan0-dbg <none> -- no debconf information