On 29 May 2012 05:13, Matt Turner wrote:
> From: Xinyu Qi
>
> gcc/
> * config/arm/arm.c (enum arm_builtins): Revise built-in fcode.
> (IWMMXT2_BUILTIN): New define.
> (IWMMXT2_BUILTIN2): Likewise.
> (iwmmx2_mbuiltin): Likewise.
> (builtin_description bdesc_2arg): Revise built in declaration.
> (builtin_description bdesc_1arg): Likewise.
> (arm_init_iwmmxt_builtins): Revise built in initialization.
> (arm_expand_builtin): Revise built in expansion.
> ---
> gcc/config/arm/arm.c | 620
> +-
> 1 files changed, 559 insertions(+), 61 deletions(-)
>
> diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
> index b0680ab..51eed40 100644
> --- a/gcc/config/arm/arm.c
> +++ b/gcc/config/arm/arm.c
> @@ -19637,8 +19637,15 @@ static neon_builtin_datum neon_builtin_data[] =
> FIXME? */
> enum arm_builtins
> {
> - ARM_BUILTIN_GETWCX,
> - ARM_BUILTIN_SETWCX,
> + ARM_BUILTIN_GETWCGR0,
> + ARM_BUILTIN_GETWCGR1,
> + ARM_BUILTIN_GETWCGR2,
> + ARM_BUILTIN_GETWCGR3,
> +
> + ARM_BUILTIN_SETWCGR0,
> + ARM_BUILTIN_SETWCGR1,
> + ARM_BUILTIN_SETWCGR2,
> + ARM_BUILTIN_SETWCGR3,
>
> ARM_BUILTIN_WZERO,
>
> @@ -19661,7 +19668,11 @@ enum arm_builtins
> ARM_BUILTIN_WSADH,
> ARM_BUILTIN_WSADHZ,
>
> - ARM_BUILTIN_WALIGN,
> + ARM_BUILTIN_WALIGNI,
> + ARM_BUILTIN_WALIGNR0,
> + ARM_BUILTIN_WALIGNR1,
> + ARM_BUILTIN_WALIGNR2,
> + ARM_BUILTIN_WALIGNR3,
>
> ARM_BUILTIN_TMIA,
> ARM_BUILTIN_TMIAPH,
> @@ -19797,6 +19808,81 @@ enum arm_builtins
> ARM_BUILTIN_WUNPCKELUH,
> ARM_BUILTIN_WUNPCKELUW,
>
> + ARM_BUILTIN_WABSB,
> + ARM_BUILTIN_WABSH,
> + ARM_BUILTIN_WABSW,
> +
> + ARM_BUILTIN_WADDSUBHX,
> + ARM_BUILTIN_WSUBADDHX,
> +
> + ARM_BUILTIN_WABSDIFFB,
> + ARM_BUILTIN_WABSDIFFH,
> + ARM_BUILTIN_WABSDIFFW,
> +
> + ARM_BUILTIN_WADDCH,
> + ARM_BUILTIN_WADDCW,
> +
> + ARM_BUILTIN_WAVG4,
> + ARM_BUILTIN_WAVG4R,
> +
> + ARM_BUILTIN_WMADDSX,
> + ARM_BUILTIN_WMADDUX,
> +
> + ARM_BUILTIN_WMADDSN,
> + ARM_BUILTIN_WMADDUN,
> +
> + ARM_BUILTIN_WMULWSM,
> + ARM_BUILTIN_WMULWUM,
> +
> + ARM_BUILTIN_WMULWSMR,
> + ARM_BUILTIN_WMULWUMR,
> +
> + ARM_BUILTIN_WMULWL,
> +
> + ARM_BUILTIN_WMULSMR,
> + ARM_BUILTIN_WMULUMR,
> +
> + ARM_BUILTIN_WQMULM,
> + ARM_BUILTIN_WQMULMR,
> +
> + ARM_BUILTIN_WQMULWM,
> + ARM_BUILTIN_WQMULWMR,
> +
> + ARM_BUILTIN_WADDBHUSM,
> + ARM_BUILTIN_WADDBHUSL,
> +
> + ARM_BUILTIN_WQMIABB,
> + ARM_BUILTIN_WQMIABT,
> + ARM_BUILTIN_WQMIATB,
> + ARM_BUILTIN_WQMIATT,
> +
> + ARM_BUILTIN_WQMIABBN,
> + ARM_BUILTIN_WQMIABTN,
> + ARM_BUILTIN_WQMIATBN,
> + ARM_BUILTIN_WQMIATTN,
> +
> + ARM_BUILTIN_WMIABB,
> + ARM_BUILTIN_WMIABT,
> + ARM_BUILTIN_WMIATB,
> + ARM_BUILTIN_WMIATT,
> +
> + ARM_BUILTIN_WMIABBN,
> + ARM_BUILTIN_WMIABTN,
> + ARM_BUILTIN_WMIATBN,
> + ARM_BUILTIN_WMIATTN,
> +
> + ARM_BUILTIN_WMIAWBB,
> + ARM_BUILTIN_WMIAWBT,
> + ARM_BUILTIN_WMIAWTB,
> + ARM_BUILTIN_WMIAWTT,
> +
> + ARM_BUILTIN_WMIAWBBN,
> + ARM_BUILTIN_WMIAWBTN,
> + ARM_BUILTIN_WMIAWTBN,
> + ARM_BUILTIN_WMIAWTTN,
> +
> + ARM_BUILTIN_WMERGE,
> +
> ARM_BUILTIN_THREAD_POINTER,
>
> ARM_BUILTIN_NEON_BASE,
> @@ -20329,6 +20415,10 @@ static const struct builtin_description bdesc_2arg[]
> =
> { FL_IWMMXT, CODE_FOR_##code, "__builtin_arm_" string, \
> ARM_BUILTIN_##builtin, UNKNOWN, 0 },
>
> +#define IWMMXT2_BUILTIN(code, string, builtin) \
> + { FL_IWMMXT2, CODE_FOR_##code, "__builtin_arm_" string, \
> + ARM_BUILTIN_##builtin, UNKNOWN, 0 },
> +
> IWMMXT_BUILTIN (addv8qi3, "waddb", WADDB)
> IWMMXT_BUILTIN (addv4hi3, "waddh", WADDH)
> IWMMXT_BUILTIN (addv2si3, "waddw", WADDW)
> @@ -20385,44 +20475,45 @@ static const struct builtin_description
> bdesc_2arg[] =
> IWMMXT_BUILTIN (iwmmxt_wunpckihb, "wunpckihb", WUNPCKIHB)
> IWMMXT_BUILTIN (iwmmxt_wunpckihh, "wunpckihh", WUNPCKIHH)
> IWMMXT_BUILTIN (iwmmxt_wunpckihw, "wunpckihw", WUNPCKIHW)
> - IWMMXT_BUILTIN (iwmmxt_wmadds, "wmadds", WMADDS)
> - IWMMXT_BUILTIN (iwmmxt_wmaddu, "wmaddu", WMADDU)
> + IWMMXT2_BUILTIN (iwmmxt_waddsubhx, "waddsubhx", WADDSUBHX)
> + IWMMXT2_BUILTIN (iwmmxt_wsubaddhx, "wsubaddhx", WSUBADDHX)
> + IWMMXT2_BUILTIN (iwmmxt_wabsdiffb, "wabsdiffb", WABSDIFFB)
> + IWMMXT2_BUILTIN (iwmmxt_wabsdiffh, "wabsdiffh", WABSDIFFH)
> + IWMMXT2_BUILTIN (iwmmxt_wabsdiffw, "wabsdiffw", WABSDIFFW)
> + IWMMXT2_BUILTIN (iwmmxt_avg4, "wavg4", WAVG4)
> + IWMMXT2_BUILTIN (iwmmxt_avg4r, "wavg4r", WAVG4R)
> + IWMMXT2_BUILTIN (iwmmxt_wmulwsm, "wmulwsm", WMULWSM)
> + IWMMXT2_BUILTIN (iwmmxt_wmulwum, "wmulwum", WMULWUM)
> + IWMMXT2_BUILTIN (iwmmxt_wmulwsmr, "wmulwsmr", WMULWSMR)
> + IWMMXT2_BUILTIN (iwmmxt_wmulwumr, "wmulwumr", WMULWUMR)
> + IWMMXT2_BUILTIN (iwmmxt_wmulwl, "wmulwl", WMULWL)
> + IWMMXT2_BUILTIN (iwmmxt_wmulsmr, "wmulsmr", WMULSMR)
> + IWMMXT2_BUILTIN (iwmmxt_wmulumr, "wmulumr", WMULUMR)
> + IWMMXT2_BUILTIN (iwmmxt_wqmulm, "wqmulm", WQMULM)
> + IWMMXT2_BUILTIN (iwmmxt_wqmulmr, "wqmulmr", W