packages feed

inline-asm 0.5.0.0 → 0.5.0.1

raw patch · 3 files changed

+68/−27 lines, 3 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Language.Asm.Inline: instance Language.Asm.Inline.AsmArg (GHC.Ptr.Ptr a) 'GHC.Types.AddrRep GHC.Prim.Addr#
- Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Int.Int16 'GHC.Types.IntRep GHC.Prim.Int#
- Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Int.Int32 'GHC.Types.IntRep GHC.Prim.Int#
- Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Int.Int64 'GHC.Types.IntRep GHC.Prim.Int#
- Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Int.Int8 'GHC.Types.IntRep GHC.Prim.Int#
- Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Types.Double 'GHC.Types.DoubleRep GHC.Prim.Double#
- Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Types.Float 'GHC.Types.FloatRep GHC.Prim.Float#
- Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Types.Int 'GHC.Types.IntRep GHC.Prim.Int#
- Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Types.Word 'GHC.Types.WordRep GHC.Prim.Word#
- Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Word.Word16 'GHC.Types.WordRep GHC.Prim.Word#
- Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Word.Word32 'GHC.Types.WordRep GHC.Prim.Word#
- Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Word.Word64 'GHC.Types.WordRep GHC.Prim.Word#
- Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Word.Word8 'GHC.Types.WordRep GHC.Prim.Word#
- Language.Asm.Inline: instance Language.Asm.Inline.AsmArg Language.Asm.Inline.Unit 'GHC.Types.IntRep GHC.Prim.Int#
+ Language.Asm.Inline: instance Language.Asm.Inline.AsmArg (GHC.Ptr.Ptr a) GHC.Prim.Addr#
+ Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Int.Int16 Language.Asm.Inline.Int16Rep#
+ Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Int.Int32 Language.Asm.Inline.Int32Rep#
+ Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Int.Int64 GHC.Prim.Int#
+ Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Int.Int8 Language.Asm.Inline.Int8Rep#
+ Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Types.Double GHC.Prim.Double#
+ Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Types.Float GHC.Prim.Float#
+ Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Types.Int GHC.Prim.Int#
+ Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Types.Word GHC.Prim.Word#
+ Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Word.Word16 Language.Asm.Inline.Word16Rep#
+ Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Word.Word32 Language.Asm.Inline.Word32Rep#
+ Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Word.Word64 GHC.Prim.Word#
+ Language.Asm.Inline: instance Language.Asm.Inline.AsmArg GHC.Word.Word8 Language.Asm.Inline.Word8Rep#
+ Language.Asm.Inline: instance Language.Asm.Inline.AsmArg Language.Asm.Inline.Unit GHC.Prim.Int#

Files

