diff options
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 7 |
2 files changed, 11 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b8876af..8e3f21c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-12-20 Richard Henderson <rth@redhat.com> + + * config/i386/i386.md (sse2_movsd): Remove ix86_binary_operator_ok + check. + 2004-12-20 Steven Bosscher <stevenb@suse.de> Andrew Pinski <pinskia@physics.uc.edu> 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}" |