summaryrefslogtreecommitdiff
blob: 10aba38756c4d4f994973fdc76d7cc84b81e7dde (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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 <scott.ladd@coyotegulch.com>
     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")