Below is our regression test. Please place it in the tests/regression/ directory.
Then execute: ./ci/blackbox.sh --cores=2 --app=arith --driver=simx
We obtain:
verify result
*** error: [0] expected=ffffffffffffc705, actual=1c705
*** error: [1] expected=fffffffffffffeb7, actual=1feb7
*** error: [2] expected=ffffffffffff2d7c, actual=12d7c
*** error: [3] expected=ffffffffffffada8, actual=1ada8
*** error: [4] expected=ffffffffffffc8ee, actual=1c8ee
*** error: [5] expected=ffffffffffff3fb5, actual=13fb5
*** error: [6] expected=ffffffffffff9078, actual=19078
*** error: [7] expected=ffffffffffff0df1, actual=10df1
*** error: [8] expected=ffffffffffffb5a8, actual=1b5a8
*** error: [9] expected=ffffffffffff2328, actual=12328
*** error: [10] expected=ffffffffffff1782, actual=11782
*** error: [11] expected=fffffffffffff102, actual=1f102
*** error: [12] expected=fffffffffffff2b9, actual=1f2b9
*** error: [13] expected=ffffffffffff71b0, actual=171b0
*** error: [14] expected=ffffffffffff3e0d, actual=13e0d
*** error: [15] expected=ffffffffffffae4f, actual=1ae4f
*** error: [16] expected=fffffffffffff902, actual=1f902
*** error: [17] expected=ffffffffffff53d2, actual=153d2
*** error: [18] expected=ffffffffffffc86a, actual=1c86a
*** error: [19] expected=ffffffffffff8870, actual=18870
*** error: [20] expected=ffffffffffff4abd, actual=14abd
*** error: [21] expected=fffffffffffffa94, actual=1fa94
*** error: [22] expected=ffffffffffff1787, actual=11787
*** error: [23] expected=ffffffffffff80ee, actual=180ee
*** error: [24] expected=ffffffffffff6e7c, actual=16e7c
*** error: [25] expected=ffffffffffffd535, actual=1d535
*** error: [26] expected=ffffffffffffba7a, actual=1ba7a
*** error: [27] expected=ffffffffffff0dd0, actual=10dd0
*** error: [28] expected=ffffffffffff35bb, actual=135bb
*** error: [29] expected=ffffffffffff1f26, actual=11f26
*** error: [30] expected=ffffffffffffcb48, actual=1cb48
*** error: [31] expected=ffffffffffff78da, actual=178da
*** error: [32] expected=ffffffffffff7a7d, actual=17a7d
*** error: [33] expected=ffffffffffffeaca, actual=1eaca
*** error: [34] expected=ffffffffffffce28, actual=1ce28
*** error: [35] expected=ffffffffffffd441, actual=1d441
*** error: [36] expected=ffffffffffff3b5f, actual=13b5f
*** error: [37] expected=fffffffffffff41c, actual=1f41c
*** error: [38] expected=ffffffffffffd75c, actual=1d75c
*** error: [39] expected=ffffffffffff2017, actual=12017
*** error: [40] expected=ffffffffffff1920, actual=11920
*** error: [41] expected=ffffffffffffcbd7, actual=1cbd7
*** error: [42] expected=ffffffffffffbb85, actual=1bb85
*** error: [43] expected=ffffffffffff80ce, actual=180ce
*** error: [44] expected=ffffffffffff5927, actual=15927
*** error: [45] expected=ffffffffffff6508, actual=16508
*** error: [46] expected=ffffffffffff6d6c, actual=16d6c
*** error: [47] expected=ffffffffffffe8ba, actual=1e8ba
*** error: [48] expected=ffffffffffffaa90, actual=1aa90
*** error: [49] expected=ffffffffffff2ad2, actual=12ad2
*** error: [50] expected=ffffffffffff46be, actual=146be
*** error: [51] expected=ffffffffffff919e, actual=1919e
*** error: [52] expected=ffffffffffffcdea, actual=1cdea
*** error: [53] expected=ffffffffffffd505, actual=1d505
*** error: [54] expected=fffffffffffffac5, actual=1fac5
*** error: [55] expected=ffffffffffffeb1f, actual=1eb1f
*** error: [56] expected=ffffffffffffea69, actual=1ea69
*** error: [57] expected=ffffffffffffe781, actual=1e781
*** error: [58] expected=ffffffffffff909d, actual=1909d
*** error: [59] expected=ffffffffffff972e, actual=1972e
*** error: [60] expected=ffffffffffff0846, actual=10846
*** error: [61] expected=ffffffffffff0e33, actual=10e33
*** error: [62] expected=ffffffffffffda1a, actual=1da1a
*** error: [63] expected=ffffffffffff5d9c, actual=15d9c
cleanup
PERF: core0: instrs=5133, cycles=21110, IPC=0.243155
PERF: core1: instrs=5133, cycles=21109, IPC=0.243166
PERF: instrs=10266, cycles=21110, IPC=0.486310
Found 64 errors!
FAILED!
make: *** [../common.mk:102: run-simx] Error 1
make: Leaving directory '/home/ain/vortex-poc/vortex/build/tests/regression/arith'
verify result
cleanup
PERF: core0: instrs=5134, cycles=19652, IPC=0.261246
PERF: core1: instrs=5134, cycles=19575, IPC=0.262273
PERF: instrs=10268, cycles=19652, IPC=0.522491
PASSED!
We found that the root cause is that when the immediate value of srai is greater than 32, it occupies the lower bits of funct7. The following decoding logic in decode.cpp, which uses ==, is incorrect:
Environment Setup
vortex: 31e4765
Bug Description
We noticed that the
sraiinstruction in simx is incorrectly decoded assrli, leading to wrong execution results:Below is our regression test. Please place it in the tests/regression/ directory.
Then execute: ./ci/blackbox.sh --cores=2 --app=arith --driver=simx
We obtain:
Further cross-validation with rtlsim:
./ci/blackbox.sh --cores=2 --app=arith
We obtain:
Patch
We found that the root cause is that when the immediate value of srai is greater than 32, it occupies the lower bits of funct7. The following decoding logic in decode.cpp, which uses ==, is incorrect:
The patch is as follows:
#320