<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;"><DIV>Daniel,</DIV>
<DIV> </DIV>
<DIV>Thanks for the reference to SPIM. It looks interesting, but appears to be an assembler that can also execute the code (it does not execute binary files). In addition, I'm probably asking for too much. Ideally, I'm looking for something like MS Visual Studio with that executes on a virtual software machine, whose source code is freely available. </DIV>
<DIV> </DIV>
<DIV>Thanks,</DIV>
<DIV>M. McDonnell</DIV>
<DIV><BR><BR>--- On <B>Sat, 10/11/08, Daniel Dunbar <I><daniel@zuster.org></I></B> wrote:<BR></DIV>
<BLOCKQUOTE style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: rgb(16,16,255) 2px solid">From: Daniel Dunbar <daniel@zuster.org><BR>Subject: Re: [<SPAN><SPAN>LLVMdev</SPAN></SPAN>] C++ to C?<BR>To: michaeldmcdonnell@yahoo.com<BR>Cc: "LLVM Developers Mailing List" <llvmdev@cs.uiuc.edu><BR>Date: Saturday, October 11, 2008, 1:56 PM<BR><BR>
<DIV id=yiv541622742>
<DIV dir=ltr>I realized I missed this part of your email:<BR><BR>
<DIV class=gmail_quote>
<BLOCKQUOTE class=gmail_quote style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD style="FONT-FAMILY: inherit; font-size-adjust: inherit; font-stretch: inherit" vAlign=top>
<DIV>Can LLVM help, or am I completely off track?</DIV></TD></TR></TBODY></TABLE></BLOCKQUOTE>
<DIV><BR>It isn't clear to me yet. I have used LLVM for a different but similar purpose, which effectively implements a stronger virtual machine on top of the LLVM IR. I have been very happy with the decision to use LLVM instead of, say, working with x86 directly.<BR><BR>On the other hand, if you are only interested in a teaching tool, why not use something like SPIM for example? If your usage model is different than SPIM then explaining it may clarify how LLVM would fit.<BR><BR><A href="http://pages.cs.wisc.edu/~larus/spim.html" target=_blank rel=nofollow>http://pages.cs.wisc.edu/~larus/spim.html</A><BR><BR> - Daniel<BR> <BR></DIV>
<BLOCKQUOTE class=gmail_quote style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD style="FONT-FAMILY: inherit; font-size-adjust: inherit; font-stretch: inherit" vAlign=top>
<DIV>Thanks,</DIV>
<DIV>M. McDonnell</DIV>
<DIV><BR><BR>--- On <B>Sat, 10/11/08, Daniel Dunbar <I><<A href="mailto:daniel@zuster.org" target=_blank rel=nofollow>daniel@zuster.org</A>></I></B> wrote:<BR></DIV>
<BLOCKQUOTE style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: rgb(16,16,255) 2px solid">From: Daniel Dunbar <<A href="mailto:daniel@zuster.org" target=_blank rel=nofollow>daniel@zuster.org</A>> 
<DIV class=Ih2E3d><BR>Subject: Re: [<SPAN>LLVMdev</SPAN>] C++ to C?<BR></DIV>To: <A href="mailto:michaeldmcdonnell@yahoo.com" target=_blank rel=nofollow>michaeldmcdonnell@yahoo.com</A>, "LLVM Developers Mailing List" <<A href="mailto:llvmdev@cs.uiuc.edu" target=_blank rel=nofollow>llvmdev@cs.uiuc.edu</A>><BR>Cc: "Duncan Sands" <<A href="mailto:baldrick@free.fr" target=_blank rel=nofollow>baldrick@free.fr</A>><BR>Date: Saturday, October 11, 2008, 1:18 PM 
<DIV>
<DIV></DIV>
<DIV class=Wj3C7c><BR><BR>
<DIV>
<DIV dir=ltr>Hi Michael,<BR><BR>
<DIV class=gmail_quote>On Sat, Oct 11, 2008 at 12:44 PM, Michael McDonnell <SPAN dir=ltr><<A href="mailto:michaeldmcdonnell@yahoo.com" target=_blank rel=nofollow>michaeldmcdonnell@yahoo.com</A>></SPAN> wrote: 
<BLOCKQUOTE class=gmail_quote style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD style="FONT-FAMILY: inherit; font-size-adjust: inherit; font-stretch: inherit" vAlign=top><BR></TD></TR></TBODY></TABLE></BLOCKQUOTE>
<BLOCKQUOTE class=gmail_quote style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD style="FONT-FAMILY: inherit; font-size-adjust: inherit; font-stretch: inherit" vAlign=top>
<DIV></DIV>
<DIV>My assumption has been that <SPAN>LLVM</SPAN> generates machine code for a virtual machine, and that you supply an interpreter that will execute the code. </DIV>
<DIV></DIV></TD></TR></TBODY></TABLE></BLOCKQUOTE>
<DIV><BR>The name can be somewhat confusing. LLVM is a lot of things, the web page gives some important areas (<A href="http://llvm.org/" target=_blank rel=nofollow>http://llvm.org/</A>). In your case it sounds like you are mainly interested in the "virtual instruction set" aspect. In this case, yes, llvm-gcc does generate "machine code" (LLVM intermediate representation (IR)) for the virtual instruction set, which lli can interpret directly. Additionally, LLVM supplies a variety of tools for working with .bc files (serialized versions of this formation), i.e. for linking, archiving, etc.<BR> </DIV>
<BLOCKQUOTE class=gmail_quote style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD style="FONT-FAMILY: inherit; font-size-adjust: inherit; font-stretch: inherit" vAlign=top>
<DIV> </DIV>
<DIV>I'm interested in this from an educational standpoint. What I'd like is a C/C++ compiler that generates machine code for a virtual software machine. Ideally the machine would support interrupts, timers, <SPAN>DMA</SPAN> controllers, etc.. I know that your interpreter does not, but I thought I might add these peripherals in.</DIV>
<DIV> </DIV></TD></TR></TBODY></TABLE></BLOCKQUOTE>
<DIV><BR>Using LLVM is a viable strategy for this. However, it is a question of how much support you are expecting. The main benefit you are getting is precise semantics for LLVM IR and the tool chain for working with .bc files. This allows you to avoid dealing with many nitty particulars of x86 (assuming that is your target). On the other hand, the current interpreter makes no pretense of running on a "virtual machine", so if this is your goal you will need to build those facilities yourself. Finally, using LLVM IR directly may pose some issues depending on what level of precision you want. Since a significant amount of work is done in code generation for the particular target, the actual x86 instructions which are generated may access memory "differently" than your interpretation of the LLVM IR would; generally this would be because the source code didn't constrain things appropriately (volatile) but it is something to be cognizant of.<BR><BR> -
 Daniel<BR><BR></DIV>
<BLOCKQUOTE class=gmail_quote style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD style="FONT-FAMILY: inherit; font-size-adjust: inherit; font-stretch: inherit" vAlign=top>
<DIV></DIV>
<DIV>If you have any suggestions I'd appreciate hearing them. I know about the various PC emulators like BOCHS, but they're doing a lot more than I need.</DIV>
<DIV> </DIV>
<DIV>Thanks,</DIV>
<DIV>M. McDonnell</DIV>
<DIV><BR>--- On <B>Sat, 10/11/08, Duncan Sands <I><<A href="mailto:baldrick@free.fr" target=_blank rel=nofollow>baldrick@free.fr</A>></I></B> wrote:<BR></DIV>
<BLOCKQUOTE style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: rgb(16,16,255) 2px solid">From: Duncan Sands <<A href="mailto:baldrick@free.fr" target=_blank rel=nofollow>baldrick@free.fr</A>><BR>Subject: Re: [<SPAN>LLVMdev</SPAN>] C++ to C?<BR>To: <A href="mailto:michaeldmcdonnell@yahoo.com" target=_blank rel=nofollow>michaeldmcdonnell@yahoo.com</A><BR>Cc: <A href="mailto:llvmdev@cs.uiuc.edu" target=_blank rel=nofollow>llvmdev@cs.uiuc.edu</A><BR>Date: Saturday, October 11, 2008, 12:25 PM<BR><BR><PRE>Hi Michael,

> Thank you very much for your help. I have a few more questions if you have
a moment...
>  
> * Are there executables available for windows?

I think so, but since I don't use windows I can't say for sure.

> * Is the source code for the interpreter available, and if so, what is/are
the filename(s)?

Sure, all source code is available: this is an open source project!
Do you really mean the interpreter?  You seemed more interested in
the C backend.  In any case, you can find source code here:
  <A href="http://llvm.org/releases/" target=_blank rel=nofollow>http://llvm.org/releases/</A>
For the 2.3 release:
  <A href="http://llvm.org/releases/download.html#2.3" target=_blank rel=nofollow>http://llvm.org/releases/download.html#2.3</A>

> * Is there an IDE available?

LLVM is not a compiler.  It is used by various compilers such
as llvm-gcc and clang.  One of those might have an IDE, but I
wouldn't know since I never use IDE's myself.

Ciao,

Duncan.

PS: Please don't send messages just to me: CC to mailing
list too.  That way others can answer you too, and the
discussion is recorded in the archives where others with
the same questions can find it.
</PRE></BLOCKQUOTE></TD></TR></TBODY></TABLE><BR><BR>_______________________________________________<BR>LLVM Developers mailing list<BR><A href="mailto:LLVMdev@cs.uiuc.edu" target=_blank rel=nofollow>LLVMdev@cs.uiuc.edu</A>         <A href="http://llvm.cs.uiuc.edu/" target=_blank rel=nofollow>http://llvm.cs.uiuc.edu</A><BR><A href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target=_blank rel=nofollow>http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</A><BR><BR></BLOCKQUOTE></DIV><BR></DIV></DIV></DIV></DIV></BLOCKQUOTE></TD></TR></TBODY></TABLE><BR></BLOCKQUOTE></DIV><BR></DIV></DIV></BLOCKQUOTE></td></tr></table><br>