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.

Reply via email to