On 26-Nov-2003, Chris Lattner <[EMAIL PROTECTED]> wrote: > > > While possible, it would be _very_ difficult. LLVM code is more > > > expressive/low-level than CIL code: for example array bounds checks are > > > not implicit, and there is no object model. I'm not sure exactly how you > > > would map general C programs onto the managed runtime at least, much less > > > general LLVM programs. > > > > LLVM should map to *unverifiable* CIL without too much difficulty, I think. > > Well, actually you'd map to a subset of that: you wouldn't use the > > object model instructions at all. > > Ah, ok. I thought the unverifiable CIL was basically just machine code. > I didn't know it used the stack machine: cool!
You have to distinguish between _unverifiable_ code, and _unmanaged_ code. The former uses the stack machine, the latter is just machine code. > > It's mostly fairly straight-forward to map general C programs onto > > unverifiable CIL. Casting a pointer to int or vice versa is easy, just > > push as one type and pop as another. Pointer arithmetic is just integer > > addition. The C heap is unmanaged memory which can be allocated either > > as a global array or using OS-specific code. > > Ok. There are _inherently_ difficult parts though. For example, you > can't really translate '#ifdef BIG_ENDIAN' style code into a portable > representation, no matter what it is. That's true. But code which uses #ifdef BIG_ENDIAN is not standard-conforming C code. > The hardest part is probably handling all of the libc functions that > everyone expects: signals, stdio, etc. Right. For most of that, you can implement it using PInvoke to invoke the underlying (run-time) platform's libc. However, because there are a lot of macros that the C standard specifies are (compile-time) constant expressions, you would have to wrap a lot of the functionality. That is, you'd need to define your own set of C header files that define the constants in a platform-independent way, and then have the implementation of the C functions work by PInvoking your own C wrapper functions which convert these constants to the appropriate platform-specific values and then invoke the wrapped libc function. -- Fergus Henderson <[EMAIL PROTECTED]> | "I have always known that the pursuit The University of Melbourne | of excellence is a lethal habit" WWW: <http://www.cs.mu.oz.au/~fjh> | -- the last words of T. S. Garp. _______________________________________________ Mono-list maillist - [EMAIL PROTECTED] http://lists.ximian.com/mailman/listinfo/mono-list
