At 18:26 14-03-08 +0100, you wrote:
>At 09:27 14-03-08 -0700, Norman Davis wrote:
>>Hi everyone,
>>
>>For the following C language code:
>>
>>
>>  long a, b, c;
>>
>>  b = 12345;
>>  c = 54321;
>>
>>  a = b * c;
>>
>>I get the following assembler output in the .s file.
>>
>> mov #llo(12345), 4(r4)
>> mov #lhi(12345), 4+2(r4)
>> mov #llo(54321), 8(r4)
>> mov #lhi(54321), 8+2(r4)
>> mov 4(r4), r10
>> mov 4+2(r4), r11
>> mov 8(r4), r12
>> mov 8+2(r4), r13
>> push r2
>> dint
>> call #__umulsi3hw
>> pop r2
>> mov r14, @r4
>> mov r15, 2(r4)
>>
>>It looks like the interrupts are being disabled around the call:
>>
>> push r2                   ; store interrupt status (among other status)
>> dint                         ; disable interrupts
>> call #__umulsi3hw
>> pop r2                     ; restore previous interrupt status
>>
>>I'm curious what the purpose of this is. In my particular case, I know
>>none of my interrupt routines (currently) use the hardware multiplier,
>>so is there an option to disable this disabling? It might be adding a
>>significant interrupt latency for my application.
>
>Norman,
>push r2 means saving register r2 onto the stack and pop r2 means restoring
>it. This has nothing to do with interrupts. The contents of r2 needs to be
>saved, that's all.

Skip this post. I'm typing complete nonsense...

Nico Coesel


Reply via email to