aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2007-03-10 13:52:52 +0100
committerUros Bizjak <uros@gcc.gnu.org>2007-03-10 13:52:52 +0100
commit79cd820a29e05b45f5f58d9fd77917eb39b689f6 (patch)
tree2e4a027f4ef3b71468e37112f2ea5f7048100196 /gcc/config
parent343d66ade59f0f8b2a7e94bbdfa7240997efa8a0 (diff)
downloadgcc-79cd820a29e05b45f5f58d9fd77917eb39b689f6.zip
gcc-79cd820a29e05b45f5f58d9fd77917eb39b689f6.tar.gz
gcc-79cd820a29e05b45f5f58d9fd77917eb39b689f6.tar.bz2
i386.md (UNSPEC_C2_FLAG): New constant.
* config/i386/i386.md (UNSPEC_C2_FLAG): New constant. (fpremxf4_i387, fprem1xf4_i387): Use UNSPEC_C2_FLAG. (fmodxf3, fmod<mode>3, remainderxf3, remainder<mode>3): Add LABEL_NUSES to emmitted label. * config/i386/i386.c (ix86_emit_fp_unordered_jump): Add branch probability value to emmitted jump insn. * reg-stack.c (subst_stack_regs_pat)[UNSPEC]: Handle UNSPEC_C2_FLAG. Do not check life information and do not re-arrange input operands for UNSPEC_FSCALE_EXP, UNSPEC_FPREM_U and UNSPEC_FPREM1_U. From-SVN: r122793
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/i386/i386.c2
-rw-r--r--gcc/config/i386/i386.md12
2 files changed, 12 insertions, 2 deletions
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 469d909..b4928ab 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -21032,7 +21032,9 @@ ix86_emit_fp_unordered_jump (rtx label)
gen_rtx_LABEL_REF (VOIDmode, label),
pc_rtx);
temp = gen_rtx_SET (VOIDmode, pc_rtx, temp);
+
emit_jump_insn (temp);
+ predict_jump (REG_BR_PROB_BASE * 10 / 100);
}
/* Output code to perform a log1p XFmode calculation. */
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index c0d447e..4ec12fa 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -144,6 +144,8 @@
(UNSPEC_FPREM1_F 90)
(UNSPEC_FPREM1_U 91)
+ (UNSPEC_C2_FLAG 95)
+
; SSP patterns
(UNSPEC_SP_SET 100)
(UNSPEC_SP_TEST 101)
@@ -16315,7 +16317,8 @@
(unspec:XF [(match_dup 2) (match_dup 3)]
UNSPEC_FPREM_U))
(set (reg:CCFP FPSR_REG)
- (unspec:CCFP [(const_int 0)] UNSPEC_NOP))]
+ (unspec:CCFP [(match_dup 2) (match_dup 3)]
+ UNSPEC_C2_FLAG))]
"TARGET_USE_FANCY_MATH_387"
"fprem"
[(set_attr "type" "fpspc")
@@ -16334,6 +16337,7 @@
emit_insn (gen_fpremxf4_i387 (operands[1], operands[2],
operands[1], operands[2]));
ix86_emit_fp_unordered_jump (label);
+ LABEL_NUSES (label) = 1;
emit_move_insn (operands[0], operands[1]);
DONE;
@@ -16356,6 +16360,7 @@
emit_label (label);
emit_insn (gen_fpremxf4_i387 (op1, op2, op1, op2));
ix86_emit_fp_unordered_jump (label);
+ LABEL_NUSES (label) = 1;
/* Truncate the result properly for strict SSE math. */
if (SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH
@@ -16376,7 +16381,8 @@
(unspec:XF [(match_dup 2) (match_dup 3)]
UNSPEC_FPREM1_U))
(set (reg:CCFP FPSR_REG)
- (unspec:CCFP [(const_int 0)] UNSPEC_NOP))]
+ (unspec:CCFP [(match_dup 2) (match_dup 3)]
+ UNSPEC_C2_FLAG))]
"TARGET_USE_FANCY_MATH_387"
"fprem1"
[(set_attr "type" "fpspc")
@@ -16395,6 +16401,7 @@
emit_insn (gen_fprem1xf4_i387 (operands[1], operands[2],
operands[1], operands[2]));
ix86_emit_fp_unordered_jump (label);
+ LABEL_NUSES (label) = 1;
emit_move_insn (operands[0], operands[1]);
DONE;
@@ -16418,6 +16425,7 @@
emit_insn (gen_fprem1xf4_i387 (op1, op2, op1, op2));
ix86_emit_fp_unordered_jump (label);
+ LABEL_NUSES (label) = 1;
/* Truncate the result properly for strict SSE math. */
if (SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH