Add new mem{cpy,set,move} cmm prim ops.
[ghc-hetmet.git] / compiler / llvmGen / Llvm / AbsSyn.hs
index a58ea77..93bc62c 100644 (file)
@@ -132,6 +132,12 @@ data LlvmStatement
   -}
   | Expr LlvmExpression
 
+  {- |
+    A nop LLVM statement. Useful as its often more efficient to use this
+    then to wrap LLvmStatement in a Just or [].
+  -}
+  | Nop
+
   deriving (Show, Eq)
 
 
@@ -176,11 +182,9 @@ data LlvmExpression
     Navigate in an structure, selecting elements
       * inbound: Is the pointer inbounds? (computed pointer doesn't overflow)
       * ptr:     Location of the structure
-      * indexes: A list of indexes to select the correct value. For example
-                 the first element of the third element of the structure ptr
-                 is selected with [3,1] (zero indexed)
+      * indexes: A list of indexes to select the correct value.
   -}
-  | GetElemPtr Bool LlvmVar [Int]
+  | GetElemPtr Bool LlvmVar [LlvmVar]
 
   {- |
      Cast the variable from to the to type. This is an abstraction of three
@@ -212,5 +216,18 @@ data LlvmExpression
   -}
   | Phi LlvmType [(LlvmVar,LlvmVar)]
 
+  {- |
+    Inline assembly expression. Syntax is very similar to the style used by GCC.
+      * assembly:   Actual inline assembly code.
+      * contraints: Operand constraints.
+      * return ty:  Return type of function.
+      * vars:       Any variables involved in the assembly code.
+      * sideeffect: Does the expression have side effects not visible from the
+                    constraints list.
+      * alignstack: Should the stack be conservatively aligned before this
+                    expression is executed.
+  -}
+  | Asm LMString LMString LlvmType [LlvmVar] Bool Bool
+
   deriving (Show, Eq)