-}
| 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)
Load ptr -> ppLoad ptr
Malloc tp amount -> ppMalloc tp amount
Phi tp precessors -> ppPhi tp precessors
+ Asm asm c ty v se sk -> ppAsm asm c ty v se sk
--------------------------------------------------------------------------------
<+> ppTargets targets
+ppAsm :: LMString -> LMString -> LlvmType -> [LlvmVar] -> Bool -> Bool -> Doc
+ppAsm asm constraints rty vars sideeffect alignstack =
+ let asm' = doubleQuotes $ ftext asm
+ cons = doubleQuotes $ ftext constraints
+ rty' = texts rty
+ vars' = lparen <+> ppCommaJoin vars <+> rparen
+ side = if sideeffect then text "sideeffect" else empty
+ align = if alignstack then text "alignstack" else empty
+ in text "call" <+> rty' <+> text "asm" <+> side <+> align <+> asm' <> comma
+ <+> cons <> vars'
+
+
--------------------------------------------------------------------------------
-- * Misc functions
--------------------------------------------------------------------------------