{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_HADDOCK hide #-}
module Data.Array.Accelerate.LLVM.CodeGen.Intrinsic (
Intrinsic(..)
) where
import LLVM.AST.Type.Name
import Data.Monoid
import Data.ByteString.Short ( ShortByteString )
import Data.HashMap.Strict ( HashMap )
import qualified Data.HashMap.Strict as HashMap
import Prelude as P
class Intrinsic arch where
intrinsicForTarget :: arch -> HashMap ShortByteString Label
intrinsicForTarget _ = llvmIntrinsic
llvmIntrinsic :: HashMap ShortByteString Label
llvmIntrinsic =
let floating base rest
= (base, Label ("llvm." <> base <> ".f64"))
: (base <> "f", Label ("llvm." <> base <> ".f32"))
: (base <> "l", Label ("llvm." <> base <> ".f128"))
: rest
in
HashMap.fromList $ foldr floating []
[ "sqrt"
, "powi"
, "sin"
, "cos"
, "pow"
, "exp"
, "exp2"
, "log"
, "log10"
, "log2"
, "fma"
, "fabs"
, "copysign"
, "floor"
, "ceil"
, "trunc"
, "rint"
, "nearbyint"
, "round"
]