module Llvm.Data.Shared.AtomicEntity where import qualified Data.Map as M import Data.Word(Word32) -- | Double Quoted String data DqString = DqString String deriving (Eq, Ord, Show) data IcmpOp = IcmpEq | IcmpNe | IcmpUgt | IcmpUge | IcmpUlt | IcmpUle | IcmpSgt | IcmpSge | IcmpSlt | IcmpSle deriving (Eq,Ord,Show) icmpOpMap :: M.Map IcmpOp String icmpOpMap = M.fromList [(IcmpEq, "eq"), (IcmpNe, "ne") ,(IcmpUgt, "ugt"),(IcmpUge, "uge") ,(IcmpUlt, "ult"),(IcmpUle, "ule") ,(IcmpSgt, "sgt"), (IcmpSge, "sge") ,(IcmpSlt, "slt"),(IcmpSle, "sle") ] data FcmpOp = FcmpTrue | FcmpFalse | FcmpOeq | FcmpOgt | FcmpOge | FcmpOlt | FcmpOle | FcmpOne | FcmpOrd | FcmpUeq | FcmpUgt | FcmpUge | FcmpUlt | FcmpUle | FcmpUne | FcmpUno deriving (Eq,Ord,Show) fcmpOpMap :: M.Map FcmpOp String fcmpOpMap = M.fromList [(FcmpTrue, "true"), (FcmpFalse, "false") ,(FcmpOeq, "oeq"), (FcmpOgt, "ogt"), (FcmpOge, "oge") ,(FcmpOlt, "olt"), (FcmpOle, "ole"), (FcmpOne, "one"), (FcmpOrd, "ord") ,(FcmpUeq, "ueq"), (FcmpUgt, "ugt"), (FcmpUge, "uge") ,(FcmpUlt, "ult"), (FcmpUle, "ule"), (FcmpUne, "une"), (FcmpUno, "uno") ] -- | Linkage Types data Linkage = LinkagePrivate | LinkageInternal | LinkageAvailableExternally | LinkageLinkonce | LinkageCommon | LinkageWeak | LinkageAppending | LinkageExternWeak | LinkageLinkonceOdr | LinkageWeakOdr | LinkageExternal deriving (Eq,Ord,Show) -- | Calling Conventions data CallConv = Ccc | CcFast | CcCold | CcGhc | CcHiPe | Cc String | CcWebkit_Js | CcAnyReg | CcPreserveMost | CcPreserveAll | CcFirstTarget | CcX86_StdCall | CcX86_FastCall | CcArm_Apcs | CcArm_Aapcs | CcArm_Aapcs_Vfp | CcMsp430_Intr | CcX86_ThisCall | CcPtx_Kernel | CcPtx_Device | CcSpir_Func | CcSpir_Kernel | CcIntel_Ocl_Bi | CcX86_64_SysV | CcX86_64_Win64 | CcX86_VectorCall deriving (Eq,Ord,Show) -- | Visibility Styles data Visibility = VisDefault | VisHidden | VisProtected deriving (Eq,Ord,Show) -- | DLL Storage Classes data DllStorageClass = DscImport | DscExport deriving (Eq, Ord, Show) -- | Thread Local Storage Models data ThreadLocalStorage = TlsLocalDynamic | TlsInitialExec | TlsLocalExec | TlsNone deriving (Eq, Ord, Show) -- | Parameter Attributes data ParamAttr = PaZeroExt | PaSignExt | PaInReg | PaByVal | PaInAlloca | PaSRet | PaNoAlias | PaNoCapture | PaNest | PaReturned | PaNonNull | PaDereferenceable Word32 -- Integer | PaReadOnly | PaReadNone | PaAlign Word32 -- Integer deriving (Eq,Ord,Show) -- | Function Attributes data FunAttr = FaAlignStack Word32 -- Integer | FaAlwaysInline | FaBuiltin | FaCold | FaInlineHint | FaJumpTable | FaMinSize | FaNaked | FaNoBuiltin | FaNoDuplicate | FaNoImplicitFloat | FaNoInline | FaNonLazyBind | FaNoRedZone | FaNoReturn | FaNoUnwind | FaOptNone | FaOptSize | FaReadNone | FaReadOnly | FaReturnsTwice | FaSanitizeAddress | FaSanitizeMemory | FaSanitizeThread | FaSsp | FaSspReq | FaSspStrong | FaUwTable | FaPair DqString (Maybe DqString) | FaAlign Word32 -- Integer | FaGroup Word32 -- Integer deriving (Eq,Ord,Show) data SelectionKind = Any | ExactMatch | Largest | NoDuplicates | SameSize deriving (Eq, Ord, Show) selectionKindMap :: M.Map SelectionKind String selectionKindMap = M.fromList [(Any, "any"), (ExactMatch, "exactmatch"), (Largest, "largest"), (NoDuplicates, "noduplicates"), (SameSize, "samesize")] data Section = Section DqString deriving (Eq,Ord,Show) data Alignment = Alignment Word32 deriving (Eq,Ord,Show) type MaybeAlignment = Maybe Alignment data Gc = Gc DqString deriving (Eq,Ord,Show) data GlobalType = GlobalType String deriving (Eq,Ord,Show) data AddrNaming = UnnamedAddr | NamedAddr deriving (Eq, Ord, Show) data GlobalOrLocalId = GolG GlobalId | GolL LocalId deriving (Eq,Ord,Show) data LocalId = LocalIdNum Word32 -- Integer | LocalIdAlphaNum String | LocalIdDqString String deriving (Eq,Ord,Show) data DollarId = DollarIdNum Word32 | DollarIdAlphaNum String | DollarIdDqString String deriving (Eq, Ord, Show) data Comdat = Comdat (Maybe DollarId) deriving (Eq, Ord, Show) data GlobalId = GlobalIdNum Word32 | GlobalIdAlphaNum String | GlobalIdDqString String deriving (Eq,Ord,Show) -- | Atomic Memory Ordering Constraints data AtomicMemoryOrdering = AmoAcquire | AmoRelease | AmoAcqRel | AmoSeqCst | AmoUnordered | AmoMonotonic deriving (Eq,Ord,Show) atomicMemoryOrderingMap :: M.Map AtomicMemoryOrdering String atomicMemoryOrderingMap = M.fromList [(AmoAcquire, "acquire"), (AmoRelease, "release") ,(AmoAcqRel, "acq_rel"), (AmoSeqCst, "seq_cst") ,(AmoUnordered, "unordered"), (AmoMonotonic, "monotonic") ] -- | atomicrmw operation data AtomicOp = AoXchg | AoAdd | AoSub | AoAnd | AoNand | AoOr | AoXor | AoMax | AoMin | AoUmax | AoUmin deriving (Eq,Ord,Show) atomicOpMap :: M.Map AtomicOp String atomicOpMap = M.fromList [(AoXchg, "xchg"), (AoAdd, "add"), (AoSub, "sub") ,(AoAnd, "and"), (AoNand, "nand") ,(AoOr, "or"), (AoXor, "xor") ,(AoMax, "max"), (AoMin, "min"), (AoUmax, "umax"), (AoUmin, "umin")] {- syntatical representation: c"...." -} {-- data Cstring = Cstring String deriving (Eq,Ord,Show) -} data Atomicity = Atomicity (IsOrIsNot SingleThread) AtomicMemoryOrdering deriving (Eq, Ord, Show) data Nontemporal = Nontemporal Word32 deriving (Eq, Ord, Show) type MaybeNontemporal = Maybe Nontemporal data InvariantLoad = InvariantLoad Word32 deriving (Eq, Ord, Show) data Nonnull = Nonnull Word32 deriving (Eq, Ord, Show) data Volatile = Volatile deriving (Eq, Ord, Show) data SingleThread = SingleThread deriving (Eq, Ord, Show) data InAllocaAttr = InAllocaAttr deriving (Eq, Ord, Show) data TailCall = TcNon | TcTailCall | TcMustTailCall deriving (Eq, Ord, Show) data Weak = Weak deriving (Eq, Ord, Show) data IsOrIsNot a = Is a | IsNot a deriving (Eq, Ord, Show) data InBounds = InBounds deriving (Eq, Ord, Show) {- short hand notations -} isInBounds :: IsOrIsNot InBounds isInBounds = Is InBounds isNotInBounds :: IsOrIsNot InBounds isNotInBounds = IsNot InBounds data FastMathFlag = Fmfnnan | Fmfninf | Fmfnsz | Fmfarcp | Fmffast deriving (Eq, Ord, Show) fastMathFlagMap :: M.Map FastMathFlag String fastMathFlagMap = M.fromList [(Fmfnnan, "nnan"), (Fmfninf, "ninf"), (Fmfnsz, "nsz"), (Fmfarcp, "arcp"), (Fmffast, "fast")] data FastMathFlags = FastMathFlags [FastMathFlag] deriving (Eq, Ord, Show) data ExternallyInitialized = ExternallyInitialized deriving (Eq, Ord, Show) data AsmDialect = AsmDialectAtt | AsmDialectIntel deriving (Eq, Ord, Show) data SideEffect = SideEffect deriving (Eq, Ord, Show) data AlignStack = AlignStack deriving (Eq, Ord, Show) data Cleanup = Cleanup deriving (Eq, Ord, Show) data Arch = Arch_i386 | Arch_i686 | Arch_x86 | Arch_x86_64 | Arch_PowerPc | Arch_PowerPc64 | Arch_Arm String | Arch_ThumbV7 | Arch_Itanium | Arch_Mips String | Arch_String String deriving (Eq, Ord, Show) data Vendor = Vendor_Pc | Vendor_Apple | Vendor_Unknown | Vendor_String String deriving (Eq, Ord, Show) data Os = Os_Linux | Os_Windows | Os_Win32 | Os_FreeBsd String | Os_Darwin String | Os_Macosx String | Os_Ios String | Os_Mingw32 | Os_Unknown | Os_String String deriving (Eq, Ord, Show) data OsEnv = OsEnv_Gnu | OsEnv_String String deriving (Eq, Ord, Show) data TargetTriple = TargetTriple Arch (Maybe Vendor) (Maybe Os) (Maybe OsEnv) deriving (Eq, Ord, Show) data Fparam = FimplicitParam | FexplicitParam LocalId deriving (Eq,Ord,Show) data Packing = Packed | Unpacked deriving (Eq, Ord, Show) data VarArgParam = VarArgParam deriving (Eq, Ord, Show)