summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2001-02-13 21:04:57 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2001-02-13 21:04:57 +0000
commit974d05e60ea9ce501212c5167f6d17ebe950e0de (patch)
tree68414dc5a2a857132e02b3911a20b68699241b71
parent53cb61a713d27d3f77850e8a368de9d5d7458420 (diff)
downloadgcc-974d05e60ea9ce501212c5167f6d17ebe950e0de.tar.gz
* i386.md (sqrt?f2): Change to expander.
(sqrt?f2_1, sqrt?f2_sse_only, sqrt?f2_i387): New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@39645 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/i386/i386.md71
2 files changed, 72 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ed6a413a326..d66d3704dea 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Tue Feb 13 22:03:07 CET 2001 Jan Hubicka <jh@suse.cz>
+
+ * i386.md (sqrt?f2): Change to expander.
+ (sqrt?f2_1, sqrt?f2_sse_only, sqrt?f2_i387): New.
+
Tue Feb 13 15:42:05 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* rtlanal.c (find_reg_equal_equiv_note): New function.
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index d9e79baeeca..65a3313f645 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -10766,20 +10766,83 @@
;; FPU special functions.
-(define_insn "sqrtsf2"
+(define_expand "sqrtsf2"
+ [(set (match_operand:SF 0 "register_operand" "")
+ (sqrt:SF (match_operand:SF 1 "nonimmediate_operand" "")))]
+ "(! TARGET_NO_FANCY_MATH_387 && TARGET_80387) || TARGET_SSE2"
+ "
+{
+ if (!TARGET_SSE)
+ operands[1] = force_reg (SFmode, operands[1]);
+}")
+
+(define_insn "sqrtsf2_1"
+ [(set (match_operand:SF 0 "register_operand" "=f#Y,Y#f")
+ (sqrt:SF (match_operand:SF 1 "nonimmediate_operand" "0#Y,Ym#f")))]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+ && (TARGET_SSE && TARGET_MIX_SSE_I387)"
+ "@
+ fsqrt
+ sqrtss\\t{%1, %0|%0, %1}"
+ [(set_attr "type" "fpspc,sse")
+ (set_attr "mode" "SF,SF")
+ (set_attr "athlon_decode" "direct,*")])
+
+(define_insn "sqrtsf2_1_sse_only"
+ [(set (match_operand:SF 0 "register_operand" "=Y")
+ (sqrt:SF (match_operand:SF 1 "nonimmediate_operand" "Ym")))]
+ "TARGET_SSE && (!TARGET_80387 || !TARGET_MIX_SSE_I387)"
+ "sqrtss\\t{%1, %0|%0, %1}"
+ [(set_attr "type" "sse")
+ (set_attr "mode" "SF")
+ (set_attr "athlon_decode" "*")])
+
+(define_insn "sqrtsf2_i387"
[(set (match_operand:SF 0 "register_operand" "=f")
(sqrt:SF (match_operand:SF 1 "register_operand" "0")))]
- "! TARGET_NO_FANCY_MATH_387 && TARGET_80387"
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+ && (!TARGET_SSE && !TARGET_MIX_SSE_I387)"
"fsqrt"
[(set_attr "type" "fpspc")
(set_attr "mode" "SF")
(set_attr "athlon_decode" "direct")])
-(define_insn "sqrtdf2"
+(define_expand "sqrtdf2"
+ [(set (match_operand:DF 0 "register_operand" "")
+ (sqrt:DF (match_operand:DF 1 "nonimmediate_operand" "")))]
+ "(! TARGET_NO_FANCY_MATH_387 && TARGET_80387) || TARGET_SSE2"
+ "
+{
+ if (!TARGET_SSE2)
+ operands[1] = force_reg (SFmode, operands[1]);
+}")
+
+(define_insn "sqrtdf2_1"
+ [(set (match_operand:DF 0 "register_operand" "=f#Y,Y#f")
+ (sqrt:DF (match_operand:DF 1 "nonimmediate_operand" "0#Y,Ym#f")))]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+ && (TARGET_SSE2 && TARGET_MIX_SSE_I387)"
+ "@
+ fsqrt
+ sqrtsd\\t{%1, %0|%0, %1}"
+ [(set_attr "type" "fpspc,sse")
+ (set_attr "mode" "DF,DF")
+ (set_attr "athlon_decode" "direct,*")])
+
+(define_insn "sqrtdf2_1_sse_only"
+ [(set (match_operand:DF 0 "register_operand" "=Y")
+ (sqrt:DF (match_operand:DF 1 "nonimmediate_operand" "Ym")))]
+ "TARGET_SSE2 && (!TARGET_80387 || !TARGET_MIX_SSE_I387)"
+ "sqrtsd\\t{%1, %0|%0, %1}"
+ [(set_attr "type" "sse")
+ (set_attr "mode" "DF")
+ (set_attr "athlon_decode" "*")])
+
+(define_insn "sqrtdf2_i387"
[(set (match_operand:DF 0 "register_operand" "=f")
(sqrt:DF (match_operand:DF 1 "register_operand" "0")))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
- && (TARGET_IEEE_FP || flag_fast_math) "
+ && (!TARGET_SSE2 && !TARGET_MIX_SSE_I387)"
"fsqrt"
[(set_attr "type" "fpspc")
(set_attr "mode" "DF")