On Tue, Sep 29, 2015 at 3:19 PM, H.J. Lu <hjl.to...@gmail.com> wrote:
> On Tue, Sep 29, 2015 at 2:12 PM, Mike Stump <mikest...@comcast.net> wrote:
>> On Sep 29, 2015, at 1:16 PM, H.J. Lu <hjl.to...@gmail.com> wrote:
>>> On Tue, Sep 29, 2015 at 11:49 AM, Mike Stump <mikest...@comcast.net> wrote:
>>>> To be feature complete, it would be nice to have two styles of interrupt 
>>>> functions, one that returns with iret, and one that returns with ret.  The 
>>>> point is that the user might want to call functions from a interrupt 
>>>> handler and not save and restore all call clobbered registers.  By 
>>>> allowing a ret style interrupt handler, calls to a ret style interrupt 
>>>> routine can avoid saving and restoring all call clobbered registers.
>>>
>>> Do you have a testcase for this?  I think the current implementation
>>> covers most use cases.
>>
>> When I wrote my interrupt support for my cpu, I ran these through the code 
>> generator…  I have many registers, and noticed saving and restoring them all 
>> just because two interrupt handlers used the same routine was silly.  Test 
>> case is trivial:
>>
>> interrupt void foo2() {
>>   bar();
>> }
>>
>> interrupt void foo1() {
>>   bar();
>> }
>>
>> if more than 1-2 registers are saved, then likely it is saving all call used 
>> registers.  Saving all means that one cannot use functions to compose 
>> semantics and attain performance.  Performance of ISR routines I think is 
>> useful to shoot for, given that it is easy enough to attain, I don’t see the 
>> harm in doing that.  Even if in the first implementation you don’t bother 
>> with performance, if you spec the other function, the user code need never 
>> change; and when performance does matter, it is then a mere matter of 
>> enhancing the code gen to do the right thing.  It is pretty easy to get most 
>> of the benefit without much work.  i call the main interrupt function 
>> interrupt, and the recursive (ret style), I call interruptr.  The r is for 
>> recursive.
>
> I added:
>
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66960#c3
>

How about adding a "no_caller_saved_registers" attribute?

-- 
H.J.

Reply via email to