On 8/20/24 10:01, Deepak Gupta wrote:
zicfilp introduces a new state elp ("expected landing pad") in cpu.
During normal execution, elp is idle (NO_LP_EXPECTED) i.e not expecting
landing pad. On an indirect call, elp moves LP_EXPECTED. When elp is
LP_EXPECTED, only a subsquent landing pad instruction can set state back
to NO_LP_EXPECTED. On reset, elp is set to NO_LP_EXPECTED.
zicfilp is enabled via bit2 in *envcfg CSRs. Enabling control for M-mode
is in mseccfg CSR at bit position 10.
On trap, elp state is saved away in *status.
Signed-off-by: Deepak Gupta<de...@rivosinc.com>
Co-developed-by: Jim Shu<jim....@sifive.com>
Co-developed-by: Andy Chiu<andy.c...@sifive.com>
Reviewed-by: Richard Henderson<richard.hender...@linaro.org>
---
target/riscv/cpu.c | 3 +++
target/riscv/cpu.h | 2 ++
target/riscv/cpu_bits.h | 6 ++++++
target/riscv/csr.c | 31 +++++++++++++++++++++++++++++++
target/riscv/pmp.c | 5 +++++
target/riscv/pmp.h | 3 ++-
6 files changed, 49 insertions(+), 1 deletion(-)
One thing missing here is to add
+ /* elp state for zicfilp extension */
+ bool elp;
this to the migration state, as a subsection under vmstate_riscv_cpu.
Sorry I missed this before...
r~