On Tue, Sep 22, 2015 at 1:41 AM, David Chisnall <david.chisn...@cl.cam.ac.uk> wrote: > On 21 Sep 2015, at 21:45, H.J. Lu via cfe-dev <cfe-...@lists.llvm.org> wrote: >> >> The main purpose of x86 interrupt attribute is to allow programmers >> to write x86 interrupt/exception handlers in C WITHOUT assembly >> stubs to avoid extra branch from assembly stubs to C functions. I >> want to keep the number of new intrinsics to minimum without sacrificing >> handler performance. I leave faking error code in interrupt handler to >> the programmer. > > The assembly stubs have to come from somewhere. You either put them in an > assembly file (most people doing embedded x86 stuff steal the ones from > NetBSD), or you put them in the compiler where they can be inlined. In terms > of user interface, there’s not much difference in complexity. Having written > this kind of code in the past, I can honestly say that using the assembly > stubs was the least difficult part of getting them right. In terms of > compiler complexity, there’s a big difference: in one case the compiler > contains nothing, in the other it contains something special for a single use > case. In terms of performance, the compiler version has the potential to be > faster, but if we’re going to pay for the complexity then I think that we’d > need to see some strong evidence that someone else is getting a noticeable > benefit.
I understand your concern. IA MCU users want to write interrupt/exception handlers in C, just like many embedded processors. The goals are to save code space and improve performance. Using builtin functions, instead of adding a new way to pass parameters, makes compiler change much simpler, since __builtin_exception_error () is the same as __builtin_return_address (0) and __builtin_interrupt_data () is address of __builtin_exception_error () + size of register. -- H.J.