Commit ab07692c by Bin Cheng Committed by Joey Ye

re PR target/51835 (ARM EABI violation when passing arguments to helper floating…

re PR target/51835 (ARM EABI violation when passing arguments to helper floating functions like __aeabi_d2iz)

2012-01-30  Bin Cheng  <bin.cheng@arm.com>

	PR target/51835
	* config/arm/arm.c (arm_libcall_uses_aapcs_base): Use correct ABI
	for __aeabi_d2iz/__aeabi_d2uiz with hard-float.

testcases:
	PR target/51835
	* gcc.target/arm/pr51835.c: New testcase.

From-SVN: r183733
parent 3efe2bf7
2012-01-30 Bin Cheng <bin.cheng@arm.com>
PR target/51835
* config/arm/arm.c (arm_libcall_uses_aapcs_base): Use correct ABI
for __aeabi_d2iz/__aeabi_d2uiz with hard-float.
2012-01-30 Richard Guenther <rguenther@suse.de> 2012-01-30 Richard Guenther <rguenther@suse.de>
PR tree-optimization/52028 PR tree-optimization/52028
......
...@@ -3680,6 +3680,10 @@ arm_libcall_uses_aapcs_base (const_rtx libcall) ...@@ -3680,6 +3680,10 @@ arm_libcall_uses_aapcs_base (const_rtx libcall)
add_libcall (libcall_htab, add_libcall (libcall_htab,
convert_optab_libfunc (trunc_optab, HFmode, SFmode)); convert_optab_libfunc (trunc_optab, HFmode, SFmode));
add_libcall (libcall_htab, add_libcall (libcall_htab,
convert_optab_libfunc (sfix_optab, SImode, DFmode));
add_libcall (libcall_htab,
convert_optab_libfunc (ufix_optab, SImode, DFmode));
add_libcall (libcall_htab,
convert_optab_libfunc (sfix_optab, DImode, DFmode)); convert_optab_libfunc (sfix_optab, DImode, DFmode));
add_libcall (libcall_htab, add_libcall (libcall_htab,
convert_optab_libfunc (ufix_optab, DImode, DFmode)); convert_optab_libfunc (ufix_optab, DImode, DFmode));
......
2012-01-30 Bin Cheng <bin.cheng@arm.com>
PR target/51835
* gcc.target/arm/pr51835.c: New testcase.
2012-01-30 Richard Guenther <rguenther@suse.de> 2012-01-30 Richard Guenther <rguenther@suse.de>
PR tree-optimization/52028 PR tree-optimization/52028
......
/* { dg-do compile } */
/* { dg-options "-O2 -mfloat-abi=hard -mfpu=fpv4-sp-d16" } */
/* { dg-require-effective-target arm_thumb2_ok } */
int func1 (double d)
{
return (int)d;
}
unsigned int func2 (double d)
{
return (unsigned int)d;
}
/* { dg-final { scan-assembler-times "fmrrd\[\\t \]+r0,\[\\t \]*r1,\[\\t \]*d0" 2 } } */
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