From a150ee15564cbd8d4a5396d90180047952165895 Mon Sep 17 00:00:00 2001 From: aoliva Date: Mon, 9 Jan 2006 16:44:43 +0000 Subject: [PATCH] * config/i386/sse.md (*vec_extractv2di_1_sse2): New. (*vec_extractv2di_1_sse): New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@109501 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/config/i386/sse.md | 28 ++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 941f2af..3d9f48e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2006-01-09 Alexandre Oliva + + * config/i386/sse.md (*vec_extractv2di_1_sse2): New. + (*vec_extractv2di_1_sse): New. + 2006-01-09 Ben Elliston * config/rs6000/rs6000.h (GO_IF_LEGITIMATE_ADDRESS): Typo fix. diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index b444491..bb5ed69 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -3464,6 +3464,34 @@ operands[1] = gen_rtx_REG (DImode, REGNO (operands[1])); }) +(define_insn "*vec_extractv2di_1_sse2" + [(set (match_operand:DI 0 "nonimmediate_operand" "=x,m,x") + (vec_select:DI + (match_operand:V2DI 1 "nonimmediate_operand" "0,x,o") + (parallel [(const_int 1)])))] + "TARGET_SSE2 && !(MEM_P (operands[0]) && MEM_P (operands[1]))" + "@ + psrldq\t{$4, %0|%0, 4} + movhps\t{%1, %0|%0, %1} + movq\t{%H1, %0|%0, %H1}" + [(set_attr "type" "sseishft,ssemov,ssemov") + (set_attr "mode" "TI,V4SF,TI")]) + +;; Not sure this is ever used, but it doesn't hurt to have it. -aoliva +(define_insn "*vec_extractv2di_1_sse" + [(set (match_operand:DI 0 "nonimmediate_operand" "=x,m,x") + (vec_select:DI + (match_operand:V2DI 1 "nonimmediate_operand" "x,x,o") + (parallel [(const_int 1)])))] + "!TARGET_SSE2 && TARGET_SSE + && !(MEM_P (operands[0]) && MEM_P (operands[1]))" + "@ + movhlps\t{%1, %0|%0, %1} + movhps\t{%1, %0|%0, %1} + movlps\t{%H1, %0|%0, %H1}" + [(set_attr "type" "ssemov") + (set_attr "mode" "V2SF,V4SF,V2SF")]) + (define_insn "*vec_dupv4si" [(set (match_operand:V4SI 0 "register_operand" "=Y,x") (vec_duplicate:V4SI -- 2.7.4