Rename isPinnedByteArray# to isByteArrayPinned#
authorBen Gamari <bgamari.foss@gmail.com>
Fri, 3 Jun 2016 20:22:42 +0000 (22:22 +0200)
committerBen Gamari <ben@smart-cactus.org>
Sat, 4 Jun 2016 07:35:49 +0000 (09:35 +0200)
Reviewers: simonmar, duncan, erikd, austin

Reviewed By: austin

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D2290

GHC Trac Issues: #12059

compiler/prelude/primops.txt.pp
docs/users_guide/8.2.1-notes.rst
includes/stg/MiscClosures.h
rts/PrimOps.cmm
rts/RtsSymbols.c
testsuite/tests/codeGen/should_run/T12059.hs
testsuite/tests/codeGen/should_run/T12059.stdout

index 53bc8a4..bfeb785 100644 (file)
@@ -1077,9 +1077,15 @@ primop  NewAlignedPinnedByteArrayOp_Char "newAlignedPinnedByteArray#" GenPrimOp
    with out_of_line = True
         has_side_effects = True
 
    with out_of_line = True
         has_side_effects = True
 
-primop  ByteArrayIsPinnedOp "isPinnedByteArray#" GenPrimOp
+primop  MutableByteArrayIsPinnedOp "isMutableByteArrayPinned#" GenPrimOp
    MutableByteArray# s -> Int#
    MutableByteArray# s -> Int#