ChangeLog.md view
@@ -1,5 +1,9 @@ # Changelog for inline-asm +## v0.5.0.1++* GHC 9.2 compatibility.+ ## v0.5.0.0  * Add `defineAsmFunM` for impure assembly functions (think `rdtsc`) that shall live in a `PrimMonad`.
inline-asm.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: c88df95b319282f818dabe35ff5bf3c7d2c92cfefebc2957b6e522e25338e44d+-- hash: 0ba4305bbb1fd0e42473bdc9159b5a24f4b74229ff868ae87110529fdf4590b6  name:           inline-asm-version:        0.5.0.0+version:        0.5.0.1 synopsis:       Inline some Assembly in ur Haskell! description:    Please see the README on GitHub at <https://github.com/0xd34df00d/inline-asm#readme> category:       FFI
src/Language/Asm/Inline.hs view
@@ -30,73 +30,89 @@ import Language.Asm.Inline.AsmCode import Language.Asm.Inline.Util -class AsmArg a (rep :: RuntimeRep) (unboxedTy :: TYPE rep) | a -> rep, a -> unboxedTy where+class AsmArg a (unboxedTy :: TYPE rep) | a -> unboxedTy where   unbox :: a -> unboxedTy   rebox :: unboxedTy -> a  data Unit = Unit -instance AsmArg Unit 'IntRep Int# where+#if MIN_VERSION_GLASGOW_HASKELL(9,2,0,0)+type Int8Rep# = Int8#+type Int16Rep# = Int16#+type Int32Rep# = Int32#+type Word8Rep# = Word8#+type Word16Rep# = Word16#+type Word32Rep# = Word32#+#else+type Int8Rep# = Int#+type Int16Rep# = Int#+type Int32Rep# = Int#+type Word8Rep# = Word#+type Word16Rep# = Word#+type Word32Rep# = Word#+#endif++instance AsmArg Unit Int# where   unbox _ = 0#   rebox _ = Unit -instance AsmArg Int 'IntRep Int# where+instance AsmArg Int Int# where   unbox (I# w) = w   rebox = I# -instance AsmArg Int8 'IntRep Int# where+instance AsmArg Int8 Int8Rep# where   unbox (I8# w) = w   rebox = I8# -instance AsmArg Int16 'IntRep Int# where+instance AsmArg Int16 Int16Rep# where   unbox (I16# w) = w   rebox = I16# -instance AsmArg Int32 'IntRep Int# where+instance AsmArg Int32 Int32Rep# where   unbox (I32# w) = w   rebox = I32#  #if WORD_SIZE_IN_BITS > 32-instance AsmArg Int64 'IntRep Int# where+instance AsmArg Int64 Int# where #else-instance AsmArg Int64 'Int64Rep Int64# where+instance AsmArg Int64 Int64# where #endif   unbox (I64# w) = w   rebox = I64# -instance AsmArg Word 'WordRep Word# where+instance AsmArg Word Word# where   unbox (W# w) = w   rebox = W# -instance AsmArg Word8 'WordRep Word# where+instance AsmArg Word8 Word8Rep# where   unbox (W8# w) = w   rebox = W8# -instance AsmArg Word16 'WordRep Word# where+instance AsmArg Word16 Word16Rep# where   unbox (W16# w) = w   rebox = W16# -instance AsmArg Word32 'WordRep Word# where+instance AsmArg Word32 Word32Rep# where   unbox (W32# w) = w   rebox = W32#  #if WORD_SIZE_IN_BITS > 32-instance AsmArg Word64 'WordRep Word# where+instance AsmArg Word64 Word# where #else-instance AsmArg Word64 'Word64Rep Word64# where+instance AsmArg Word64 Word64# where #endif   unbox (W64# w) = w   rebox = W64# -instance AsmArg Double 'DoubleRep Double# where+instance AsmArg Double Double# where   unbox (D# d) = d   rebox = D# -instance AsmArg Float 'FloatRep Float# where+instance AsmArg Float Float# where   unbox (F# f) = f   rebox = F# -instance AsmArg (Ptr a) 'AddrRep Addr# where+instance AsmArg (Ptr a) Addr# where   unbox (Ptr p) = p   rebox = Ptr @@ -139,13 +155,21 @@ defineAsmFunM :: AsmCode tyAnn code => String -> tyAnn -> code -> Q [Dec] defineAsmFunM = defineAsmFunImpl Monadic +#if MIN_VERSION_template_haskell(2, 18, 0)+mkPlainTV :: Name -> TyVarBndr Specificity+mkPlainTV n = PlainTV n SpecifiedSpec+#else+mkPlainTV :: Name -> TyVarBndr+mkPlainTV = PlainTV+#endif+ -- |Converts the wrapped function type to live in a 'PrimMonad': -- given 'Ty1 -> Ty2 -> Ret' it produces -- 'forall m. PrimMonad m => Ty1 -> Ty2 -> m Ret'. stateifyLifted :: Type -> Q Type stateifyLifted ty = do   m <- newName "m"-  ForallT [PlainTV m] [AppT (ConT ''PrimMonad) (VarT m)] <$> go m ty+  ForallT [mkPlainTV m] [AppT (ConT ''PrimMonad) (VarT m)] <$> go m ty   where     go m (AppT (AppT ArrowT lhs) rhs) = AppT (AppT ArrowT lhs) <$> go m rhs     go m rhs = [t| $(pure $ VarT m) $(pure rhs) |]@@ -156,7 +180,7 @@ stateifyUnlifted :: Type -> Q Type stateifyUnlifted ty = do   s <- newName "s"-  ForallT [PlainTV s] [] <$> go s ty+  ForallT [mkPlainTV s] [] <$> go s ty   where     go s (AppT (AppT ArrowT lhs) rhs) = AppT (AppT ArrowT lhs) <$> go s rhs     go s rhs = [t| State# $(pure $ VarT s) -> (# State# $(pure $ VarT s), $(pure rhs) #) |]@@ -210,12 +234,25 @@            . transformBi unliftPtrs            . transformBi unliftBS   where-    unliftBaseTy x | x `elem` [ ''Word, ''Word8, ''Word16, ''Word32, ''Word64 ] = ''Word#-                   | x `elem` [ ''Int, ''Int8, ''Int16, ''Int32, ''Int64 ] = ''Int#-                   | x == ''Double = ''Double#-                   | x == ''Float = ''Float#-                   | x == ''Unit = ''Int#-                   | otherwise = x+    unliftBaseTy x+#if MIN_VERSION_GLASGOW_HASKELL(9,2,0,0)+      | x == ''Word || x == ''Word64 = ''Word#+      | x == ''Word8 = ''Word8#+      | x == ''Word16 = ''Word16#+      | x == ''Word32 = ''Word32#++      | x == ''Int || x == ''Int64 = ''Int#+      | x == ''Int8 = ''Int8#+      | x == ''Int16 = ''Int16#+      | x == ''Int32 = ''Int32#+#else+      | x `elem` [ ''Word, ''Word8, ''Word16, ''Word32, ''Word64 ] = ''Word#+      | x `elem` [ ''Int, ''Int8, ''Int16, ''Int32, ''Int64 ] = ''Int#+#endif+      | x == ''Double = ''Double#+      | x == ''Float = ''Float#+      | x == ''Unit = ''Int#+      | otherwise = x      unliftPtrs (AppT (ConT name) _) | name == ''Ptr = ConT ''Addr#     unliftPtrs x = x