packages feed

clash-prelude-0.11: benchmarks/BenchSigned.hs

{-# LANGUAGE CPP, DataKinds, MagicHash, TypeOperators, TemplateHaskell #-}

{-# OPTIONS_GHC -ddump-simpl -ddump-splices -ddump-to-file #-}

#define WORD_SIZE_IN_BITS 64

module BenchSigned where

import CLaSH.Sized.BitVector
import CLaSH.Sized.Internal.Signed
import Criterion                   (Benchmark, env, bench, nf)
import Language.Haskell.TH.Syntax  (lift)

smallValueI_pos :: Integer
smallValueI_pos = $(lift (2^(16::Int)-10 :: Integer))
{-# INLINE smallValueI_pos #-}

smallValue_pos1 :: Signed WORD_SIZE_IN_BITS
smallValue_pos1 = $(lift (2^(16::Int)-100 :: Signed WORD_SIZE_IN_BITS))
{-# INLINE smallValue_pos1 #-}

smallValue_pos2 :: Signed WORD_SIZE_IN_BITS
smallValue_pos2 = $(lift (2^(16::Int)-100 :: Signed WORD_SIZE_IN_BITS))
{-# INLINE smallValue_pos2 #-}

smallValueBV :: BitVector WORD_SIZE_IN_BITS
smallValueBV = $(lift (2^(16::Int)-10 :: BitVector WORD_SIZE_IN_BITS))
{-# INLINE smallValueBV #-}

addBench :: Benchmark
addBench = env setup $ \m ->
  bench "+# WORD_SIZE_IN_BITS" $ nf (uncurry (+#)) m
  where
    setup = return (smallValue_pos1,smallValue_pos2)

negateBench :: Benchmark
negateBench = env setup $ \m ->
  bench "negate# WORD_SIZE_IN_BITS" $ nf negate# m
  where
    setup = return smallValue_pos1

absBench :: Benchmark
absBench = env setup $ \m ->
  bench "abs# WORD_SIZE_IN_BITS" $ nf abs# m
  where
    setup = return smallValue_pos1

subBench :: Benchmark
subBench = env setup $ \m ->
  bench "-# WORD_SIZE_IN_BITS" $ nf (uncurry (-#)) m
  where
    setup = return (smallValue_pos1,smallValue_pos2)

multBench :: Benchmark
multBench = env setup $ \m ->
  bench "*# WORD_SIZE_IN_BITS" $ nf (uncurry (*#)) m
  where
    setup = return (smallValue_pos1,smallValue_pos2)

plusBench :: Benchmark
plusBench = env setup $ \m ->
  bench "plus# WORD_SIZE_IN_BITS" $ nf (uncurry (plus#)) m
  where
    setup = return (smallValue_pos1,smallValue_pos2)

minusBench :: Benchmark
minusBench = env setup $ \m ->
  bench "minus# WORD_SIZE_IN_BITS" $ nf (uncurry (minus#)) m
  where
    setup = return (smallValue_pos1,smallValue_pos2)

timesBench :: Benchmark
timesBench = env setup $ \m ->
  bench "times# WORD_SIZE_IN_BITS" $ nf (uncurry (times#)) m
  where
    setup = return (smallValue_pos1,smallValue_pos2)

fromIntegerBench :: Benchmark
fromIntegerBench = env setup $ \m ->
  bench "fromInteger# WORD_SIZE_IN_BITS" $ nf (fromInteger# :: Integer -> Signed WORD_SIZE_IN_BITS) m
  where
    setup = return smallValueI_pos

packBench :: Benchmark
packBench = env setup $ \m ->
  bench "pack# WORD_SIZE_IN_BITS" $ nf pack# m
  where
    setup = return smallValue_pos1

unpackBench :: Benchmark
unpackBench = env setup $ \m ->
  bench "unpack# WORD_SIZE_IN_BITS" $ nf unpack# m
  where
    setup = return smallValueBV