pvar-0.1.1.0: cbits/pvar.c
#include "Rts.h"
/**
* Rewrite of some Cmm in C. It is not in Cmm because `bdescr_flags` is not available
* until this commit:
* https://gitlab.haskell.org/ghc/ghc/commit/310371ff2d5b73cdcb2439b67170ca5e613541c0
*
* Cmm version can be found here:
* https://gitlab.haskell.org/ghc/ghc/blob/4e8a71c1138b587dfbab8a1823b3f7fa6f0166bd/rts/PrimOps.cmm#L157-174
*
* Its types in Haskell are:
* - `ByteArray# s -> Int#`
* - `MutableByteArray# s -> Int#`
*
*/
long pvar_is_byte_array_pinned(StgPtr ba)
{
bdescr *bd = Bdescr(ba);
// All of BF_PINNED, BF_LARGE and BF_COMPACT are considered immovable. Although
// BF_COMPACT is only available in ghc-8.2, so we don't care about it.
return ((bd->flags & (BF_PINNED | BF_LARGE)) != 0);
}