[LLVMdev] LLVM and Interrupt Service Routines.
Chris Lattner
clattner at apple.com
Sun Jul 26 10:39:13 PDT 2009
On Jul 26, 2009, at 3:42 AM, Sanjiv Gupta wrote:
>>
>> What happens with functions that are called both inside and outside
>> ISR context? Do you have to codegen two copies of those?
>>
>>
> Yes. That's precisely what we are trying to achieve in llvm-ld.
> But the problems don't end there, as llvm-ld doesn't have any idea of
> libcalls (they're generated in llc) and they could also be called from
> both places.
If you have to generate two copies of the function with different
entrypoints, the *front-end* should handle the duplication. This is
just like C++ constructors.
One really old patch that apple guys experimented in the past was a
"slow and fast call" attribute, which you could stick on function
declarations. If you added it to a function, the frontend would
generate an entry point with a standard calling convention as well as
one with a faster in-register ABI. Direct calls would use the fast
entry point, but if you took the address, you'd get the address of the
normal one.
All of this was handled by the front-end, and works fine. I think the
patch eventually got ripped out of the compiler for other reasons
though.
-Chris
More information about the llvm-dev
mailing list