
6ER667E2B
MaverickCrunchTM
Various MaverickCrunch errata share common features. The individual descriptions will refer to these
common features.
1) For several errata, an instruction appears in the coprocessor pipeline, but does not execute for one of
the following reasons:
- It fails its condition code check.
- A branch is taken and it is one of the two instructions in the branch delay slot.
- An exception occurs.
- An interrupt occurs.
2) For several errata, the coprocessor must be either operating in serialized mode or not be operating in
serialized mode. The coprocessor is operating in serialized mode if and only if both:
- At least one exception type is enabled by setting one of the following bits in the DSPSC: IXE, UFE,
OFE, or IOE.
- Serialization is not specifically disabled by setting the AEXC bit in the DSPSC.
3) For several errata, an instruction must update an accumulator. These include all of the following:
- Moves to accumulators: cfmva32, cfmva64, cfmval32, cfmvam32, cfmvah32.
- Arithmetic into accumulators: cfmadd32, cfmadda32, cfmsub32, cfmsuba32.
4) For several errata, an instruction must be any two-word coprocessor load or store. These include cfldr64,
cfldrd, cfstr64, and cfstrd.
The following table summarizes MaverickCrunch errata.
Several of the errata are sensitive to certain coprocessor instructions appearing early in an interrupt or
exception handler. To avoid seeing any errata due to such instructions, insure that no coprocessor
instructions appear in the instruction stream within the first seven instructions after an interrupt or exception.
Note that, typically, the first three instructions in this stream would be a branch in the jump table followed by
the two instructions in the branch delay slot.
Erratum Failing Coprocessor Instructions Mode Result Workaround
1. two-word load / store register or memory corruption change sequence
2. instruction with source operand bad calculation or stored value change sequence
3. two-word load / store register or memory corruption change sequence
4. two-word store forwarding,
not serialized memory corruption change sequence
5. cfrshl32, cfrshl64 serialized bad calculation unserialized mode,
substitute ARM code sequence
6. ldr32, mv64lr bad sign extension in register add correcting code sequence
7. accumulator updates accumulator corruption change sequence
8. accumulator updates accumulator corruption change sequence
9. accumulator updates accumulator corruption change sequence
10. accumulator updates serialized accumulator corruption unserialized mode
11. two-word load / store memory or register corruption change sequence
12. floating point add, cpy, abs, neg
denorm operand forced to
zero, cpy/neg never produces
+zero
none
13. cfcvtds never produces denorms none