[PATCH v1] RISC-V: Add basic support for the vector extension
Palmer Dabbelt
palmer at dabbelt.com
Mon Mar 6 14:29:21 PST 2023
On Mon, 06 Mar 2023 14:23:22 PST (-0800), Conor Dooley wrote:
> From: Conor Dooley <conor.dooley at microchip.com>
>
> 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 <conor.dooley at microchip.com>
> ---
> This is based on top of patches already on the sparse list, adding
> support for some multi-letter extensions for RISC-V:
> https://lore.kernel.org/linux-sparse/20220811033138.20676-1-palmer@rivosinc.com/
> https://lore.kernel.org/linux-sparse/20220811052957.16634-1-palmer@rivosinc.com/
>
> CC: luc.vanoostenryck at gmail.com
> CC: palmer at dabbelt.com
> CC: linux-sparse at vger.kernel.org
> CC: linux-riscv at lists.infradead.org
> ---
> target-riscv.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/target-riscv.c b/target-riscv.c
> index 8338d7a6..c8282814 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 },
> @@ -147,6 +149,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");
V adds a bunch of V-subset extensions. I don't think we need to
faithfully handle those, but we should at least set the right element
type and length fields for V as code might depend on those.
>
> if (cmodel)
> predefine_strong("__riscv_cmodel_%s", cmodel);
More information about the linux-riscv
mailing list