aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2010-09-26 20:28:48 +0200
committerUros Bizjak <uros@gcc.gnu.org>2010-09-26 20:28:48 +0200
commit4470a3a30ed4ef41f4f35f52f7a10a71dc0bac29 (patch)
tree46fbb1dcff6a392a8eb69a5e8f958e5efeaf9069
parentd284c684ffafd0754d16cef50f4b06b0db893583 (diff)
downloadgcc-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
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/config/i386/i386.c23
-rw-r--r--gcc/config/i386/i386.md17
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")))