annotate gcc/config/i386/mmx.md @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 ;; GCC machine description for MMX and 3dNOW! instructions
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2 ;; Copyright (C) 2005-2020 Free Software Foundation, Inc.
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 ;; This file is part of GCC.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 ;; GCC is free software; you can redistribute it and/or modify
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 ;; it under the terms of the GNU General Public License as published by
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 ;; the Free Software Foundation; either version 3, or (at your option)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 ;; any later version.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 ;; GCC is distributed in the hope that it will be useful,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 ;; GNU General Public License for more details.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 ;; You should have received a copy of the GNU General Public License
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 ;; along with GCC; see the file COPYING3. If not see
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 ;; <http://www.gnu.org/licenses/>.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 ;; The MMX and 3dNOW! patterns are in the same file because they use
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 ;; the same register file, and 3dNOW! adds a number of extensions to
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 ;; the base integer MMX isa.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 ;; Note! Except for the basic move instructions, *all* of these
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 ;; patterns are outside the normal optabs namespace. This is because
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 ;; use of these registers requires the insertion of emms or femms
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 ;; instructions to return to normal fpu mode. The compiler doesn't
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 ;; know how to do that itself, which means it's up to the user. Which
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 ;; means that we should never use any of these patterns except at the
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 ;; direction of the user via a builtin.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
111
kono
parents: 67
diff changeset
32 (define_c_enum "unspec" [
kono
parents: 67
diff changeset
33 UNSPEC_MOVNTQ
kono
parents: 67
diff changeset
34 UNSPEC_PFRCP
kono
parents: 67
diff changeset
35 UNSPEC_PFRCPIT1
kono
parents: 67
diff changeset
36 UNSPEC_PFRCPIT2
kono
parents: 67
diff changeset
37 UNSPEC_PFRSQRT
kono
parents: 67
diff changeset
38 UNSPEC_PFRSQIT1
kono
parents: 67
diff changeset
39 ])
kono
parents: 67
diff changeset
40
kono
parents: 67
diff changeset
41 (define_c_enum "unspecv" [
kono
parents: 67
diff changeset
42 UNSPECV_EMMS
kono
parents: 67
diff changeset
43 UNSPECV_FEMMS
kono
parents: 67
diff changeset
44 ])
kono
parents: 67
diff changeset
45
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 ;; 8 byte integral modes handled by MMX (and by extension, SSE)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 (define_mode_iterator MMXMODEI [V8QI V4HI V2SI])
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
48 (define_mode_iterator MMXMODEI8 [V8QI V4HI V2SI (V1DI "TARGET_SSE2")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 ;; All 8-byte vector modes handled by MMX
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 (define_mode_iterator MMXMODE [V8QI V4HI V2SI V1DI V2SF])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 ;; Mix-n-match
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 (define_mode_iterator MMXMODE12 [V8QI V4HI])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 (define_mode_iterator MMXMODE24 [V4HI V2SI])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 (define_mode_iterator MMXMODE248 [V4HI V2SI V1DI])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 ;; Mapping from integer vector mode to mnemonic suffix
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 (define_mode_attr mmxvecsize [(V8QI "b") (V4HI "w") (V2SI "d") (V1DI "q")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
61 (define_mode_attr mmxdoublemode
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
62 [(V8QI "V8HI") (V4HI "V4SI")])
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
63
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 ;; Move patterns
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 ;; All of these patterns are enabled for MMX as well as 3dNOW.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 ;; This is essential for maintaining stable calling conventions.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 (define_expand "mov<mode>"
111
kono
parents: 67
diff changeset
74 [(set (match_operand:MMXMODE 0 "nonimmediate_operand")
kono
parents: 67
diff changeset
75 (match_operand:MMXMODE 1 "nonimmediate_operand"))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
76 "TARGET_MMX || TARGET_MMX_WITH_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 ix86_expand_vector_move (<MODE>mode, operands);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 DONE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 })
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 (define_insn "*mov<mode>_internal"
111
kono
parents: 67
diff changeset
83 [(set (match_operand:MMXMODE 0 "nonimmediate_operand"
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
84 "=r ,o ,r,r ,m ,?!y,!y,?!y,m ,r ,?!y,v,v,v,m,r,v,!y,*x")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
85 (match_operand:MMXMODE 1 "nonimm_or_0_operand"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
86 "rCo,rC,C,rm,rC,C ,!y,m ,?!y,?!y,r ,C,v,m,v,v,r,*x,!y"))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
87 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
111
kono
parents: 67
diff changeset
89 {
kono
parents: 67
diff changeset
90 switch (get_attr_type (insn))
kono
parents: 67
diff changeset
91 {
kono
parents: 67
diff changeset
92 case TYPE_MULTI:
kono
parents: 67
diff changeset
93 return "#";
kono
parents: 67
diff changeset
94
kono
parents: 67
diff changeset
95 case TYPE_IMOV:
kono
parents: 67
diff changeset
96 if (get_attr_mode (insn) == MODE_SI)
kono
parents: 67
diff changeset
97 return "mov{l}\t{%1, %k0|%k0, %1}";
kono
parents: 67
diff changeset
98 else
kono
parents: 67
diff changeset
99 return "mov{q}\t{%1, %0|%0, %1}";
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
100
111
kono
parents: 67
diff changeset
101 case TYPE_MMX:
kono
parents: 67
diff changeset
102 return "pxor\t%0, %0";
kono
parents: 67
diff changeset
103
kono
parents: 67
diff changeset
104 case TYPE_MMXMOV:
kono
parents: 67
diff changeset
105 /* Handle broken assemblers that require movd instead of movq. */
kono
parents: 67
diff changeset
106 if (!HAVE_AS_IX86_INTERUNIT_MOVQ
kono
parents: 67
diff changeset
107 && (GENERAL_REG_P (operands[0]) || GENERAL_REG_P (operands[1])))
kono
parents: 67
diff changeset
108 return "movd\t{%1, %0|%0, %1}";
kono
parents: 67
diff changeset
109 return "movq\t{%1, %0|%0, %1}";
kono
parents: 67
diff changeset
110
kono
parents: 67
diff changeset
111 case TYPE_SSECVT:
kono
parents: 67
diff changeset
112 if (SSE_REG_P (operands[0]))
kono
parents: 67
diff changeset
113 return "movq2dq\t{%1, %0|%0, %1}";
kono
parents: 67
diff changeset
114 else
kono
parents: 67
diff changeset
115 return "movdq2q\t{%1, %0|%0, %1}";
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
116
111
kono
parents: 67
diff changeset
117 case TYPE_SSELOG1:
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
118 return standard_sse_constant_opcode (insn, operands);
111
kono
parents: 67
diff changeset
119
kono
parents: 67
diff changeset
120 case TYPE_SSEMOV:
kono
parents: 67
diff changeset
121 switch (get_attr_mode (insn))
kono
parents: 67
diff changeset
122 {
kono
parents: 67
diff changeset
123 case MODE_DI:
kono
parents: 67
diff changeset
124 /* Handle broken assemblers that require movd instead of movq. */
kono
parents: 67
diff changeset
125 if (!HAVE_AS_IX86_INTERUNIT_MOVQ
kono
parents: 67
diff changeset
126 && (GENERAL_REG_P (operands[0]) || GENERAL_REG_P (operands[1])))
kono
parents: 67
diff changeset
127 return "%vmovd\t{%1, %0|%0, %1}";
kono
parents: 67
diff changeset
128 return "%vmovq\t{%1, %0|%0, %1}";
kono
parents: 67
diff changeset
129 case MODE_TI:
kono
parents: 67
diff changeset
130 return "%vmovdqa\t{%1, %0|%0, %1}";
kono
parents: 67
diff changeset
131 case MODE_XI:
kono
parents: 67
diff changeset
132 return "vmovdqa64\t{%g1, %g0|%g0, %g1}";
kono
parents: 67
diff changeset
133
kono
parents: 67
diff changeset
134 case MODE_V2SF:
kono
parents: 67
diff changeset
135 if (TARGET_AVX && REG_P (operands[0]))
kono
parents: 67
diff changeset
136 return "vmovlps\t{%1, %0, %0|%0, %0, %1}";
kono
parents: 67
diff changeset
137 return "%vmovlps\t{%1, %0|%0, %1}";
kono
parents: 67
diff changeset
138 case MODE_V4SF:
kono
parents: 67
diff changeset
139 return "%vmovaps\t{%1, %0|%0, %1}";
kono
parents: 67
diff changeset
140
kono
parents: 67
diff changeset
141 default:
kono
parents: 67
diff changeset
142 gcc_unreachable ();
kono
parents: 67
diff changeset
143 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
144
111
kono
parents: 67
diff changeset
145 default:
kono
parents: 67
diff changeset
146 gcc_unreachable ();
kono
parents: 67
diff changeset
147 }
kono
parents: 67
diff changeset
148 }
kono
parents: 67
diff changeset
149 [(set (attr "isa")
kono
parents: 67
diff changeset
150 (cond [(eq_attr "alternative" "0,1")
kono
parents: 67
diff changeset
151 (const_string "nox64")
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
152 (eq_attr "alternative" "2,3,4,9,10")
111
kono
parents: 67
diff changeset
153 (const_string "x64")
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
154 (eq_attr "alternative" "15,16")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
155 (const_string "x64_sse2")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
156 (eq_attr "alternative" "17,18")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
157 (const_string "sse2")
111
kono
parents: 67
diff changeset
158 ]
kono
parents: 67
diff changeset
159 (const_string "*")))
kono
parents: 67
diff changeset
160 (set (attr "type")
kono
parents: 67
diff changeset
161 (cond [(eq_attr "alternative" "0,1")
kono
parents: 67
diff changeset
162 (const_string "multi")
kono
parents: 67
diff changeset
163 (eq_attr "alternative" "2,3,4")
kono
parents: 67
diff changeset
164 (const_string "imov")
kono
parents: 67
diff changeset
165 (eq_attr "alternative" "5")
kono
parents: 67
diff changeset
166 (const_string "mmx")
kono
parents: 67
diff changeset
167 (eq_attr "alternative" "6,7,8,9,10")
kono
parents: 67
diff changeset
168 (const_string "mmxmov")
kono
parents: 67
diff changeset
169 (eq_attr "alternative" "11")
kono
parents: 67
diff changeset
170 (const_string "sselog1")
kono
parents: 67
diff changeset
171 (eq_attr "alternative" "17,18")
kono
parents: 67
diff changeset
172 (const_string "ssecvt")
kono
parents: 67
diff changeset
173 ]
kono
parents: 67
diff changeset
174 (const_string "ssemov")))
kono
parents: 67
diff changeset
175 (set (attr "prefix_rex")
kono
parents: 67
diff changeset
176 (if_then_else (eq_attr "alternative" "9,10,15,16")
kono
parents: 67
diff changeset
177 (const_string "1")
kono
parents: 67
diff changeset
178 (const_string "*")))
kono
parents: 67
diff changeset
179 (set (attr "prefix")
kono
parents: 67
diff changeset
180 (if_then_else (eq_attr "type" "sselog1,ssemov")
kono
parents: 67
diff changeset
181 (const_string "maybe_vex")
kono
parents: 67
diff changeset
182 (const_string "orig")))
kono
parents: 67
diff changeset
183 (set (attr "prefix_data16")
kono
parents: 67
diff changeset
184 (if_then_else
kono
parents: 67
diff changeset
185 (and (eq_attr "type" "ssemov") (eq_attr "mode" "DI"))
kono
parents: 67
diff changeset
186 (const_string "1")
kono
parents: 67
diff changeset
187 (const_string "*")))
kono
parents: 67
diff changeset
188 (set (attr "mode")
kono
parents: 67
diff changeset
189 (cond [(eq_attr "alternative" "2")
kono
parents: 67
diff changeset
190 (const_string "SI")
kono
parents: 67
diff changeset
191 (eq_attr "alternative" "11,12")
kono
parents: 67
diff changeset
192 (cond [(ior (match_operand 0 "ext_sse_reg_operand")
kono
parents: 67
diff changeset
193 (match_operand 1 "ext_sse_reg_operand"))
kono
parents: 67
diff changeset
194 (const_string "XI")
kono
parents: 67
diff changeset
195 (match_test "<MODE>mode == V2SFmode")
kono
parents: 67
diff changeset
196 (const_string "V4SF")
kono
parents: 67
diff changeset
197 (ior (not (match_test "TARGET_SSE2"))
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
198 (match_test "optimize_function_for_size_p (cfun)"))
111
kono
parents: 67
diff changeset
199 (const_string "V4SF")
kono
parents: 67
diff changeset
200 ]
kono
parents: 67
diff changeset
201 (const_string "TI"))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
202
111
kono
parents: 67
diff changeset
203 (and (eq_attr "alternative" "13,14")
kono
parents: 67
diff changeset
204 (ior (match_test "<MODE>mode == V2SFmode")
kono
parents: 67
diff changeset
205 (not (match_test "TARGET_SSE2"))))
kono
parents: 67
diff changeset
206 (const_string "V2SF")
kono
parents: 67
diff changeset
207 ]
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
208 (const_string "DI")))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
209 (set (attr "preferred_for_speed")
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
210 (cond [(eq_attr "alternative" "9,15")
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
211 (symbol_ref "TARGET_INTER_UNIT_MOVES_FROM_VEC")
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
212 (eq_attr "alternative" "10,16")
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
213 (symbol_ref "TARGET_INTER_UNIT_MOVES_TO_VEC")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
214 ]
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
215 (symbol_ref "true")))])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
216
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
217 (define_split
111
kono
parents: 67
diff changeset
218 [(set (match_operand:MMXMODE 0 "nonimmediate_gr_operand")
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
219 (match_operand:MMXMODE 1 "nonimmediate_gr_operand"))]
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
220 "!TARGET_64BIT && reload_completed"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
221 [(const_int 0)]
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
222 "ix86_split_long_move (operands); DONE;")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
223
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
224 (define_split
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
225 [(set (match_operand:MMXMODE 0 "nonimmediate_gr_operand")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
226 (match_operand:MMXMODE 1 "const0_operand"))]
111
kono
parents: 67
diff changeset
227 "!TARGET_64BIT && reload_completed"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 [(const_int 0)]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
229 "ix86_split_long_move (operands); DONE;")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
230
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 (define_expand "movmisalign<mode>"
111
kono
parents: 67
diff changeset
232 [(set (match_operand:MMXMODE 0 "nonimmediate_operand")
kono
parents: 67
diff changeset
233 (match_operand:MMXMODE 1 "nonimmediate_operand"))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
234 "TARGET_MMX || TARGET_MMX_WITH_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
235 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
236 ix86_expand_vector_move (<MODE>mode, operands);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
237 DONE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
238 })
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
239
111
kono
parents: 67
diff changeset
240 (define_insn "sse_movntq"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
241 [(set (match_operand:DI 0 "memory_operand" "=m,m")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
242 (unspec:DI [(match_operand:DI 1 "register_operand" "y,r")]
111
kono
parents: 67
diff changeset
243 UNSPEC_MOVNTQ))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
244 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
245 && (TARGET_SSE || TARGET_3DNOW_A)"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
246 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
247 movntq\t{%1, %0|%0, %1}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
248 movnti\t{%1, %0|%0, %1}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
249 [(set_attr "isa" "*,x64")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
250 (set_attr "mmx_isa" "native,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
251 (set_attr "type" "mmxmov,ssemov")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
252 (set_attr "mode" "DI")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
253
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
254 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
255 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
256 ;; Parallel single-precision floating point arithmetic
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
257 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
258 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
259
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
260 (define_expand "mmx_addv2sf3"
111
kono
parents: 67
diff changeset
261 [(set (match_operand:V2SF 0 "register_operand")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
262 (plus:V2SF
111
kono
parents: 67
diff changeset
263 (match_operand:V2SF 1 "nonimmediate_operand")
kono
parents: 67
diff changeset
264 (match_operand:V2SF 2 "nonimmediate_operand")))]
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
265 "TARGET_3DNOW"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
266 "ix86_fixup_binary_operands_no_copy (PLUS, V2SFmode, operands);")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
267
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
268 (define_insn "*mmx_addv2sf3"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
269 [(set (match_operand:V2SF 0 "register_operand" "=y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
270 (plus:V2SF (match_operand:V2SF 1 "nonimmediate_operand" "%0")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
271 (match_operand:V2SF 2 "nonimmediate_operand" "ym")))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
272 "TARGET_3DNOW && ix86_binary_operator_ok (PLUS, V2SFmode, operands)"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
273 "pfadd\t{%2, %0|%0, %2}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
274 [(set_attr "type" "mmxadd")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
275 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
276 (set_attr "mode" "V2SF")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
277
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
278 (define_expand "mmx_subv2sf3"
111
kono
parents: 67
diff changeset
279 [(set (match_operand:V2SF 0 "register_operand")
kono
parents: 67
diff changeset
280 (minus:V2SF (match_operand:V2SF 1 "register_operand")
kono
parents: 67
diff changeset
281 (match_operand:V2SF 2 "nonimmediate_operand")))]
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
282 "TARGET_3DNOW")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
283
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
284 (define_expand "mmx_subrv2sf3"
111
kono
parents: 67
diff changeset
285 [(set (match_operand:V2SF 0 "register_operand")
kono
parents: 67
diff changeset
286 (minus:V2SF (match_operand:V2SF 2 "register_operand")
kono
parents: 67
diff changeset
287 (match_operand:V2SF 1 "nonimmediate_operand")))]
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
288 "TARGET_3DNOW")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
289
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
290 (define_insn "*mmx_subv2sf3"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
291 [(set (match_operand:V2SF 0 "register_operand" "=y,y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
292 (minus:V2SF (match_operand:V2SF 1 "nonimmediate_operand" "0,ym")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
293 (match_operand:V2SF 2 "nonimmediate_operand" "ym,0")))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
294 "TARGET_3DNOW && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
295 "@
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
296 pfsub\t{%2, %0|%0, %2}
47
3bfb6c00c1e0 update it from 4.4.2 to 4.4.3.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
297 pfsubr\t{%1, %0|%0, %1}"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
298 [(set_attr "type" "mmxadd")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
299 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
300 (set_attr "mode" "V2SF")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
301
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
302 (define_expand "mmx_mulv2sf3"
111
kono
parents: 67
diff changeset
303 [(set (match_operand:V2SF 0 "register_operand")
kono
parents: 67
diff changeset
304 (mult:V2SF (match_operand:V2SF 1 "nonimmediate_operand")
kono
parents: 67
diff changeset
305 (match_operand:V2SF 2 "nonimmediate_operand")))]
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
306 "TARGET_3DNOW"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
307 "ix86_fixup_binary_operands_no_copy (MULT, V2SFmode, operands);")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
308
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
309 (define_insn "*mmx_mulv2sf3"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
310 [(set (match_operand:V2SF 0 "register_operand" "=y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
311 (mult:V2SF (match_operand:V2SF 1 "nonimmediate_operand" "%0")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
312 (match_operand:V2SF 2 "nonimmediate_operand" "ym")))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
313 "TARGET_3DNOW && ix86_binary_operator_ok (MULT, V2SFmode, operands)"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
314 "pfmul\t{%2, %0|%0, %2}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
315 [(set_attr "type" "mmxmul")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
316 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
317 (set_attr "mode" "V2SF")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
318
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
319 (define_expand "mmx_<code>v2sf3"
111
kono
parents: 67
diff changeset
320 [(set (match_operand:V2SF 0 "register_operand")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
321 (smaxmin:V2SF
111
kono
parents: 67
diff changeset
322 (match_operand:V2SF 1 "nonimmediate_operand")
kono
parents: 67
diff changeset
323 (match_operand:V2SF 2 "nonimmediate_operand")))]
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
324 "TARGET_3DNOW"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
325 {
111
kono
parents: 67
diff changeset
326 if (!flag_finite_math_only || flag_signed_zeros)
kono
parents: 67
diff changeset
327 {
kono
parents: 67
diff changeset
328 operands[1] = force_reg (V2SFmode, operands[1]);
kono
parents: 67
diff changeset
329 emit_insn (gen_mmx_ieee_<maxmin_float>v2sf3
kono
parents: 67
diff changeset
330 (operands[0], operands[1], operands[2]));
kono
parents: 67
diff changeset
331 DONE;
kono
parents: 67
diff changeset
332 }
kono
parents: 67
diff changeset
333 else
kono
parents: 67
diff changeset
334 ix86_fixup_binary_operands_no_copy (<CODE>, V2SFmode, operands);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
335 })
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
336
111
kono
parents: 67
diff changeset
337 ;; These versions of the min/max patterns are intentionally ignorant of
kono
parents: 67
diff changeset
338 ;; their behavior wrt -0.0 and NaN (via the commutative operand mark).
kono
parents: 67
diff changeset
339 ;; Since both the tree-level MAX_EXPR and the rtl-level SMAX operator
kono
parents: 67
diff changeset
340 ;; are undefined in this condition, we're certain this is correct.
kono
parents: 67
diff changeset
341
kono
parents: 67
diff changeset
342 (define_insn "*mmx_<code>v2sf3"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
343 [(set (match_operand:V2SF 0 "register_operand" "=y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
344 (smaxmin:V2SF
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
345 (match_operand:V2SF 1 "nonimmediate_operand" "%0")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
346 (match_operand:V2SF 2 "nonimmediate_operand" "ym")))]
111
kono
parents: 67
diff changeset
347 "TARGET_3DNOW && ix86_binary_operator_ok (<CODE>, V2SFmode, operands)"
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
348 "pf<maxmin_float>\t{%2, %0|%0, %2}"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
349 [(set_attr "type" "mmxadd")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
350 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
351 (set_attr "mode" "V2SF")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
352
111
kono
parents: 67
diff changeset
353 ;; These versions of the min/max patterns implement exactly the operations
kono
parents: 67
diff changeset
354 ;; min = (op1 < op2 ? op1 : op2)
kono
parents: 67
diff changeset
355 ;; max = (!(op1 < op2) ? op1 : op2)
kono
parents: 67
diff changeset
356 ;; Their operands are not commutative, and thus they may be used in the
kono
parents: 67
diff changeset
357 ;; presence of -0.0 and NaN.
kono
parents: 67
diff changeset
358
kono
parents: 67
diff changeset
359 (define_insn "mmx_ieee_<ieee_maxmin>v2sf3"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
360 [(set (match_operand:V2SF 0 "register_operand" "=y")
111
kono
parents: 67
diff changeset
361 (unspec:V2SF
kono
parents: 67
diff changeset
362 [(match_operand:V2SF 1 "register_operand" "0")
kono
parents: 67
diff changeset
363 (match_operand:V2SF 2 "nonimmediate_operand" "ym")]
kono
parents: 67
diff changeset
364 IEEE_MAXMIN))]
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
365 "TARGET_3DNOW"
111
kono
parents: 67
diff changeset
366 "pf<ieee_maxmin>\t{%2, %0|%0, %2}"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
367 [(set_attr "type" "mmxadd")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
368 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
369 (set_attr "mode" "V2SF")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
370
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
371 (define_insn "mmx_rcpv2sf2"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
372 [(set (match_operand:V2SF 0 "register_operand" "=y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
373 (unspec:V2SF [(match_operand:V2SF 1 "nonimmediate_operand" "ym")]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
374 UNSPEC_PFRCP))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
375 "TARGET_3DNOW"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
376 "pfrcp\t{%1, %0|%0, %1}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
377 [(set_attr "type" "mmx")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
378 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
379 (set_attr "mode" "V2SF")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
380
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
381 (define_insn "mmx_rcpit1v2sf3"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
382 [(set (match_operand:V2SF 0 "register_operand" "=y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
383 (unspec:V2SF [(match_operand:V2SF 1 "register_operand" "0")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
384 (match_operand:V2SF 2 "nonimmediate_operand" "ym")]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
385 UNSPEC_PFRCPIT1))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
386 "TARGET_3DNOW"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
387 "pfrcpit1\t{%2, %0|%0, %2}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
388 [(set_attr "type" "mmx")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
389 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
390 (set_attr "mode" "V2SF")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
391
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
392 (define_insn "mmx_rcpit2v2sf3"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
393 [(set (match_operand:V2SF 0 "register_operand" "=y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
394 (unspec:V2SF [(match_operand:V2SF 1 "register_operand" "0")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
395 (match_operand:V2SF 2 "nonimmediate_operand" "ym")]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
396 UNSPEC_PFRCPIT2))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
397 "TARGET_3DNOW"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
398 "pfrcpit2\t{%2, %0|%0, %2}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
399 [(set_attr "type" "mmx")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
400 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
401 (set_attr "mode" "V2SF")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
402
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
403 (define_insn "mmx_rsqrtv2sf2"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
404 [(set (match_operand:V2SF 0 "register_operand" "=y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
405 (unspec:V2SF [(match_operand:V2SF 1 "nonimmediate_operand" "ym")]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
406 UNSPEC_PFRSQRT))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
407 "TARGET_3DNOW"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
408 "pfrsqrt\t{%1, %0|%0, %1}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
409 [(set_attr "type" "mmx")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
410 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
411 (set_attr "mode" "V2SF")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
412
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
413 (define_insn "mmx_rsqit1v2sf3"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
414 [(set (match_operand:V2SF 0 "register_operand" "=y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
415 (unspec:V2SF [(match_operand:V2SF 1 "register_operand" "0")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
416 (match_operand:V2SF 2 "nonimmediate_operand" "ym")]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
417 UNSPEC_PFRSQIT1))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
418 "TARGET_3DNOW"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
419 "pfrsqit1\t{%2, %0|%0, %2}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
420 [(set_attr "type" "mmx")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
421 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
422 (set_attr "mode" "V2SF")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
423
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
424 (define_insn "mmx_haddv2sf3"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
425 [(set (match_operand:V2SF 0 "register_operand" "=y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
426 (vec_concat:V2SF
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
427 (plus:SF
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
428 (vec_select:SF
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
429 (match_operand:V2SF 1 "register_operand" "0")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
430 (parallel [(const_int 0)]))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
431 (vec_select:SF (match_dup 1) (parallel [(const_int 1)])))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
432 (plus:SF
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
433 (vec_select:SF
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
434 (match_operand:V2SF 2 "nonimmediate_operand" "ym")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
435 (parallel [(const_int 0)]))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
436 (vec_select:SF (match_dup 2) (parallel [(const_int 1)])))))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
437 "TARGET_3DNOW"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
438 "pfacc\t{%2, %0|%0, %2}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
439 [(set_attr "type" "mmxadd")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
440 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
441 (set_attr "mode" "V2SF")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
442
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
443 (define_insn "mmx_hsubv2sf3"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
444 [(set (match_operand:V2SF 0 "register_operand" "=y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
445 (vec_concat:V2SF
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
446 (minus:SF
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
447 (vec_select:SF
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
448 (match_operand:V2SF 1 "register_operand" "0")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
449 (parallel [(const_int 0)]))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
450 (vec_select:SF (match_dup 1) (parallel [(const_int 1)])))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
451 (minus:SF
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
452 (vec_select:SF
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
453 (match_operand:V2SF 2 "nonimmediate_operand" "ym")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
454 (parallel [(const_int 0)]))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
455 (vec_select:SF (match_dup 2) (parallel [(const_int 1)])))))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
456 "TARGET_3DNOW_A"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
457 "pfnacc\t{%2, %0|%0, %2}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
458 [(set_attr "type" "mmxadd")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
459 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
460 (set_attr "mode" "V2SF")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
461
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
462 (define_insn "mmx_addsubv2sf3"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
463 [(set (match_operand:V2SF 0 "register_operand" "=y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
464 (vec_merge:V2SF
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
465 (plus:V2SF
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
466 (match_operand:V2SF 1 "register_operand" "0")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
467 (match_operand:V2SF 2 "nonimmediate_operand" "ym"))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
468 (minus:V2SF (match_dup 1) (match_dup 2))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
469 (const_int 1)))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
470 "TARGET_3DNOW_A"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
471 "pfpnacc\t{%2, %0|%0, %2}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
472 [(set_attr "type" "mmxadd")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
473 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
474 (set_attr "mode" "V2SF")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
475
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
476 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
477 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
478 ;; Parallel single-precision floating point comparisons
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
479 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
480 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
481
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
482 (define_expand "mmx_eqv2sf3"
111
kono
parents: 67
diff changeset
483 [(set (match_operand:V2SI 0 "register_operand")
kono
parents: 67
diff changeset
484 (eq:V2SI (match_operand:V2SF 1 "nonimmediate_operand")
kono
parents: 67
diff changeset
485 (match_operand:V2SF 2 "nonimmediate_operand")))]
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
486 "TARGET_3DNOW"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
487 "ix86_fixup_binary_operands_no_copy (EQ, V2SFmode, operands);")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
488
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
489 (define_insn "*mmx_eqv2sf3"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
490 [(set (match_operand:V2SI 0 "register_operand" "=y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
491 (eq:V2SI (match_operand:V2SF 1 "nonimmediate_operand" "%0")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
492 (match_operand:V2SF 2 "nonimmediate_operand" "ym")))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
493 "TARGET_3DNOW && ix86_binary_operator_ok (EQ, V2SFmode, operands)"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
494 "pfcmpeq\t{%2, %0|%0, %2}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
495 [(set_attr "type" "mmxcmp")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
496 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
497 (set_attr "mode" "V2SF")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
498
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
499 (define_insn "mmx_gtv2sf3"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
500 [(set (match_operand:V2SI 0 "register_operand" "=y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
501 (gt:V2SI (match_operand:V2SF 1 "register_operand" "0")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
502 (match_operand:V2SF 2 "nonimmediate_operand" "ym")))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
503 "TARGET_3DNOW"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
504 "pfcmpgt\t{%2, %0|%0, %2}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
505 [(set_attr "type" "mmxcmp")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
506 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
507 (set_attr "mode" "V2SF")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
508
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
509 (define_insn "mmx_gev2sf3"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
510 [(set (match_operand:V2SI 0 "register_operand" "=y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
511 (ge:V2SI (match_operand:V2SF 1 "register_operand" "0")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
512 (match_operand:V2SF 2 "nonimmediate_operand" "ym")))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
513 "TARGET_3DNOW"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
514 "pfcmpge\t{%2, %0|%0, %2}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
515 [(set_attr "type" "mmxcmp")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
516 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
517 (set_attr "mode" "V2SF")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
518
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
519 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
520 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
521 ;; Parallel single-precision floating point conversion operations
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
522 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
523 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
524
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
525 (define_insn "mmx_pf2id"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
526 [(set (match_operand:V2SI 0 "register_operand" "=y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
527 (fix:V2SI (match_operand:V2SF 1 "nonimmediate_operand" "ym")))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
528 "TARGET_3DNOW"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
529 "pf2id\t{%1, %0|%0, %1}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
530 [(set_attr "type" "mmxcvt")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
531 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
532 (set_attr "mode" "V2SF")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
533
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
534 (define_insn "mmx_pf2iw"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
535 [(set (match_operand:V2SI 0 "register_operand" "=y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
536 (sign_extend:V2SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
537 (ss_truncate:V2HI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
538 (fix:V2SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
539 (match_operand:V2SF 1 "nonimmediate_operand" "ym")))))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
540 "TARGET_3DNOW_A"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
541 "pf2iw\t{%1, %0|%0, %1}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
542 [(set_attr "type" "mmxcvt")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
543 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
544 (set_attr "mode" "V2SF")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
545
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
546 (define_insn "mmx_pi2fw"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
547 [(set (match_operand:V2SF 0 "register_operand" "=y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
548 (float:V2SF
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
549 (sign_extend:V2SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
550 (truncate:V2HI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
551 (match_operand:V2SI 1 "nonimmediate_operand" "ym")))))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
552 "TARGET_3DNOW_A"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
553 "pi2fw\t{%1, %0|%0, %1}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
554 [(set_attr "type" "mmxcvt")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
555 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
556 (set_attr "mode" "V2SF")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
557
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
558 (define_insn "mmx_floatv2si2"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
559 [(set (match_operand:V2SF 0 "register_operand" "=y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
560 (float:V2SF (match_operand:V2SI 1 "nonimmediate_operand" "ym")))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
561 "TARGET_3DNOW"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
562 "pi2fd\t{%1, %0|%0, %1}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
563 [(set_attr "type" "mmxcvt")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
564 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
565 (set_attr "mode" "V2SF")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
566
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
567 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
568 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
569 ;; Parallel single-precision floating point element swizzling
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
570 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
571 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
572
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
573 (define_insn "mmx_pswapdv2sf2"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
574 [(set (match_operand:V2SF 0 "register_operand" "=y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
575 (vec_select:V2SF (match_operand:V2SF 1 "nonimmediate_operand" "ym")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
576 (parallel [(const_int 1) (const_int 0)])))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
577 "TARGET_3DNOW_A"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
578 "pswapd\t{%1, %0|%0, %1}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
579 [(set_attr "type" "mmxcvt")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
580 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
581 (set_attr "mode" "V2SF")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
582
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
583 (define_insn_and_split "*vec_dupv2sf"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
584 [(set (match_operand:V2SF 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
585 (vec_duplicate:V2SF
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
586 (match_operand:SF 1 "register_operand" "0,0,Yv")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
587 "TARGET_MMX || TARGET_MMX_WITH_SSE"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
588 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
589 punpckldq\t%0, %0
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
590 #
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
591 #"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
592 "TARGET_SSE && reload_completed
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
593 && SSE_REGNO_P (REGNO (operands[0]))"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
594 [(set (match_dup 0)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
595 (vec_duplicate:V4SF (match_dup 1)))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
596 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
597 operands[0] = lowpart_subreg (V4SFmode, operands[0],
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
598 GET_MODE (operands[0]));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
599 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
600 [(set_attr "isa" "*,sse_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
601 (set_attr "mmx_isa" "native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
602 (set_attr "type" "mmxcvt,ssemov,ssemov")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
603 (set_attr "mode" "DI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
604
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
605 (define_insn "*mmx_concatv2sf"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
606 [(set (match_operand:V2SF 0 "register_operand" "=y,y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
607 (vec_concat:V2SF
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
608 (match_operand:SF 1 "nonimmediate_operand" " 0,rm")
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
609 (match_operand:SF 2 "nonimm_or_0_operand" "ym,C")))]
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
610 "TARGET_MMX && !TARGET_SSE"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
611 "@
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
612 punpckldq\t{%2, %0|%0, %2}
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
613 movd\t{%1, %0|%0, %1}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
614 [(set_attr "type" "mmxcvt,mmxmov")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
615 (set_attr "mode" "DI")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
616
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
617 (define_expand "vec_setv2sf"
111
kono
parents: 67
diff changeset
618 [(match_operand:V2SF 0 "register_operand")
kono
parents: 67
diff changeset
619 (match_operand:SF 1 "register_operand")
kono
parents: 67
diff changeset
620 (match_operand 2 "const_int_operand")]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
621 "TARGET_MMX || TARGET_MMX_WITH_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
622 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
623 ix86_expand_vector_set (TARGET_MMX_WITH_SSE, operands[0], operands[1],
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
624 INTVAL (operands[2]));
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
625 DONE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
626 })
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
627
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
628 ;; Avoid combining registers from different units in a single alternative,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
629 ;; see comment above inline_secondary_memory_needed function in i386.c
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
630 (define_insn_and_split "*vec_extractv2sf_0"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
631 [(set (match_operand:SF 0 "nonimmediate_operand" "=x, m,y ,m,f,r")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
632 (vec_select:SF
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
633 (match_operand:V2SF 1 "nonimmediate_operand" " xm,x,ym,y,m,m")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
634 (parallel [(const_int 0)])))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
635 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
636 && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
637 "#"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
638 "&& reload_completed"
111
kono
parents: 67
diff changeset
639 [(set (match_dup 0) (match_dup 1))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
640 "operands[1] = gen_lowpart (SFmode, operands[1]);"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
641 [(set_attr "mmx_isa" "*,*,native,native,*,*")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
642
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
643 ;; Avoid combining registers from different units in a single alternative,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
644 ;; see comment above inline_secondary_memory_needed function in i386.c
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
645 (define_insn "*vec_extractv2sf_1"
111
kono
parents: 67
diff changeset
646 [(set (match_operand:SF 0 "nonimmediate_operand" "=y,x,x,y,x,f,r")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
647 (vec_select:SF
111
kono
parents: 67
diff changeset
648 (match_operand:V2SF 1 "nonimmediate_operand" " 0,x,x,o,o,o,o")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
649 (parallel [(const_int 1)])))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
650 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
651 && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
652 "@
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
653 punpckhdq\t%0, %0
111
kono
parents: 67
diff changeset
654 %vmovshdup\t{%1, %0|%0, %1}
kono
parents: 67
diff changeset
655 shufps\t{$0xe5, %1, %0|%0, %1, 0xe5}
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
656 #
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
657 #
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
658 #
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
659 #"
111
kono
parents: 67
diff changeset
660 [(set_attr "isa" "*,sse3,noavx,*,*,*,*")
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
661 (set_attr "mmx_isa" "native,*,*,native,*,*,*")
111
kono
parents: 67
diff changeset
662 (set_attr "type" "mmxcvt,sse,sseshuf1,mmxmov,ssemov,fmov,imov")
kono
parents: 67
diff changeset
663 (set (attr "length_immediate")
kono
parents: 67
diff changeset
664 (if_then_else (eq_attr "alternative" "2")
kono
parents: 67
diff changeset
665 (const_string "1")
kono
parents: 67
diff changeset
666 (const_string "*")))
kono
parents: 67
diff changeset
667 (set (attr "prefix_rep")
kono
parents: 67
diff changeset
668 (if_then_else (eq_attr "alternative" "1")
kono
parents: 67
diff changeset
669 (const_string "1")
kono
parents: 67
diff changeset
670 (const_string "*")))
kono
parents: 67
diff changeset
671 (set_attr "prefix" "orig,maybe_vex,orig,orig,orig,orig,orig")
kono
parents: 67
diff changeset
672 (set_attr "mode" "DI,V4SF,V4SF,SF,SF,SF,SF")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
673
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
674 (define_split
111
kono
parents: 67
diff changeset
675 [(set (match_operand:SF 0 "register_operand")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
676 (vec_select:SF
111
kono
parents: 67
diff changeset
677 (match_operand:V2SF 1 "memory_operand")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
678 (parallel [(const_int 1)])))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
679 "(TARGET_MMX || TARGET_MMX_WITH_SSE) && reload_completed"
111
kono
parents: 67
diff changeset
680 [(set (match_dup 0) (match_dup 1))]
kono
parents: 67
diff changeset
681 "operands[1] = adjust_address (operands[1], SFmode, 4);")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
682
111
kono
parents: 67
diff changeset
683 (define_expand "vec_extractv2sfsf"
kono
parents: 67
diff changeset
684 [(match_operand:SF 0 "register_operand")
kono
parents: 67
diff changeset
685 (match_operand:V2SF 1 "register_operand")
kono
parents: 67
diff changeset
686 (match_operand 2 "const_int_operand")]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
687 "TARGET_MMX || TARGET_MMX_WITH_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
688 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
689 ix86_expand_vector_extract (TARGET_MMX_WITH_SSE, operands[0],
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
690 operands[1], INTVAL (operands[2]));
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
691 DONE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
692 })
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
693
111
kono
parents: 67
diff changeset
694 (define_expand "vec_initv2sfsf"
kono
parents: 67
diff changeset
695 [(match_operand:V2SF 0 "register_operand")
kono
parents: 67
diff changeset
696 (match_operand 1)]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
697 "(TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
698 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
699 ix86_expand_vector_init (TARGET_MMX_WITH_SSE, operands[0],
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
700 operands[1]);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
701 DONE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
702 })
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
703
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
704 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
705 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
706 ;; Parallel integral arithmetic
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
707 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
708 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
709
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
710 (define_expand "mmx_<plusminus_insn><mode>3"
111
kono
parents: 67
diff changeset
711 [(set (match_operand:MMXMODEI8 0 "register_operand")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
712 (plusminus:MMXMODEI8
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
713 (match_operand:MMXMODEI8 1 "register_mmxmem_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
714 (match_operand:MMXMODEI8 2 "register_mmxmem_operand")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
715 "TARGET_MMX || TARGET_MMX_WITH_SSE"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
716 "ix86_fixup_binary_operands_no_copy (<CODE>, <MODE>mode, operands);")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
717
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
718 (define_expand "<plusminus_insn><mode>3"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
719 [(set (match_operand:MMXMODEI 0 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
720 (plusminus:MMXMODEI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
721 (match_operand:MMXMODEI 1 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
722 (match_operand:MMXMODEI 2 "register_operand")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
723 "TARGET_MMX_WITH_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
724 "ix86_fixup_binary_operands_no_copy (<CODE>, <MODE>mode, operands);")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
725
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
726 (define_insn "*mmx_<plusminus_insn><mode>3"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
727 [(set (match_operand:MMXMODEI8 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
728 (plusminus:MMXMODEI8
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
729 (match_operand:MMXMODEI8 1 "register_mmxmem_operand" "<comm>0,0,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
730 (match_operand:MMXMODEI8 2 "register_mmxmem_operand" "ym,x,Yv")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
731 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
732 && ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
733 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
734 p<plusminus_mnemonic><mmxvecsize>\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
735 p<plusminus_mnemonic><mmxvecsize>\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
736 vp<plusminus_mnemonic><mmxvecsize>\t{%2, %1, %0|%0, %1, %2}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
737 [(set_attr "isa" "*,sse2_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
738 (set_attr "mmx_isa" "native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
739 (set_attr "type" "mmxadd,sseadd,sseadd")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
740 (set_attr "mode" "DI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
741
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
742 (define_expand "mmx_<plusminus_insn><mode>3"
111
kono
parents: 67
diff changeset
743 [(set (match_operand:MMXMODE12 0 "register_operand")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
744 (sat_plusminus:MMXMODE12
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
745 (match_operand:MMXMODE12 1 "register_mmxmem_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
746 (match_operand:MMXMODE12 2 "register_mmxmem_operand")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
747 "TARGET_MMX || TARGET_MMX_WITH_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
748 "ix86_fixup_binary_operands_no_copy (<CODE>, <MODE>mode, operands);")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
749
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
750 (define_insn "*mmx_<plusminus_insn><mode>3"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
751 [(set (match_operand:MMXMODE12 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
752 (sat_plusminus:MMXMODE12
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
753 (match_operand:MMXMODE12 1 "register_mmxmem_operand" "<comm>0,0,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
754 (match_operand:MMXMODE12 2 "register_mmxmem_operand" "ym,x,Yv")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
755 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
756 && ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
757 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
758 p<plusminus_mnemonic><mmxvecsize>\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
759 p<plusminus_mnemonic><mmxvecsize>\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
760 vp<plusminus_mnemonic><mmxvecsize>\t{%2, %1, %0|%0, %1, %2}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
761 [(set_attr "isa" "*,sse2_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
762 (set_attr "mmx_isa" "native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
763 (set_attr "type" "mmxadd,sseadd,sseadd")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
764 (set_attr "mode" "DI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
765
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
766 (define_expand "mmx_mulv4hi3"
111
kono
parents: 67
diff changeset
767 [(set (match_operand:V4HI 0 "register_operand")
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
768 (mult:V4HI (match_operand:V4HI 1 "register_mmxmem_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
769 (match_operand:V4HI 2 "register_mmxmem_operand")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
770 "TARGET_MMX || TARGET_MMX_WITH_SSE"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
771 "ix86_fixup_binary_operands_no_copy (MULT, V4HImode, operands);")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
772
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
773 (define_expand "mulv4hi3"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
774 [(set (match_operand:V4HI 0 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
775 (mult:V4HI (match_operand:V4HI 1 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
776 (match_operand:V4HI 2 "register_operand")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
777 "TARGET_MMX_WITH_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
778 "ix86_fixup_binary_operands_no_copy (MULT, V4HImode, operands);")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
779
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
780 (define_insn "*mmx_mulv4hi3"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
781 [(set (match_operand:V4HI 0 "register_operand" "=y,x,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
782 (mult:V4HI (match_operand:V4HI 1 "register_mmxmem_operand" "%0,0,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
783 (match_operand:V4HI 2 "register_mmxmem_operand" "ym,x,Yv")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
784 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
785 && ix86_binary_operator_ok (MULT, V4HImode, operands)"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
786 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
787 pmullw\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
788 pmullw\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
789 vpmullw\t{%2, %1, %0|%0, %1, %2}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
790 [(set_attr "isa" "*,sse2_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
791 (set_attr "mmx_isa" "native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
792 (set_attr "type" "mmxmul,ssemul,ssemul")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
793 (set_attr "mode" "DI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
794
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
795 (define_expand "mmx_smulv4hi3_highpart"
111
kono
parents: 67
diff changeset
796 [(set (match_operand:V4HI 0 "register_operand")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
797 (truncate:V4HI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
798 (lshiftrt:V4SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
799 (mult:V4SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
800 (sign_extend:V4SI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
801 (match_operand:V4HI 1 "register_mmxmem_operand"))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
802 (sign_extend:V4SI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
803 (match_operand:V4HI 2 "register_mmxmem_operand")))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
804 (const_int 16))))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
805 "TARGET_MMX || TARGET_MMX_WITH_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
806 "ix86_fixup_binary_operands_no_copy (MULT, V4HImode, operands);")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
807
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
808 (define_insn "*mmx_smulv4hi3_highpart"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
809 [(set (match_operand:V4HI 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
810 (truncate:V4HI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
811 (lshiftrt:V4SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
812 (mult:V4SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
813 (sign_extend:V4SI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
814 (match_operand:V4HI 1 "register_mmxmem_operand" "%0,0,Yv"))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
815 (sign_extend:V4SI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
816 (match_operand:V4HI 2 "register_mmxmem_operand" "ym,x,Yv")))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
817 (const_int 16))))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
818 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
819 && ix86_binary_operator_ok (MULT, V4HImode, operands)"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
820 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
821 pmulhw\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
822 pmulhw\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
823 vpmulhw\t{%2, %1, %0|%0, %1, %2}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
824 [(set_attr "isa" "*,sse2_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
825 (set_attr "mmx_isa" "native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
826 (set_attr "type" "mmxmul,ssemul,ssemul")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
827 (set_attr "mode" "DI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
828
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
829 (define_expand "mmx_umulv4hi3_highpart"
111
kono
parents: 67
diff changeset
830 [(set (match_operand:V4HI 0 "register_operand")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
831 (truncate:V4HI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
832 (lshiftrt:V4SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
833 (mult:V4SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
834 (zero_extend:V4SI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
835 (match_operand:V4HI 1 "register_mmxmem_operand"))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
836 (zero_extend:V4SI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
837 (match_operand:V4HI 2 "register_mmxmem_operand")))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
838 (const_int 16))))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
839 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
840 && (TARGET_SSE || TARGET_3DNOW_A)"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
841 "ix86_fixup_binary_operands_no_copy (MULT, V4HImode, operands);")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
842
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
843 (define_insn "*mmx_umulv4hi3_highpart"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
844 [(set (match_operand:V4HI 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
845 (truncate:V4HI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
846 (lshiftrt:V4SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
847 (mult:V4SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
848 (zero_extend:V4SI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
849 (match_operand:V4HI 1 "register_mmxmem_operand" "%0,0,Yv"))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
850 (zero_extend:V4SI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
851 (match_operand:V4HI 2 "register_mmxmem_operand" "ym,x,Yv")))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
852 (const_int 16))))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
853 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
854 && (TARGET_SSE || TARGET_3DNOW_A)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
855 && ix86_binary_operator_ok (MULT, V4HImode, operands)"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
856 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
857 pmulhuw\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
858 pmulhuw\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
859 vpmulhuw\t{%2, %1, %0|%0, %1, %2}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
860 [(set_attr "isa" "*,sse2_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
861 (set_attr "mmx_isa" "native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
862 (set_attr "type" "mmxmul,ssemul,ssemul")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
863 (set_attr "mode" "DI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
864
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
865 (define_expand "mmx_pmaddwd"
111
kono
parents: 67
diff changeset
866 [(set (match_operand:V2SI 0 "register_operand")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
867 (plus:V2SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
868 (mult:V2SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
869 (sign_extend:V2SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
870 (vec_select:V2HI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
871 (match_operand:V4HI 1 "register_mmxmem_operand")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
872 (parallel [(const_int 0) (const_int 2)])))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
873 (sign_extend:V2SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
874 (vec_select:V2HI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
875 (match_operand:V4HI 2 "register_mmxmem_operand")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
876 (parallel [(const_int 0) (const_int 2)]))))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
877 (mult:V2SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
878 (sign_extend:V2SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
879 (vec_select:V2HI (match_dup 1)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
880 (parallel [(const_int 1) (const_int 3)])))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
881 (sign_extend:V2SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
882 (vec_select:V2HI (match_dup 2)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
883 (parallel [(const_int 1) (const_int 3)]))))))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
884 "TARGET_MMX || TARGET_MMX_WITH_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
885 "ix86_fixup_binary_operands_no_copy (MULT, V4HImode, operands);")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
886
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
887 (define_insn "*mmx_pmaddwd"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
888 [(set (match_operand:V2SI 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
889 (plus:V2SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
890 (mult:V2SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
891 (sign_extend:V2SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
892 (vec_select:V2HI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
893 (match_operand:V4HI 1 "register_mmxmem_operand" "%0,0,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
894 (parallel [(const_int 0) (const_int 2)])))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
895 (sign_extend:V2SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
896 (vec_select:V2HI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
897 (match_operand:V4HI 2 "register_mmxmem_operand" "ym,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
898 (parallel [(const_int 0) (const_int 2)]))))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
899 (mult:V2SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
900 (sign_extend:V2SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
901 (vec_select:V2HI (match_dup 1)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
902 (parallel [(const_int 1) (const_int 3)])))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
903 (sign_extend:V2SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
904 (vec_select:V2HI (match_dup 2)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
905 (parallel [(const_int 1) (const_int 3)]))))))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
906 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
907 && ix86_binary_operator_ok (MULT, V4HImode, operands)"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
908 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
909 pmaddwd\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
910 pmaddwd\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
911 vpmaddwd\t{%2, %1, %0|%0, %1, %2}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
912 [(set_attr "isa" "*,sse2_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
913 (set_attr "mmx_isa" "native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
914 (set_attr "type" "mmxmul,sseiadd,sseiadd")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
915 (set_attr "mode" "DI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
916
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
917 (define_expand "mmx_pmulhrwv4hi3"
111
kono
parents: 67
diff changeset
918 [(set (match_operand:V4HI 0 "register_operand")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
919 (truncate:V4HI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
920 (lshiftrt:V4SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
921 (plus:V4SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
922 (mult:V4SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
923 (sign_extend:V4SI
111
kono
parents: 67
diff changeset
924 (match_operand:V4HI 1 "nonimmediate_operand"))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
925 (sign_extend:V4SI
111
kono
parents: 67
diff changeset
926 (match_operand:V4HI 2 "nonimmediate_operand")))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
927 (const_vector:V4SI [(const_int 32768) (const_int 32768)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
928 (const_int 32768) (const_int 32768)]))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
929 (const_int 16))))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
930 "TARGET_3DNOW"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
931 "ix86_fixup_binary_operands_no_copy (MULT, V4HImode, operands);")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
932
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
933 (define_insn "*mmx_pmulhrwv4hi3"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
934 [(set (match_operand:V4HI 0 "register_operand" "=y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
935 (truncate:V4HI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
936 (lshiftrt:V4SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
937 (plus:V4SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
938 (mult:V4SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
939 (sign_extend:V4SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
940 (match_operand:V4HI 1 "nonimmediate_operand" "%0"))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
941 (sign_extend:V4SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
942 (match_operand:V4HI 2 "nonimmediate_operand" "ym")))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
943 (const_vector:V4SI [(const_int 32768) (const_int 32768)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
944 (const_int 32768) (const_int 32768)]))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
945 (const_int 16))))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
946 "TARGET_3DNOW && ix86_binary_operator_ok (MULT, V4HImode, operands)"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
947 "pmulhrw\t{%2, %0|%0, %2}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
948 [(set_attr "type" "mmxmul")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
949 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
950 (set_attr "mode" "DI")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
951
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
952 (define_expand "sse2_umulv1siv1di3"
111
kono
parents: 67
diff changeset
953 [(set (match_operand:V1DI 0 "register_operand")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
954 (mult:V1DI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
955 (zero_extend:V1DI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
956 (vec_select:V1SI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
957 (match_operand:V2SI 1 "register_mmxmem_operand")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
958 (parallel [(const_int 0)])))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
959 (zero_extend:V1DI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
960 (vec_select:V1SI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
961 (match_operand:V2SI 2 "register_mmxmem_operand")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
962 (parallel [(const_int 0)])))))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
963 "(TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_SSE2"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
964 "ix86_fixup_binary_operands_no_copy (MULT, V2SImode, operands);")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
965
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
966 (define_insn "*sse2_umulv1siv1di3"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
967 [(set (match_operand:V1DI 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
968 (mult:V1DI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
969 (zero_extend:V1DI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
970 (vec_select:V1SI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
971 (match_operand:V2SI 1 "register_mmxmem_operand" "%0,0,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
972 (parallel [(const_int 0)])))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
973 (zero_extend:V1DI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
974 (vec_select:V1SI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
975 (match_operand:V2SI 2 "register_mmxmem_operand" "ym,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
976 (parallel [(const_int 0)])))))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
977 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
978 && TARGET_SSE2
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
979 && ix86_binary_operator_ok (MULT, V2SImode, operands)"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
980 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
981 pmuludq\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
982 pmuludq\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
983 vpmuludq\t{%2, %1, %0|%0, %1, %2}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
984 [(set_attr "isa" "*,sse2_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
985 (set_attr "mmx_isa" "native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
986 (set_attr "type" "mmxmul,ssemul,ssemul")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
987 (set_attr "mode" "DI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
988
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
989 (define_expand "mmx_<code>v4hi3"
111
kono
parents: 67
diff changeset
990 [(set (match_operand:V4HI 0 "register_operand")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
991 (smaxmin:V4HI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
992 (match_operand:V4HI 1 "register_mmxmem_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
993 (match_operand:V4HI 2 "register_mmxmem_operand")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
994 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
995 && (TARGET_SSE || TARGET_3DNOW_A)"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
996 "ix86_fixup_binary_operands_no_copy (<CODE>, V4HImode, operands);")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
997
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
998 (define_expand "<code>v4hi3"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
999 [(set (match_operand:V4HI 0 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1000 (smaxmin:V4HI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1001 (match_operand:V4HI 1 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1002 (match_operand:V4HI 2 "register_operand")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1003 "TARGET_MMX_WITH_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1004 "ix86_fixup_binary_operands_no_copy (<CODE>, V4HImode, operands);")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1005
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1006 (define_insn "*mmx_<code>v4hi3"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1007 [(set (match_operand:V4HI 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1008 (smaxmin:V4HI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1009 (match_operand:V4HI 1 "register_mmxmem_operand" "%0,0,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1010 (match_operand:V4HI 2 "register_mmxmem_operand" "ym,x,Yv")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1011 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1012 && (TARGET_SSE || TARGET_3DNOW_A)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1013 && ix86_binary_operator_ok (<CODE>, V4HImode, operands)"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1014 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1015 p<maxmin_int>w\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1016 p<maxmin_int>w\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1017 vp<maxmin_int>w\t{%2, %1, %0|%0, %1, %2}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1018 [(set_attr "isa" "*,sse2_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1019 (set_attr "mmx_isa" "native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1020 (set_attr "type" "mmxadd,sseiadd,sseiadd")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1021 (set_attr "mode" "DI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1022
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1023 (define_expand "mmx_<code>v8qi3"
111
kono
parents: 67
diff changeset
1024 [(set (match_operand:V8QI 0 "register_operand")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1025 (umaxmin:V8QI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1026 (match_operand:V8QI 1 "register_mmxmem_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1027 (match_operand:V8QI 2 "register_mmxmem_operand")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1028 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1029 && (TARGET_SSE || TARGET_3DNOW_A)"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1030 "ix86_fixup_binary_operands_no_copy (<CODE>, V8QImode, operands);")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1031
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1032 (define_expand "<code>v8qi3"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1033 [(set (match_operand:V8QI 0 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1034 (umaxmin:V8QI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1035 (match_operand:V8QI 1 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1036 (match_operand:V8QI 2 "register_operand")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1037 "TARGET_MMX_WITH_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1038 "ix86_fixup_binary_operands_no_copy (<CODE>, V8QImode, operands);")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1039
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1040 (define_insn "*mmx_<code>v8qi3"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1041 [(set (match_operand:V8QI 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1042 (umaxmin:V8QI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1043 (match_operand:V8QI 1 "register_mmxmem_operand" "%0,0,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1044 (match_operand:V8QI 2 "register_mmxmem_operand" "ym,x,Yv")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1045 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1046 && (TARGET_SSE || TARGET_3DNOW_A)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1047 && ix86_binary_operator_ok (<CODE>, V8QImode, operands)"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1048 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1049 p<maxmin_int>b\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1050 p<maxmin_int>b\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1051 vp<maxmin_int>b\t{%2, %1, %0|%0, %1, %2}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1052 [(set_attr "isa" "*,sse2_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1053 (set_attr "mmx_isa" "native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1054 (set_attr "type" "mmxadd,sseiadd,sseiadd")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1055 (set_attr "mode" "DI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1056
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1057 (define_insn "mmx_ashr<mode>3"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1058 [(set (match_operand:MMXMODE24 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1059 (ashiftrt:MMXMODE24
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1060 (match_operand:MMXMODE24 1 "register_operand" "0,0,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1061 (match_operand:DI 2 "nonmemory_operand" "yN,xN,YvN")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1062 "TARGET_MMX || TARGET_MMX_WITH_SSE"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1063 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1064 psra<mmxvecsize>\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1065 psra<mmxvecsize>\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1066 vpsra<mmxvecsize>\t{%2, %1, %0|%0, %1, %2}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1067 [(set_attr "isa" "*,sse2_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1068 (set_attr "mmx_isa" "native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1069 (set_attr "type" "mmxshft,sseishft,sseishft")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
1070 (set (attr "length_immediate")
111
kono
parents: 67
diff changeset
1071 (if_then_else (match_operand 2 "const_int_operand")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
1072 (const_string "1")
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
1073 (const_string "0")))
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1074 (set_attr "mode" "DI,TI,TI")])
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1075
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1076 (define_expand "ashr<mode>3"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1077 [(set (match_operand:MMXMODE24 0 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1078 (ashiftrt:MMXMODE24
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1079 (match_operand:MMXMODE24 1 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1080 (match_operand:DI 2 "nonmemory_operand")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1081 "TARGET_MMX_WITH_SSE")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1082
111
kono
parents: 67
diff changeset
1083 (define_insn "mmx_<shift_insn><mode>3"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1084 [(set (match_operand:MMXMODE248 0 "register_operand" "=y,x,Yv")
111
kono
parents: 67
diff changeset
1085 (any_lshift:MMXMODE248
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1086 (match_operand:MMXMODE248 1 "register_operand" "0,0,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1087 (match_operand:DI 2 "nonmemory_operand" "yN,xN,YvN")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1088 "TARGET_MMX || TARGET_MMX_WITH_SSE"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1089 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1090 p<vshift><mmxvecsize>\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1091 p<vshift><mmxvecsize>\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1092 vp<vshift><mmxvecsize>\t{%2, %1, %0|%0, %1, %2}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1093 [(set_attr "isa" "*,sse2_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1094 (set_attr "mmx_isa" "native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1095 (set_attr "type" "mmxshft,sseishft,sseishft")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
1096 (set (attr "length_immediate")
111
kono
parents: 67
diff changeset
1097 (if_then_else (match_operand 2 "const_int_operand")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
1098 (const_string "1")
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
1099 (const_string "0")))
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1100 (set_attr "mode" "DI,TI,TI")])
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1101
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1102 (define_expand "<shift_insn><mode>3"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1103 [(set (match_operand:MMXMODE248 0 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1104 (any_lshift:MMXMODE248
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1105 (match_operand:MMXMODE248 1 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1106 (match_operand:DI 2 "nonmemory_operand")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1107 "TARGET_MMX_WITH_SSE")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1108
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1109 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1110 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1111 ;; Parallel integral comparisons
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1112 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1113 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1114
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1115 (define_expand "mmx_eq<mode>3"
111
kono
parents: 67
diff changeset
1116 [(set (match_operand:MMXMODEI 0 "register_operand")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1117 (eq:MMXMODEI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1118 (match_operand:MMXMODEI 1 "register_mmxmem_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1119 (match_operand:MMXMODEI 2 "register_mmxmem_operand")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1120 "TARGET_MMX || TARGET_MMX_WITH_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1121 "ix86_fixup_binary_operands_no_copy (EQ, <MODE>mode, operands);")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1122
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1123 (define_insn "*mmx_eq<mode>3"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1124 [(set (match_operand:MMXMODEI 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1125 (eq:MMXMODEI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1126 (match_operand:MMXMODEI 1 "register_mmxmem_operand" "%0,0,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1127 (match_operand:MMXMODEI 2 "register_mmxmem_operand" "ym,x,Yv")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1128 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1129 && ix86_binary_operator_ok (EQ, <MODE>mode, operands)"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1130 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1131 pcmpeq<mmxvecsize>\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1132 pcmpeq<mmxvecsize>\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1133 vpcmpeq<mmxvecsize>\t{%2, %1, %0|%0, %1, %2}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1134 [(set_attr "isa" "*,sse2_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1135 (set_attr "mmx_isa" "native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1136 (set_attr "type" "mmxcmp,ssecmp,ssecmp")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1137 (set_attr "mode" "DI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1138
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1139 (define_insn "mmx_gt<mode>3"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1140 [(set (match_operand:MMXMODEI 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1141 (gt:MMXMODEI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1142 (match_operand:MMXMODEI 1 "register_operand" "0,0,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1143 (match_operand:MMXMODEI 2 "register_mmxmem_operand" "ym,x,Yv")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1144 "TARGET_MMX || TARGET_MMX_WITH_SSE"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1145 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1146 pcmpgt<mmxvecsize>\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1147 pcmpgt<mmxvecsize>\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1148 vpcmpgt<mmxvecsize>\t{%2, %1, %0|%0, %1, %2}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1149 [(set_attr "isa" "*,sse2_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1150 (set_attr "mmx_isa" "native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1151 (set_attr "type" "mmxcmp,ssecmp,ssecmp")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1152 (set_attr "mode" "DI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1153
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1154 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1155 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1156 ;; Parallel integral logical operations
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1157 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1158 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1159
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1160 (define_expand "one_cmpl<mode>2"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1161 [(set (match_operand:MMXMODEI 0 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1162 (xor:MMXMODEI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1163 (match_operand:MMXMODEI 1 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1164 (match_dup 2)))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1165 "TARGET_MMX_WITH_SSE"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1166 "operands[2] = force_reg (<MODE>mode, CONSTM1_RTX (<MODE>mode));")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1167
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1168 (define_insn "mmx_andnot<mode>3"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1169 [(set (match_operand:MMXMODEI 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1170 (and:MMXMODEI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1171 (not:MMXMODEI (match_operand:MMXMODEI 1 "register_operand" "0,0,Yv"))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1172 (match_operand:MMXMODEI 2 "register_mmxmem_operand" "ym,x,Yv")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1173 "TARGET_MMX || TARGET_MMX_WITH_SSE"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1174 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1175 pandn\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1176 pandn\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1177 vpandn\t{%2, %1, %0|%0, %1, %2}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1178 [(set_attr "isa" "*,sse2_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1179 (set_attr "mmx_isa" "native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1180 (set_attr "type" "mmxadd,sselog,sselog")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1181 (set_attr "mode" "DI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1182
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1183 (define_expand "mmx_<code><mode>3"
111
kono
parents: 67
diff changeset
1184 [(set (match_operand:MMXMODEI 0 "register_operand")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
1185 (any_logic:MMXMODEI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1186 (match_operand:MMXMODEI 1 "register_mmxmem_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1187 (match_operand:MMXMODEI 2 "register_mmxmem_operand")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1188 "TARGET_MMX || TARGET_MMX_WITH_SSE"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1189 "ix86_fixup_binary_operands_no_copy (<CODE>, <MODE>mode, operands);")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1190
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1191 (define_expand "<code><mode>3"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1192 [(set (match_operand:MMXMODEI 0 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1193 (any_logic:MMXMODEI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1194 (match_operand:MMXMODEI 1 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1195 (match_operand:MMXMODEI 2 "register_operand")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1196 "TARGET_MMX_WITH_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1197 "ix86_fixup_binary_operands_no_copy (<CODE>, <MODE>mode, operands);")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1198
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1199 (define_insn "*mmx_<code><mode>3"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1200 [(set (match_operand:MMXMODEI 0 "register_operand" "=y,x,Yv")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
1201 (any_logic:MMXMODEI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1202 (match_operand:MMXMODEI 1 "register_mmxmem_operand" "%0,0,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1203 (match_operand:MMXMODEI 2 "register_mmxmem_operand" "ym,x,Yv")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1204 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1205 && ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1206 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1207 p<logic>\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1208 p<logic>\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1209 vp<logic>\t{%2, %1, %0|%0, %1, %2}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1210 [(set_attr "isa" "*,sse2_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1211 (set_attr "mmx_isa" "native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1212 (set_attr "type" "mmxadd,sselog,sselog")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1213 (set_attr "mode" "DI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1214
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1215 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1216 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1217 ;; Parallel integral element swizzling
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1218 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1219 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1220
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1221 ;; Used in signed and unsigned truncations with saturation.
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1222 (define_code_iterator any_s_truncate [ss_truncate us_truncate])
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1223 ;; Instruction suffix for truncations with saturation.
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1224 (define_code_attr s_trunsuffix [(ss_truncate "s") (us_truncate "u")])
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1225
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1226 (define_insn_and_split "mmx_pack<s_trunsuffix>swb"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1227 [(set (match_operand:V8QI 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1228 (vec_concat:V8QI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1229 (any_s_truncate:V4QI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1230 (match_operand:V4HI 1 "register_operand" "0,0,Yv"))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1231 (any_s_truncate:V4QI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1232 (match_operand:V4HI 2 "register_mmxmem_operand" "ym,x,Yv"))))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1233 "TARGET_MMX || TARGET_MMX_WITH_SSE"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1234 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1235 pack<s_trunsuffix>swb\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1236 #
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1237 #"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1238 "TARGET_SSE2 && reload_completed
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1239 && SSE_REGNO_P (REGNO (operands[0]))"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1240 [(const_int 0)]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1241 "ix86_split_mmx_pack (operands, <any_s_truncate:CODE>); DONE;"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1242 [(set_attr "mmx_isa" "native,sse_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1243 (set_attr "type" "mmxshft,sselog,sselog")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1244 (set_attr "mode" "DI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1245
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1246 (define_insn_and_split "mmx_packssdw"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1247 [(set (match_operand:V4HI 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1248 (vec_concat:V4HI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1249 (ss_truncate:V2HI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1250 (match_operand:V2SI 1 "register_operand" "0,0,Yv"))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1251 (ss_truncate:V2HI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1252 (match_operand:V2SI 2 "register_mmxmem_operand" "ym,x,Yv"))))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1253 "TARGET_MMX || TARGET_MMX_WITH_SSE"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1254 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1255 packssdw\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1256 #
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1257 #"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1258 "TARGET_SSE2 && reload_completed
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1259 && SSE_REGNO_P (REGNO (operands[0]))"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1260 [(const_int 0)]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1261 "ix86_split_mmx_pack (operands, SS_TRUNCATE); DONE;"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1262 [(set_attr "mmx_isa" "native,sse_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1263 (set_attr "type" "mmxshft,sselog,sselog")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1264 (set_attr "mode" "DI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1265
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1266 (define_insn_and_split "mmx_punpckhbw"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1267 [(set (match_operand:V8QI 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1268 (vec_select:V8QI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1269 (vec_concat:V16QI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1270 (match_operand:V8QI 1 "register_operand" "0,0,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1271 (match_operand:V8QI 2 "register_mmxmem_operand" "ym,x,Yv"))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1272 (parallel [(const_int 4) (const_int 12)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1273 (const_int 5) (const_int 13)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1274 (const_int 6) (const_int 14)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1275 (const_int 7) (const_int 15)])))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1276 "TARGET_MMX || TARGET_MMX_WITH_SSE"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1277 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1278 punpckhbw\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1279 #
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1280 #"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1281 "TARGET_SSE2 && reload_completed
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1282 && SSE_REGNO_P (REGNO (operands[0]))"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1283 [(const_int 0)]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1284 "ix86_split_mmx_punpck (operands, true); DONE;"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1285 [(set_attr "mmx_isa" "native,sse_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1286 (set_attr "type" "mmxcvt,sselog,sselog")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1287 (set_attr "mode" "DI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1288
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1289 (define_insn_and_split "mmx_punpcklbw"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1290 [(set (match_operand:V8QI 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1291 (vec_select:V8QI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1292 (vec_concat:V16QI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1293 (match_operand:V8QI 1 "register_operand" "0,0,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1294 (match_operand:V8QI 2 "register_mmxmem_operand" "ym,x,Yv"))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1295 (parallel [(const_int 0) (const_int 8)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1296 (const_int 1) (const_int 9)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1297 (const_int 2) (const_int 10)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1298 (const_int 3) (const_int 11)])))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1299 "TARGET_MMX || TARGET_MMX_WITH_SSE"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1300 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1301 punpcklbw\t{%2, %0|%0, %k2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1302 #
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1303 #"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1304 "TARGET_SSE2 && reload_completed
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1305 && SSE_REGNO_P (REGNO (operands[0]))"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1306 [(const_int 0)]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1307 "ix86_split_mmx_punpck (operands, false); DONE;"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1308 [(set_attr "mmx_isa" "native,sse_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1309 (set_attr "type" "mmxcvt,sselog,sselog")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1310 (set_attr "mode" "DI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1311
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1312 (define_insn_and_split "mmx_punpckhwd"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1313 [(set (match_operand:V4HI 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1314 (vec_select:V4HI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1315 (vec_concat:V8HI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1316 (match_operand:V4HI 1 "register_operand" "0,0,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1317 (match_operand:V4HI 2 "register_mmxmem_operand" "ym,x,Yv"))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1318 (parallel [(const_int 2) (const_int 6)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1319 (const_int 3) (const_int 7)])))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1320 "TARGET_MMX || TARGET_MMX_WITH_SSE"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1321 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1322 punpckhwd\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1323 #
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1324 #"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1325 "TARGET_SSE2 && reload_completed
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1326 && SSE_REGNO_P (REGNO (operands[0]))"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1327 [(const_int 0)]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1328 "ix86_split_mmx_punpck (operands, true); DONE;"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1329 [(set_attr "mmx_isa" "native,sse_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1330 (set_attr "type" "mmxcvt,sselog,sselog")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1331 (set_attr "mode" "DI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1332
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1333 (define_insn_and_split "mmx_punpcklwd"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1334 [(set (match_operand:V4HI 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1335 (vec_select:V4HI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1336 (vec_concat:V8HI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1337 (match_operand:V4HI 1 "register_operand" "0,0,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1338 (match_operand:V4HI 2 "register_mmxmem_operand" "ym,x,Yv"))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1339 (parallel [(const_int 0) (const_int 4)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1340 (const_int 1) (const_int 5)])))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1341 "TARGET_MMX || TARGET_MMX_WITH_SSE"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1342 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1343 punpcklwd\t{%2, %0|%0, %k2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1344 #
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1345 #"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1346 "TARGET_SSE2 && reload_completed
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1347 && SSE_REGNO_P (REGNO (operands[0]))"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1348 [(const_int 0)]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1349 "ix86_split_mmx_punpck (operands, false); DONE;"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1350 [(set_attr "mmx_isa" "native,sse_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1351 (set_attr "type" "mmxcvt,sselog,sselog")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1352 (set_attr "mode" "DI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1353
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1354 (define_insn_and_split "mmx_punpckhdq"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1355 [(set (match_operand:V2SI 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1356 (vec_select:V2SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1357 (vec_concat:V4SI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1358 (match_operand:V2SI 1 "register_operand" "0,0,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1359 (match_operand:V2SI 2 "register_mmxmem_operand" "ym,x,Yv"))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1360 (parallel [(const_int 1)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1361 (const_int 3)])))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1362 "TARGET_MMX || TARGET_MMX_WITH_SSE"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1363 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1364 punpckhdq\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1365 #
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1366 #"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1367 "TARGET_SSE2 && reload_completed
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1368 && SSE_REGNO_P (REGNO (operands[0]))"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1369 [(const_int 0)]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1370 "ix86_split_mmx_punpck (operands, true); DONE;"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1371 [(set_attr "mmx_isa" "native,sse_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1372 (set_attr "type" "mmxcvt,sselog,sselog")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1373 (set_attr "mode" "DI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1374
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1375 (define_insn_and_split "mmx_punpckldq"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1376 [(set (match_operand:V2SI 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1377 (vec_select:V2SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1378 (vec_concat:V4SI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1379 (match_operand:V2SI 1 "register_operand" "0,0,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1380 (match_operand:V2SI 2 "register_mmxmem_operand" "ym,x,Yv"))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1381 (parallel [(const_int 0)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1382 (const_int 2)])))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1383 "TARGET_MMX || TARGET_MMX_WITH_SSE"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1384 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1385 punpckldq\t{%2, %0|%0, %k2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1386 #
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1387 #"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1388 "TARGET_SSE2 && reload_completed
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1389 && SSE_REGNO_P (REGNO (operands[0]))"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1390 [(const_int 0)]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1391 "ix86_split_mmx_punpck (operands, false); DONE;"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1392 [(set_attr "mmx_isa" "native,sse_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1393 (set_attr "type" "mmxcvt,sselog,sselog")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1394 (set_attr "mode" "DI,TI,TI")])
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1395
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1396 (define_insn "*mmx_pinsrd"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1397 [(set (match_operand:V2SI 0 "register_operand" "=x,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1398 (vec_merge:V2SI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1399 (vec_duplicate:V2SI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1400 (match_operand:SI 2 "nonimmediate_operand" "rm,rm"))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1401 (match_operand:V2SI 1 "register_operand" "0,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1402 (match_operand:SI 3 "const_int_operand")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1403 "TARGET_MMX_WITH_SSE && TARGET_SSE4_1
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1404 && ((unsigned) exact_log2 (INTVAL (operands[3]))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1405 < GET_MODE_NUNITS (V2SImode))"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1406 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1407 operands[3] = GEN_INT (exact_log2 (INTVAL (operands[3])));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1408 switch (which_alternative)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1409 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1410 case 1:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1411 return "vpinsrd\t{%3, %2, %1, %0|%0, %1, %2, %3}";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1412 case 0:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1413 return "pinsrd\t{%3, %2, %0|%0, %2, %3}";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1414 default:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1415 gcc_unreachable ();
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1416 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1417 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1418 [(set_attr "isa" "noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1419 (set_attr "prefix_data16" "1")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1420 (set_attr "prefix_extra" "1")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1421 (set_attr "type" "sselog")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1422 (set_attr "length_immediate" "1")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1423 (set_attr "prefix" "orig,vex")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1424 (set_attr "mode" "TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1425
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1426 (define_expand "mmx_pinsrw"
111
kono
parents: 67
diff changeset
1427 [(set (match_operand:V4HI 0 "register_operand")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1428 (vec_merge:V4HI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1429 (vec_duplicate:V4HI
111
kono
parents: 67
diff changeset
1430 (match_operand:SI 2 "nonimmediate_operand"))
kono
parents: 67
diff changeset
1431 (match_operand:V4HI 1 "register_operand")
kono
parents: 67
diff changeset
1432 (match_operand:SI 3 "const_0_to_3_operand")))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1433 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1434 && (TARGET_SSE || TARGET_3DNOW_A)"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1435 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1436 operands[2] = gen_lowpart (HImode, operands[2]);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1437 operands[3] = GEN_INT (1 << INTVAL (operands[3]));
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1438 })
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1439
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1440 (define_insn "*mmx_pinsrw"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1441 [(set (match_operand:V4HI 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1442 (vec_merge:V4HI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1443 (vec_duplicate:V4HI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1444 (match_operand:HI 2 "nonimmediate_operand" "rm,rm,rm"))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1445 (match_operand:V4HI 1 "register_operand" "0,0,Yv")
111
kono
parents: 67
diff changeset
1446 (match_operand:SI 3 "const_int_operand")))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1447 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1448 && (TARGET_SSE || TARGET_3DNOW_A)
111
kono
parents: 67
diff changeset
1449 && ((unsigned) exact_log2 (INTVAL (operands[3]))
kono
parents: 67
diff changeset
1450 < GET_MODE_NUNITS (V4HImode))"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1451 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1452 operands[3] = GEN_INT (exact_log2 (INTVAL (operands[3])));
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1453 switch (which_alternative)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1454 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1455 case 2:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1456 if (MEM_P (operands[2]))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1457 return "vpinsrw\t{%3, %2, %1, %0|%0, %1, %2, %3}";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1458 else
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1459 return "vpinsrw\t{%3, %k2, %1, %0|%0, %1, %k2, %3}";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1460 case 1:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1461 case 0:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1462 if (MEM_P (operands[2]))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1463 return "pinsrw\t{%3, %2, %0|%0, %2, %3}";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1464 else
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1465 return "pinsrw\t{%3, %k2, %0|%0, %k2, %3}";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1466 default:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1467 gcc_unreachable ();
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1468 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1469 }
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1470 [(set_attr "isa" "*,sse2_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1471 (set_attr "mmx_isa" "native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1472 (set_attr "type" "mmxcvt,sselog,sselog")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
1473 (set_attr "length_immediate" "1")
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1474 (set_attr "mode" "DI,TI,TI")])
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1475
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1476 (define_insn "*mmx_pinsrb"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1477 [(set (match_operand:V8QI 0 "register_operand" "=x,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1478 (vec_merge:V8QI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1479 (vec_duplicate:V8QI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1480 (match_operand:QI 2 "nonimmediate_operand" "rm,rm"))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1481 (match_operand:V8QI 1 "register_operand" "0,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1482 (match_operand:SI 3 "const_int_operand")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1483 "TARGET_MMX_WITH_SSE && TARGET_SSE4_1
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1484 && ((unsigned) exact_log2 (INTVAL (operands[3]))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1485 < GET_MODE_NUNITS (V8QImode))"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1486 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1487 operands[3] = GEN_INT (exact_log2 (INTVAL (operands[3])));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1488 switch (which_alternative)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1489 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1490 case 1:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1491 if (MEM_P (operands[2]))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1492 return "vpinsrb\t{%3, %2, %1, %0|%0, %1, %2, %3}";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1493 else
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1494 return "vpinsrb\t{%3, %k2, %1, %0|%0, %1, %k2, %3}";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1495 case 0:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1496 if (MEM_P (operands[2]))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1497 return "pinsrb\t{%3, %2, %0|%0, %2, %3}";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1498 else
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1499 return "pinsrb\t{%3, %k2, %0|%0, %k2, %3}";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1500 default:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1501 gcc_unreachable ();
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1502 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1503 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1504 [(set_attr "isa" "noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1505 (set_attr "type" "sselog")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1506 (set_attr "prefix_data16" "1")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1507 (set_attr "prefix_extra" "1")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1508 (set_attr "length_immediate" "1")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1509 (set_attr "prefix" "orig,vex")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1510 (set_attr "mode" "TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1511
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1512 (define_insn "*mmx_pextrw"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1513 [(set (match_operand:HI 0 "register_sse4nonimm_operand" "=r,r,m")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1514 (vec_select:HI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1515 (match_operand:V4HI 1 "register_operand" "y,Yv,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1516 (parallel [(match_operand:SI 2 "const_0_to_3_operand" "n,n,n")])))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1517 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1518 && (TARGET_SSE || TARGET_3DNOW_A)"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1519 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1520 pextrw\t{%2, %1, %k0|%k0, %1, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1521 %vpextrw\t{%2, %1, %k0|%k0, %1, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1522 %vpextrw\t{%2, %1, %0|%0, %1, %2}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1523 [(set_attr "isa" "*,sse2,sse4")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1524 (set_attr "mmx_isa" "native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1525 (set_attr "type" "mmxcvt,sselog1,sselog1")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1526 (set_attr "length_immediate" "1")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1527 (set_attr "prefix" "orig,maybe_vex,maybe_vex")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1528 (set_attr "mode" "DI,TI,TI")])
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1529
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1530 (define_insn "*mmx_pextrw_zext"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1531 [(set (match_operand:SWI48 0 "register_operand" "=r,r")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1532 (zero_extend:SWI48
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1533 (vec_select:HI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1534 (match_operand:V4HI 1 "register_operand" "y,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1535 (parallel [(match_operand:SI 2 "const_0_to_3_operand" "n,n")]))))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1536 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1537 && (TARGET_SSE || TARGET_3DNOW_A)"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1538 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1539 pextrw\t{%2, %1, %k0|%k0, %1, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1540 %vpextrw\t{%2, %1, %k0|%k0, %1, %2}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1541 [(set_attr "isa" "*,sse2")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1542 (set_attr "mmx_isa" "native,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1543 (set_attr "type" "mmxcvt,sselog1")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
1544 (set_attr "length_immediate" "1")
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1545 (set_attr "prefix" "orig,maybe_vex")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1546 (set_attr "mode" "DI,TI")])
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1547
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1548 (define_insn "*mmx_pextrb"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1549 [(set (match_operand:QI 0 "nonimmediate_operand" "=r,m")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1550 (vec_select:QI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1551 (match_operand:V8QI 1 "register_operand" "Yv,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1552 (parallel [(match_operand:SI 2 "const_0_to_7_operand" "n,n")])))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1553 "TARGET_MMX_WITH_SSE && TARGET_SSE4_1"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1554 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1555 %vpextrb\t{%2, %1, %k0|%k0, %1, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1556 %vpextrb\t{%2, %1, %0|%0, %1, %2}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1557 [(set_attr "type" "sselog1")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1558 (set_attr "prefix_data16" "1")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1559 (set_attr "prefix_extra" "1")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1560 (set_attr "length_immediate" "1")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1561 (set_attr "prefix" "maybe_vex")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1562 (set_attr "mode" "TI")])
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1563
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1564 (define_insn "*mmx_pextrb_zext"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1565 [(set (match_operand:SWI248 0 "register_operand" "=r")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1566 (zero_extend:SWI248
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1567 (vec_select:QI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1568 (match_operand:V8QI 1 "register_operand" "Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1569 (parallel [(match_operand:SI 2 "const_0_to_7_operand" "n")]))))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1570 "TARGET_MMX_WITH_SSE && TARGET_SSE4_1"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1571 "%vpextrb\t{%2, %1, %k0|%k0, %1, %2}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1572 [(set_attr "type" "sselog1")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1573 (set_attr "prefix_data16" "1")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1574 (set_attr "prefix_extra" "1")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1575 (set_attr "length_immediate" "1")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1576 (set_attr "prefix" "maybe_vex")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1577 (set_attr "mode" "TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1578
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1579 (define_expand "mmx_pshufw"
111
kono
parents: 67
diff changeset
1580 [(match_operand:V4HI 0 "register_operand")
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1581 (match_operand:V4HI 1 "register_mmxmem_operand")
111
kono
parents: 67
diff changeset
1582 (match_operand:SI 2 "const_int_operand")]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1583 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1584 && (TARGET_SSE || TARGET_3DNOW_A)"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1585 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1586 int mask = INTVAL (operands[2]);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1587 emit_insn (gen_mmx_pshufw_1 (operands[0], operands[1],
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1588 GEN_INT ((mask >> 0) & 3),
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1589 GEN_INT ((mask >> 2) & 3),
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1590 GEN_INT ((mask >> 4) & 3),
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1591 GEN_INT ((mask >> 6) & 3)));
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1592 DONE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1593 })
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1594
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1595 (define_insn "mmx_pshufw_1"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1596 [(set (match_operand:V4HI 0 "register_operand" "=y,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1597 (vec_select:V4HI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1598 (match_operand:V4HI 1 "register_mmxmem_operand" "ym,Yv")
111
kono
parents: 67
diff changeset
1599 (parallel [(match_operand 2 "const_0_to_3_operand")
kono
parents: 67
diff changeset
1600 (match_operand 3 "const_0_to_3_operand")
kono
parents: 67
diff changeset
1601 (match_operand 4 "const_0_to_3_operand")
kono
parents: 67
diff changeset
1602 (match_operand 5 "const_0_to_3_operand")])))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1603 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1604 && (TARGET_SSE || TARGET_3DNOW_A)"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1605 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1606 int mask = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1607 mask |= INTVAL (operands[2]) << 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1608 mask |= INTVAL (operands[3]) << 2;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1609 mask |= INTVAL (operands[4]) << 4;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1610 mask |= INTVAL (operands[5]) << 6;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1611 operands[2] = GEN_INT (mask);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1612
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1613 switch (which_alternative)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1614 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1615 case 0:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1616 return "pshufw\t{%2, %1, %0|%0, %1, %2}";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1617 case 1:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1618 return "%vpshuflw\t{%2, %1, %0|%0, %1, %2}";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1619 default:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1620 gcc_unreachable ();
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1621 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1622 }
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1623 [(set_attr "isa" "*,sse2")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1624 (set_attr "mmx_isa" "native,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1625 (set_attr "type" "mmxcvt,sselog")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
1626 (set_attr "length_immediate" "1")
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1627 (set_attr "mode" "DI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1628
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1629 (define_insn "mmx_pswapdv2si2"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1630 [(set (match_operand:V2SI 0 "register_operand" "=y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1631 (vec_select:V2SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1632 (match_operand:V2SI 1 "nonimmediate_operand" "ym")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1633 (parallel [(const_int 1) (const_int 0)])))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1634 "TARGET_3DNOW_A"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1635 "pswapd\t{%1, %0|%0, %1}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1636 [(set_attr "type" "mmxcvt")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
1637 (set_attr "prefix_extra" "1")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1638 (set_attr "mode" "DI")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1639
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1640 (define_insn_and_split "*vec_dupv4hi"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1641 [(set (match_operand:V4HI 0 "register_operand" "=y,Yv,Yw")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1642 (vec_duplicate:V4HI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1643 (truncate:HI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1644 (match_operand:SI 1 "register_operand" "0,Yv,r"))))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1645 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1646 && (TARGET_SSE || TARGET_3DNOW_A)"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1647 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1648 pshufw\t{$0, %0, %0|%0, %0, 0}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1649 #
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1650 #"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1651 "TARGET_SSE2 && reload_completed
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1652 && SSE_REGNO_P (REGNO (operands[0]))"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1653 [(const_int 0)]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1654 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1655 rtx op;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1656 operands[0] = lowpart_subreg (V8HImode, operands[0],
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1657 GET_MODE (operands[0]));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1658 if (TARGET_AVX2)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1659 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1660 operands[1] = lowpart_subreg (HImode, operands[1],
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1661 GET_MODE (operands[1]));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1662 op = gen_rtx_VEC_DUPLICATE (V8HImode, operands[1]);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1663 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1664 else
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1665 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1666 operands[1] = lowpart_subreg (V8HImode, operands[1],
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1667 GET_MODE (operands[1]));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1668 rtx mask = gen_rtx_PARALLEL (VOIDmode,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1669 gen_rtvec (8,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1670 GEN_INT (0),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1671 GEN_INT (0),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1672 GEN_INT (0),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1673 GEN_INT (0),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1674 GEN_INT (4),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1675 GEN_INT (5),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1676 GEN_INT (6),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1677 GEN_INT (7)));
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1678
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1679 op = gen_rtx_VEC_SELECT (V8HImode, operands[1], mask);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1680 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1681 emit_insn (gen_rtx_SET (operands[0], op));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1682 DONE;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1683 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1684 [(set_attr "mmx_isa" "native,sse,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1685 (set_attr "type" "mmxcvt,sselog1,ssemov")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1686 (set_attr "length_immediate" "1,1,0")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1687 (set_attr "mode" "DI,TI,TI")])
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1688
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1689 (define_insn_and_split "*vec_dupv2si"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1690 [(set (match_operand:V2SI 0 "register_operand" "=y,x,Yv,Yw")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1691 (vec_duplicate:V2SI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1692 (match_operand:SI 1 "register_operand" "0,0,Yv,r")))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1693 "TARGET_MMX || TARGET_MMX_WITH_SSE"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1694 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1695 punpckldq\t%0, %0
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1696 #
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1697 #
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1698 #"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1699 "TARGET_SSE && reload_completed
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1700 && SSE_REGNO_P (REGNO (operands[0]))"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1701 [(set (match_dup 0)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1702 (vec_duplicate:V4SI (match_dup 1)))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1703 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1704 operands[0] = lowpart_subreg (V4SImode, operands[0],
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1705 GET_MODE (operands[0]));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1706 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1707 [(set_attr "isa" "*,sse_noavx,avx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1708 (set_attr "mmx_isa" "native,*,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1709 (set_attr "type" "mmxcvt,ssemov,ssemov,ssemov")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1710 (set_attr "mode" "DI,TI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1711
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1712 (define_insn "*mmx_concatv2si"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1713 [(set (match_operand:V2SI 0 "register_operand" "=y,y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1714 (vec_concat:V2SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1715 (match_operand:SI 1 "nonimmediate_operand" " 0,rm")
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1716 (match_operand:SI 2 "nonimm_or_0_operand" "ym,C")))]
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1717 "TARGET_MMX && !TARGET_SSE"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1718 "@
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1719 punpckldq\t{%2, %0|%0, %2}
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1720 movd\t{%1, %0|%0, %1}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1721 [(set_attr "type" "mmxcvt,mmxmov")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1722 (set_attr "mode" "DI")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1723
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1724 (define_expand "vec_setv2si"
111
kono
parents: 67
diff changeset
1725 [(match_operand:V2SI 0 "register_operand")
kono
parents: 67
diff changeset
1726 (match_operand:SI 1 "register_operand")
kono
parents: 67
diff changeset
1727 (match_operand 2 "const_int_operand")]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1728 "TARGET_MMX || TARGET_MMX_WITH_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1729 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1730 ix86_expand_vector_set (TARGET_MMX_WITH_SSE, operands[0], operands[1],
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1731 INTVAL (operands[2]));
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1732 DONE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1733 })
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1734
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1735 ;; Avoid combining registers from different units in a single alternative,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1736 ;; see comment above inline_secondary_memory_needed function in i386.c
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1737 (define_insn_and_split "*vec_extractv2si_0"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1738 [(set (match_operand:SI 0 "nonimmediate_operand" "=x,m,y, m,r,r")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1739 (vec_select:SI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1740 (match_operand:V2SI 1 "nonimmediate_operand" "xm,x,ym,y,m,x")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1741 (parallel [(const_int 0)])))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1742 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1743 && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1744 "#"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1745 "&& reload_completed"
111
kono
parents: 67
diff changeset
1746 [(set (match_dup 0) (match_dup 1))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1747 "operands[1] = gen_lowpart (SImode, operands[1]);"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1748 [(set_attr "isa" "*,*,*,*,*,sse2")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1749 (set_attr "mmx_isa" "*,*,native,native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1750 (set (attr "preferred_for_speed")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1751 (cond [(eq_attr "alternative" "5")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1752 (symbol_ref "TARGET_INTER_UNIT_MOVES_FROM_VEC")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1753 ]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1754 (symbol_ref "true")))])
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1755
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1756 (define_insn "*vec_extractv2si_0_zext_sse4"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1757 [(set (match_operand:DI 0 "register_operand" "=r,x")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1758 (zero_extend:DI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1759 (vec_select:SI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1760 (match_operand:V2SI 1 "register_operand" "x,x")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1761 (parallel [(const_int 0)]))))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1762 "(TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_SSE4_1"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1763 "#"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1764 [(set_attr "isa" "x64,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1765 (set (attr "preferred_for_speed")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1766 (cond [(eq_attr "alternative" "0")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1767 (symbol_ref "TARGET_INTER_UNIT_MOVES_FROM_VEC")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1768 ]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1769 (symbol_ref "true")))])
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1770
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1771 (define_insn "*vec_extractv2si_0_zext"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1772 [(set (match_operand:DI 0 "register_operand" "=r")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1773 (zero_extend:DI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1774 (vec_select:SI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1775 (match_operand:V2SI 1 "register_operand" "x")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1776 (parallel [(const_int 0)]))))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1777 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1778 && TARGET_64BIT && TARGET_SSE2 && TARGET_INTER_UNIT_MOVES_FROM_VEC"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1779 "#")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1780
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1781 (define_split
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1782 [(set (match_operand:DI 0 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1783 (zero_extend:DI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1784 (vec_select:SI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1785 (match_operand:V2SI 1 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1786 (parallel [(const_int 0)]))))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1787 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1788 && TARGET_SSE2 && reload_completed"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1789 [(set (match_dup 0) (zero_extend:DI (match_dup 1)))]
111
kono
parents: 67
diff changeset
1790 "operands[1] = gen_lowpart (SImode, operands[1]);")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1791
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1792 ;; Avoid combining registers from different units in a single alternative,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1793 ;; see comment above inline_secondary_memory_needed function in i386.c
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1794 (define_insn "*vec_extractv2si_1"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1795 [(set (match_operand:SI 0 "nonimmediate_operand" "=y,rm,x,x,y,x,r")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1796 (vec_select:SI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1797 (match_operand:V2SI 1 "nonimmediate_operand" " 0,x ,x,x,o,o,o")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1798 (parallel [(const_int 1)])))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1799 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1800 && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1801 "@
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1802 punpckhdq\t%0, %0
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1803 %vpextrd\t{$1, %1, %0|%0, %1, 1}
111
kono
parents: 67
diff changeset
1804 %vpshufd\t{$0xe5, %1, %0|%0, %1, 0xe5}
kono
parents: 67
diff changeset
1805 shufps\t{$0xe5, %1, %0|%0, %1, 0xe5}
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1806 #
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1807 #
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1808 #"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1809 [(set_attr "isa" "*,sse4,sse2,noavx,*,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1810 (set_attr "mmx_isa" "native,*,*,*,native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1811 (set_attr "type" "mmxcvt,ssemov,sseshuf1,sseshuf1,mmxmov,ssemov,imov")
111
kono
parents: 67
diff changeset
1812 (set (attr "length_immediate")
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1813 (if_then_else (eq_attr "alternative" "1,2,3")
111
kono
parents: 67
diff changeset
1814 (const_string "1")
kono
parents: 67
diff changeset
1815 (const_string "*")))
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1816 (set_attr "prefix" "orig,maybe_vex,maybe_vex,orig,orig,orig,orig")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1817 (set_attr "mode" "DI,TI,TI,V4SF,SI,SI,SI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1818
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1819 (define_split
111
kono
parents: 67
diff changeset
1820 [(set (match_operand:SI 0 "register_operand")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1821 (vec_select:SI
111
kono
parents: 67
diff changeset
1822 (match_operand:V2SI 1 "memory_operand")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1823 (parallel [(const_int 1)])))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1824 "(TARGET_MMX || TARGET_MMX_WITH_SSE) && reload_completed"
111
kono
parents: 67
diff changeset
1825 [(set (match_dup 0) (match_dup 1))]
kono
parents: 67
diff changeset
1826 "operands[1] = adjust_address (operands[1], SImode, 4);")
kono
parents: 67
diff changeset
1827
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1828 (define_insn "*vec_extractv2si_1_zext"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1829 [(set (match_operand:DI 0 "register_operand" "=r")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1830 (zero_extend:DI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1831 (vec_select:SI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1832 (match_operand:V2SI 1 "register_operand" "x")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1833 (parallel [(const_int 1)]))))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1834 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1835 && TARGET_64BIT && TARGET_SSE4_1"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1836 "%vpextrd\t{$1, %1, %k0|%k0, %1, 1}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1837 [(set_attr "type" "sselog1")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1838 (set_attr "prefix_extra" "1")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1839 (set_attr "length_immediate" "1")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1840 (set_attr "prefix" "maybe_vex")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1841 (set_attr "mode" "TI")])
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1842
111
kono
parents: 67
diff changeset
1843 (define_insn_and_split "*vec_extractv2si_zext_mem"
kono
parents: 67
diff changeset
1844 [(set (match_operand:DI 0 "register_operand" "=y,x,r")
kono
parents: 67
diff changeset
1845 (zero_extend:DI
kono
parents: 67
diff changeset
1846 (vec_select:SI
kono
parents: 67
diff changeset
1847 (match_operand:V2SI 1 "memory_operand" "o,o,o")
kono
parents: 67
diff changeset
1848 (parallel [(match_operand:SI 2 "const_0_to_1_operand")]))))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1849 "(TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_64BIT"
111
kono
parents: 67
diff changeset
1850 "#"
kono
parents: 67
diff changeset
1851 "&& reload_completed"
kono
parents: 67
diff changeset
1852 [(set (match_dup 0) (zero_extend:DI (match_dup 1)))]
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1853 {
111
kono
parents: 67
diff changeset
1854 operands[1] = adjust_address (operands[1], SImode, INTVAL (operands[2]) * 4);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1855 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1856 [(set_attr "isa" "*,sse2,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1857 (set_attr "mmx_isa" "native,*,*")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1858
111
kono
parents: 67
diff changeset
1859 (define_expand "vec_extractv2sisi"
kono
parents: 67
diff changeset
1860 [(match_operand:SI 0 "register_operand")
kono
parents: 67
diff changeset
1861 (match_operand:V2SI 1 "register_operand")
kono
parents: 67
diff changeset
1862 (match_operand 2 "const_int_operand")]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1863 "TARGET_MMX || TARGET_MMX_WITH_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1864 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1865 ix86_expand_vector_extract (TARGET_MMX_WITH_SSE, operands[0],
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1866 operands[1], INTVAL (operands[2]));
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1867 DONE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1868 })
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1869
111
kono
parents: 67
diff changeset
1870 (define_expand "vec_initv2sisi"
kono
parents: 67
diff changeset
1871 [(match_operand:V2SI 0 "register_operand")
kono
parents: 67
diff changeset
1872 (match_operand 1)]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1873 "(TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1874 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1875 ix86_expand_vector_init (TARGET_MMX_WITH_SSE, operands[0],
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1876 operands[1]);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1877 DONE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1878 })
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1879
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1880 (define_expand "vec_setv4hi"
111
kono
parents: 67
diff changeset
1881 [(match_operand:V4HI 0 "register_operand")
kono
parents: 67
diff changeset
1882 (match_operand:HI 1 "register_operand")
kono
parents: 67
diff changeset
1883 (match_operand 2 "const_int_operand")]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1884 "TARGET_MMX || TARGET_MMX_WITH_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1885 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1886 ix86_expand_vector_set (TARGET_MMX_WITH_SSE, operands[0], operands[1],
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1887 INTVAL (operands[2]));
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1888 DONE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1889 })
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1890
111
kono
parents: 67
diff changeset
1891 (define_expand "vec_extractv4hihi"
kono
parents: 67
diff changeset
1892 [(match_operand:HI 0 "register_operand")
kono
parents: 67
diff changeset
1893 (match_operand:V4HI 1 "register_operand")
kono
parents: 67
diff changeset
1894 (match_operand 2 "const_int_operand")]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1895 "TARGET_MMX || TARGET_MMX_WITH_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1896 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1897 ix86_expand_vector_extract (TARGET_MMX_WITH_SSE, operands[0],
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1898 operands[1], INTVAL (operands[2]));
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1899 DONE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1900 })
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1901
111
kono
parents: 67
diff changeset
1902 (define_expand "vec_initv4hihi"
kono
parents: 67
diff changeset
1903 [(match_operand:V4HI 0 "register_operand")
kono
parents: 67
diff changeset
1904 (match_operand 1)]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1905 "(TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1906 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1907 ix86_expand_vector_init (TARGET_MMX_WITH_SSE, operands[0],
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1908 operands[1]);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1909 DONE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1910 })
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1911
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1912 (define_expand "vec_setv8qi"
111
kono
parents: 67
diff changeset
1913 [(match_operand:V8QI 0 "register_operand")
kono
parents: 67
diff changeset
1914 (match_operand:QI 1 "register_operand")
kono
parents: 67
diff changeset
1915 (match_operand 2 "const_int_operand")]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1916 "TARGET_MMX || TARGET_MMX_WITH_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1917 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1918 ix86_expand_vector_set (TARGET_MMX_WITH_SSE, operands[0], operands[1],
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1919 INTVAL (operands[2]));
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1920 DONE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1921 })
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1922
111
kono
parents: 67
diff changeset
1923 (define_expand "vec_extractv8qiqi"
kono
parents: 67
diff changeset
1924 [(match_operand:QI 0 "register_operand")
kono
parents: 67
diff changeset
1925 (match_operand:V8QI 1 "register_operand")
kono
parents: 67
diff changeset
1926 (match_operand 2 "const_int_operand")]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1927 "TARGET_MMX || TARGET_MMX_WITH_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1928 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1929 ix86_expand_vector_extract (TARGET_MMX_WITH_SSE, operands[0],
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1930 operands[1], INTVAL (operands[2]));
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1931 DONE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1932 })
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1933
111
kono
parents: 67
diff changeset
1934 (define_expand "vec_initv8qiqi"
kono
parents: 67
diff changeset
1935 [(match_operand:V8QI 0 "register_operand")
kono
parents: 67
diff changeset
1936 (match_operand 1)]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1937 "(TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_SSE"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1938 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1939 ix86_expand_vector_init (TARGET_MMX_WITH_SSE, operands[0],
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1940 operands[1]);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1941 DONE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1942 })
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1943
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1944 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1945 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1946 ;; Miscellaneous
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1947 ;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1948 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1949
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1950 (define_expand "mmx_uavg<mode>3"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1951 [(set (match_operand:MMXMODE12 0 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1952 (truncate:MMXMODE12
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1953 (lshiftrt:<mmxdoublemode>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1954 (plus:<mmxdoublemode>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1955 (plus:<mmxdoublemode>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1956 (zero_extend:<mmxdoublemode>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1957 (match_operand:MMXMODE12 1 "register_mmxmem_operand"))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1958 (zero_extend:<mmxdoublemode>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1959 (match_operand:MMXMODE12 2 "register_mmxmem_operand")))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1960 (match_dup 3))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1961 (const_int 1))))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1962 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1963 && (TARGET_SSE || TARGET_3DNOW)"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1964 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1965 operands[3] = CONST1_RTX(<mmxdoublemode>mode);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1966 ix86_fixup_binary_operands_no_copy (PLUS, <MODE>mode, operands);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1967 })
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1968
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1969 (define_insn "*mmx_uavgv8qi3"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1970 [(set (match_operand:V8QI 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1971 (truncate:V8QI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1972 (lshiftrt:V8HI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1973 (plus:V8HI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1974 (plus:V8HI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1975 (zero_extend:V8HI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1976 (match_operand:V8QI 1 "register_mmxmem_operand" "%0,0,Yv"))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1977 (zero_extend:V8HI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1978 (match_operand:V8QI 2 "register_mmxmem_operand" "ym,x,Yv")))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1979 (const_vector:V8HI [(const_int 1) (const_int 1)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1980 (const_int 1) (const_int 1)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1981 (const_int 1) (const_int 1)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1982 (const_int 1) (const_int 1)]))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1983 (const_int 1))))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1984 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1985 && (TARGET_SSE || TARGET_3DNOW)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1986 && !(MEM_P (operands[1]) && MEM_P (operands[2]))"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1987 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1988 switch (which_alternative)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1989 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1990 case 2:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1991 return "vpavgb\t{%2, %1, %0|%0, %1, %2}";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1992 case 1:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1993 case 0:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1994 /* These two instructions have the same operation, but their encoding
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1995 is different. Prefer the one that is de facto standard. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1996 if (TARGET_SSE || TARGET_3DNOW_A)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1997 return "pavgb\t{%2, %0|%0, %2}";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1998 else
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1999 return "pavgusb\t{%2, %0|%0, %2}";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2000 default:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2001 gcc_unreachable ();
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2002 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2003 }
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2004 [(set_attr "isa" "*,sse2_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2005 (set_attr "mmx_isa" "native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2006 (set_attr "type" "mmxshft,sseiadd,sseiadd")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
2007 (set (attr "prefix_extra")
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
2008 (if_then_else
111
kono
parents: 67
diff changeset
2009 (not (ior (match_test "TARGET_SSE")
kono
parents: 67
diff changeset
2010 (match_test "TARGET_3DNOW_A")))
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
2011 (const_string "1")
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
2012 (const_string "*")))
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2013 (set_attr "mode" "DI,TI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2014
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2015 (define_insn "*mmx_uavgv4hi3"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2016 [(set (match_operand:V4HI 0 "register_operand" "=y,x,Yv")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2017 (truncate:V4HI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2018 (lshiftrt:V4SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2019 (plus:V4SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2020 (plus:V4SI
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2021 (zero_extend:V4SI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2022 (match_operand:V4HI 1 "register_mmxmem_operand" "%0,0,Yv"))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2023 (zero_extend:V4SI
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2024 (match_operand:V4HI 2 "register_mmxmem_operand" "ym,x,Yv")))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2025 (const_vector:V4SI [(const_int 1) (const_int 1)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2026 (const_int 1) (const_int 1)]))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2027 (const_int 1))))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2028 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2029 && (TARGET_SSE || TARGET_3DNOW_A)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2030 && !(MEM_P (operands[1]) && MEM_P (operands[2]))"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2031 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2032 pavgw\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2033 pavgw\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2034 vpavgw\t{%2, %1, %0|%0, %1, %2}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2035 [(set_attr "isa" "*,sse2_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2036 (set_attr "mmx_isa" "native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2037 (set_attr "type" "mmxshft,sseiadd,sseiadd")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2038 (set_attr "mode" "DI,TI,TI")])
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2039
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2040 (define_expand "uavg<mode>3_ceil"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2041 [(set (match_operand:MMXMODE12 0 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2042 (truncate:MMXMODE12
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2043 (lshiftrt:<mmxdoublemode>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2044 (plus:<mmxdoublemode>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2045 (plus:<mmxdoublemode>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2046 (zero_extend:<mmxdoublemode>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2047 (match_operand:MMXMODE12 1 "register_operand"))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2048 (zero_extend:<mmxdoublemode>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2049 (match_operand:MMXMODE12 2 "register_operand")))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2050 (match_dup 3))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2051 (const_int 1))))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2052 "TARGET_MMX_WITH_SSE"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2053 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2054 operands[3] = CONST1_RTX(<mmxdoublemode>mode);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2055 ix86_fixup_binary_operands_no_copy (PLUS, <MODE>mode, operands);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2056 })
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2057
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2058 (define_insn "mmx_psadbw"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2059 [(set (match_operand:V1DI 0 "register_operand" "=y,x,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2060 (unspec:V1DI [(match_operand:V8QI 1 "register_operand" "0,0,Yv")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2061 (match_operand:V8QI 2 "register_mmxmem_operand" "ym,x,Yv")]
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2062 UNSPEC_PSADBW))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2063 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2064 && (TARGET_SSE || TARGET_3DNOW_A)"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2065 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2066 psadbw\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2067 psadbw\t{%2, %0|%0, %2}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2068 vpsadbw\t{%2, %1, %0|%0, %1, %2}"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2069 [(set_attr "isa" "*,sse2_noavx,avx")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2070 (set_attr "mmx_isa" "native,*,*")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2071 (set_attr "type" "mmxshft,sseiadd,sseiadd")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2072 (set_attr "mode" "DI,TI,TI")])
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2073
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2074 (define_expand "reduc_plus_scal_v8qi"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2075 [(plus:V8QI
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2076 (match_operand:QI 0 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2077 (match_operand:V8QI 1 "register_operand"))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2078 "TARGET_MMX_WITH_SSE"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2079 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2080 rtx tmp = gen_reg_rtx (V8QImode);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2081 emit_move_insn (tmp, CONST0_RTX (V8QImode));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2082 rtx tmp2 = gen_reg_rtx (V1DImode);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2083 emit_insn (gen_mmx_psadbw (tmp2, operands[1], tmp));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2084 tmp2 = gen_lowpart (V8QImode, tmp2);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2085 emit_insn (gen_vec_extractv8qiqi (operands[0], tmp2, const0_rtx));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2086 DONE;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2087 })
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2088
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2089 (define_expand "usadv8qi"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2090 [(match_operand:V2SI 0 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2091 (match_operand:V8QI 1 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2092 (match_operand:V8QI 2 "register_operand")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2093 (match_operand:V2SI 3 "register_operand")]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2094 "TARGET_MMX_WITH_SSE"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2095 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2096 rtx t1 = gen_reg_rtx (V1DImode);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2097 rtx t2 = gen_reg_rtx (V2SImode);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2098 emit_insn (gen_mmx_psadbw (t1, operands[1], operands[2]));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2099 convert_move (t2, t1, 0);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2100 emit_insn (gen_addv2si3 (operands[0], t2, operands[3]));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2101 DONE;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2102 })
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2103
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2104 (define_insn_and_split "mmx_pmovmskb"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2105 [(set (match_operand:SI 0 "register_operand" "=r,r")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2106 (unspec:SI [(match_operand:V8QI 1 "register_operand" "y,x")]
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2107 UNSPEC_MOVMSK))]
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2108 "(TARGET_MMX || TARGET_MMX_WITH_SSE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2109 && (TARGET_SSE || TARGET_3DNOW_A)"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2110 "@
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2111 pmovmskb\t{%1, %0|%0, %1}
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2112 #"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2113 "TARGET_SSE2 && reload_completed
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2114 && SSE_REGNO_P (REGNO (operands[1]))"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2115 [(set (match_dup 0)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2116 (unspec:SI [(match_dup 1)] UNSPEC_MOVMSK))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2117 (set (match_dup 0)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2118 (zero_extend:SI (match_dup 2)))]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2119 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2120 /* Generate SSE pmovmskb and zero-extend from QImode to SImode. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2121 operands[1] = lowpart_subreg (V16QImode, operands[1],
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2122 GET_MODE (operands[1]));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2123 operands[2] = lowpart_subreg (QImode, operands[0],
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2124 GET_MODE (operands[0]));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2125 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2126 [(set_attr "mmx_isa" "native,sse")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2127 (set_attr "type" "mmxcvt,ssemov")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2128 (set_attr "mode" "DI,TI")])
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2129
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2130 (define_expand "mmx_maskmovq"
111
kono
parents: 67
diff changeset
2131 [(set (match_operand:V8QI 0 "memory_operand")
kono
parents: 67
diff changeset
2132 (unspec:V8QI [(match_operand:V8QI 1 "register_operand")
kono
parents: 67
diff changeset
2133 (match_operand:V8QI 2 "register_operand")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2134 (match_dup 0)]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2135 UNSPEC_MASKMOV))]
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2136 "TARGET_SSE || TARGET_3DNOW_A")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2137
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2138 (define_insn "*mmx_maskmovq"
111
kono
parents: 67
diff changeset
2139 [(set (mem:V8QI (match_operand:P 0 "register_operand" "D"))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2140 (unspec:V8QI [(match_operand:V8QI 1 "register_operand" "y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2141 (match_operand:V8QI 2 "register_operand" "y")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2142 (mem:V8QI (match_dup 0))]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2143 UNSPEC_MASKMOV))]
111
kono
parents: 67
diff changeset
2144 "TARGET_SSE || TARGET_3DNOW_A"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2145 ;; @@@ check ordering of operands in intel/nonintel syntax
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2146 "maskmovq\t{%2, %1|%1, %2}"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2147 [(set_attr "type" "mmxcvt")
111
kono
parents: 67
diff changeset
2148 (set_attr "znver1_decode" "vector")
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2149 (set_attr "mode" "DI")])
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2150
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2151 (define_int_iterator EMMS
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2152 [(UNSPECV_EMMS "TARGET_MMX")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2153 (UNSPECV_FEMMS "TARGET_3DNOW")])
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
2154
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2155 (define_int_attr emms
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2156 [(UNSPECV_EMMS "emms")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2157 (UNSPECV_FEMMS "femms")])
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
2158
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2159 (define_expand "mmx_<emms>"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2160 [(parallel
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2161 [(unspec_volatile [(const_int 0)] EMMS)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2162 (clobber (reg:XF ST0_REG))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2163 (clobber (reg:XF ST1_REG))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2164 (clobber (reg:XF ST2_REG))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2165 (clobber (reg:XF ST3_REG))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2166 (clobber (reg:XF ST4_REG))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2167 (clobber (reg:XF ST5_REG))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2168 (clobber (reg:XF ST6_REG))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2169 (clobber (reg:XF ST7_REG))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2170 (clobber (reg:DI MM0_REG))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2171 (clobber (reg:DI MM1_REG))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2172 (clobber (reg:DI MM2_REG))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2173 (clobber (reg:DI MM3_REG))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2174 (clobber (reg:DI MM4_REG))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2175 (clobber (reg:DI MM5_REG))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2176 (clobber (reg:DI MM6_REG))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2177 (clobber (reg:DI MM7_REG))])]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2178 "TARGET_MMX || TARGET_MMX_WITH_SSE"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2179 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2180 if (!TARGET_MMX)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2181 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2182 emit_insn (gen_nop ());
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2183 DONE;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2184 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2185 })
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2186
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2187 (define_insn "*mmx_<emms>"
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2188 [(unspec_volatile [(const_int 0)] EMMS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2189 (clobber (reg:XF ST0_REG))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2190 (clobber (reg:XF ST1_REG))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2191 (clobber (reg:XF ST2_REG))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2192 (clobber (reg:XF ST3_REG))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2193 (clobber (reg:XF ST4_REG))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2194 (clobber (reg:XF ST5_REG))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2195 (clobber (reg:XF ST6_REG))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2196 (clobber (reg:XF ST7_REG))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2197 (clobber (reg:DI MM0_REG))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2198 (clobber (reg:DI MM1_REG))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2199 (clobber (reg:DI MM2_REG))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2200 (clobber (reg:DI MM3_REG))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2201 (clobber (reg:DI MM4_REG))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2202 (clobber (reg:DI MM5_REG))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2203 (clobber (reg:DI MM6_REG))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2204 (clobber (reg:DI MM7_REG))]
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2205 ""
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2206 "<emms>"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2207 [(set_attr "type" "mmx")
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
2208 (set_attr "modrm" "0")
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
2209 (set_attr "memory" "none")])