(define_expand "@extenddf<mode>2"
[(set (match_operand:FLOAT128 0 "gpc_reg_operand")
(float_extend:FLOAT128 (match_operand:DF 1 "gpc_reg_operand")))]
- "TARGET_HARD_FLOAT && TARGET_LONG_DOUBLE_128"
+ "TARGET_HARD_FLOAT
+ && (TARGET_LONG_DOUBLE_128 || FLOAT128_IEEE_P (<MODE>mode))"
{
if (FLOAT128_IEEE_P (<MODE>mode))
rs6000_expand_float128_convert (operands[0], operands[1], false);
(define_expand "extendsf<mode>2"
[(set (match_operand:FLOAT128 0 "gpc_reg_operand")
(float_extend:FLOAT128 (match_operand:SF 1 "gpc_reg_operand")))]
- "TARGET_HARD_FLOAT && TARGET_LONG_DOUBLE_128"
+ "TARGET_HARD_FLOAT
+ && (TARGET_LONG_DOUBLE_128 || FLOAT128_IEEE_P (<MODE>mode))"
{
if (FLOAT128_IEEE_P (<MODE>mode))
rs6000_expand_float128_convert (operands[0], operands[1], false);
(define_expand "trunc<mode>df2"
[(set (match_operand:DF 0 "gpc_reg_operand")
(float_truncate:DF (match_operand:FLOAT128 1 "gpc_reg_operand")))]
- "TARGET_HARD_FLOAT && TARGET_LONG_DOUBLE_128"
+ "TARGET_HARD_FLOAT
+ && (TARGET_LONG_DOUBLE_128 || FLOAT128_IEEE_P (<MODE>mode))"
{
if (FLOAT128_IEEE_P (<MODE>mode))
{
(define_expand "trunc<mode>sf2"
[(set (match_operand:SF 0 "gpc_reg_operand")
(float_truncate:SF (match_operand:FLOAT128 1 "gpc_reg_operand")))]
- "TARGET_HARD_FLOAT && TARGET_LONG_DOUBLE_128"
+ "TARGET_HARD_FLOAT
+ && (TARGET_LONG_DOUBLE_128 || FLOAT128_IEEE_P (<MODE>mode))"
{
if (FLOAT128_IEEE_P (<MODE>mode))
rs6000_expand_float128_convert (operands[0], operands[1], false);
[(parallel [(set (match_operand:FLOAT128 0 "gpc_reg_operand")
(float:FLOAT128 (match_operand:SI 1 "gpc_reg_operand")))
(clobber (match_scratch:DI 2))])]
- "TARGET_HARD_FLOAT && TARGET_LONG_DOUBLE_128"
+ "TARGET_HARD_FLOAT
+ && (TARGET_LONG_DOUBLE_128 || FLOAT128_IEEE_P (<MODE>mode))"
{
rtx op0 = operands[0];
rtx op1 = operands[1];
(define_expand "fix_trunc<mode>si2"
[(set (match_operand:SI 0 "gpc_reg_operand")
(fix:SI (match_operand:FLOAT128 1 "gpc_reg_operand")))]
- "TARGET_HARD_FLOAT && TARGET_LONG_DOUBLE_128"
+ "TARGET_HARD_FLOAT
+ && (TARGET_LONG_DOUBLE_128 || FLOAT128_IEEE_P (<MODE>mode))"
{
rtx op0 = operands[0];
rtx op1 = operands[1];
void to_uns_int_store_n (TYPE a, unsigned int *p, long n) { p[n] = (unsigned int)a; }
void to_uns_long_store_n (TYPE a, unsigned long *p, long n) { p[n] = (unsigned long)a; }
-/* On targets with 64-bit long double, some opcodes to deal with __float128 are
- disabled, see PR target/105359. */
-/* { dg-final { scan-assembler-not {\mbl __} { xfail longdouble64 } } } */
-/* { dg-final { scan-assembler {\mxscvdpqp\M} { xfail longdouble64 } } } */
-/* { dg-final { scan-assembler {\mxscvqpdp\M} { xfail longdouble64 } } } */
-/* { dg-final { scan-assembler {\mxscvqpdpo\M} { xfail longdouble64 } } } */
+/* { dg-final { scan-assembler-not {\mbl __} } } */
+/* { dg-final { scan-assembler {\mxscvdpqp\M} } } */
+/* { dg-final { scan-assembler {\mxscvqpdp\M} } } */
+/* { dg-final { scan-assembler {\mxscvqpdpo\M} } } */
/* { dg-final { scan-assembler {\mxscvqpsdz\M} } } */
/* { dg-final { scan-assembler {\mxscvqpswz\M} } } */
/* { dg-final { scan-assembler {\mxscvsdqp\M} } } */
/* { dg-final { scan-assembler {\mlxsd\M} } } */
/* { dg-final { scan-assembler {\mlxsiwax\M} } } */
/* { dg-final { scan-assembler {\mlxsiwzx\M} } } */
-/* { dg-final { scan-assembler {\mlxssp\M} { xfail longdouble64 } } } */
+/* { dg-final { scan-assembler {\mlxssp\M} } } */
/* { dg-final { scan-assembler {\mstxsd\M} } } */
/* { dg-final { scan-assembler {\mstxsiwx\M} } } */
-/* { dg-final { scan-assembler {\mstxssp\M} { xfail longdouble64 } } } */
+/* { dg-final { scan-assembler {\mstxssp\M} } } */