https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100758

Martin Liška <marxin at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|---                         |WONTFIX

--- Comment #6 from Martin Liška <marxin at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #5)
> (In reply to Erich Eckner from comment #2)
> > We use this in archlinux32 to detect, if we can install packages, that have
> > sse2 opcodes:
> > 
> > If one sets "Architecture = auto" in /etc/pacman.conf, uname only gives
> > "i686" in both cases (this is how archlinux does/did the probing), and then,
> > we probe for sse2 to check, if we really are "i686" or "pentium4" (our
> > nomenclature for "i686" + sse2). This works well on amd and intel cpus, but
> > fails on via cpus.
> > 
> > Details about expected features: https://archlinux32.org/architecture/
> > 
> > We can add some cumbersome code which probes for sse2, but I'd really prefer
> > some compiler builtin instead :-)
> 
> Eh, including cpuid.h and using that to check for SSE2 shouldn't be too hard
> (or parsing /proc/cpuinfo).

Yeah, the following should work for you:

#include <cpuid.h>

int main()
{
  unsigned int eax, ebx, ecx, edx;
  __get_cpuid(0, &eax, &ebx, &ecx, &edx);

  if (edx & bit_SSE2)
    __builtin_printf ("has SSE2\n");
}

Reply via email to