<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
Thanks Reid.  What you wrote makes a lot of sense.  The more I learn about the LLVM, the more I'll be able to determine how easy it would be to translate our IR into it.  If it proves too difficult, I'll do what you suggested.  Thanks again everyone for your responses...<BR>
 <BR>
- Shasank<BR> <BR>> From: rnk@mit.edu<BR>> Date: Tue, 2 Feb 2010 22:11:50 -0500<BR>> Subject: Re: [LLVMdev] Using LLVM to generate x86 dynamically in memory<BR>> To: shanko_chavano@hotmail.com<BR>> CC: grosbach@apple.com; llvmdev@cs.uiuc.edu<BR>> <BR>> On Tue, Feb 2, 2010 at 7:39 PM, Shasank Chavan<BR>> <shanko_chavano@hotmail.com> wrote:<BR>> > Hi Jim.  Thanks for your speedy response.  I'm not entirely sure if a JIT is<BR>> > what I'm looking for.  I'm basically looking for a dll with an interface<BR>> > that takes a C program as input and compiles and optimizes it to native x86<BR>> > instructions in an in-memory buffer.  I don't want the dll the execute it,<BR>> > and I don't particularly want to translate our expressions into LLVM bitcode<BR>> > (although I can if the rest of the pieces are there).  Also, I briefly read<BR>> > up on lli.  This looks like a separate process will have to be spawned to<BR>> > invoke the JIT to execute programs in LLVM bytecode.  This will definitely<BR>> > incur an overhead penalty that we wouldn't want to pay.  Thanks in advance<BR>> > for your response.<BR>> <BR>> Compiling code to native code in an in-memory buffer is really all a JIT is.<BR>> <BR>> If you're attached to writing the definitions of each opcode in C,<BR>> here's an old idea in JIT compilation. For every opcode in your<BR>> bytecode, write a corresponding C function that takes relevant<BR>> parameters and implements the opcode. Mark each action as<BR>> __attribute__((always_inline)) Compile this C file with clang to a<BR>> .bc. Load that module from disk at runtime into the JIT. For each<BR>> bytecode string you want to execute, translate it from bytecode to<BR>> LLVM IR (with IRBuilder) that simply calls the opcode action<BR>> functions. The run an inlining optimization pass to inline all the<BR>> actions, and ask the JIT for a pointer to the function. Then you can<BR>> call it like a C function pointer.<BR>> <BR>> lli is just a driver. It's source code is an example of how you would<BR>> use LLVM to embed a JIT into your program.<BR>> <BR>> Reid<BR>                                           <br /><hr />Your E-mail and More On-the-Go. Get Windows Live Hotmail Free. <a href='http://clk.atdmt.com/GBL/go/201469229/direct/01/' target='_new'>Sign up now.</a></body>
</html>