-   {Determine whether a {\tt MutableByteArray\#} is guaranteed not to move.}
+   {Determine whether a {\tt MutableByteArray\#} is guaranteed not to move
+   during GC.}
+   with out_of_line = True
+
+primop  ByteArrayIsPinnedOp "isByteArrayPinned#" GenPrimOp
+   ByteArray# -> Int#
+   {Determine whether a {\tt ByteArray\#} is guaranteed not to move during GC.}
    with out_of_line = True
 
 primop  ByteArrayContents_Char "byteArrayContents#" GenPrimOp
    with out_of_line = True
 
 primop  ByteArrayContents_Char "byteArrayContents#" GenPrimOp
index 60f17cf..b671f6d 100644 (file)
@@ -131,7 +131,7 @@ ghc-prim
 
 -  Version number XXXXX (was 0.3.1.0)
 
 
 -  Version number XXXXX (was 0.3.1.0)
 
--  Added new ``isPinnedbyteArray#`` operation.
+-  Added new ``isByteArrayPinned#`` and ``isMutableByteArrayPinned#`` operation.
 
 haskell98
 ~~~~~~~~~
 
 haskell98
 ~~~~~~~~~
index 337f586..731893e 100644 (file)
@@ -347,7 +347,8 @@ RTS_FUN_DECL(stg_casArrayzh);
 RTS_FUN_DECL(stg_newByteArrayzh);
 RTS_FUN_DECL(stg_newPinnedByteArrayzh);
 RTS_FUN_DECL(stg_newAlignedPinnedByteArrayzh);
 RTS_FUN_DECL(stg_newByteArrayzh);
 RTS_FUN_DECL(stg_newPinnedByteArrayzh);
 RTS_FUN_DECL(stg_newAlignedPinnedByteArrayzh);
-RTS_FUN_DECL(stg_isPinnedByteArrayzh);
+RTS_FUN_DECL(stg_isByteArrayPinnedzh);
+RTS_FUN_DECL(stg_isMutableByteArrayPinnedzh);
 RTS_FUN_DECL(stg_shrinkMutableByteArrayzh);
 RTS_FUN_DECL(stg_resizzeMutableByteArrayzh);
 RTS_FUN_DECL(stg_casIntArrayzh);
 RTS_FUN_DECL(stg_shrinkMutableByteArrayzh);
 RTS_FUN_DECL(stg_resizzeMutableByteArrayzh);
 RTS_FUN_DECL(stg_casIntArrayzh);
index a8e2a1b..160bccd 100644 (file)
@@ -141,17 +141,23 @@ stg_newAlignedPinnedByteArrayzh ( W_ n, W_ alignment )
     return (p);
 }
 
     return (p);
 }
 
-stg_isPinnedByteArrayzh ( gcptr mba )
-// MutableByteArray# s -> Int#
+stg_isByteArrayPinnedzh ( gcptr ba )
+// ByteArray# s -> Int#
 {
     W_ bd, flags;
 {
     W_ bd, flags;
-    bd = Bdescr(mba);
+    bd = Bdescr(ba);
     // pinned byte arrays live in blocks with the BF_PINNED flag set.
     // See the comment in Storage.c:allocatePinned.
     flags = TO_W_(bdescr_flags(bd));
     return (flags & BF_PINNED != 0);
 }
 
     // pinned byte arrays live in blocks with the BF_PINNED flag set.
     // See the comment in Storage.c:allocatePinned.
     flags = TO_W_(bdescr_flags(bd));
     return (flags & BF_PINNED != 0);
 }
 
+stg_isMutableByteArrayPinnedzh ( gcptr mba )
+// MutableByteArray# s -> Int#
+{
+    jump stg_isByteArrayPinnedzh(mba);
+}
+
 // shrink size of MutableByteArray in-place
 stg_shrinkMutableByteArrayzh ( gcptr mba, W_ new_size )
 // MutableByteArray# s -> Int# -> State# s -> State# s
 // shrink size of MutableByteArray in-place
 stg_shrinkMutableByteArrayzh ( gcptr mba, W_ new_size )
 // MutableByteArray# s -> Int# -> State# s -> State# s
index f420c01..e66b4d8 100644 (file)
       SymI_HasProto(stg_casMutVarzh)                                    \
       SymI_HasProto(stg_newPinnedByteArrayzh)                           \
       SymI_HasProto(stg_newAlignedPinnedByteArrayzh)                    \
       SymI_HasProto(stg_casMutVarzh)                                    \
       SymI_HasProto(stg_newPinnedByteArrayzh)                           \
       SymI_HasProto(stg_newAlignedPinnedByteArrayzh)                    \
-      SymI_HasProto(stg_isPinnedByteArrayzh)                            \
+      SymI_HasProto(stg_isByteArrayPinnedzh)                            \
+      SymI_HasProto(stg_isMutableByteArrayPinnedzh)                     \
       SymI_HasProto(stg_shrinkMutableByteArrayzh)                       \
       SymI_HasProto(stg_resizzeMutableByteArrayzh)                      \
       SymI_HasProto(newSpark)                                           \
       SymI_HasProto(stg_shrinkMutableByteArrayzh)                       \
       SymI_HasProto(stg_resizzeMutableByteArrayzh)                      \
       SymI_HasProto(newSpark)                                           \
index 0b99bd3..3d815fc 100644 (file)
@@ -8,20 +8,41 @@ import GHC.IO
 
 main :: IO ()
 main = do
 
 main :: IO ()
 main = do
+    -- Unpinned MutableByteArray
     r <- IO $ \s0 ->
       case newByteArray# 1024# s0 of
         (# s1, mba #) ->
     r <- IO $ \s0 ->
       case newByteArray# 1024# s0 of
         (# s1, mba #) ->
-            (# s1, isTrue# (isPinnedByteArray# mba) #)
+           (# s1, isTrue# (isMutableByteArrayPinned# mba) #)
     print r
 
     print r
 
+    -- Pinned MutableByteArray
     r <- IO $ \s0 ->
       case newPinnedByteArray# 1024# s0 of
         (# s1, mba #) ->
     r <- IO $ \s0 ->
       case newPinnedByteArray# 1024# s0 of
         (# s1, mba #) ->
-            (# s1, isTrue# (isPinnedByteArray# mba) #)
+           (# s1, isTrue# (isMutableByteArrayPinned# mba) #)
     print r
 
     print r
 
+    -- Pinned, Aligned MutableByteArray
     r <- IO $ \s0 ->
       case newAlignedPinnedByteArray# 1024# 16# s0 of
         (# s1, mba #) ->
     r <- IO $ \s0 ->
       case newAlignedPinnedByteArray# 1024# 16# s0 of
         (# s1, mba #) ->
-            (# s1, isTrue# (isPinnedByteArray# mba) #)
+           (# s1, isTrue# (isMutableByteArrayPinned# mba) #)
+    print r
+
+    -- Unpinned ByteArray
+    r <- IO $ \s0 ->
+      case newByteArray# 1024# s0 of
+        (# s1, mba #) ->
+          case unsafeFreezeByteArray# mba s1 of
+             (# s2, ba #) ->
+                (# s2, isTrue# (isByteArrayPinned# ba) #)
+    print r
+
+    -- Pinned ByteArray
+    r <- IO $ \s0 ->
+      case newPinnedByteArray# 1024# s0 of
+        (# s1, mba #) ->
+          case unsafeFreezeByteArray# mba s1 of
+             (# s2, ba #) ->
+                (# s2, isTrue# (isByteArrayPinned# ba) #)
     print r
     print r
index 70cea9e..8a39f7a 100644 (file)
@@ -1,3 +1,5 @@
 False
 True
 True
 False
 True
 True
+False
+True
\ No newline at end of file