(define-macro (llvm:asm name . args)
(let* ((a1 (if (null? args) #f (car args)))
(a2 (if (null? args) #f (if (null? (cdr args)) #f (cadr args))))
(type (if (symbol? a1) a1 (if (symbol? a2) a2 #f)))
(assm_print_type (if (number? a1) a1 (if (number? a2) a2 #f))))
`(let ((n1 ,(if type
`(impc:ti:get-mono-name ,name ,type)
`(impc:ti:get-mono-name ,name))))
,(if (not assm_print_type)
`(print (llvm:disassemble n1 0) "\n")
`(print (llvm:disassemble n1 ,assm_print_type) "\n")))))