naked popcnt function

Marco Leise via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Nov 22 19:08:53 PST 2014


Am Sat, 22 Nov 2014 18:30:05 +0000
schrieb "Ad" <ad at fakmail.fg>:

> Hello, I would like to write a "popcnt" function. This works fine
> 
> ulong popcnt(ulong x)
> {
> asm { mov RAX, x ; popcnt RAX, RAX ; }
> }
> 
> However, if I add the "naked" keyword ( which should improve 
> performance? ) it doesn't work anymore and I can't figure out 
> what change I am supposed to make ( aside from x[RBP] instead of 
> x )
> This function is going to be *heavily* used.
> 
> Thanks for any help.

It is long ago that I tried "naked", but IIRC it strips all
compiler generated code from the function and I see no 'ret'
in your function. So it probably runs into whatever code lies
behind that function in the executable.
I would use a tool like obj2asm or objdump to check what the
generated code looks like, or use a debugger that can
disassemble on the fly.

-- 
Marco



More information about the Digitalmars-d-learn mailing list