Download Errata Sheet
Transcript
Errata Sheet Functional Deviations CPU_TC.074 Interleaved LOOP/LOOPU instructions may cause GRWP Trap If a conditional loop instruction (LOOP) is executed after an unconditional loop instruction (LOOPU) a Global Register Write Protection (GRWP) Trap may be generated, even if the LOOP instruction does not use a global address register as its loop counter. In order to support zero-overhead loop execution the TriCore1 implementation caches certain attributes pertaining to loop instructions within the CPU. The TriCore1.3 CPU contains two loop cache buffers such that two loop (LOOP or LOOPU) instructions may be cached. One of the attributes cached is whether the loop instruction writes to a global address register (as its loop variable). For LOOP instructions this attribute is updated and read as expected. For LOOPU instructions this attribute is set but ignored by the LOOPU instruction when next encountered. The problem occurs because there is only one global address register write flag shared between the two loop caches. As such if LOOP and LOOPU instructions are interleaved, with the LOOPU instruction encountered and cached after the LOOP instruction, then the next execution of the LOOP instruction will find the global address register write flag set and, if global register writes are disabled (PSW.GW = 0), a GRWP trap will be incorrectly generated. Example: ... loopu_target_ ... loop_target_ ... LOOP A5, loop_target_ ... LOOPU loopu_target_ ... Workaround Enable global register write permission, PSW.GW = 1. TC1796, EES-BC, ES-BC, BC 62/226 Rel. 2.2, 2011-10-10