| #mach: crisv32 |
| #output: Basic clock cycles, total @: 54\n |
| #output: Memory source stall cycles: 0\n |
| #output: Memory read-after-write stall cycles: 0\n |
| #output: Movem source stall cycles: 0\n |
| #output: Movem destination stall cycles: 0\n |
| #output: Movem address stall cycles: 0\n |
| #output: Multiplication source stall cycles: 0\n |
| #output: Jump source stall cycles: 0\n |
| #output: Branch misprediction stall cycles: 18\n |
| #output: Jump target stall cycles: 0\n |
| #sim: --cris-cycles=basic |
| |
| ; Check branch penalties. It is assumed that the taken-counters |
| ; in the bimodal branch-predictors start at 0, meaning two taken |
| ; branches are required for a branch to be predicted as taken |
| ; for each counter, from reset. None of these branches go |
| ; to the end of a cache-line and none map to the same counter. |
| |
| .include "testutils.inc" |
| startnostack |
| ba 0f ; No penalty: always-taken condition not "predicted". |
| nop |
| nop |
| 0: |
| setf c |
| bcs 0f ; Penalty 2 cycles. |
| nop |
| |
| nop |
| 0: |
| clearf c |
| bcc 0f ; Penalty 2 cycles, though branch is a nop. |
| moveq 4,r0 ; Execute 5 times: |
| |
| 0: |
| move.d r0,r0 |
| bne 0b ; Mispredicted 3 out of 5 times: penalty 3*2 cycles. |
| subq 1,r0 |
| |
| 0: |
| beq 0f ; Not taken; no penalty. |
| nop |
| |
| nop |
| 0: |
| |
| ; (Almost) same insns, but with 16-bit bCC insns. |
| |
| ba 0f ; No penalty: always-taken condition not "predicted". |
| nop |
| .space 520 |
| 0: |
| setf c |
| bcs 0f ; Penalty 2 cycles. |
| nop |
| |
| .space 520 |
| 0: |
| moveq 4,r0 ; Execute 5 times: |
| 0: |
| ba 1f |
| move.d r0,r0 ; Mispredicted 3 out of 5 times: |
| .space 520 |
| 1: |
| bne 0b ; Penalty 3*2 cycles. |
| subq 1,r0 |
| |
| beq 0f ; Not taken; no penalty. |
| nop |
| 0: |
| break 15 |