-- -- Copyright (c) 2009-2010, ERICSSON AB All rights reserved. -- -- Redistribution and use in source and binary forms, with or without -- modification, are permitted provided that the following conditions are met: -- -- * Redistributions of source code must retain the above copyright notice, -- this list of conditions and the following disclaimer. -- * Redistributions in binary form must reproduce the above copyright -- notice, this list of conditions and the following disclaimer in the -- documentation and/or other materials provided with the distribution. -- * Neither the name of the ERICSSON AB nor the names of its contributors -- may be used to endorse or promote products derived from this software -- without specific prior written permission. -- -- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS -- BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, -- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -- THE POSSIBILITY OF SUCH DAMAGE. -- module Feldspar.Compiler.Options where import Feldspar.Compiler.Imperative.Representation import Feldspar.Compiler.Imperative.Semantics(IsRestrict, PrettyPrintSemanticInfo) data Options = Options { platform :: Platform , unroll :: UnrollStrategy , debug :: DebugOption , defaultArraySize :: Int } deriving (Eq, Show) data UnrollStrategy = NoUnroll | Unroll Int deriving (Eq, Show) data DebugOption = NoDebug | NoSimplification | NoPrimitiveInstructionHandling deriving (Eq, Show) data Platform = Platform { name :: String, types :: [(Type, String, String)], values :: [(Type, ShowValue)], primitives :: [(FeldPrimDesc, Either CPrimDesc TransformPrim)], includes :: [String], isRestrict :: IsRestrict } deriving (Eq, Show) data FeldPrimDesc = FeldPrimDesc { fName :: String, inputs :: [TypeDesc] } deriving (Eq, Show) data CPrimDesc = Op1 { cOp :: String } | Op2 { cOp :: String } | Fun { cName :: String, funPf :: FunPostfixDescr } | Proc { cName :: String, funPf :: FunPostfixDescr } | Assig | InvalidDesc deriving (Eq, Show) data TypeDesc = AllT | BoolT | FloatT | IntT | IntTS | IntTU | IntTS_ Size | IntTU_ Size | IntT_ Size | UserT String deriving (Eq, Show) data FunPostfixDescr = FunPostfixDescr { useInputs :: Int, useOutputs :: Int } deriving (Eq, Show) noneFP = FunPostfixDescr 0 0 firstInFP = FunPostfixDescr 1 0 firstOutFP = FunPostfixDescr 0 1 type ShowValue = (ConstantData PrettyPrintSemanticInfo -> String) instance Eq ShowValue where (==) _ _ = True instance Show ShowValue where show _ = "<>" type TransformPrim = FeldPrimDesc -> [Expression ()] -> [LeftValue ()] -> [(CPrimDesc, [Expression ()], [LeftValue ()])] instance Eq TransformPrim where (==) _ _ = True instance Show TransformPrim where show _ = "<>" machTypes :: TypeDesc -> Type -> Bool machTypes AllT _ = True machTypes BoolT BoolType = True machTypes FloatT FloatType = True machTypes IntT (Numeric _ _) = True machTypes IntTS (Numeric ImpSigned _) = True machTypes IntTU (Numeric ImpUnsigned _) = True machTypes (IntTS_ s) (Numeric ImpSigned s') = s == s' machTypes (IntTU_ s) (Numeric ImpUnsigned s') = s == s' machTypes (IntT_ s) (Numeric _ s') = s == s' machTypes (UserT s) (UserType s') = s == s' machTypes _ _ = False