Message ID | 20240605063154.31298-4-frank.chang@sifive.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Introduce extension implied rules | expand |
On Wed, Jun 5, 2024 at 4:34 PM <frank.chang@sifive.com> wrote: > > From: Frank Chang <frank.chang@sifive.com> > > Add MISA extension implied rules to enable the implied extensions > of MISA recursively. > > Signed-off-by: Frank Chang <frank.chang@sifive.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Alistair > --- > target/riscv/cpu.c | 50 +++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 49 insertions(+), 1 deletion(-) > > diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c > index c7e5cec7ef..a6e9055c5f 100644 > --- a/target/riscv/cpu.c > +++ b/target/riscv/cpu.c > @@ -2242,8 +2242,56 @@ RISCVCPUProfile *riscv_profiles[] = { > NULL, > }; > > +static RISCVCPUImpliedExtsRule RVA_IMPLIED = { > + .is_misa = true, > + .ext = RVA, > + .implied_exts = { > + CPU_CFG_OFFSET(ext_zalrsc), CPU_CFG_OFFSET(ext_zaamo), > + > + RISCV_IMPLIED_EXTS_RULE_END > + }, > +}; > + > +static RISCVCPUImpliedExtsRule RVD_IMPLIED = { > + .is_misa = true, > + .ext = RVD, > + .implied_misas = RVF, > + .implied_exts = { RISCV_IMPLIED_EXTS_RULE_END }, > +}; > + > +static RISCVCPUImpliedExtsRule RVF_IMPLIED = { > + .is_misa = true, > + .ext = RVF, > + .implied_exts = { > + CPU_CFG_OFFSET(ext_zicsr), > + > + RISCV_IMPLIED_EXTS_RULE_END > + }, > +}; > + > +static RISCVCPUImpliedExtsRule RVM_IMPLIED = { > + .is_misa = true, > + .ext = RVM, > + .implied_exts = { > + CPU_CFG_OFFSET(ext_zmmul), > + > + RISCV_IMPLIED_EXTS_RULE_END > + }, > +}; > + > +static RISCVCPUImpliedExtsRule RVV_IMPLIED = { > + .is_misa = true, > + .ext = RVV, > + .implied_exts = { > + CPU_CFG_OFFSET(ext_zve64d), > + > + RISCV_IMPLIED_EXTS_RULE_END > + }, > +}; > + > RISCVCPUImpliedExtsRule *riscv_misa_implied_rules[] = { > - NULL > + &RVA_IMPLIED, &RVD_IMPLIED, &RVF_IMPLIED, > + &RVM_IMPLIED, &RVV_IMPLIED, NULL > }; > > RISCVCPUImpliedExtsRule *riscv_ext_implied_rules[] = { > -- > 2.43.2 > >
diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index c7e5cec7ef..a6e9055c5f 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -2242,8 +2242,56 @@ RISCVCPUProfile *riscv_profiles[] = { NULL, }; +static RISCVCPUImpliedExtsRule RVA_IMPLIED = { + .is_misa = true, + .ext = RVA, + .implied_exts = { + CPU_CFG_OFFSET(ext_zalrsc), CPU_CFG_OFFSET(ext_zaamo), + + RISCV_IMPLIED_EXTS_RULE_END + }, +}; + +static RISCVCPUImpliedExtsRule RVD_IMPLIED = { + .is_misa = true, + .ext = RVD, + .implied_misas = RVF, + .implied_exts = { RISCV_IMPLIED_EXTS_RULE_END }, +}; + +static RISCVCPUImpliedExtsRule RVF_IMPLIED = { + .is_misa = true, + .ext = RVF, + .implied_exts = { + CPU_CFG_OFFSET(ext_zicsr), + + RISCV_IMPLIED_EXTS_RULE_END + }, +}; + +static RISCVCPUImpliedExtsRule RVM_IMPLIED = { + .is_misa = true, + .ext = RVM, + .implied_exts = { + CPU_CFG_OFFSET(ext_zmmul), + + RISCV_IMPLIED_EXTS_RULE_END + }, +}; + +static RISCVCPUImpliedExtsRule RVV_IMPLIED = { + .is_misa = true, + .ext = RVV, + .implied_exts = { + CPU_CFG_OFFSET(ext_zve64d), + + RISCV_IMPLIED_EXTS_RULE_END + }, +}; + RISCVCPUImpliedExtsRule *riscv_misa_implied_rules[] = { - NULL + &RVA_IMPLIED, &RVD_IMPLIED, &RVF_IMPLIED, + &RVM_IMPLIED, &RVV_IMPLIED, NULL }; RISCVCPUImpliedExtsRule *riscv_ext_implied_rules[] = {