content: {-# LANGUAGE DeriveDataTypeable    #-}
  {-# LANGUAGE FlexibleInstances     #-}
  {-# LANGUAGE GADTs                 #-}
  {-# LANGUAGE MultiParamTypeClasses #-}
  {-# OPTIONS_HADDOCK hide #-}
  -- |
  -- Module      : LLVM.AST.Type.InlineAssembly
  -- Copyright   : [2015..2020] The Accelerate Team
  -- License     : BSD3
  --
  -- Maintainer  : Trevor L. McDonell <trevor.mcdonell@gmail.com>
  -- Stability   : experimental
  -- Portability : non-portable (GHC extensions)
  --
  
  module LLVM.AST.Type.InlineAssembly (
  
    module LLVM.AST.Type.InlineAssembly,
    Dialect(..),
  
  ) where
  
  -- import LLVM.AST.Type.Downcast
  
  -- import qualified LLVM.AST.Type                                      as LLVM
  -- import qualified LLVM.AST.InlineAssembly                            as LLVM
  
  import Data.ByteString
  import Data.ByteString.Short
  import Data.Data
  
  
  -- | the dialect of assembly used in an inline assembly string
  -- <http://en.wikipedia.org/wiki/X86_assembly_language#Syntax>
  --
  -- Copied from llvm-hs-pure.
  data Dialect
    = ATTDialect
    | IntelDialect
    deriving (Eq, Read, Show, Typeable, Data)
  
  -- | The 'call' instruction might be a label or inline assembly
  --
  data InlineAssembly where
    InlineAssembly :: ByteString            -- assembly
                   -> ShortByteString       -- constraints
                   -> Bool                  -- has side effects?
                   -> Bool                  -- align stack?
                   -> Dialect
                   -> InlineAssembly
  
  -- instance Downcast (LLVM.Type, InlineAssembly) LLVM.InlineAssembly where
  --   downcast (t, InlineAssembly asm cst s a d) =
  --     LLVM.InlineAssembly t asm cst s a d
  
  