From 17eba94716651dad5794c22ef649c65776c74cb8 Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Thu, 23 Sep 2010 15:25:30 +0200 Subject: [PATCH] i386.md (UNSPECV_NOPS): Rename from UNSPEC_NOPS and define as unspec_volatile. * config/i386/i386.md (UNSPECV_NOPS): Rename from UNSPEC_NOPS and define as unspec_volatile. ("nops"): Define as unspec_volatile. Use fputs to write to asm_out_file directly. Output NOPs on separate lines using while loop. * config/i386/i386.c (ix86_code_end): Use fputs to write to asm_out_file directly. Output NOPs on separate lines using while loop. testsuite/ChangeLog: * gcc.target/i386/pad-1.c: Remove -S from dg-options. * gcc.target/i386/pad-3.c: Ditto. * gcc.target/i386/pad-7.c: Ditto. * gcc.target/i386/pad-7.c: Ditto. * gcc.target/i386/pr36502.c: Ditto. * gcc.target/i386/zee.c: Ditto. * gcc.target/i386/20060821-1.c: Ditto. * gcc.target/i386/pad-2.c: Ditto. Scan for NOPs on separate lines. * gcc.target/i386/pad-5a.c: Ditto. Do not use scan-assembler-not. * gcc.target/i386/pad-5b.c: Ditto. * gcc.target/i386/pad-6a.c: Ditto. * gcc.target/i386/pad-6b.c: Ditto. * gcc.target/i386/pad-8.c: Ditto. * gcc.target/i386/pad-9.c: Ditto. * gcc.target/i386/pad-10.c: Ditto. * gcc.target/i386/pad-4.c: Ditto. Require pic effective target. From-SVN: r164564 --- gcc/ChangeLog | 24 +++++++++------ gcc/config/i386/i386.c | 15 ++++++--- gcc/config/i386/i386.md | 36 +++++++--------------- gcc/testsuite/ChangeLog | 27 +++++++++++++--- gcc/testsuite/gcc.target/i386/20060821-1.c | 2 +- gcc/testsuite/gcc.target/i386/pad-1.c | 2 +- gcc/testsuite/gcc.target/i386/pad-10.c | 2 +- gcc/testsuite/gcc.target/i386/pad-2.c | 4 +-- gcc/testsuite/gcc.target/i386/pad-3.c | 2 +- gcc/testsuite/gcc.target/i386/pad-4.c | 6 ++-- gcc/testsuite/gcc.target/i386/pad-5a.c | 5 ++- gcc/testsuite/gcc.target/i386/pad-5b.c | 5 ++- gcc/testsuite/gcc.target/i386/pad-6a.c | 5 ++- gcc/testsuite/gcc.target/i386/pad-6b.c | 5 ++- gcc/testsuite/gcc.target/i386/pad-7.c | 2 +- gcc/testsuite/gcc.target/i386/pad-8.c | 5 ++- gcc/testsuite/gcc.target/i386/pad-9.c | 5 ++- gcc/testsuite/gcc.target/i386/pr36502.c | 2 +- gcc/testsuite/gcc.target/i386/zee.c | 2 +- 19 files changed, 84 insertions(+), 72 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 425e14fc2b6..ac4745bccd4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2010-09-23 Uros Bizjak + + * config/i386/i386.md (UNSPECV_NOPS): Rename from UNSPEC_NOPS and + define as unspec_volatile. + ("nops"): Define as unspec_volatile. Use fputs to write to + asm_out_file directly. Output NOPs on separate lines using while loop. + * config/i386/i386.c (ix86_code_end): Use fputs to write to + asm_out_file directly. Output NOPs on separate lines using while loop. + 2010-09-23 Richard Guenther PR tree-optimization/45565 @@ -45,8 +54,7 @@ 2010-09-22 Ralf Wildenhues - * doc/contrib.texi (Contributors): Allow URL to wrap in PDF - output. + * doc/contrib.texi (Contributors): Allow URL to wrap in PDF output. * doc/cppopts.texi: Fix markup of index entry. * doc/extend.texi (Constructing Calls): Fix markup of __builtin_va_arg_pack and __builtin_va_arg_pack_len definition. @@ -63,8 +71,7 @@ long lines, avoid overlong pages from long @itemx lists. * doc/objc.texi (Garbage Collection): Allow URLs to wrap. * doc/standards.texi (Standards): Likewise. - * doc/trouble.texi (Incompatibilities): Fix markup of index - entry. + * doc/trouble.texi (Incompatibilities): Fix markup of index entry. 2010-09-22 Joseph Myers @@ -74,8 +81,7 @@ resize option array here. * opts.h (prune_options): Remove prototype. * gcc.c (process_command): Take decoded options; don't call - decode_cmdline_options_to_array here. Use decoded options for - argv[0]. + decode_cmdline_options_to_array here. Use decoded options for argv[0]. (main): Call decode_cmdline_options_to_array here instead of prune_options. Update call to process_command. * config/darwin-driver.c: Include opts.h. @@ -148,7 +154,7 @@ * postreload.c (move2add_note_store): Add reg_symbol_ref[] checks to update conditions. Fix reg_mode[] check. -2010-09-22 Hariharan Sandanagobalane +2010-09-22 Hariharan Sandanagobalane * config/picochip/picochip.md (movhicc): Use expand to check whether movhicc is available and split it after reload. @@ -467,7 +473,7 @@ * tree-inline.c (copy_phis_for_bb): Delay commit of edge insertions until after all PHI nodes of the block are processed. -2010-09-18 Tijl Coosemans +2010-09-18 Tijl Coosemans * config/i386/freebsd.h (SUBTARGET32_DEFAULT_CPU): Add. @@ -1084,7 +1090,7 @@ 2010-09-15 Tejas Belagod * config/arm/neon.md (vec_pack_trunc_): Instruction - pattern for vmovn. Expansion in case of non + pattern for vmovn. Expansion in case of non -mvectorize-with-neon-quad. (neon_vec_pack_trunc_): Instruction pattern for vmovn for non- -mvectorize-with-neon-quad case. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 49c3c9c240c..b2585210ded 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -8024,13 +8024,18 @@ ix86_code_end (void) xops[0] = gen_rtx_REG (Pmode, regno); xops[1] = gen_rtx_MEM (Pmode, stack_pointer_rtx); - /* Pad stack IP move with 4 instructions. 2 NOPs count as 1 - instruction. */ + /* Pad stack IP move with 4 instructions (two NOPs count + as one instruction.) */ if (TARGET_PAD_SHORT_FUNCTION) - output_asm_insn ("nop; nop; nop; nop; nop; nop; nop; nop", - xops); + { + int i = 8; + + while (i--) + fputs ("\tnop\n", asm_out_file); + } + output_asm_insn ("mov%z0\t{%1, %0|%0, %1}", xops); - output_asm_insn ("ret", xops); + fputs ("\tret\n", asm_out_file); final_end_function (); init_insn_lengths (); free_after_compilation (cfun); diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index e3161bb7e66..55086f3c12e 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -104,7 +104,6 @@ UNSPEC_LD_MPIC ; load_macho_picbase UNSPEC_TRUNC_NOOP UNSPEC_DIV_ALREADY_SPLIT - UNSPEC_NOPS ;; For SSE/MMX support: UNSPEC_FIX_NOTRUNC @@ -248,6 +247,7 @@ UNSPECV_LOCK UNSPECV_PROLOGUE_USE UNSPECV_CLD + UNSPECV_NOPS UNSPECV_VZEROALL UNSPECV_VZEROUPPER UNSPECV_RDTSC @@ -11468,32 +11468,18 @@ ;; Generate nops. Operand 0 is the number of nops, up to 8. (define_insn "nops" - [(unspec [(match_operand 0 "const_int_operand" "")] - UNSPEC_NOPS)] + [(unspec_volatile [(match_operand 0 "const_int_operand" "")] + UNSPECV_NOPS)] "reload_completed" { - switch (INTVAL (operands[0])) - { - case 1: - return "nop"; - case 2: - return "nop; nop"; - case 3: - return "nop; nop; nop"; - case 4: - return "nop; nop; nop; nop"; - case 5: - return "nop; nop; nop; nop; nop"; - case 6: - return "nop; nop; nop; nop; nop; nop"; - case 7: - return "nop; nop; nop; nop; nop; nop; nop"; - case 8: - return "nop; nop; nop; nop; nop; nop; nop; nop"; - default: - gcc_unreachable (); - break; - } + int num = INTVAL (operands[0]); + + gcc_assert (num >= 1 && num <= 8); + + while (num--) + fputs ("\tnop\n", asm_out_file); + + return ""; } [(set (attr "length") (symbol_ref "INTVAL (operands[0])")) (set_attr "length_immediate" "0") diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index db8da878544..65fca966575 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,22 @@ +2010-09-23 Uros Bizjak + + * gcc.target/i386/pad-1.c: Remove -S from dg-options. + * gcc.target/i386/pad-3.c: Ditto. + * gcc.target/i386/pad-7.c: Ditto. + * gcc.target/i386/pad-7.c: Ditto. + * gcc.target/i386/pr36502.c: Ditto. + * gcc.target/i386/zee.c: Ditto. + * gcc.target/i386/20060821-1.c: Ditto. + * gcc.target/i386/pad-2.c: Ditto. Scan for NOPs on separate lines. + * gcc.target/i386/pad-5a.c: Ditto. Do not use scan-assembler-not. + * gcc.target/i386/pad-5b.c: Ditto. + * gcc.target/i386/pad-6a.c: Ditto. + * gcc.target/i386/pad-6b.c: Ditto. + * gcc.target/i386/pad-8.c: Ditto. + * gcc.target/i386/pad-9.c: Ditto. + * gcc.target/i386/pad-10.c: Ditto. + * gcc.target/i386/pad-4.c: Ditto. Require pic effective target. + 2010-09-23 Richard Guenther PR tree-optimization/45565 @@ -121,10 +140,10 @@ 2005-10-11 Fariborz Jahanian Radar 4291785 - objc.dg/naming-4.m: New - objc.dg/naming-5.m: New - obj-c++.dg/naming-1.mm: New - obj-c++.dg/naming-2.mm: New + * objc.dg/naming-4.m: New + * objc.dg/naming-5.m: New + * obj-c++.dg/naming-1.mm: New + * obj-c++.dg/naming-2.mm: New 2010-09-21 Jonathan Wakely Jack Howarth diff --git a/gcc/testsuite/gcc.target/i386/20060821-1.c b/gcc/testsuite/gcc.target/i386/20060821-1.c index 56e980fddfb..29a9afe876c 100644 --- a/gcc/testsuite/gcc.target/i386/20060821-1.c +++ b/gcc/testsuite/gcc.target/i386/20060821-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -msse3 -S" } */ +/* { dg-options "-O2 -msse3" } */ /* { dg-final { scan-assembler-not "%mm" } } */ /* PR 28825 */ #include diff --git a/gcc/testsuite/gcc.target/i386/pad-1.c b/gcc/testsuite/gcc.target/i386/pad-1.c index 87a9d6c81f1..770c44d8900 100644 --- a/gcc/testsuite/gcc.target/i386/pad-1.c +++ b/gcc/testsuite/gcc.target/i386/pad-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fomit-frame-pointer -mtune=generic -S" } */ +/* { dg-options "-O2 -fomit-frame-pointer -mtune=generic" } */ /* { dg-final { scan-assembler "rep" } } */ /* { dg-final { scan-assembler-not "nop" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pad-10.c b/gcc/testsuite/gcc.target/i386/pad-10.c index 6ba3b787402..e10d24c7da6 100644 --- a/gcc/testsuite/gcc.target/i386/pad-10.c +++ b/gcc/testsuite/gcc.target/i386/pad-10.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fomit-frame-pointer -march=atom -S" } */ +/* { dg-options "-O2 -fomit-frame-pointer -march=atom" } */ /* { dg-final { scan-assembler-not "nop" } } */ /* { dg-final { scan-assembler-not "rep" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pad-2.c b/gcc/testsuite/gcc.target/i386/pad-2.c index 964547cc904..37743c483a8 100644 --- a/gcc/testsuite/gcc.target/i386/pad-2.c +++ b/gcc/testsuite/gcc.target/i386/pad-2.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fomit-frame-pointer -march=atom -S" } */ -/* { dg-final { scan-assembler-times "nop; nop; nop; nop; nop; nop; nop; nop" 1 } } */ +/* { dg-options "-O2 -fomit-frame-pointer -march=atom" } */ +/* { dg-final { scan-assembler-times "nop" 8 } } */ /* { dg-final { scan-assembler-not "rep" } } */ void diff --git a/gcc/testsuite/gcc.target/i386/pad-3.c b/gcc/testsuite/gcc.target/i386/pad-3.c index 28db2cce657..b9a547d07d8 100644 --- a/gcc/testsuite/gcc.target/i386/pad-3.c +++ b/gcc/testsuite/gcc.target/i386/pad-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fomit-frame-pointer -march=atom -fno-pic -S" } */ +/* { dg-options "-O2 -fomit-frame-pointer -march=atom -fno-pic" } */ /* { dg-final { scan-assembler-not "nop" } } */ /* { dg-final { scan-assembler-not "rep" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pad-4.c b/gcc/testsuite/gcc.target/i386/pad-4.c index a7033fae3af..ad6b029e2cb 100644 --- a/gcc/testsuite/gcc.target/i386/pad-4.c +++ b/gcc/testsuite/gcc.target/i386/pad-4.c @@ -1,7 +1,8 @@ /* { dg-do compile } */ /* { dg-require-effective-target ilp32 } */ -/* { dg-options "-O2 -fomit-frame-pointer -march=atom -S -fPIC" } */ -/* { dg-final { scan-assembler-times "nop; nop; nop; nop; nop; nop; nop; nop" 1 } } */ +/* { dg-require-effective-target fpic } */ +/* { dg-options "-O2 -fomit-frame-pointer -march=atom -fPIC" } */ +/* { dg-final { scan-assembler-times "nop" 8 } } */ /* { dg-final { scan-assembler-not "rep" } } */ extern int bar; @@ -9,5 +10,6 @@ extern int bar; int foo () { + asm volatile (""); return bar; } diff --git a/gcc/testsuite/gcc.target/i386/pad-5a.c b/gcc/testsuite/gcc.target/i386/pad-5a.c index 9d0aa2a8000..d29e62816f0 100644 --- a/gcc/testsuite/gcc.target/i386/pad-5a.c +++ b/gcc/testsuite/gcc.target/i386/pad-5a.c @@ -1,8 +1,7 @@ /* { dg-do compile } */ /* { dg-require-effective-target ilp32 } */ -/* { dg-options "-O2 -fomit-frame-pointer -march=atom -S" } */ -/* { dg-final { scan-assembler-times "nop; nop" 1 } } */ -/* { dg-final { scan-assembler-not "nop; nop; nop" } } */ +/* { dg-options "-O2 -fomit-frame-pointer -march=atom" } */ +/* { dg-final { scan-assembler-times "nop" 2 } } */ /* { dg-final { scan-assembler-not "rep" } } */ int diff --git a/gcc/testsuite/gcc.target/i386/pad-5b.c b/gcc/testsuite/gcc.target/i386/pad-5b.c index 2e1cf129d89..1d95bf32d2f 100644 --- a/gcc/testsuite/gcc.target/i386/pad-5b.c +++ b/gcc/testsuite/gcc.target/i386/pad-5b.c @@ -1,8 +1,7 @@ /* { dg-do compile } */ /* { dg-require-effective-target lp64 } */ -/* { dg-options "-O2 -fomit-frame-pointer -march=atom -S" } */ -/* { dg-final { scan-assembler-times "nop; nop; nop; nop" 1 } } */ -/* { dg-final { scan-assembler-not "nop; nop; nop; nop; nop" } } */ +/* { dg-options "-O2 -fomit-frame-pointer -march=atom" } */ +/* { dg-final { scan-assembler-times "nop" 4 } } */ /* { dg-final { scan-assembler-not "rep" } } */ int diff --git a/gcc/testsuite/gcc.target/i386/pad-6a.c b/gcc/testsuite/gcc.target/i386/pad-6a.c index e865967a7a7..e2db5ad1f43 100644 --- a/gcc/testsuite/gcc.target/i386/pad-6a.c +++ b/gcc/testsuite/gcc.target/i386/pad-6a.c @@ -1,8 +1,7 @@ /* { dg-do compile } */ /* { dg-require-effective-target ilp32 } */ -/* { dg-options "-O2 -fomit-frame-pointer -march=atom -S" } */ -/* { dg-final { scan-assembler-times "nop; nop; nop; nop" 1 } } */ -/* { dg-final { scan-assembler-not "nop; nop; nop; nop; nop" } } */ +/* { dg-options "-O2 -fomit-frame-pointer -march=atom" } */ +/* { dg-final { scan-assembler-times "nop" 4 } } */ /* { dg-final { scan-assembler-not "rep" } } */ int diff --git a/gcc/testsuite/gcc.target/i386/pad-6b.c b/gcc/testsuite/gcc.target/i386/pad-6b.c index 41aeaee7ce0..d8f9bec5d4f 100644 --- a/gcc/testsuite/gcc.target/i386/pad-6b.c +++ b/gcc/testsuite/gcc.target/i386/pad-6b.c @@ -1,8 +1,7 @@ /* { dg-do compile } */ /* { dg-require-effective-target lp64 } */ -/* { dg-options "-O2 -fomit-frame-pointer -march=atom -S" } */ -/* { dg-final { scan-assembler-times "nop; nop; nop; nop; nop; nop" 1 } } */ -/* { dg-final { scan-assembler-not "nop; nop; nop; nop; nop; nop; nop" } } */ +/* { dg-options "-O2 -fomit-frame-pointer -march=atom" } */ +/* { dg-final { scan-assembler-times "nop" 6 } } */ /* { dg-final { scan-assembler-not "rep" } } */ int diff --git a/gcc/testsuite/gcc.target/i386/pad-7.c b/gcc/testsuite/gcc.target/i386/pad-7.c index 7a7493d05bc..8904eca0bc7 100644 --- a/gcc/testsuite/gcc.target/i386/pad-7.c +++ b/gcc/testsuite/gcc.target/i386/pad-7.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target ilp32 } */ -/* { dg-options "-O2 -fomit-frame-pointer -march=atom -S" } */ +/* { dg-options "-O2 -fomit-frame-pointer -march=atom" } */ /* { dg-final { scan-assembler-not "nop" } } */ /* { dg-final { scan-assembler-not "rep" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pad-8.c b/gcc/testsuite/gcc.target/i386/pad-8.c index 873a0a4fa2f..0e939fa7890 100644 --- a/gcc/testsuite/gcc.target/i386/pad-8.c +++ b/gcc/testsuite/gcc.target/i386/pad-8.c @@ -1,7 +1,6 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fomit-frame-pointer -march=atom -S" } */ -/* { dg-final { scan-assembler-times "nop; nop; nop; nop; nop; nop" 1 } } */ -/* { dg-final { scan-assembler-not "nop; nop; nop; nop; nop; nop; nop" } } */ +/* { dg-options "-O2 -fomit-frame-pointer -march=atom" } */ +/* { dg-final { scan-assembler-times "nop" 6 } } */ /* { dg-final { scan-assembler-not "rep" } } */ int diff --git a/gcc/testsuite/gcc.target/i386/pad-9.c b/gcc/testsuite/gcc.target/i386/pad-9.c index 3d68805d143..69e33446b75 100644 --- a/gcc/testsuite/gcc.target/i386/pad-9.c +++ b/gcc/testsuite/gcc.target/i386/pad-9.c @@ -1,8 +1,7 @@ /* { dg-do compile } */ /* { dg-require-effective-target lp64 } */ -/* { dg-options "-O2 -fomit-frame-pointer -march=atom -S" } */ -/* { dg-final { scan-assembler-times "nop; nop; nop; nop" 1 } } */ -/* { dg-final { scan-assembler-not "nop; nop; nop; nop; nop" } } */ +/* { dg-options "-O2 -fomit-frame-pointer -march=atom" } */ +/* { dg-final { scan-assembler-times "nop" 4 } } */ /* { dg-final { scan-assembler-not "rep" } } */ extern void bar (void); diff --git a/gcc/testsuite/gcc.target/i386/pr36502.c b/gcc/testsuite/gcc.target/i386/pr36502.c index 5794159d8e7..bc4c7ccf1c8 100644 --- a/gcc/testsuite/gcc.target/i386/pr36502.c +++ b/gcc/testsuite/gcc.target/i386/pr36502.c @@ -1,6 +1,6 @@ /* PR target/36502 */ /* { dg-do compile { target { *-*-darwin* && ilp32 } } } */ -/* { dg-options "-O -fomit-frame-pointer -fno-pic -S" } */ +/* { dg-options "-O -fomit-frame-pointer -fno-pic" } */ int a; void f() {a++;} /* { dg-final { scan-assembler-not "esp" } } */ diff --git a/gcc/testsuite/gcc.target/i386/zee.c b/gcc/testsuite/gcc.target/i386/zee.c index 4ed3aa87b9f..b46e890e2b0 100644 --- a/gcc/testsuite/gcc.target/i386/zee.c +++ b/gcc/testsuite/gcc.target/i386/zee.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target lp64 } */ -/* { dg-options "-O2 -fzee -S" } */ +/* { dg-options "-O2 -fzee" } */ /* { dg-final { scan-assembler-not "mov\[\\t \]+\(%\[\^,\]+\),\[\\t \]*\\1" } } */ int mask[100]; int foo(unsigned x) -- 2.30.2