> diff --git a/gcc/config/riscv/riscv_th_vector.h > b/gcc/config/riscv/riscv_th_vector.h > new file mode 100644 > index 00000000000..6f47e0c90a4 > --- /dev/null > +++ b/gcc/config/riscv/riscv_th_vector.h > @@ -0,0 +1,49 @@ > +/* RISC-V 'XTheadVector' Extension intrinsics include file. > + Copyright (C) 2022-2023 Free Software Foundation, Inc. > + > + This file is part of GCC. > + > + GCC is free software; you can redistribute it and/or modify it > + under the terms of the GNU General Public License as published > + by the Free Software Foundation; either version 3, or (at your > + option) any later version. > + > + GCC is distributed in the hope that it will be useful, but WITHOUT > + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY > + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public > + License for more details. > + > + Under Section 7 of GPL version 3, you are granted additional > + permissions described in the GCC Runtime Library Exception, version > + 3.1, as published by the Free Software Foundation. > + > + You should have received a copy of the GNU General Public License and > + a copy of the GCC Runtime Library Exception along with this program; > + see the files COPYING3 and COPYING.RUNTIME respectively. If not, see > + <http://www.gnu.org/licenses/>. */ > + > +#ifndef __RISCV_TH_VECTOR_H > +#define __RISCV_TH_VECTOR_H > + > +#include <stdint.h> > +#include <stddef.h> > + > +#ifndef __riscv_xtheadvector > +#error "XTheadVector intrinsics require the xtheadvector extension." > +#else > +#ifdef __cplusplus > +extern "C" { > +#endif > + > +/* NOTE: This implementation of riscv_th_vector.h is intentionally short. > It does > + not define the RVV types and intrinsic functions directly in C and C++ > + code, but instead uses the following pragma to tell GCC to insert the > + necessary type and function definitions itself. The net effect is the > + same, and the file is a complete implementation of riscv_th_vector.h. */ > +#pragma riscv intrinsic "vector"
#pragma riscv intrinsic "theadvector" Don't reuse `#pragma riscv intrinsic "vector"` to prevent including riscv_vector.h work with __riscv_xtheadvector. I know we already guarded with ifndef __riscv_xtheadvector and ifndef __riscv_vector for now, but we eventually will remove that due to multi-version function support. e.g. a.c compile with -march=rv64gc a.c: #include <riscv_vector.h> void foo(){ ... } void foo_vector () __attribute__(("arch=+v")); void foo_vector () { // Use vector intrinsic to implement something }