diff options
Diffstat (limited to 'gcc/config/i386/i386.md')
-rw-r--r-- | gcc/config/i386/i386.md | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index b575d42..37fe29b 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -23873,13 +23873,18 @@ [(set_attr "type" "ssecvt") (set_attr "mode" "DF")]) +;; ??? We ought to be using ix86_binary_operator_ok on this pattern, so +;; that we enforce the whole matching memory thing through combine et al. +;; But that requires that things be set up properly when invoked via an +;; intrinsic, which we don't do. Which leads to instantiate virtual regs +;; lossage, as seen compiling gcc.dg/i386-sse-2.c for x86_64 at -O0. (define_insn "sse2_movsd" [(set (match_operand:V2DF 0 "nonimmediate_operand" "=x,x,m") (vec_merge:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "0,0,0") (match_operand:V2DF 2 "nonimmediate_operand" "x,m,x") (const_int 2)))] - "TARGET_SSE2 && ix86_binary_operator_ok (UNKNOWN, V2DFmode, operands)" + "TARGET_SSE2" "@movsd\t{%2, %0|%0, %2} movlpd\t{%2, %0|%0, %2} movlpd\t{%2, %0|%0, %2}" |