Hi, this is a first patchset moving towards single-binary support for riscv. Additional patchsets for hw/ and target/ are based on this one so it's best to make sure the approach taken is ok. Most patches in this set concern fields in CPUArchState which are either widened (usually to uint64_t) or fixed to a smaller size which handles all use cases.
General purpose registers and fields mapped to TCG are dealt with by widening the type and applying an offset to tcg_global_mem_new() to correctly handle 32-bit targets on big endian hosts. Quick question to correct my understanding. AFAICT riscv64-softmmu is a superset of riscv32-softmmu which handles 32-, 64, and 128-bit ISAs, so concerning single-binary do we for the time being only need to support riscv64-softmmu? Let me know what you think of the direction taken here and if you would prefer something else. Anton Johansson (34): target/riscv: Use 32 bits for misa extensions target/riscv: Fix size of trivial CPUArchState fields target/riscv: Fix size of mcause target/riscv: Fix size of mhartid target/riscv: Bugfix riscv_pmu_ctr_get_fixed_counters_val() target/riscv: Combine mhpmevent and mhpmeventh target/riscv: Combine mcyclecfg and mcyclecfgh target/riscv: Combine minstretcfg and minstretcfgh target/riscv: Combine mhpmcounter and mhpmcounterh target/riscv: Fix size of gpr and gprh target/riscv: Fix size of vector CSRs target/riscv: Fix size of pc, load_[val|res] target/riscv: Fix size of frm and fflags target/riscv: Fix size of badaddr and bins target/riscv: Fix size of guest_phys_fault_addr target/riscv: Fix size of priv_ver and vext_ver target/riscv: Fix size of retxh target/riscv: Fix size of ssp target/riscv: Fix size of excp_uw2 target/riscv: Fix size of sw_check_code target/riscv: Fix size of priv target/riscv: Fix size of gei fields target/riscv: Fix size of [m|s|vs]iselect fields target/riscv: Fix arguments to board IMSIC emulation callbacks target/riscv: Fix size of irq_overflow_left target/riscv: Indent PMUFixedCtrState correctly target/riscv: Replace target_ulong in riscv_cpu_get_trap_name() target/riscv: Replace target_ulong in riscv_ctr_add_entry() target/riscv: Fix size of trigger data target/riscv: Fix size of mseccfg target/riscv: Move debug.h include away from cpu.h target/riscv: Move CSR declarations to separate csr.h header target/riscv: Introduce externally facing CSR access functions target/riscv: Make pmp.h target_ulong agnostic target/riscv/cpu.h | 341 +++++++----------- target/riscv/csr.h | 93 +++++ target/riscv/debug.h | 2 - target/riscv/pmp.h | 20 +- hw/intc/riscv_imsic.c | 34 +- hw/riscv/riscv_hart.c | 7 +- linux-user/riscv/signal.c | 5 +- target/riscv/cpu.c | 11 +- target/riscv/cpu_helper.c | 37 +- target/riscv/csr.c | 284 ++++++++------- target/riscv/debug.c | 1 + target/riscv/fpu_helper.c | 6 +- target/riscv/gdbstub.c | 1 + target/riscv/kvm/kvm-cpu.c | 1 + target/riscv/machine.c | 133 ++++--- target/riscv/op_helper.c | 1 + target/riscv/pmp.c | 13 +- target/riscv/pmu.c | 150 ++------ target/riscv/tcg/tcg-cpu.c | 3 +- target/riscv/th_csr.c | 1 + target/riscv/translate.c | 53 ++- target/riscv/vector_helper.c | 22 +- .../riscv/insn_trans/trans_privileged.c.inc | 2 +- target/riscv/insn_trans/trans_rvi.c.inc | 16 +- target/riscv/insn_trans/trans_rvm.c.inc | 16 +- target/riscv/insn_trans/trans_rvv.c.inc | 22 +- target/riscv/insn_trans/trans_rvzicfiss.c.inc | 22 +- 27 files changed, 644 insertions(+), 653 deletions(-) create mode 100644 target/riscv/csr.h -- 2.51.0
