re PR testsuite/61415 (PowerPC test gcc.target/powerpc/tfmode_off.c fails if -mlong-double-64)
gcc/ PR target/61415 * config/rs6000/rs6000-builtin.def (BU_MISC_1): Delete. (BU_MISC_2): Rename to ... (BU_LDBL128_2): ... this. * config/rs6000/rs6000.h (RS6000_BTM_LDBL128): New define. (RS6000_BTM_COMMON): Add RS6000_BTM_LDBL128. * config/rs6000/rs6000.c (rs6000_builtin_mask_calculate): Handle RS6000_BTM_LDBL128. (rs6000_invalid_builtin): Add long double 128-bit builtin support. (rs6000_builtin_mask_names): Add RS6000_BTM_LDBL128. * config/rs6000/rs6000.md (unpacktf_0): Remove define)expand. (unpacktf_1): Likewise. * doc/extend.texi (__builtin_longdouble_dw0): Remove documentation. (__builtin_longdouble_dw1): Likewise. * doc/sourcebuild.texi (longdouble128): Document. gcc/testsuite/ PR target/61415 * lib/target-supports.exp (check_effective_target_longdouble128): New. * gcc.target/powerpc/pack02.c: Use it. * gcc.target/powerpc/tfmode_off.c: Likewise. From-SVN: r211653
This commit is contained in:
parent
c7ece684ca
commit
8241efd129
@ -1,3 +1,21 @@
|
||||
2014-06-13 Peter Bergner <bergner@vnet.ibm.com>
|
||||
|
||||
PR target/61415
|
||||
* config/rs6000/rs6000-builtin.def (BU_MISC_1): Delete.
|
||||
(BU_MISC_2): Rename to ...
|
||||
(BU_LDBL128_2): ... this.
|
||||
* config/rs6000/rs6000.h (RS6000_BTM_LDBL128): New define.
|
||||
(RS6000_BTM_COMMON): Add RS6000_BTM_LDBL128.
|
||||
* config/rs6000/rs6000.c (rs6000_builtin_mask_calculate): Handle
|
||||
RS6000_BTM_LDBL128.
|
||||
(rs6000_invalid_builtin): Add long double 128-bit builtin support.
|
||||
(rs6000_builtin_mask_names): Add RS6000_BTM_LDBL128.
|
||||
* config/rs6000/rs6000.md (unpacktf_0): Remove define)expand.
|
||||
(unpacktf_1): Likewise.
|
||||
* doc/extend.texi (__builtin_longdouble_dw0): Remove documentation.
|
||||
(__builtin_longdouble_dw1): Likewise.
|
||||
* doc/sourcebuild.texi (longdouble128): Document.
|
||||
|
||||
2014-06-13 Jeff Law <law@redhat.com>
|
||||
|
||||
PR rtl-optimization/61094
|
||||
|
@ -622,19 +622,12 @@
|
||||
| RS6000_BTC_TERNARY), \
|
||||
CODE_FOR_ ## ICODE) /* ICODE */
|
||||
|
||||
/* Miscellaneous builtins. */
|
||||
#define BU_MISC_1(ENUM, NAME, ATTR, ICODE) \
|
||||
/* 128-bit long double floating point builtins. */
|
||||
#define BU_LDBL128_2(ENUM, NAME, ATTR, ICODE) \
|
||||
RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
|
||||
"__builtin_" NAME, /* NAME */ \
|
||||
RS6000_BTM_HARD_FLOAT, /* MASK */ \
|
||||
(RS6000_BTC_ ## ATTR /* ATTR */ \
|
||||
| RS6000_BTC_UNARY), \
|
||||
CODE_FOR_ ## ICODE) /* ICODE */
|
||||
|
||||
#define BU_MISC_2(ENUM, NAME, ATTR, ICODE) \
|
||||
RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
|
||||
"__builtin_" NAME, /* NAME */ \
|
||||
RS6000_BTM_HARD_FLOAT, /* MASK */ \
|
||||
(RS6000_BTM_HARD_FLOAT /* MASK */ \
|
||||
| RS6000_BTM_LDBL128), \
|
||||
(RS6000_BTC_ ## ATTR /* ATTR */ \
|
||||
| RS6000_BTC_BINARY), \
|
||||
CODE_FOR_ ## ICODE) /* ICODE */
|
||||
@ -1593,10 +1586,8 @@ BU_P8V_MISC_3 (BCDSUB_OV, "bcdsub_ov", CONST, bcdsub_unordered)
|
||||
BU_DFP_MISC_2 (PACK_TD, "pack_dec128", CONST, packtd)
|
||||
BU_DFP_MISC_2 (UNPACK_TD, "unpack_dec128", CONST, unpacktd)
|
||||
|
||||
BU_MISC_2 (PACK_TF, "pack_longdouble", CONST, packtf)
|
||||
BU_MISC_2 (UNPACK_TF, "unpack_longdouble", CONST, unpacktf)
|
||||
BU_MISC_1 (UNPACK_TF_0, "longdouble_dw0", CONST, unpacktf_0)
|
||||
BU_MISC_1 (UNPACK_TF_1, "longdouble_dw1", CONST, unpacktf_1)
|
||||
BU_LDBL128_2 (PACK_TF, "pack_longdouble", CONST, packtf)
|
||||
BU_LDBL128_2 (UNPACK_TF, "unpack_longdouble", CONST, unpacktf)
|
||||
|
||||
BU_P7_MISC_2 (PACK_V1TI, "pack_vector_int128", CONST, packv1ti)
|
||||
BU_P7_MISC_2 (UNPACK_V1TI, "unpack_vector_int128", CONST, unpackv1ti)
|
||||
|
@ -3041,7 +3041,8 @@ rs6000_builtin_mask_calculate (void)
|
||||
| ((TARGET_CRYPTO) ? RS6000_BTM_CRYPTO : 0)
|
||||
| ((TARGET_HTM) ? RS6000_BTM_HTM : 0)
|
||||
| ((TARGET_DFP) ? RS6000_BTM_DFP : 0)
|
||||
| ((TARGET_HARD_FLOAT) ? RS6000_BTM_HARD_FLOAT : 0));
|
||||
| ((TARGET_HARD_FLOAT) ? RS6000_BTM_HARD_FLOAT : 0)
|
||||
| ((TARGET_LONG_DOUBLE_128) ? RS6000_BTM_LDBL128 : 0));
|
||||
}
|
||||
|
||||
/* Override command line options. Mostly we process the processor type and
|
||||
@ -13589,11 +13590,15 @@ rs6000_invalid_builtin (enum rs6000_builtins fncode)
|
||||
else if ((fnmask & (RS6000_BTM_DFP | RS6000_BTM_P8_VECTOR))
|
||||
== (RS6000_BTM_DFP | RS6000_BTM_P8_VECTOR))
|
||||
error ("Builtin function %s requires the -mhard-dfp and"
|
||||
"-mpower8-vector options", name);
|
||||
" -mpower8-vector options", name);
|
||||
else if ((fnmask & RS6000_BTM_DFP) != 0)
|
||||
error ("Builtin function %s requires the -mhard-dfp option", name);
|
||||
else if ((fnmask & RS6000_BTM_P8_VECTOR) != 0)
|
||||
error ("Builtin function %s requires the -mpower8-vector option", name);
|
||||
else if ((fnmask & (RS6000_BTM_HARD_FLOAT | RS6000_BTM_LDBL128))
|
||||
== (RS6000_BTM_HARD_FLOAT | RS6000_BTM_LDBL128))
|
||||
error ("Builtin function %s requires the -mhard-float and"
|
||||
" -mlong-double-128 options", name);
|
||||
else if ((fnmask & RS6000_BTM_HARD_FLOAT) != 0)
|
||||
error ("Builtin function %s requires the -mhard-float option", name);
|
||||
else
|
||||
@ -31413,6 +31418,7 @@ static struct rs6000_opt_mask const rs6000_builtin_mask_names[] =
|
||||
{ "htm", RS6000_BTM_HTM, false, false },
|
||||
{ "hard-dfp", RS6000_BTM_DFP, false, false },
|
||||
{ "hard-float", RS6000_BTM_HARD_FLOAT, false, false },
|
||||
{ "long-double-128", RS6000_BTM_LDBL128, false, false },
|
||||
};
|
||||
|
||||
/* Option variables that we want to support inside attribute((target)) and
|
||||
|
@ -2508,8 +2508,8 @@ extern int frame_pointer_needed;
|
||||
#define RS6000_BTC_SAT RS6000_BTC_MISC /* saturate sets VSCR. */
|
||||
|
||||
/* Builtin targets. For now, we reuse the masks for those options that are in
|
||||
target flags, and pick two random bits for SPE and paired which aren't in
|
||||
target_flags. */
|
||||
target flags, and pick three random bits for SPE, paired and ldbl128 which
|
||||
aren't in target_flags. */
|
||||
#define RS6000_BTM_ALWAYS 0 /* Always enabled. */
|
||||
#define RS6000_BTM_ALTIVEC MASK_ALTIVEC /* VMX/altivec vectors. */
|
||||
#define RS6000_BTM_VSX MASK_VSX /* VSX (vector/scalar). */
|
||||
@ -2526,6 +2526,7 @@ extern int frame_pointer_needed;
|
||||
#define RS6000_BTM_CELL MASK_FPRND /* Target is cell powerpc. */
|
||||
#define RS6000_BTM_DFP MASK_DFP /* Decimal floating point. */
|
||||
#define RS6000_BTM_HARD_FLOAT MASK_SOFT_FLOAT /* Hardware floating point. */
|
||||
#define RS6000_BTM_LDBL128 MASK_MULTIPLE /* 128-bit long double. */
|
||||
|
||||
#define RS6000_BTM_COMMON (RS6000_BTM_ALTIVEC \
|
||||
| RS6000_BTM_VSX \
|
||||
@ -2539,7 +2540,8 @@ extern int frame_pointer_needed;
|
||||
| RS6000_BTM_POPCNTD \
|
||||
| RS6000_BTM_CELL \
|
||||
| RS6000_BTM_DFP \
|
||||
| RS6000_BTM_HARD_FLOAT)
|
||||
| RS6000_BTM_HARD_FLOAT \
|
||||
| RS6000_BTM_LDBL128)
|
||||
|
||||
/* Define builtin enum index. */
|
||||
|
||||
|
@ -15704,26 +15704,6 @@
|
||||
""
|
||||
"")
|
||||
|
||||
;; The Advance Toolchain 7.0-3 added private builtins: __builtin_longdouble_dw0
|
||||
;; and __builtin_longdouble_dw1 to optimize glibc. Add support for these
|
||||
;; builtins here.
|
||||
|
||||
(define_expand "unpacktf_0"
|
||||
[(set (match_operand:DF 0 "nonimmediate_operand" "")
|
||||
(unspec:DF [(match_operand:TF 1 "register_operand" "")
|
||||
(const_int 0)]
|
||||
UNSPEC_UNPACK_128BIT))]
|
||||
""
|
||||
"")
|
||||
|
||||
(define_expand "unpacktf_1"
|
||||
[(set (match_operand:DF 0 "nonimmediate_operand" "")
|
||||
(unspec:DF [(match_operand:TF 1 "register_operand" "")
|
||||
(const_int 1)]
|
||||
UNSPEC_UNPACK_128BIT))]
|
||||
""
|
||||
"")
|
||||
|
||||
(define_insn_and_split "unpack<mode>_dm"
|
||||
[(set (match_operand:<FP128_64> 0 "nonimmediate_operand" "=d,m,d,r,m")
|
||||
(unspec:<FP128_64>
|
||||
|
@ -13416,8 +13416,6 @@ double __builtin_rsqrt (double);
|
||||
uint64_t __builtin_ppc_get_timebase ();
|
||||
unsigned long __builtin_ppc_mftb ();
|
||||
double __builtin_unpack_longdouble (long double, int);
|
||||
double __builtin_longdouble_dw0 (long double);
|
||||
double __builtin_longdouble_dw1 (long double);
|
||||
long double __builtin_pack_longdouble (double, double);
|
||||
@end smallexample
|
||||
|
||||
|
@ -1295,6 +1295,9 @@ Target has 64-bit @code{double}.
|
||||
@item double64plus
|
||||
Target has @code{double} that is 64 bits or longer.
|
||||
|
||||
@item longdouble128
|
||||
Target has 128-bit @code{long double}.
|
||||
|
||||
@item int32plus
|
||||
Target has @code{int} that is at 32 bits or longer.
|
||||
|
||||
|
@ -1,3 +1,10 @@
|
||||
2014-06-13 Peter Bergner <bergner@vnet.ibm.com>
|
||||
|
||||
PR target/61415
|
||||
* lib/target-supports.exp (check_effective_target_longdouble128): New.
|
||||
* gcc.target/powerpc/pack02.c: Use it.
|
||||
* gcc.target/powerpc/tfmode_off.c: Likewise.
|
||||
|
||||
2014-06-13 Ilya Enkovich <ilya.enkovich@intel.com>
|
||||
|
||||
PR rtl-optimization/61094
|
||||
|
@ -2,6 +2,7 @@
|
||||
/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
|
||||
/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
|
||||
/* { dg-require-effective-target powerpc_fprs } */
|
||||
/* { dg-require-effective-target longdouble128 } */
|
||||
/* { dg-options "-O2 -mhard-float" } */
|
||||
|
||||
#include <stddef.h>
|
||||
|
@ -1,6 +1,7 @@
|
||||
/* { dg-do assemble } */
|
||||
/* { dg-skip-if "" { powerpc-ibm-aix* } { "*" } { "" } } */
|
||||
/* { dg-skip-if "no TFmode" { powerpc-*-eabi* } { "*" } { "" } } */
|
||||
/* { dg-require-effective-target longdouble128 } */
|
||||
/* { dg-options "-O2 -fno-align-functions -mtraceback=no -save-temps" } */
|
||||
|
||||
typedef float TFmode __attribute__ ((mode (TF)));
|
||||
|
@ -1862,6 +1862,15 @@ proc check_effective_target_large_double { } {
|
||||
}]
|
||||
}
|
||||
|
||||
# Return 1 if the target supports long double of 128 bits,
|
||||
# 0 otherwise.
|
||||
|
||||
proc check_effective_target_longdouble128 { } {
|
||||
return [check_no_compiler_messages longdouble128 object {
|
||||
int dummy[sizeof(long double) == 16 ? 1 : -1];
|
||||
}]
|
||||
}
|
||||
|
||||
# Return 1 if the target supports double of 64 bits,
|
||||
# 0 otherwise.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user