On Thu, Apr 28, 2016 at 05:06:14PM -0400, Michael Meissner wrote:
Hi Mike,

>       * config/rs6000/rs6000.c (rs6000_hard_regno_nregs_internal): Add
>       support for __float128 complex datatypes.
>       (rs6000_hard_regno_mode_ok): Likewise.
>       (rs6000_setup_reg_addr_masks): Likewise.
>       (rs6000_complex_function_value): Likewise.
> 
>       * config/rs6000/rs6000.h (FLOAT128_IEEE_P): Add support for
>       __float128 and __ibm128 complex.
>       (FLOAT128_IBM_P): Likewise.
>       (ALTIVEC_COMPLEX): Likewise.
>       (ALTIVEC_ARG_MAX_RETURN): Likewise.
> 
>       * doc/extend.texi (Additional Floating Types): Document that
>       -mfloat128 must be used to enable __float128.  Document complex
>       __float128 and __ibm128 support.
> 
> [gcc/testsuite]
> 2016-04-28  Michael Meissner  <meiss...@linux.vnet.ibm.com>
> 
>       * gcc.target/powerpc/float128-complex-1.c: New test for complex
>       __float128.

It is more normal to not have blank lines between files in the changelog.

>  #define FLOAT128_IEEE_P(MODE)                                                
> \
> -  (((MODE) == TFmode && TARGET_IEEEQUAD)                             \
> -   || ((MODE) == KFmode))
> +  ((TARGET_IEEEQUAD && ((MODE) == TFmode || (MODE) == TCmode))               
> \
> +   || ((MODE) == KFmode) || ((MODE) == KCmode))
>  
>  #define FLOAT128_IBM_P(MODE)                                         \
> -  (((MODE) == TFmode && !TARGET_IEEEQUAD)                            \
> -   || ((MODE) == IFmode))
> +  ((!TARGET_IEEEQUAD && ((MODE) == TFmode || (MODE) == TCmode))              
> \
> +   || ((MODE) == IFmode) || ((MODE) == ICmode))

Maybe these should be inline functions now?

> +/* _Complex __float128 needs two registers.  */
> +#define ALTIVEC_COMPLEX      ((TARGET_FLOAT128) ? 1 : 0)

This name is pretty confusing, way too generic too.  It is only used
right below, you can just code it there?

>  /* Return registers */
>  #define GP_ARG_RETURN GP_ARG_MIN_REG
>  #define FP_ARG_RETURN FP_ARG_MIN_REG
>  #define ALTIVEC_ARG_RETURN (FIRST_ALTIVEC_REGNO + 2)
>  #define FP_ARG_MAX_RETURN (DEFAULT_ABI != ABI_ELFv2 ? FP_ARG_RETURN  \
>                          : (FP_ARG_RETURN + AGGR_ARG_NUM_REG - 1))
> -#define ALTIVEC_ARG_MAX_RETURN (DEFAULT_ABI != ABI_ELFv2 ? 
> ALTIVEC_ARG_RETURN \
> +#define ALTIVEC_ARG_MAX_RETURN (DEFAULT_ABI != ABI_ELFv2              \
> +                             ? (ALTIVEC_ARG_RETURN + ALTIVEC_COMPLEX) \
>                               : (ALTIVEC_ARG_RETURN + AGGR_ARG_NUM_REG - 1))

So you are changing the ABI here (for non-v2).  Are there any complications
to that, is it compatible in all cases?

> -#define PRINT_OPERAND_PUNCT_VALID_P(CODE)  ((CODE) == '&')
> +#define PRINT_OPERAND_PUNCT_VALID_P(CODE)  ((CODE) == '&' || (CODE) == '@')

I think you mixed this in from another change?


Segher

Reply via email to