packages feed

hw-simd 0.0.0.2 → 0.0.0.3

raw patch · 2 files changed

+85/−74 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

hw-simd.cabal view
@@ -1,11 +1,9 @@--- This file has been generated from package.yaml by hpack version 0.20.0.+-- This file has been generated from package.yaml by hpack version 0.18.1. -- -- see: https://github.com/sol/hpack------ hash: d4e6b647bff1de25a793f93a5adb597bbbc16d00285948adf0c1aa4f8e3c542f  name:           hw-simd-version:        0.0.0.2+version:        0.0.0.3 synopsis:       SIMD library description:    Please see the README on Github at <https://github.com/haskell-works/hw-simd#readme> category:       Text, Web, CSV@@ -53,15 +51,15 @@   c-sources:       cbits/simd.c   build-depends:-      base >=4.7 && <5-    , bits-extra >=0.0.1.2 && <0.1-    , bytestring >=0.10 && <0.11-    , deepseq >=1.4 && <1.5-    , hw-bits >=0.7.0.2 && <0.8-    , hw-prim >=0.6.2.0 && <0.7-    , hw-rankselect >=0.12.0.2 && <0.13-    , hw-rankselect-base >=0.3.2.0 && <0.4-    , vector >=0.12.0.1 && <0.13+      base                  >= 4.7      && < 5+    , bits-extra            >= 0.0.1.2  && < 0.1+    , bytestring            >= 0.10     && < 0.11+    , deepseq               >= 1.4      && < 1.5+    , hw-bits               >= 0.7.0.2  && < 0.8+    , hw-rankselect         >= 0.12.0.2 && < 0.13+    , hw-rankselect-base    >= 0.3.2.0  && < 0.4+    , hw-prim               >= 0.6.2.0  && < 0.7+    , vector                >= 0.12.0.1 && < 0.13   build-tools:       c2hs   if flag(sse42)@@ -80,8 +78,8 @@     ghc-options: -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints   if (!impl(ghc >=8.0.1))     build-depends:-        semigroups >=0.8.4 && <0.19-      , transformers >=0.4 && <0.6+        transformers          >= 0.4        && < 0.6+      , semigroups            >= 0.8.4      && < 0.19   exposed-modules:       HaskellWorks.Data.Simd.Capabilities       HaskellWorks.Data.Simd.Comparison@@ -103,21 +101,21 @@       test   ghc-options: -O2 -Wall -threaded -rtsopts -with-rtsopts=-N   build-depends:-      base >=4.7 && <5-    , bits-extra >=0.0.1.2 && <0.1-    , bytestring >=0.10 && <0.11-    , deepseq >=1.4 && <1.5-    , directory >=1.2.2 && <1.4-    , hedgehog >=0.5 && <0.7-    , hspec >=2.4 && <3-    , hw-bits >=0.7.0.2 && <0.8-    , hw-hspec-hedgehog >=0.1.0.4 && <0.2-    , hw-prim >=0.6.2.0 && <0.7-    , hw-rankselect >=0.12.0.2 && <0.13-    , hw-rankselect-base >=0.3.2.0 && <0.4+      base                  >= 4.7      && < 5+    , bits-extra            >= 0.0.1.2  && < 0.1+    , bytestring            >= 0.10     && < 0.11+    , deepseq               >= 1.4      && < 1.5+    , hw-bits               >= 0.7.0.2  && < 0.8+    , hw-rankselect         >= 0.12.0.2 && < 0.13+    , hw-rankselect-base    >= 0.3.2.0  && < 0.4+    , hw-prim               >= 0.6.2.0  && < 0.7+    , vector                >= 0.12.0.1 && < 0.13+    , directory               >= 1.2.2      && < 1.4     , hw-simd-    , text >=1.2.2 && <2.0-    , vector >=0.12.0.1 && <0.13+    , hedgehog                >= 0.5        && < 0.7+    , hspec                   >= 2.4        && < 3+    , hw-hspec-hedgehog       >= 0.1.0.4    && < 0.2+    , text                    >= 1.2.2      && < 2.0   if flag(sse42)     ghc-options: -msse4.2     cc-options: -msse4.2@@ -134,11 +132,10 @@     ghc-options: -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints   if (!impl(ghc >=8.0.1))     build-depends:-        semigroups >=0.8.4 && <0.19-      , transformers >=0.4 && <0.6+        transformers          >= 0.4        && < 0.6+      , semigroups            >= 0.8.4      && < 0.19   other-modules:       HaskellWorks.Data.Simd.BroadwordSpec-      Paths_hw_simd   default-language: Haskell2010  benchmark bench@@ -148,21 +145,21 @@       bench   ghc-options: -O2 -Wall -msse4.2   build-depends:-      base >=4.7 && <5-    , bits-extra >=0.0.1.2 && <0.1-    , bytestring >=0.10 && <0.11-    , cassava >=0.5.1.0 && <0.6+      base                  >= 4.7      && < 5+    , bits-extra            >= 0.0.1.2  && < 0.1+    , bytestring            >= 0.10     && < 0.11+    , deepseq               >= 1.4      && < 1.5+    , hw-bits               >= 0.7.0.2  && < 0.8+    , hw-rankselect         >= 0.12.0.2 && < 0.13+    , hw-rankselect-base    >= 0.3.2.0  && < 0.4+    , hw-prim               >= 0.6.2.0  && < 0.7+    , vector                >= 0.12.0.1 && < 0.13+    , cassava               >= 0.5.1.0    && < 0.6     , containers-    , criterion >=1.4.1.0 && <1.5-    , deepseq >=1.4 && <1.5-    , directory >=1.3.1.5 && <1.4-    , hw-bits >=0.7.0.2 && <0.8-    , hw-prim >=0.6.2.0 && <0.7-    , hw-rankselect >=0.12.0.2 && <0.13-    , hw-rankselect-base >=0.3.2.0 && <0.4+    , criterion             >= 1.4.1.0    && < 1.5+    , directory             >= 1.3.1.5    && < 1.4     , hw-simd-    , mmap >=0.5.9 && <0.6-    , vector >=0.12.0.1 && <0.13+    , mmap                  >= 0.5.9      && < 0.6   if flag(sse42)     ghc-options: -msse4.2     cc-options: -msse4.2@@ -179,8 +176,6 @@     ghc-options: -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints   if (!impl(ghc >=8.0.1))     build-depends:-        semigroups >=0.8.4 && <0.19-      , transformers >=0.4 && <0.6-  other-modules:-      Paths_hw_simd+        transformers          >= 0.4        && < 0.6+      , semigroups            >= 0.8.4      && < 0.19   default-language: Haskell2010
src/HaskellWorks/Data/Simd/Comparison/Stock.hs view
@@ -2,38 +2,54 @@   ( cmpeq8s   ) where -import Data.Monoid                          ((<>)) import Data.Word import HaskellWorks.Data.AtIndex import HaskellWorks.Data.Bits.BitWise import HaskellWorks.Data.Simd.Internal.Bits+import HaskellWorks.Data.Simd.Internal.Broadword  import qualified Data.Vector.Storable as DVS  cmpeq8s :: Word8 -> DVS.Vector Word64 -> DVS.Vector Word64-cmpeq8s w8 v = if disalignment == 0-  then DVS.constructN (DVS.length v) go-  else error $ "Unaligned byte string: " <> show disalignment <> ", vLen: " <> show vLen-  where vLen          = DVS.length v-        disalignment  = vLen - (vLen `div` 8) * 8-        w64           = fromIntegral w8 * 0x0101010101010101 :: Word64+cmpeq8s w8 v = DVS.constructN ((DVS.length v + 7) `div` 8) go+  where iw = fillWord64 w8         go :: DVS.Vector Word64 -> Word64-        go u = comp w-          where ui = fromIntegral $ DVS.length u-                w0 = testWord8s ((u !!! (ui + 0)) .^. w64)-                w1 = testWord8s ((u !!! (ui + 1)) .^. w64)-                w2 = testWord8s ((u !!! (ui + 2)) .^. w64)-                w3 = testWord8s ((u !!! (ui + 3)) .^. w64)-                w4 = testWord8s ((u !!! (ui + 4)) .^. w64)-                w5 = testWord8s ((u !!! (ui + 5)) .^. w64)-                w6 = testWord8s ((u !!! (ui + 6)) .^. w64)-                w7 = testWord8s ((u !!! (ui + 7)) .^. w64)-                w   = (w7 .<. 56) .|.-                      (w6 .<. 48) .|.-                      (w5 .<. 40) .|.-                      (w4 .<. 32) .|.-                      (w3 .<. 24) .|.-                      (w2 .<. 16) .|.-                      (w1 .<.  8) .|.-                       w0+        go u = let ui = end u in+          if ui * 8 + 8 < end v+            then  let vi  = ui * 8+                      w0  = testWord8s ((v !!! (vi + 0)) .^. iw)+                      w1  = testWord8s ((v !!! (vi + 1)) .^. iw)+                      w2  = testWord8s ((v !!! (vi + 2)) .^. iw)+                      w3  = testWord8s ((v !!! (vi + 3)) .^. iw)+                      w4  = testWord8s ((v !!! (vi + 4)) .^. iw)+                      w5  = testWord8s ((v !!! (vi + 5)) .^. iw)+                      w6  = testWord8s ((v !!! (vi + 6)) .^. iw)+                      w7  = testWord8s ((v !!! (vi + 7)) .^. iw)+                      w   = (w7 .<. 56) .|.+                            (w6 .<. 48) .|.+                            (w5 .<. 40) .|.+                            (w4 .<. 32) .|.+                            (w3 .<. 24) .|.+                            (w2 .<. 16) .|.+                            (w1 .<.  8) .|.+                              w0+                  in comp w+            else  let vi  = ui * 8+                      w0  = testWord8s (atIndexOr 0 v (vi + 0) .^. iw)+                      w1  = testWord8s (atIndexOr 0 v (vi + 1) .^. iw)+                      w2  = testWord8s (atIndexOr 0 v (vi + 2) .^. iw)+                      w3  = testWord8s (atIndexOr 0 v (vi + 3) .^. iw)+                      w4  = testWord8s (atIndexOr 0 v (vi + 4) .^. iw)+                      w5  = testWord8s (atIndexOr 0 v (vi + 5) .^. iw)+                      w6  = testWord8s (atIndexOr 0 v (vi + 6) .^. iw)+                      w7  = testWord8s (atIndexOr 0 v (vi + 7) .^. iw)+                      w   = (w7 .<. 56) .|.+                            (w6 .<. 48) .|.+                            (w5 .<. 40) .|.+                            (w4 .<. 32) .|.+                            (w3 .<. 24) .|.+                            (w2 .<. 16) .|.+                            (w1 .<.  8) .|.+                            w0+                  in comp w {-# INLINE cmpeq8s #-}