diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2006-02-21 19:24:48 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@gcc.gnu.org> | 2006-02-21 19:24:48 +0000 |
commit | f877011111f66ec5a5378cc670a41a9a6ad30f8b (patch) | |
tree | 5014be2f248bcf1386138c3c4503f32105f565c5 | |
parent | 35d177a2f8ba2c77ba3250e2a547b16440c92907 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/i386/sse.md | 30 |
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 |