SPRAD27A July 2022 – August 2022 AM2431 , AM2432 , AM2434 , AM2631 , AM2631-Q1 , AM2632 , AM2632-Q1 , AM2634 , AM2634-Q1 , AM2732 , AM2732-Q1 , AM6411 , AM6412 , AM6421 , AM6422 , AM6441 , AM6442
Using branches in functions creates unpredictability in the exact cycle count as the branch predictor may not predict correctly and any missed predictions cost approximately 8 cycles/miss. Arm provides conditional instructions that can be used in place of branch statements, ensuring that the functions always execute in the same number of cycles. Figure 4-1 shows that the conditional codes that can be appended to instructions.
The main reason for creating the .asm versions of the trigonometric functions was to remove branches inserted by the compiler and replace with conditional instructions instead. This had the effect of reducing the max cycles due to incorrect branch predictions. This reduction was enabled by replacing branch instructions with conditional operations. The delta between the max and the average could not be completely removed as the algorithm contains some divide instructions in the range reduction code which are conditionally implemented depending on the input values.