This is just a workaround rather than a real fix. The real fix has been ported to the gcc 3.4.4 ebuild. Tested on i686-pc-linux and x86_64-pc-linux 2004-09-20 Scott Robert Ladd PR 14631 * config/i386/i386.md (sse2_pinsrw): Changing the pattern of sse2_pinsrw from vector_merge to unspec. http://gcc.gnu.org/ml/gcc-patches/2004-09/msg01949.html http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14631 --- gcc-3.4.2/gcc/config/i386/i386.md +++ gcc-3.4.2/gcc/config/i386/i386.md @@ -105,6 +105,7 @@ (UNSPEC_MFENCE 59) (UNSPEC_LFENCE 60) (UNSPEC_PSADBW 61) + (UNSPEC_PINSRW 62) (UNSPEC_ADDSUB 71) (UNSPEC_HADD 72) (UNSPEC_HSUB 73) @@ -22095,11 +22096,12 @@ (define_insn "sse2_pinsrw" [(set (match_operand:V8HI 0 "register_operand" "=x") - (vec_merge:V8HI (match_operand:V8HI 1 "register_operand" "0") + (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "0") (vec_duplicate:V8HI (truncate:HI (match_operand:SI 2 "nonimmediate_operand" "rm"))) - (match_operand:SI 3 "const_0_to_255_operand" "N")))] + (match_operand:SI 3 "const_0_to_255_operand" "N")] + UNSPEC_PINSRW))] "TARGET_SSE2" "pinsrw\t{%3, %2, %0|%0, %2, %3}" [(set_attr "type" "ssecvt")