aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2006-02-21 19:24:48 +0000
committerAlexandre Oliva <aoliva@gcc.gnu.org>2006-02-21 19:24:48 +0000
commitf877011111f66ec5a5378cc670a41a9a6ad30f8b (patch)
tree5014be2f248bcf1386138c3c4503f32105f565c5
parent35d177a2f8ba2c77ba3250e2a547b16440c92907 (diff)
downloadgcc-f877011111f66ec5a5378cc670a41a9a6ad30f8b.zip
gcc-f877011111f66ec5a5378cc670a41a9a6ad30f8b.tar.gz
gcc-f877011111f66ec5a5378cc670a41a9a6ad30f8b.tar.bz2
sse.md (vec_extractv2df_1_sse): New.
* config/i386/sse.md (vec_extractv2df_1_sse): New. (vec_extractv2df_0_sse): New. From-SVN: r111342
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/i386/sse.md30
2 files changed, 35 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8f6d7aa..1ef4b70 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2006-02-21 Alexandre Oliva <aoliva@redhat.com>
+ * config/i386/sse.md (vec_extractv2df_1_sse): New.
+ (vec_extractv2df_0_sse): New.
+
+2006-02-21 Alexandre Oliva <aoliva@redhat.com>
+
* defaults.h (CFA_FRAME_BASE_OFFSET): Define.
* config/ia64/ia64.h (CFA_FRAME_BASE_OFFSET): Override.
* doc/tm.texi (CFA_FRAME_BASE_OFFSET): Document.
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index 88c7adf..50eced2 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -2289,6 +2289,36 @@
operands[0] = adjust_address (operands[0], DFmode, 8);
})
+;; Not sure these two are ever used, but it doesn't hurt to have
+;; them. -aoliva
+(define_insn "*vec_extractv2df_1_sse"
+ [(set (match_operand:DF 0 "nonimmediate_operand" "=m,x,x")
+ (vec_select:DF
+ (match_operand:V2DF 1 "nonimmediate_operand" "x,x,o")
+ (parallel [(const_int 1)])))]
+ "!TARGET_SSE2 && TARGET_SSE
+ && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
+ "@
+ movhps\t{%1, %0|%0, %1}
+ movhlps\t{%1, %0|%0, %1}
+ movlps\t{%H1, %0|%0, %H1}"
+ [(set_attr "type" "ssemov")
+ (set_attr "mode" "V2SF,V4SF,V2SF")])
+
+(define_insn "*vec_extractv2df_0_sse"
+ [(set (match_operand:DF 0 "nonimmediate_operand" "=m,x,x")
+ (vec_select:DF
+ (match_operand:V2DF 1 "nonimmediate_operand" "x,x,m")
+ (parallel [(const_int 0)])))]
+ "!TARGET_SSE2 && TARGET_SSE
+ && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
+ "@
+ movlps\t{%1, %0|%0, %1}
+ movaps\t{%1, %0|%0, %1}
+ movlps\t{%1, %0|%0, %1}"
+ [(set_attr "type" "ssemov")
+ (set_attr "mode" "V2SF,V4SF,V2SF")])
+
(define_insn "sse2_movsd"
[(set (match_operand:V2DF 0 "nonimmediate_operand" "=x,x,m,x,x,o")
(vec_merge:V2DF