[Haskell-beginners] let x = x in x (GHC.Prim)

Sylvain Henry sylvain at haskus.fr
Wed Mar 23 01:10:21 UTC 2016


Hi,

You can also test your primop with a foreign primop.

See here for an example of assembly code (calling cpuid):
https://github.com/hsyl20/ViperVM/blob/master/src/lib/ViperVM/Arch/X86_64/cpuid.c

And here for the Haskell part with the foreign primop that calls the 
assembly code:
https://github.com/hsyl20/ViperVM/blob/master/src/lib/ViperVM/Arch/X86_64/Cpuid.hs#L56

Cheers,
Sylvain

On 23/03/2016 02:07, rahulmutt at gmail.com wrote:
> Hi John,
>
> ghc-prim is just a stub package generated for the purpose of 
> documentation. All primops are defined in a low level language called 
> Cmm in GHC. If you want to make it even faster, you'll need to learn 
> Cmm and update the definition in GHC. If you want to a specialized 
> implementation for x86 systems, you may need to modify the NCG (Native 
> Code Generator) which requires a knowledge of assembly language.
>
> Hope that helps!
> Rahul Muttineni
>
> Sent from my BlackBerry 10 smartphone.
> *From: *John Ky
> *Sent: *Wednesday 23 March 2016 4:40 AM
> *To: *The Haskell-Beginners Mailing List - Discussion of primarily 
> beginner-level topics related to Haskell
> *Reply To: *The Haskell-Beginners Mailing List - Discussion of 
> primarily beginner-level topics related to Haskell
> *Subject: *[Haskell-beginners] let x = x in x (GHC.Prim)
>
>
> Hello Haskellers,
>
> I'm trying to write a faster popCount function for x86 systems.
>
> I tried cloning the ghc-prim package and repurposing it for my own 
> needs, but it isn't working as hoped.
>
> In particular, popCnt64# was implemented in GHC.Prim as:
>
> popCnt64# = let x = x in x
>
> Which shouldn't terminate.  Yet when I call it, it magically finds the 
> C implementation in hs_popcnt64 and returns the correct value.
>
> My cloned project doesn't behave that way.  Instead it doesn't 
> terminate as I would expect.
>
> Anyone know what's happening here, if there is a way to make this work 
> or tell me if I'm going about this completely the wrong way?
>
> Cheers,
>
> -John
>
>
>
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20160323/da52b572/attachment.html>


More information about the Beginners mailing list