new proposal to vector intrinsics in Fortran
Sa Liu
SALIU@de.ibm.com
Thu Nov 29 16:40:00 GMT 2007
Hello,
Is anybody still in charge in gfortran maintenance? Could any reviewer be
so kind to take a little bit time and look over this proposal?
What I'm doing is just to present our ideas for a possible feature, and
will by no means violate the open source rules. If there is anything you
dislike or disagree, we could discuss and improve it. Still you could
choose to reject it, but please say it alaud and don't simply ignore it. I
think this is the way that we keep open source community "open", isn't it?
Sa
Sa Liu/Germany/IBM wrote on 28.11.2007 20:17:38:
> Hello,
>
> After the abortion of the discussion about integrating target
> specific vector intrinsic functions in Gfortran frontend (http:
> //gcc.gnu.org/ml/fortran/2007-10/msg00230.html), we then tried to
> find a workaround to minimize changes in frontend code.
>
> As Fortran 2003 allows calling C functions in Fortran program, we
> could create for each backend a Fortran interface module, which
> consists of a list of functions, binding with their target builtins.
> By using this module, the Fortran program can call the builtin
> functions, as if they were normal C functions.
>
> Taken a SPU intrinsic spu_sync as an simple example:
>
> module spu_intrinsics
> use, intrinsic :: iso_c_binding
> implicit none
>
> interface
> subroutine spu_sync() bind(c, name="__builtin_si_sync")
> end subroutine spu_sync
> end interface
>
> end module spu_intrinsics
>
> program driver
> use spu_intrinsics
> call spu_sync()
> end program driver
>
> When reading the generated mod file, the spu_sync symbol is then
> saved in the program's namespace, and the binding label
> __builtin_si_sync could be used to connect the backend builtin. The
> only change we need in Fortran frontend, is then to bind these
> symbols' backend_decl with their function decls.
>
> Fortunately we already have these decls in frontend. When the
> frontend initialize builtins, it also calls targetm.init_buitins()
> to initialize backend builtins. The idea here is to build a new
> gfc_namspace, say backend_intrinsic_namespace, then keep the decls
> in it, and later bind the decls with there corresponding symbols in
> the interface module.
>
> We thought about building the new namespace in gfc_builtin_function,
> and in gfc_get_extern_function_decl, search the decl in this
> namespace, link the symbol with it if found any, before the frontend
> builds a new one. Through the backend_decl the frontend can then
> resolve the intrinsic functions.
>
> Besides, we would still like to add the vector data type extension
> to Fortran frontend. The vector types could be initialized based on
> supported vector modes of a certain target, and by this means the
> other platform could manipulate their own vector data. The ISO-C
> bindings are to be extended with the new vector types too. Of course
> the whole vector stuff will be hidden behind a flag, and the users
> who don't program with vector will not be disturbed by this new feature.
>
> Is this something probably acceptable by Gfortran? Any ideas,
> revisions, suggestions, criticisms... are welcome!
>
> Thanks!
> Sa
More information about the Fortran
mailing list