re PR target/45213 ("suffix or operands invalid for `push'" triggered by optimisations on x86_64)

PR target/45213
	* config/i386/i386.c (ix86_print_operand): Handle 'q' operand modifier
	to output 32bit SFmode immediate as 8 byte sign extended value.

testsuite/ChangeLog:

	PR target/45213
	* gcc.target/i386/pr45213.c: New test.

From-SVN: r162983
This commit is contained in:
Uros Bizjak 2010-08-07 22:32:30 +02:00
parent a4ed58ce81
commit f6ddf131f0
4 changed files with 39 additions and 14 deletions

View File

@ -1,3 +1,10 @@
2010-08-07 Uros Bizjak <ubizjak@gmail.com>
H.J. Lu <hongjiu.lu@intel.com>
PR target/45213
* config/i386/i386.c (ix86_print_operand): Handle 'q' operand modifier
to output 32bit SFmode immediate as 8 byte sign extended value.
2010-08-07 Marcus Shawcroft <marcus.shawcroft@arm.com>
* config/arm/linux-atomic.c (SUBWORD_VAL_CAS): Instantiate with
@ -11,16 +18,16 @@
2010-08-07 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
* config/arm/cortex-a9.md: Rewrite VFP Pipeline description.
* config/arm/arm.c (arm_xscale_tune): Initialize sched_adjust_cost.
(arm_fastmul_tune,arm_slowmul_tune, arm_9e_tune): Likewise.
(arm_adjust_cost): Split into xscale_sched_adjust_cost and a
generic part.
(cortex_a9_sched_adjust_cost): New function.
(xscale_sched_adjust_cost): New function.
* config/arm/arm-protos.h (struct tune_params): New field
sched_adjust_cost.
* config/arm/arm-cores.def: Adjust costs for cortex-a9.
* config/arm/cortex-a9.md: Rewrite VFP Pipeline description.
* config/arm/arm.c (arm_xscale_tune): Initialize sched_adjust_cost.
(arm_fastmul_tune,arm_slowmul_tune, arm_9e_tune): Likewise.
(arm_adjust_cost): Split into xscale_sched_adjust_cost and a
generic part.
(cortex_a9_sched_adjust_cost): New function.
(xscale_sched_adjust_cost): New function.
* config/arm/arm-protos.h (struct tune_params): New field
sched_adjust_cost.
* config/arm/arm-cores.def: Adjust costs for cortex-a9.
2010-08-06 Eric Botcazou <ebotcazou@adacore.com>

View File

@ -12921,7 +12921,11 @@ ix86_print_operand (FILE *file, rtx x, int code)
if (ASSEMBLER_DIALECT == ASM_ATT)
putc ('$', file);
fprintf (file, "0x%08lx", (long unsigned int) l);
/* Sign extend 32bit SFmode immediate to 8 bytes. */
if (code == 'q')
fprintf (file, "0x%08llx", (unsigned long long) (int) l);
else
fprintf (file, "0x%08x", (unsigned int) l);
}
/* These float cases don't actually occur as immediate operands. */

View File

@ -1,3 +1,8 @@
2010-08-07 Uros Bizjak <ubizjak@gmail.com>
PR target/45213
* gcc.target/i386/pr45213.c: New test.
2010-08-07 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/45143
@ -5,9 +10,9 @@
2010-08-07 Marcus Shawcroft <marcus.shawcroft@arm.com>
* lib/target-supports.exp: (check_effective_target_sync_int_long):
Add arm*-*-linux-gnueabi.
(check_effective_target_sync_char_short): Likewise.
* lib/target-supports.exp (check_effective_target_sync_int_long):
Add arm*-*-linux-gnueabi.
(check_effective_target_sync_char_short): Likewise.
2010-08-06 Thomas Koenig <tkoenig@gcc.gnu.org>

View File

@ -0,0 +1,9 @@
/* { dg-do assemble } */
/* { dg-options "-Os -fno-omit-frame-pointer" } */
void f (float, float, float, float, float, float, float, float, float, float);
void g (void)
{
f (0, 0, 0, 0, 0, 0, 0, 0, -1, 1);
}