On 25 April 2016 at 18:48, Lass Safin via Digitalmars-d <digitalmars-d@puremagic.com> wrote: > On Saturday, 23 April 2016 at 21:04:52 UTC, Nordlöw wrote: >> >> On Saturday, 23 April 2016 at 20:42:25 UTC, Lass Safin wrote: >>> >>> CPUID: https://en.wikipedia.org/wiki/CPUID. >>> You can check for the presence of a lot of instructions with this >>> instruction. >>> However this will only work on x86 and only run-time. >> >> >> Code you give a complete code example in D, please or point out a suitable >> place in druntime/phobos? > > > I just found this: https://dlang.org/phobos/core_cpuid.html#.hasPopcnt! It > does exactly as it says: checks if the system has popcnt. > Though read the top of https://dlang.org/phobos/core_cpuid.html before you > use it: >> >> Bugs: >> Currently only works on x86 and Itanium CPUs. Many processors have bugs in >> their >> microcode for the CPUID instruction, so sometimes the cache information >> may be >> incorrect. > > > Example; > > import core.bitop; > import core.cpuid; > > int count; > if(hasPopcnt) > count = _popcnt; // Uses x86-instruction "popcnt". > else > count = popcnt; // Phobos's software implementation. >
version(X86) { if (hasPopcnt) ... } else { // API not guaranteed to be the same. }