This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Intrinsics for PowerPC
- From: Ziemowit Laski <zlaski at apple dot com>
- To: Syd Polk <spolk at apple dot com>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Mon, 22 Dec 2003 17:54:43 -0800
- Subject: Re: [PATCH] Intrinsics for PowerPC
- References: <CFAD83AB-34E6-11D8-B099-0003931B8A28@apple.com>
On 22 Dec 2003, at 17.24, Syd Polk wrote:
The Metrowerks CodeWarrior compiler provides a set of builtin
functions that map down to single instructions so that developers can
issue one or two instructions without having to resort to inline
assembler. Here at Apple, we have emulated that functionality by
providing a combination of macros and inline functions that map to
CodeWarrior's functions.
Our implementation has some problems, however. Because many of these
instructions require immediate operands (not register loads), they
have to be implemented using macros; however, at least one of our
customers has macros on top of the intrinsic function which cause it
to fail compilation if the intrinsic is a macro. Also, by making them
builtins, we might later be able to do instruction scheduling with
them.
This patch is mainly to set up the structure for these intrinsics in
gcc. It only has one simple one, __eieio; later, it will be expanded
to the full set plus some others that have been asked for by
developers.
Bootstrapped on Darwin; OK to check in?
Generally looks OK, but I have a couple of comments, recently having
gone thru the rs6000.c baptism of fire myself:
1) Instead of creating a new .md file, perhaps you can add 'eieio' to
rs6000.md? (I'm a bit surprised it is not there already, actually...)
For most of the remaining intrinsics, I would expect/hope that the
corresponding instructions are already in rs6000.md.
2) To define the function signature for 'eieio', you may want to use
what's done elsewhere in the code:
tree void_ftype_void
= build_function_type (void_type_node, void_list_node);
as I'm not sure if 'build_function_type_list' will do what you want...
Aside from that (and Andrew's scheduler comments which went over my
head :-) ), I see no reason why these can't be checked in after a
bootstrap, but where? :-) :-) If you find out, please let me know, and
maybe I'll check in my AltiVec work there as well...
--Zem