Bob Frankel
2009-May-04 01:19 UTC
[LLVMdev] leveraging back-end C compiler features in the gcc-based front-end
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body bgcolor="#ffffff" text="#000000"> <font size="-1"><font face="Verdana">i'm looking into using llvm with TI's MSP430, for which a C compiler from TI already exists; the idea here is to use llc -march=c and then pass the generated C code on to the TI compiler. as it turns out, the TI C compiler supports a number of (processor-specific) intrinsics that expose much of the underlying CPU architecture directly to the C programmer -- registers, pseudo-functions for enabling/disabling interrupts and reading/writing status bits, etc.<br> <br> is there a way to leverage these (non-gcc) intrinsics in the llvm gcc-based frontend -- perhaps flagging their use in such a way that they effectively "pass through" the optimizer and are emitted "as is" in the generated C code? in some respects, you can think of this usage as not unlike dropping inline asm code into the C sources.<br> <br> bob frankel<br> <br> </font></font> </body> </html>
Eli Friedman
2009-May-04 01:40 UTC
[LLVMdev] leveraging back-end C compiler features in the gcc-based front-end
On Sun, May 3, 2009 at 6:19 PM, Bob Frankel <bios.bob.frankel at gmail.com> wrote:> i'm looking into using llvm with TI's MSP430Ah, you're in luck then: an MSP430 backend was checked in to SVN today :) I don't think it's mature enough for general use yet, though.> is there a way to leverage these (non-gcc) intrinsics in the llvm gcc-based > frontend -- perhaps flagging their use in such a way that they effectively > "pass through" the optimizer and are emitted "as is" in the generated C > code? in some respects, you can think of this usage as not unlike dropping > inline asm code into the C sources.You could try just generating calls to the builtins in question; if you're lucky, it'll just work... if not, you can always use sed (or equivalent) to manipulate the C output into the correct form. -Eli
Bob Frankel
2009-May-04 02:12 UTC
[LLVMdev] leveraging back-end C compiler features in the gcc-based front-end
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
<font size="-1"><font face="Verdana">wow!!! i
would be interested in
trying this.... any helpful instructions (for a novice like me) to get
started using the msp430 backend would be helpful....<br>
<br>
as for your suggestion, it does work -- i can (say) place a call to
__get_SR_register() in my front-end source, and it simply shows up in
the back-end .c file; other "extensions" to compilers (such as
'interrupt' keyword to generate different prologue/epilogue code) would
be a little trickier (though there are presumably already gcc
mechansims for flagging interrupt routines??)<br>
<br>
<br>
</font></font><br>
Eli Friedman wrote:
<blockquote
cite="mid:f5aa3e9b0905031840j5511e5d2md2144a0438c32379@mail.gmail.com"
type="cite">
<pre wrap="">On Sun, May 3, 2009 at 6:19 PM, Bob Frankel <a
class="moz-txt-link-rfc2396E"
href="mailto:bios.bob.frankel@gmail.com"><bios.bob.frankel@gmail.com></a>
wrote:
</pre>
<blockquote type="cite">
<pre wrap="">i'm looking into using llvm with TI's
MSP430
</pre>
</blockquote>
<pre wrap=""><!---->
Ah, you're in luck then: an MSP430 backend was checked in to SVN today
:) I don't think it's mature enough for general use yet, though.
</pre>
<blockquote type="cite">
<pre wrap="">is there a way to leverage these (non-gcc)
intrinsics in the llvm gcc-based
frontend -- perhaps flagging their use in such a way that they effectively
"pass through" the optimizer and are emitted "as is" in the
generated C
code? in some respects, you can think of this usage as not unlike dropping
inline asm code into the C sources.
</pre>
</blockquote>
<pre wrap=""><!---->
You could try just generating calls to the builtins in question; if
you're lucky, it'll just work... if not, you can always use sed (or
equivalent) to manipulate the C output into the correct form.
-Eli
_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated"
href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>
<a class="moz-txt-link-freetext"
href="http://llvm.cs.uiuc.edu">http://llvm.cs.uiuc.edu</a>
<a class="moz-txt-link-freetext"
href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a>
</pre>
</blockquote>
</body>
</html>
Anton Korobeynikov
2009-May-04 08:22 UTC
[LLVMdev] leveraging back-end C compiler features in the gcc-based front-end
Hello, Bob> supports a number of (processor-specific) intrinsics that expose much of the > underlying CPU architecture directly to the C programmer -- registers, > pseudo-functions for enabling/disabling interrupts and reading/writing > status bits, etc.Nothing special here. All this can be implemented either via inline assembler and/or via register-tied variables. I have no idea whether mspgcc supports this, but this certainly possible. -- With best regards, Anton Korobeynikov Faculty of Mathematics and Mechanics, Saint Petersburg State University