Some of my code was placed after a jump. Will it ever be reached?
eTPU_C is a pipelined processor. It can sometimes process instructions out of order. An jump takes time to process, so the following instruction can be loaded and executed before the jump takes place.
erta = 23; 020C 1C5F2FFE alu erta = #0x17. 0210 ertb = 45; 0210 1CBF3FBE alu ertb = #0x2D. 0214 channel.ERWA = 0; channel.ERWB = 0; channel.MTD = 0; } 0214 F7E0111F jump 0220,noflush. else 0218 FF3FACFB chan write_erta, write_ertb, mtd = enable_mtsr.
In this example,
chan operations take place before the change in program flow. The
noflush subinstruction in the jump prevents the processor from flushing the pipeline and obliterating the instruction following the jump.
jump subinstruction with a
flush subinstruction does not allow the instruction following to execute. The following instruction is probably an entry point for a different function or code block.