[fpc-devel] Is there a way to make Register Allocation inside of Interrupt Service Routines more efficient when using inline-assembler?
mail at michael-ring.org
Fri Aug 19 22:49:40 CEST 2016
Am 19.08.16 um 14:49 schrieb Jonas Maebe:
> Michael Ring wrote on Sat, 13 Aug 2016:
>> I am trying to bring interrupt handling routine size down (and speed
>> up) for mipsel-embedded target.
>> I need to use inline assembler routines like this one
>> procedure TSystemCore.setCoreTimerComp(value : longWord); assembler;
>> mtc0 $a1,$11,0
>> end ['a1'];
> Mentioning changed registers at the end of a pure assembler routine
> has no effect. The compiler normally prints a warning about this. The
> set of changed registers by a routine always only depends on its
> calling convention. On most platforms we only support the official
> ABI's calling convention, which is also the default.
I also tried also something like this:
procedure TSystemCore.setCoreTimerComp(value : longWord);
with same result, all registers are saved. intead of only a few.
>> inside of the interrupt handler, but as soon as I include the call to
>> this procedure the number of registers that get saved explodes. When
>> I only need to modify some peripheral I usually get away with only
>> $v0 and $v1 registers getting saved, but with asm routine included
>> all registers get saved.
> If the ABI default calling convention states that a routine may change
> all registers, that is to be expected.
>> Same is true if I put the asm block directly inside of the interrupt
> In that case, the list of changed registers should be taken into
> account. OTOH, using an inline assembler blocks disables the use the
> use of register variables for that routine by the compiler, but that
> should result in less registers getting saved rather than more.
Do you remember where this is coded or for what I should search in the
fpc sourcecode? Then I can try to find out what is going on in the mips
> fpc-devel maillist - fpc-devel at lists.freepascal.org
More information about the fpc-devel