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,
                    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.

A 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.