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~

Reply via email to