[patch] [MIPS] Implement Errata for 24K and 24KE
Richard Sandiford
rdsandiford@googlemail.com
Fri Apr 10 09:02:00 GMT 2009
Catherine Moore <clm@codesourcery.com> writes:
> This patch implements the errata for the 24K and 24KE. The errata
> calls for a NOP to be emitted after an ERET/DERET instruction followed
> by a branch. If the ERET/DERET is in a noreorder section, then a
> warning will be issued instead. This functionality requires the
> -mfix-24k option.
>
> In addition, there was an error in the delay slot handling in
> append_insn. The code failed to exclude an ERET or DERET instuction
> from being moved into a delay slot. That failure is also corrected
> with this patch.
>
> Does this look okay to install?
Other hazards of this kind are handled by insns_between. Was there
a reason why you couldn't use it in this case?
I don't like the idea of warning about an ERET at the end of a
.set noreorder block. In general, if you have:
.set noreorder
...
FOO
...
.set reorder
...
BAR
and there is a hazard between FOO and BAR, it is perfectly OK to insert
nops at any point between the ".set reorder" and BAR. This is what we
do for other hazards, and I think we should be consistent. Likewise
if you have:
FOO
...
.set noreorder
...
BAR
...
.set reorder
it is perfectly OK to insert nops between FOO and the ".set noreorder".
(FWIW, using insns_between should give you this for free.)
Also, ".set neorder" has traditionally meant "trust me!". If we want
to warn about caess where we think the programmer is wrong, I think
we need a consistent story.
Richard
More information about the Binutils
mailing list