docs: def asm_module(exprs, dst_reg, sym_to_reg, triple_or_target=None):
      '''
      Generate an LLVM module for a list of expressions
  
      Arguments:
        * See :meth:`arybo.lib.exprs_asm.asm_binary` for a description of the list of arguments
  
      Output:
        * An LLVM module with one function named "__arybo", containing the
          translated expression.
  
      See :meth:`arybo.lib.exprs_asm.asm_binary` for an usage example.
      '''
  
      if not llvmlite_available:
          raise RuntimeError("llvmlite module unavailable! can't assemble...")
  
      target = llvm_get_target(triple_or_target)
  
      M = ll.Module()
      fntype = ll.FunctionType(ll.VoidType(), [])
      func = ll.Function(M, fntype, name='__arybo')
      func.attributes.add("naked")
      func.attributes.add("nounwind")
      BB = func.append_basic_block()
  
      IRB = ll.IRBuilder()
      IRB.position_at_end(BB)
  
      sym_to_value = {sym: IRB.load_reg(IntType(reg[1]), reg[0], reg[0]) for sym,reg in six.iteritems(sym_to_reg)}
  
      ret = to_llvm_ir(exprs, sym_to_value, IRB)
      IRB.store_reg(ret, IntType(dst_reg[1]), dst_reg[0])
      # See https://llvm.org/bugs/show_bug.cgi?id=15806
      IRB.unreachable()
  
      return M