[PATCH 1/1] LEON3: UT699 and GR712 sleep-mode d-cache fix
Daniel Cederman
cederman at gaisler.com
Mon Mar 31 10:17:09 UTC 2014
Branch always is a special case in which the ",a" causes the delay
instruction to not be executed. From the Sparc architecture manual:
"However, a bit in the delayed control-transfer instruction can cause
the delay instruction to be annulled (that is, to have no effect) if the
branch is not taken (or in the branch always case, if the branch is
taken)."
So I think it should be safe to remove the nop instruction.
On 2014-03-31 12:03, Sebastian Huber wrote:
> On 2014-03-31 11:48, Daniel Cederman wrote:
>> See errata of respective chip. Some code-cleanup as well.
>> ---
>> c/src/lib/libbsp/sparc/leon3/startup/bspidle.S | 7 ++-----
>> 1 file changed, 2 insertions(+), 5 deletions(-)
>>
>> diff --git a/c/src/lib/libbsp/sparc/leon3/startup/bspidle.S
>> b/c/src/lib/libbsp/sparc/leon3/startup/bspidle.S
>> index 714d4e5..0924658 100644
>> --- a/c/src/lib/libbsp/sparc/leon3/startup/bspidle.S
>> +++ b/c/src/lib/libbsp/sparc/leon3/startup/bspidle.S
>> @@ -23,8 +23,5 @@
>> SYM(bsp_idle_thread):
>> SYM(leon3_power_down_loop):
>> pwdloop: mov %g0, %asr19
>> - ba pwdloop
>> - nop
>> - retl
>> - nop
>> -
>> + lda [%sp] 1, %g0 ! Needed for UT699 and GR712
>> + ba,a pwdloop
>>
>
> If I understand this ",a" notation correctly, then the instruction
> following the branch is not executed in case the branch is not taken.
> Since we branch always, this ",a" seems to be superfluous. Is it safe
> to remove the nop instruction in the delay slot here?
>
More information about the devel
mailing list