diff options
Diffstat (limited to 'sim/testsuite/cris/asm/tb.ms')
-rw-r--r-- | sim/testsuite/cris/asm/tb.ms | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/sim/testsuite/cris/asm/tb.ms b/sim/testsuite/cris/asm/tb.ms new file mode 100644 index 0000000..eb6eaf9 --- /dev/null +++ b/sim/testsuite/cris/asm/tb.ms @@ -0,0 +1,72 @@ +#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 |