From 3a41dd055be9184e1d65ea7f3434f487847eb1dd Mon Sep 17 00:00:00 2001 From: Conor Dooley Date: Mon, 6 Mar 2023 22:23:22 +0000 Subject: RISC-V: Add basic support for the vector extension I've started hitting this in CI while testing Andy's vector enablement series. I'm not entirely sure if there is more to do here, other than squeezing in the duplicate of what has been done for other extensions. Signed-off-by: Conor Dooley Signed-off-by: Luc Van Oostenryck --- target-riscv.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/target-riscv.c b/target-riscv.c index 7a184973..b495386c 100644 --- a/target-riscv.c +++ b/target-riscv.c @@ -21,6 +21,7 @@ #define RISCV_ZIFENCEI (1 << 11) #define RISCV_ZICBOM (1 << 12) #define RISCV_ZIHINTPAUSE (1 << 13) +#define RISCV_VECTOR (1 << 14) static unsigned int riscv_flags; @@ -41,6 +42,7 @@ static void parse_march_riscv(const char *arg) { "f", RISCV_FLOAT|RISCV_FDIV|RISCV_ZICSR }, { "d", RISCV_DOUBLE|RISCV_FDIV|RISCV_ZICSR }, { "c", RISCV_COMP }, + { "v", RISCV_VECTOR }, { "_zicsr", RISCV_ZICSR }, { "_zifencei", RISCV_ZIFENCEI }, { "_zicbom", RISCV_ZICBOM }, @@ -139,6 +141,8 @@ static void predefine_riscv(const struct target *self) predefine("__riscv_zicbom", 1, "1"); if (riscv_flags & RISCV_ZIHINTPAUSE) predefine("__riscv_zihintpause", 1, "1"); + if (riscv_flags & RISCV_VECTOR) + predefine("__riscv_vector", 1, "1"); if (cmodel) predefine_strong("__riscv_cmodel_%s", cmodel); -- cgit 1.2.3-korg From 8264c2019f75563cf8704e4385f90b3020a468a7 Mon Sep 17 00:00:00 2001 From: Luc Van Oostenryck Date: Sun, 21 Jan 2024 02:23:40 +0100 Subject: riscv: add predefines for v_min_vlen, v_elen & v_elen_fp These may be needed once the V extension is enabled. So add them. Signed-off-by: Luc Van Oostenryck --- target-riscv.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/target-riscv.c b/target-riscv.c index b495386c..910aa0ad 100644 --- a/target-riscv.c +++ b/target-riscv.c @@ -141,8 +141,12 @@ static void predefine_riscv(const struct target *self) predefine("__riscv_zicbom", 1, "1"); if (riscv_flags & RISCV_ZIHINTPAUSE) predefine("__riscv_zihintpause", 1, "1"); - if (riscv_flags & RISCV_VECTOR) + if (riscv_flags & RISCV_VECTOR) { predefine("__riscv_vector", 1, "1"); + predefine("__riscv_v_min_vlen", 1, "128"); + predefine("__riscv_v_elen", 1, "64"); + predefine("__riscv_v_elen_fp", 1, "64"); + } if (cmodel) predefine_strong("__riscv_cmodel_%s", cmodel); -- cgit 1.2.3-korg From 3500cba405b71492fee7a07ac4fed21046311928 Mon Sep 17 00:00:00 2001 From: Luc Van Oostenryck Date: Sun, 21 Jan 2024 00:29:10 +0100 Subject: riscv: V extension implies F & D So, add the corresponding flags. Signed-off-by: Luc Van Oostenryck --- target-riscv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target-riscv.c b/target-riscv.c index 910aa0ad..d90f45a5 100644 --- a/target-riscv.c +++ b/target-riscv.c @@ -42,7 +42,7 @@ static void parse_march_riscv(const char *arg) { "f", RISCV_FLOAT|RISCV_FDIV|RISCV_ZICSR }, { "d", RISCV_DOUBLE|RISCV_FDIV|RISCV_ZICSR }, { "c", RISCV_COMP }, - { "v", RISCV_VECTOR }, + { "v", RISCV_VECTOR|RISCV_FPU|RISCV_ZICSR }, { "_zicsr", RISCV_ZICSR }, { "_zifencei", RISCV_ZIFENCEI }, { "_zicbom", RISCV_ZICBOM }, -- cgit 1.2.3-korg From 77b30af89aa02b98420b9cff6bdc6892647e00f1 Mon Sep 17 00:00:00 2001 From: Luc Van Oostenryck Date: Sun, 21 Jan 2024 00:29:17 +0100 Subject: riscv: G extension implies Zicsr & Zifencei So, add the corresponding flags. Signed-off-by: Luc Van Oostenryck --- target-riscv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target-riscv.c b/target-riscv.c index d90f45a5..d30be04b 100644 --- a/target-riscv.c +++ b/target-riscv.c @@ -16,7 +16,7 @@ #define RISCV_COMP (1 << 8) #define RISCV_EMBD (1 << 9) #define RISCV_FPU (RISCV_FLOAT|RISCV_DOUBLE|RISCV_FDIV) -#define RISCV_GENERIC (RISCV_MUL|RISCV_DIV|RISCV_ATOMIC|RISCV_FPU) +#define RISCV_GENERIC (RISCV_MUL|RISCV_DIV|RISCV_ATOMIC|RISCV_FPU|RISCV_ZICSR|RISCV_ZIFENCEI) #define RISCV_ZICSR (1 << 10) #define RISCV_ZIFENCEI (1 << 11) #define RISCV_ZICBOM (1 << 12) -- cgit 1.2.3-korg