popcnt usage
Iain Buclaw
ibuclaw at gdcproject.org
Mon Dec 23 15:46:11 PST 2013
On 23 December 2013 16:47, Todd VanderVeen <tdvanderveen at gmail.com> wrote:
> First, let me say thanks for the addition of the popcnt inline assembler
> opcode. I had placed a project on hold until it was available. I look
> forward to using D again.
>
> I determined this instruction was available after some experimentation as
> its not documented on the inline assembler page.
>
> uint popcnt (ulong bits) {
> asm {
> mov RAX, bits ;
> popcnt RAX, RAX ;
> }
> }
>
> Mention is made in the documentation of SSE4.2 support but I understand
> popcnt and lzcnt aren't really considered part of this instruction set as
> they aren't register based. If I were to submit a pull request to address
> the documentation, how would you prefer this is represented, simply as
> additions to the opcode table or annotated that they were implemented
> alongside SSE4.2? Both?
>
> A second concern is whether it is possible to determine the availability of
> this instruction at compile time. I want to do something like the following
> in a custom popcnt method:
>
> version(X86_64) {
> static if (hasPopcnt()) {
> asm {
> ... performant assembly version
> }
> } else {
> ... slower procedural version
> }
> }
>
There's no way to do this at compile time, other than assume that
D_InlineAsm_X86_64 imples popcnt, or do a runtime check to determine
the correct path to take.
More information about the Digitalmars-d
mailing list