From: Alexandre Oliva Date: Mon, 9 Jan 2006 16:44:43 +0000 (+0000) Subject: sse.md (*vec_extractv2di_1_sse2): New. X-Git-Tag: releases/gcc-4.2.0~4965 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c49c0c3963e9881c190058bf2219f05f1b3cf75b;p=thirdparty%2Fgcc.git sse.md (*vec_extractv2di_1_sse2): New. * config/i386/sse.md (*vec_extractv2di_1_sse2): New. (*vec_extractv2di_1_sse): New. From-SVN: r109501 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 941f2af4e18b..3d9f48e5850c 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 b444491138ee..bb5ed69e50b1 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