module DDC.Llvm.Syntax.Prim ( Op (..) , Cond (..), ICond (..), FCond (..) , Conv (..)) where -- | Binary arithmetic operators. data Op = OpAdd -- ^ add two integers, floating point or vector values. | OpSub -- ^ subtract two ... | OpMul -- ^ multiply .. | OpUDiv -- ^ unsigned integer or vector division. | OpSDiv -- ^ signed integer .. | OpURem -- ^ unsigned integer or vector remainder | OpSRem -- ^ signed ... | OpFAdd -- ^ add two floating point or vector values. | OpFSub -- ^ subtract two ... | OpFMul -- ^ multiply ... | OpFDiv -- ^ divide ... | OpFRem -- ^ remainder ... | OpShl -- ^ Left shift. | OpLShr -- ^ Logical shift right | OpAShr -- ^ Arithmetic shift right. -- The most significant bits of the result will be equal to the -- sign bit of the left operand. | OpAnd -- ^ AND bitwise logical operation. | OpOr -- ^ OR bitwise logical operation. | OpXor -- ^ XOR bitwise logical operation. deriving (Eq, Show) -- | Conditions. data Cond = ICond ICond | FCond FCond deriving (Eq, Show) -- | Integer conditions. data ICond = ICondEq -- ^ Equal (Signed and Unsigned) | ICondNe -- ^ Not equal (Signed and Unsigned) | ICondUgt -- ^ Unsigned greater than | ICondUge -- ^ Unsigned greater than or equal | ICondUlt -- ^ Unsigned less than | ICondUle -- ^ Unsigned less than or equal | ICondSgt -- ^ Signed greater than | ICondSge -- ^ Signed greater than or equal | ICondSlt -- ^ Signed less than | ICondSle -- ^ Signed less than or equal deriving (Eq, Show) -- | Floating point conditions. data FCond = FCondFalse -- ^ Always yields false, regardless of operands. | FCondOeq -- ^ Both operands are not a QNAN and op1 is equal to op2. | FCondOgt -- ^ Both operands are not a QNAN and op1 is greater than op2. | FCondOge -- ^ Both operands are not a QNAN and op1 is greater than or equal to op2. | FCondOlt -- ^ Both operands are not a QNAN and op1 is less than op2. | FCondOle -- ^ Both operands are not a QNAN and op1 is less than or equal to op2. | FCondOne -- ^ Both operands are not a QNAN and op1 is not equal to op2. | FCondOrd -- ^ Both operands are not a QNAN. | FCondUeq -- ^ Either operand is a QNAN or op1 is equal to op2. | FCondUgt -- ^ Either operand is a QNAN or op1 is greater than op2. | FCondUge -- ^ Either operand is a QNAN or op1 is greater than or equal to op2. | FCondUlt -- ^ Either operand is a QNAN or op1 is less than op2. | FCondUle -- ^ Either operand is a QNAN or op1 is less than or equal to op2. | FCondUne -- ^ Either operand is a QNAN or op1 is not equal to op2. | FCondUno -- ^ Either operand is a QNAN. | FCondTrue -- ^ Always yields true, regardless of operands. deriving (Eq, Show) -- | Conversion Operations data Conv = ConvTrunc -- ^ Integer truncate | ConvZext -- ^ Integer extend (zero fill) | ConvSext -- ^ Integer extend (sign fill) | ConvFptrunc -- ^ Float truncate | ConvFpext -- ^ Float extend | ConvFptoui -- ^ Float to unsigned Integer | ConvFptosi -- ^ Float to signed Integer | ConvUintofp -- ^ Unsigned Integer to Float | ConvSintofp -- ^ Signed Int to Float | ConvPtrtoint -- ^ Pointer to Integer | ConvInttoptr -- ^ Integer to Pointer | ConvBitcast -- ^ Cast between types where no bit manipulation is needed deriving (Eq, Show)