-
Notifications
You must be signed in to change notification settings - Fork 440
Open
Description
Environment Setup
vortex: 31e4765
Bug Description
We noticed that the srai instruction in simx is incorrectly decoded as srli, 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:
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'
Further cross-validation with rtlsim:
./ci/blackbox.sh --cores=2 --app=arith
We obtain:
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!
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:
case 5: { // RV32I: SRA/SRL
instr->setOpType((funct7 == 0x20) ? AluType::SRA : AluType::SRL);
break;
}The patch is as follows:
#320
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels