Hi Travis,

- Do we have a type like #Addr whose loads/stores have volatile semantics?

Nope

- Do we have any primops with volatile semantics at all?

We have atomicReadIntArray#, atomicWriteIntArray# prim ops, the
read/write on MutableByteArray# will introduce proper memory barriers.
However there's no Addr# equivalent yet.

- Are there any tricks one could use to get volatile semantics out of
base’s peek/poke functions?

It's always possible to write cbits for volatile load/store. To avoid
the overhead of unsafe foreign ccalls, the proper thing to do would be
to add primops, and lower them to MO_AtomicRead/MO_AtomicWrite at the
Cmm level.

Cheers,
Cheng

On Fri, Sep 9, 2022 at 7:14 PM Travis Whitaker <pi.boy.tra...@gmail.com> wrote:
>
> Hello Haskell Friends,
>
> Recently I noticed some strange behavior in a program that uses peek/poke to 
> manipulate memory mapped hardware registers, that smells a lot like missing 
> volatile semantics to me. It hadn’t occurred to me that peek/poke might not 
> have volatile semantics (they return an IO, and that IO has to happen, 
> right?), but naturally once they’re lowered all such bets are off. This made 
> me wonder:
>
> - Do we have a type like #Addr whose loads/stores have volatile semantics?
>
> - Do we have any primops with volatile semantics at all?
>
> - Are there any tricks one could use to get volatile semantics out of base’s 
> peek/poke functions?
>
> Poking around, I’m afraid the answer to all three of these is “no.” If so, 
> I’d be very interested in contributing volatile load/store primops and 
> working out some way to make them easily available from Foreign.Storable. 
> Does no such thing currently exist or am I missing something?
>
> Thanks for all your ongoing efforts,
>
> Travis
> _______________________________________________
> ghc-devs mailing list
> ghc-devs@haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to