diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2010-09-26 20:28:48 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2010-09-26 20:28:48 +0200 |
commit | 4470a3a30ed4ef41f4f35f52f7a10a71dc0bac29 (patch) | |
tree | 46fbb1dcff6a392a8eb69a5e8f958e5efeaf9069 /gcc | |
parent | d284c684ffafd0754d16cef50f4b06b0db893583 (diff) | |
download | gcc-4470a3a30ed4ef41f4f35f52f7a10a71dc0bac29.zip gcc-4470a3a30ed4ef41f4f35f52f7a10a71dc0bac29.tar.gz gcc-4470a3a30ed4ef41f4f35f52f7a10a71dc0bac29.tar.bz2 |
i386.md (pro_epilogue_adjust_stack_<mode>_add): Merge from pro_epilogue_adjust_stack_<mode>_{1,2}.
* config/i386/i386.md (pro_epilogue_adjust_stack_<mode>_add): Merge
from pro_epilogue_adjust_stack_<mode>_{1,2}.
(pro_epilogue_adjust_stack_<mode>_add): Rename from
pro_epilogue_adjust_stack_<mode>_3.
* config/i386/i386.c (pro_epilogue_adjust_stack): Update for
renamed pro_epilogue_adjust_stack_{si,di}_add.
(ix86_expand_prologue): Use indirect functions. Update for renamed
pro_epilogue_adjust_stack_{si,di}_sub.
From-SVN: r164635
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 23 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 17 |
3 files changed, 27 insertions, 24 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9433f5a..c80e26b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,16 @@ 2010-09-26 Uros Bizjak <ubizjak@gmail.com> + * config/i386/i386.md (pro_epilogue_adjust_stack_<mode>_add): Merge + from pro_epilogue_adjust_stack_<mode>_{1,2}. + (pro_epilogue_adjust_stack_<mode>_add): Rename from + pro_epilogue_adjust_stack_<mode>_3. + * config/i386/i386.c (pro_epilogue_adjust_stack): Update for + renamed pro_epilogue_adjust_stack_{si,di}_add. + (ix86_expand_prologue): Use indirect functions. Update for renamed + pro_epilogue_adjust_stack_{si,di}_sub. + +2010-09-26 Uros Bizjak <ubizjak@gmail.com> + * config/i386/i386.md (movmsk_df): New insn. (signbitdf): Split out of signbit<mode>2. Generate movmsk_df sequence for TARGET_SSE_MATH. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 788ea4e..af30e39 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -8777,9 +8777,11 @@ pro_epilogue_adjust_stack (rtx dest, rtx src, rtx offset, rtx insn; if (! TARGET_64BIT) - insn = emit_insn (gen_pro_epilogue_adjust_stack_si_1 (dest, src, offset)); + insn = emit_insn (gen_pro_epilogue_adjust_stack_si_add (dest, + src, offset)); else if (x86_64_immediate_operand (offset, DImode)) - insn = emit_insn (gen_pro_epilogue_adjust_stack_di_1 (dest, src, offset)); + insn = emit_insn (gen_pro_epilogue_adjust_stack_di_add (dest, + src, offset)); else { rtx tmp; @@ -8796,7 +8798,7 @@ pro_epilogue_adjust_stack (rtx dest, rtx src, rtx offset, insn = emit_insn (gen_rtx_SET (DImode, tmp, offset)); if (style < 0) RTX_FRAME_RELATED_P (insn) = 1; - insn = emit_insn (gen_pro_epilogue_adjust_stack_di_2 (dest, src, tmp)); + insn = emit_insn (gen_pro_epilogue_adjust_stack_di_add (dest, src, tmp)); } if (style >= 0) @@ -9698,6 +9700,8 @@ ix86_expand_prologue (void) { rtx eax = gen_rtx_REG (Pmode, AX_REG); rtx r10 = NULL; + rtx (*adjust_stack_insn)(rtx, rtx, rtx); + bool eax_live = false; bool r10_live = false; @@ -9722,13 +9726,12 @@ ix86_expand_prologue (void) emit_insn (ix86_gen_allocate_stack_worker (eax, eax)); /* Use the fact that AX still contains ALLOCATE. */ - if (TARGET_64BIT) - insn = gen_pro_epilogue_adjust_stack_di_3 (stack_pointer_rtx, - stack_pointer_rtx, eax); - else - insn = gen_pro_epilogue_adjust_stack_si_3 (stack_pointer_rtx, - stack_pointer_rtx, eax); - insn = emit_insn (insn); + adjust_stack_insn = (TARGET_64BIT + ? gen_pro_epilogue_adjust_stack_di_sub + : gen_pro_epilogue_adjust_stack_si_sub); + + insn = emit_insn (adjust_stack_insn (stack_pointer_rtx, + stack_pointer_rtx, eax)); if (m->fs.cfa_reg == stack_pointer_rtx) { diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 0d76acb..c541c14 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -16246,10 +16246,10 @@ ;; ;; in proper program order. -(define_insn "pro_epilogue_adjust_stack_<mode>_1" +(define_insn "pro_epilogue_adjust_stack_<mode>_add" [(set (match_operand:P 0 "register_operand" "=r,r") (plus:P (match_operand:P 1 "register_operand" "0,r") - (match_operand:P 2 "<immediate_operand>" "<i>,<i>"))) + (match_operand:P 2 "<nonmemory_operand>" "r<i>,l<i>"))) (clobber (reg:CC FLAGS_REG)) (clobber (mem:BLK (scratch)))] "" @@ -16289,18 +16289,7 @@ (const_string "*"))) (set_attr "mode" "<MODE>")]) -(define_insn "pro_epilogue_adjust_stack_<mode>_2" - [(set (match_operand:P 0 "register_operand" "=r") - (plus:P (match_operand:DI 1 "register_operand" "0") - (match_operand:DI 2 "register_operand" "r"))) - (clobber (reg:CC FLAGS_REG)) - (clobber (mem:BLK (scratch)))] - "" - "add{<imodesuffix>}\t{%2, %0|%0, %2}" - [(set_attr "type" "alu") - (set_attr "mode" "<MODE>")]) - -(define_insn "pro_epilogue_adjust_stack_<mode>_3" +(define_insn "pro_epilogue_adjust_stack_<mode>_sub" [(set (match_operand:P 0 "register_operand" "=r") (minus:P (match_operand:P 1 "register_operand" "0") (match_operand:P 2 "register_operand" "r"))) |