On Mon, Apr 9, 2012 at 11:43 PM, Eric Botcazou <ebotca...@adacore.com> wrote:
> Hi,
>
> this adds generic support for __builtin_bswap16 (only PowerPC has it for now).
> It is mapped to the bswap optab in HImode, whose implementation is as follows:
>  - if a bswaphi2 pattern is present (PowerPC), it is directly used; or else
>  - if a rotlhi2/rotrhi2 pattern is present (x86), it is directly used, or else
>  - if ashlxx2 & lshrxx2 are present (SPARC), they are used to open-code the
> operation, or else,
>  - if a bswapsi2 pattern is present, it is used (with a final shift), 
> otherwise
>  - the bswapsi2 libcall is used (with a final shift).
>
> Since it is expected that most architectures will fall into one of the first 3
> cases, no __bswaphi2 symbol is added to libgcc.  And pass_optimize_bswap isn't
> modified to recognize the builtin either, as this seems overkill to me.
>
> Tested on x86, x86-64 and PowerPC Linux, OK for the mainline?

Ok.

Thanks,
Richard.

>
> 2012-04-09  Eric Botcazou  <ebotca...@adacore.com>
>
>        PR target/52624
>        * doc/extend.texi (Other Builtins): Document __builtin_bswap16.
>        (PowerPC AltiVec/VSX Built-in Functions): Remove it.
>        * builtin-types.def (BT_UINT16): New primitive type.
>        (BT_FN_UINT16_UINT16): New function type.
>        * builtins.def (BUILT_IN_BSWAP16): New.
>        * builtins.c (expand_builtin_bswap): Add TARGET_MODE argument.
>        (expand_builtin) <BUILT_IN_BSWAP16>: New case.  Pass TARGET_MODE to
>        expand_builtin_bswap.
>        * optabs.c (expand_unop): Deal with bswap in HImode specially.  Add
>        missing bits for bswap to libcall code.
>        * tree.c (build_common_tree_nodes): Build uint16_type_node.
>        * tree.h (enum tree_index): Add TI_UINT16_TYPE.
>        (uint16_type_node): New define.
>        * config/rs6000/rs6000-builtin.def (RS6000_BUILTIN_BSWAP_HI): Delete.
>        * config/rs6000/rs6000.c (rs6000_expand_builtin): Remove handling of
>        above builtin.
>        (rs6000_init_builtins): Likewise.
>        * config/rs6000/rs6000.md (bswaphi2): Add TARGET_POWERPC predicate.
>
>
> 2012-04-09  Eric Botcazou  <ebotca...@adacore.com>
>
> c-family/
>        * c-common.h (uint16_type_node): Rename into...
>        (c_uint16_type_node): ...this.
>        * c-common.c (c_common_nodes_and_builtins): Adjust for above renaming.
>        * c-cppbuiltin.c (builtin_define_stdint_macros): Likewise.
>
>
> 2012-04-09  Eric Botcazou  <ebotca...@adacore.com>
>
> testsuite/
>        * gcc.dg/builtin-bswap-1.c: Test __builtin_bswap16 & __builtin_bswap64.
>        * gcc.dg/builtin-bswap-4.c: Test __builtin_bswap16.
>        * gcc.dg/builtin-bswap-5.c: Likewise.
>        * gcc.target/i386/builtin-bswap-4.c: New test.
>
>
> --
> Eric Botcazou

Reply via email to