Commit 05dc406d by Peter Bergner Committed by Peter Bergner

re PR target/80246 (Builtin's for POWER's dxex[q] and diex[q] use the wrong types)

gcc/
	PR target/80246
	* config/rs6000/dfp.md (dfp_dxex_<mode>): Update mode of operand 0.
	(dfp_diex_<mode>): Update mode of operand 1.
	* doc/extend.texi (dxex, dxexq): Document change to return type.
	(diex, diexq): Document change to argument type.

gcc/testsuite/
	PR target/80246
	* gcc.target/powerpc/dfp-builtin-1.c: Remove unneeded dg-skip-if for
	Darwin and SPE.
	(dxex, dxexq): Update return type.
	(diex, diexq): Update argument type.
	* gcc.target/powerpc/pr80246.c: New test.

From-SVN: r246594
parent b0fd4d7e
2017-03-30 Peter Bergner <bergner@vnet.ibm.com>
PR target/80246
* config/rs6000/dfp.md (dfp_dxex_<mode>): Update mode of operand 0.
(dfp_diex_<mode>): Update mode of operand 1.
* doc/extend.texi (dxex, dxexq): Document change to return type.
(diex, diexq): Document change to argument type.
2017-03-30 Martin Jambor <mjambor@suse.cz> 2017-03-30 Martin Jambor <mjambor@suse.cz>
PR ipa/77333 PR ipa/77333
......
...@@ -348,16 +348,16 @@ ...@@ -348,16 +348,16 @@
[(set_attr "type" "dfp")]) [(set_attr "type" "dfp")])
(define_insn "dfp_dxex_<mode>" (define_insn "dfp_dxex_<mode>"
[(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d") [(set (match_operand:DI 0 "gpc_reg_operand" "=d")
(unspec:D64_D128 [(match_operand:D64_D128 1 "gpc_reg_operand" "d")] (unspec:DI [(match_operand:D64_D128 1 "gpc_reg_operand" "d")]
UNSPEC_DXEX))] UNSPEC_DXEX))]
"TARGET_DFP" "TARGET_DFP"
"dxex<dfp_suffix> %0,%1" "dxex<dfp_suffix> %0,%1"
[(set_attr "type" "dfp")]) [(set_attr "type" "dfp")])
(define_insn "dfp_diex_<mode>" (define_insn "dfp_diex_<mode>"
[(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d") [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
(unspec:D64_D128 [(match_operand:D64_D128 1 "gpc_reg_operand" "d") (unspec:D64_D128 [(match_operand:DI 1 "gpc_reg_operand" "d")
(match_operand:D64_D128 2 "gpc_reg_operand" "d")] (match_operand:D64_D128 2 "gpc_reg_operand" "d")]
UNSPEC_DXEX))] UNSPEC_DXEX))]
"TARGET_DFP" "TARGET_DFP"
......
...@@ -15427,14 +15427,14 @@ The following built-in functions are available for the PowerPC family ...@@ -15427,14 +15427,14 @@ The following built-in functions are available for the PowerPC family
of processors when hardware decimal floating point of processors when hardware decimal floating point
(@option{-mhard-dfp}) is available: (@option{-mhard-dfp}) is available:
@smallexample @smallexample
_Decimal64 __builtin_dxex (_Decimal64); long long __builtin_dxex (_Decimal64);
_Decimal128 __builtin_dxexq (_Decimal128); long long __builtin_dxexq (_Decimal128);
_Decimal64 __builtin_ddedpd (int, _Decimal64); _Decimal64 __builtin_ddedpd (int, _Decimal64);
_Decimal128 __builtin_ddedpdq (int, _Decimal128); _Decimal128 __builtin_ddedpdq (int, _Decimal128);
_Decimal64 __builtin_denbcd (int, _Decimal64); _Decimal64 __builtin_denbcd (int, _Decimal64);
_Decimal128 __builtin_denbcdq (int, _Decimal128); _Decimal128 __builtin_denbcdq (int, _Decimal128);
_Decimal64 __builtin_diex (_Decimal64, _Decimal64); _Decimal64 __builtin_diex (long long, _Decimal64);
_Decimal128 _builtin_diexq (_Decimal128, _Decimal128); _Decimal128 _builtin_diexq (long long, _Decimal128);
_Decimal64 __builtin_dscli (_Decimal64, int); _Decimal64 __builtin_dscli (_Decimal64, int);
_Decimal128 __builtin_dscliq (_Decimal128, int); _Decimal128 __builtin_dscliq (_Decimal128, int);
_Decimal64 __builtin_dscri (_Decimal64, int); _Decimal64 __builtin_dscri (_Decimal64, int);
......
2017-03-30 Peter Bergner <bergner@vnet.ibm.com>
PR target/80246
* gcc.target/powerpc/dfp-builtin-1.c: Remove unneeded dg-skip-if for
Darwin and SPE.
(dxex, dxexq): Update return type.
(diex, diexq): Update argument type.
* gcc.target/powerpc/pr80246.c: New test.
2017-03-30 Martin Jambor <mjambor@suse.cz> 2017-03-30 Martin Jambor <mjambor@suse.cz>
PR ipa/77333 PR ipa/77333
......
/* { dg-do compile { target { powerpc*-*-linux* } } } */ /* { dg-do compile { target { powerpc*-*-linux* } } } */
/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
/* { dg-require-effective-target powerpc_vsx_ok } */ /* { dg-require-effective-target powerpc_vsx_ok } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */ /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */
/* { dg-options "-mcpu=power7 -O2" } */ /* { dg-options "-mcpu=power7 -O2" } */
...@@ -10,11 +8,13 @@ ...@@ -10,11 +8,13 @@
/* { dg-final { scan-assembler-times "diex " 1 } } */ /* { dg-final { scan-assembler-times "diex " 1 } } */
/* { dg-final { scan-assembler-times "dscli " 2 } } */ /* { dg-final { scan-assembler-times "dscli " 2 } } */
/* { dg-final { scan-assembler-times "dscri " 2 } } */ /* { dg-final { scan-assembler-times "dscri " 2 } } */
/* { dg-final { scan-assembler-times "std " 1 } } */
/* { dg-final { scan-assembler-times "ld " 1 } } */
/* { dg-final { scan-assembler-times "stfd " 1 } } */
/* { dg-final { scan-assembler-times "lfd " 1 } } */
/* { dg-final { scan-assembler-not "bl __builtin" } } */ /* { dg-final { scan-assembler-not "bl __builtin" } } */
/* { dg-final { scan-assembler-not "dctqpq" } } */ /* { dg-final { scan-assembler-not "dctqpq" } } */
/* { dg-final { scan-assembler-not "drdpq" } } */ /* { dg-final { scan-assembler-not "drdpq" } } */
/* { dg-final { scan-assembler-not "stfd" } } */
/* { dg-final { scan-assembler-not "lfd" } } */
_Decimal64 _Decimal64
do_dedpd_0 (_Decimal64 a) do_dedpd_0 (_Decimal64 a)
...@@ -52,14 +52,14 @@ do_enbcd_1 (_Decimal64 a) ...@@ -52,14 +52,14 @@ do_enbcd_1 (_Decimal64 a)
return __builtin_denbcd (1, a); return __builtin_denbcd (1, a);
} }
_Decimal64 long long
do_xex (_Decimal64 a) do_xex (_Decimal64 a)
{ {
return __builtin_dxex (a); return __builtin_dxex (a);
} }
_Decimal64 _Decimal64
do_iex (_Decimal64 a, _Decimal64 b) do_iex (long long a, _Decimal64 b)
{ {
return __builtin_diex (a, b); return __builtin_diex (a, b);
} }
......
/* { dg-do compile { target { powerpc*-*-linux* } } } */
/* { dg-require-effective-target dfp } */
/* { dg-options "-O2" } */
/* { dg-final { scan-assembler-times "dxex " 1 } } */
/* { dg-final { scan-assembler-times "dxexq " 1 } } */
/* { dg-final { scan-assembler-times "diex " 1 } } */
/* { dg-final { scan-assembler-times "diexq " 1 } } */
/* { dg-final { scan-assembler-not "bl __builtin" } } */
/* Verify we don't generate any drintn., drintnq., dctfix, dctfixq, dcffix
or dcffixq instructions, as they imply we are getting unwanted casting. */
/* { dg-final { scan-assembler-not "drintn\[q\]\." } } */
/* { dg-final { scan-assembler-not "dctfix\[q\]" } } */
/* { dg-final { scan-assembler-not "dcffix\[q\]" } } */
long long
do_xex (_Decimal64 arg)
{
return __builtin_dxex (arg);
}
long long
do_xexq (_Decimal128 arg)
{
return __builtin_dxexq (arg);
}
_Decimal64
do_iex (long long exp, _Decimal64 arg)
{
return __builtin_diex (exp, arg);
}
_Decimal128
do_iexq (long long exp, _Decimal128 arg)
{
return __builtin_diexq (exp, arg);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment