mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-02 22:41:07 +00:00
target/riscv: add cfg properties for Zc* extension
Add properties for Zca,Zcb,Zcf,Zcd,Zcmp,Zcmt extension. Add check for these properties. Signed-off-by: Weiwei Li <liweiwei@iscas.ac.cn> Signed-off-by: Junqiang Wang <wangjunqiang@iscas.ac.cn> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-Id: <20230307081403.61950-2-liweiwei@iscas.ac.cn> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
48249c023d
commit
2288a5ce43
2 changed files with 49 additions and 0 deletions
|
@ -939,6 +939,49 @@ static void riscv_cpu_validate_set_extensions(RISCVCPU *cpu, Error **errp)
|
|||
}
|
||||
}
|
||||
|
||||
if (cpu->cfg.ext_c) {
|
||||
cpu->cfg.ext_zca = true;
|
||||
if (cpu->cfg.ext_f && env->misa_mxl_max == MXL_RV32) {
|
||||
cpu->cfg.ext_zcf = true;
|
||||
}
|
||||
if (cpu->cfg.ext_d) {
|
||||
cpu->cfg.ext_zcd = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (env->misa_mxl_max != MXL_RV32 && cpu->cfg.ext_zcf) {
|
||||
error_setg(errp, "Zcf extension is only relevant to RV32");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!cpu->cfg.ext_f && cpu->cfg.ext_zcf) {
|
||||
error_setg(errp, "Zcf extension requires F extension");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!cpu->cfg.ext_d && cpu->cfg.ext_zcd) {
|
||||
error_setg(errp, "Zcd extension requires D extension");
|
||||
return;
|
||||
}
|
||||
|
||||
if ((cpu->cfg.ext_zcf || cpu->cfg.ext_zcd || cpu->cfg.ext_zcb ||
|
||||
cpu->cfg.ext_zcmp || cpu->cfg.ext_zcmt) && !cpu->cfg.ext_zca) {
|
||||
error_setg(errp, "Zcf/Zcd/Zcb/Zcmp/Zcmt extensions require Zca "
|
||||
"extension");
|
||||
return;
|
||||
}
|
||||
|
||||
if (cpu->cfg.ext_zcd && (cpu->cfg.ext_zcmp || cpu->cfg.ext_zcmt)) {
|
||||
error_setg(errp, "Zcmp/Zcmt extensions are incompatible with "
|
||||
"Zcd extension");
|
||||
return;
|
||||
}
|
||||
|
||||
if (cpu->cfg.ext_zcmt && !cpu->cfg.ext_icsr) {
|
||||
error_setg(errp, "Zcmt extension requires Zicsr extension");
|
||||
return;
|
||||
}
|
||||
|
||||
if (cpu->cfg.ext_zk) {
|
||||
cpu->cfg.ext_zkn = true;
|
||||
cpu->cfg.ext_zkr = true;
|
||||
|
|
|
@ -438,6 +438,12 @@ struct RISCVCPUConfig {
|
|||
bool ext_zbkc;
|
||||
bool ext_zbkx;
|
||||
bool ext_zbs;
|
||||
bool ext_zca;
|
||||
bool ext_zcb;
|
||||
bool ext_zcd;
|
||||
bool ext_zcf;
|
||||
bool ext_zcmp;
|
||||
bool ext_zcmt;
|
||||
bool ext_zk;
|
||||
bool ext_zkn;
|
||||
bool ext_zknd;
|
||||
|
|
Loading…
Reference in a new issue