cvw/testsBP
Ross Thompson e73e16e57a Created special test for driving the instruction spill error.
The extact problem occurs when a 4 byte instruction startles two cache blocks (or without a cache two ahbi words) and the code jumps to a cache block other than the next cache block. Consider the following sample of code.

0000000000000080 <test_spill>:
  80:	42a9                	li	t0,10
  82:	0001                	nop
  84:	0001                	nop
  86:	0001                	nop
  88:	02bd                	addi	t0,t0,15
  8a:	00628e33          	add	t3,t0,t1
  8e:	01ce8963          	beq	t4,t3,a0 <match>

0000000000000092 <failure>:
  92:	557d                	li	a0,-1
  94:	8082                	ret
  96:	00000013          	nop
  9a:	00000013          	nop
  9e:	0001                	nop

00000000000000a0 <match>:
  a0:	1ffd                	addi	t6,t6,-1
  a2:	fc0f9fe3          	bnez	t6,80 <test_spill>
  a6:	4501                	li	a0,0
  a8:	8082                	ret

Instructions 0x88, 0x8a and 0x8e are read incorrectly.  However once the branch predictor begins to correctly predict the beq at 0x8e the instrution at 0xa0 is loaded incorrectly as the 2 upper bytes of 0x8e and the two bytes of 0x92.  This amalgamation causes c.addi at 0xa0 to do something else and the loop never terminates.

The button of wavefile wave.do shows the exact problem in the 'icache'.
2021-04-08 15:05:08 -05:00
..
crt0 Switch to use RV64IC for the benchmarks. 2021-04-07 19:12:43 -05:00
mibench_qsort Switch to use RV64IC for the benchmarks. 2021-04-07 19:12:43 -05:00
sieve Switch to use RV64IC for the benchmarks. 2021-04-07 19:12:43 -05:00
simple Created special test for driving the instruction spill error. 2021-04-08 15:05:08 -05:00
linker.x added a whole bunch of interseting test code for branches which does not work. 2021-03-23 13:54:59 -05:00
makefile.inc Steps to getting branch predictor benchmarks running. 2021-04-06 21:20:51 -05:00