Add support for bitreverse primop
[ghc.git] / libraries / ghc-prim / changelog.md
1 ## 0.6.1 (edit as necessary)
2
3 - Shipped with GHC 8.10.1
4
5 - Added to `GHC.Prim`:
6
7         closureSize# :: a -> Int#
8
9 - Added to `GHC.Prim`:
10         bitReverse# :: Word# -> Word#
11         bitReverse8# :: Word# -> Word#
12         bitReverse16# :: Word# -> Word#
13         bitReverse32# :: Word# -> Word#
14         bitReverse64# :: Word# -> Word#
15
16   `bitReverse#` is a primop that, for a `Word` of 8, 16, 32 or 64 bits,
17   reverses the order of its bits e.g. `0b110001` becomes `0b100011`.
18   These primitives use optimized machine instructions when available.
19
20 ## 0.6.0
21
22 - Shipped with GHC 8.8.1
23
24 - Added to `GHC.Prim`:
25
26         traceBinaryEvent# :: Addr# -> Int# -> State# s -> State# s
27
28 ## 0.5.3
29
30 - Shipped with GHC 8.6.1
31
32 - Added to `GHC.Prim`:
33
34         addWordC# :: Word# -> Word# -> (# Word#, Int# #)
35
36 - `unpackClosure#` can now unpack any valid Haskell closure.
37   Previously it returned empty pointer and non-pointer arrays
38   for thunks.
39
40 - Add unaligned bytearray access primops (#4442)
41
42          readWord8ArrayAsChar# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, Char# #)
43          readWord8ArrayAsAddr# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, Addr# #)
44          readWord8ArrayAsFloat# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, Float# #)
45          readWord8ArrayAsDouble# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, Double# #)
46          readWord8ArrayAsStablePtr# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, StablePtr# #)
47          readWord8ArrayAsInt16# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, Int16# #)
48          readWord8ArrayAsInt32# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, Int32# #)
49          readWord8ArrayAsInt64# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, Int64# #)
50          readWord8ArrayAsInt# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, Int# #)
51
52          readWord8ArrayAsWord16# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, Word16# #)
53          readWord8ArrayAsWord32# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, Word32# #)
54          readWord8ArrayAsWord64# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, Word64# #)
55          readWord8ArrayAsWord# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, Word# #)
56
57          writeWord8ArrayAsChar# :: MutableByteArray# s -> Int# -> Char# -> State# s -> State# s
58          writeWord8ArrayAsAddr# :: MutableByteArray# s -> Int# -> Addr# -> State# s -> State# s
59          writeWord8ArrayAsFloat# :: MutableByteArray# s -> Int# -> Float# -> State# s -> State# s
60          writeWord8ArrayAsDouble# :: MutableByteArray# s -> Int# -> Double# -> State# s -> State# s
61          writeWord8ArrayAsStablePtr# :: MutableByteArray# s -> Int# -> StablePtr# -> State# s -> State# s
62
63          writeWord8ArrayAsInt16# :: MutableByteArray# s -> Int# -> Int16# -> State# s -> State# s
64          writeWord8ArrayAsInt32# :: MutableByteArray# s -> Int# -> Int32# -> State# s -> State# s
65          writeWord8ArrayAsInt64# :: MutableByteArray# s -> Int# -> Int64# -> State# s -> State# s
66          writeWord8ArrayAsInt# :: MutableByteArray# s -> Int# -> Int# -> State# s -> State# s
67
68          writeWord8ArrayAsWord16# :: MutableByteArray# s -> Int# -> Word16# -> State# s -> State# s
69          writeWord8ArrayAsWord32# :: MutableByteArray# s -> Int# -> Word32# -> State# s -> State# s
70          writeWord8ArrayAsWord64# :: MutableByteArray# s -> Int# -> Word64# -> State# s -> State# s
71          writeWord8ArrayAsWord# :: MutableByteArray# s -> Int# -> Word# -> State# s -> State# s
72
73 ## 0.5.2.0
74
75 - Shipped with GHC 8.4.1
76
77 - Added to `GHC.Prim`:
78
79         compareByteArrays# :: ByteArray# -> Int# -> ByteArray# -> Int# -> Int# -> Int#
80
81 - Don't allocate a thunk for each unpacked UTF-8 character in `unpackCStringUtf8#`
82
83 ## 0.5.1.1 *November 2017*
84
85 - Shipped with GHC 8.2.2
86
87 - Changed strictness properties of `catchRetry#` (#14171)
88
89 ## 0.5.1.0 *July 2017*
90
91 - Shipped with GHC 8.2.1
92
93 - Added to `GHC.Prim`:
94
95         fabsDouble# :: Double# -> Double#
96         fabsFloat# :: Float# -> Float#
97         isByteArrayPinned# :: ByteArray# -> Int#
98         isMutableByteArrayPinned# :: MutableByteArray# s -> Int#
99         anyToAddr# :: a -> State# (RealWorld) -> (# State# (RealWorld),Addr# #)
100
101 - New primitives for compact regions in `GHC.Prim`:
102
103         Compact#
104         compactNew#
105         compactResize#
106         compactContains#
107         compactContainsAny#
108         compactGetFirstBlock#
109         compactGetNextBlock#
110         compactAllocateBlock#
111         compactFixupPointers#
112         compactAdd#
113         compactAddWithSharing#
114         compactSize#
115
116 - Generalised `noDuplicate#` from
117
118         noDuplicate# :: State# (RealWorld) -> State# (RealWorld)
119
120     to
121
122         noDuplicate# :: State# s -> State# s
123
124
125 ## 0.5.0.0
126
127 - Shipped with GHC 8.0.1
128
129 - `GHC.Classes`: new `class IP (a :: Symbol) b | a -> b`
130
131 - `GHC.Prim`: changed type signatures from
132
133         check# :: (State# RealWorld -> (# State# RealWorld, a #)) -> State# RealWorld -> (# State# RealWorld, () #)
134         finalizeWeak# :: Weak# a -> State# RealWorld -> (# State# RealWorld, Int#, State# RealWorld -> (# State# RealWorld, () #) #)
135         mkWeak# :: a -> b -> c -> State# RealWorld -> (# State# RealWorld, Weak# b #)
136
137     to
138
139         check# :: (State# RealWorld -> (# State# RealWorld, a #)) -> State# RealWorld -> State# RealWorld
140         finalizeWeak# :: Weak# a -> State# RealWorld -> (# State# RealWorld, Int#, State# RealWorld -> (# State# RealWorld, b #) #)
141         mkWeak# :: a -> b -> (State# RealWorld -> (# State# RealWorld, c #)) -> State# RealWorld -> (# State# RealWorld, Weak# b #)
142
143 - Removed from `GHC.Prim`:
144
145         parAt# :: b -> a -> Int# -> Int# -> Int# -> Int# -> c -> Int#
146         parAtAbs# :: a -> Int# -> Int# -> Int# -> Int# -> Int# -> b -> Int#
147         parAtForNow# :: b -> a -> Int# -> Int# -> Int# -> Int# -> c -> Int#
148         parAtRel# :: a -> Int# -> Int# -> Int# -> Int# -> Int# -> b -> Int#
149         parGlobal# :: a -> Int# -> Int# -> Int# -> Int# -> b -> Int#
150         parLocal# :: a -> Int# -> Int# -> Int# -> Int# -> b -> Int#
151
152 - Added to `GHC.Prim`:
153
154         getSizeofMutableByteArray# :: MutableByteArray# d -> State# d -> (# State# d, Int# #)
155         subWordC# :: Word# -> Word# -> (# Word#, Int# #)
156         runRW# :: (State# RealWorld -> (# State# RealWorld, o #)) -> (# State# RealWorld, o #)
157
158 - Added to `GHC.Types`:
159
160         data Module = Module TrName TrName
161         data Nat
162         data Symbol
163         data TrName = TrNameS Addr# | TrNameD [Char]
164         data TyCon = TyCon Word# Word# Module TrName