annotate gcc/config/i386/subst.md @ 112:ab0bcb71f44d

merge gcc 7
author mir3636
date Fri, 10 Nov 2017 19:46:38 +0900
parents 04ced10e8804
children 84e7813d76e9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ;; GCC machine description for AVX512F instructions
kono
parents:
diff changeset
2 ;; Copyright (C) 2013-2017 Free Software Foundation, Inc.
kono
parents:
diff changeset
3 ;;
kono
parents:
diff changeset
4 ;; This file is part of GCC.
kono
parents:
diff changeset
5 ;;
kono
parents:
diff changeset
6 ;; GCC is free software; you can redistribute it and/or modify
kono
parents:
diff changeset
7 ;; it under the terms of the GNU General Public License as published by
kono
parents:
diff changeset
8 ;; the Free Software Foundation; either version 3, or (at your option)
kono
parents:
diff changeset
9 ;; any later version.
kono
parents:
diff changeset
10 ;;
kono
parents:
diff changeset
11 ;; GCC is distributed in the hope that it will be useful,
kono
parents:
diff changeset
12 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
13 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
kono
parents:
diff changeset
14 ;; GNU General Public License for more details.
kono
parents:
diff changeset
15 ;;
kono
parents:
diff changeset
16 ;; You should have received a copy of the GNU General Public License
kono
parents:
diff changeset
17 ;; along with GCC; see the file COPYING3. If not see
kono
parents:
diff changeset
18 ;; <http://www.gnu.org/licenses/>.
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 ;; Some iterators for extending subst as much as possible
kono
parents:
diff changeset
21 ;; All vectors (Use it for destination)
kono
parents:
diff changeset
22 (define_mode_iterator SUBST_V
kono
parents:
diff changeset
23 [V64QI V32QI V16QI
kono
parents:
diff changeset
24 V32HI V16HI V8HI
kono
parents:
diff changeset
25 V16SI V8SI V4SI
kono
parents:
diff changeset
26 V8DI V4DI V2DI
kono
parents:
diff changeset
27 V16SF V8SF V4SF
kono
parents:
diff changeset
28 V8DF V4DF V2DF])
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 (define_mode_iterator SUBST_S
kono
parents:
diff changeset
31 [QI HI SI DI])
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 (define_mode_iterator SUBST_A
kono
parents:
diff changeset
34 [V64QI V32QI V16QI
kono
parents:
diff changeset
35 V32HI V16HI V8HI
kono
parents:
diff changeset
36 V16SI V8SI V4SI
kono
parents:
diff changeset
37 V8DI V4DI V2DI
kono
parents:
diff changeset
38 V16SF V8SF V4SF
kono
parents:
diff changeset
39 V8DF V4DF V2DF
kono
parents:
diff changeset
40 QI HI SI DI SF DF
kono
parents:
diff changeset
41 CCFP CCFPU])
kono
parents:
diff changeset
42
kono
parents:
diff changeset
43 (define_subst_attr "mask_name" "mask" "" "_mask")
kono
parents:
diff changeset
44 (define_subst_attr "mask_applied" "mask" "false" "true")
kono
parents:
diff changeset
45 (define_subst_attr "mask_operand2" "mask" "" "%{%3%}%N2")
kono
parents:
diff changeset
46 (define_subst_attr "mask_operand3" "mask" "" "%{%4%}%N3")
kono
parents:
diff changeset
47 (define_subst_attr "mask_operand3_1" "mask" "" "%%{%%4%%}%%N3") ;; for sprintf
kono
parents:
diff changeset
48 (define_subst_attr "mask_operand4" "mask" "" "%{%5%}%N4")
kono
parents:
diff changeset
49 (define_subst_attr "mask_operand6" "mask" "" "%{%7%}%N6")
kono
parents:
diff changeset
50 (define_subst_attr "mask_operand7" "mask" "" "%{%8%}%N7")
kono
parents:
diff changeset
51 (define_subst_attr "mask_operand10" "mask" "" "%{%11%}%N10")
kono
parents:
diff changeset
52 (define_subst_attr "mask_operand11" "mask" "" "%{%12%}%N11")
kono
parents:
diff changeset
53 (define_subst_attr "mask_operand18" "mask" "" "%{%19%}%N18")
kono
parents:
diff changeset
54 (define_subst_attr "mask_operand19" "mask" "" "%{%20%}%N19")
kono
parents:
diff changeset
55 (define_subst_attr "mask_codefor" "mask" "*" "")
kono
parents:
diff changeset
56 (define_subst_attr "mask_operand_arg34" "mask" "" ", operands[3], operands[4]")
kono
parents:
diff changeset
57 (define_subst_attr "mask_mode512bit_condition" "mask" "1" "(<MODE_SIZE> == 64 || TARGET_AVX512VL)")
kono
parents:
diff changeset
58 (define_subst_attr "mask_avx512vl_condition" "mask" "1" "TARGET_AVX512VL")
kono
parents:
diff changeset
59 (define_subst_attr "mask_avx512bw_condition" "mask" "1" "TARGET_AVX512BW")
kono
parents:
diff changeset
60 (define_subst_attr "mask_avx512dq_condition" "mask" "1" "TARGET_AVX512DQ")
kono
parents:
diff changeset
61 (define_subst_attr "store_mask_constraint" "mask" "vm" "v")
kono
parents:
diff changeset
62 (define_subst_attr "store_mask_predicate" "mask" "nonimmediate_operand" "register_operand")
kono
parents:
diff changeset
63 (define_subst_attr "mask_prefix" "mask" "vex" "evex")
kono
parents:
diff changeset
64 (define_subst_attr "mask_prefix2" "mask" "maybe_vex" "evex")
kono
parents:
diff changeset
65 (define_subst_attr "mask_prefix3" "mask" "orig,vex" "evex,evex")
kono
parents:
diff changeset
66 (define_subst_attr "mask_prefix4" "mask" "orig,orig,vex" "evex,evex,evex")
kono
parents:
diff changeset
67 (define_subst_attr "mask_expand_op3" "mask" "3" "5")
kono
parents:
diff changeset
68
kono
parents:
diff changeset
69 (define_subst "mask"
kono
parents:
diff changeset
70 [(set (match_operand:SUBST_V 0)
kono
parents:
diff changeset
71 (match_operand:SUBST_V 1))]
kono
parents:
diff changeset
72 "TARGET_AVX512F"
kono
parents:
diff changeset
73 [(set (match_dup 0)
kono
parents:
diff changeset
74 (vec_merge:SUBST_V
kono
parents:
diff changeset
75 (match_dup 1)
kono
parents:
diff changeset
76 (match_operand:SUBST_V 2 "vector_move_operand" "0C")
kono
parents:
diff changeset
77 (match_operand:<avx512fmaskmode> 3 "register_operand" "Yk")))])
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79 (define_subst_attr "mask_scalar_merge_name" "mask_scalar_merge" "" "_mask")
kono
parents:
diff changeset
80 (define_subst_attr "mask_scalar_merge_operand3" "mask_scalar_merge" "" "%{%3%}")
kono
parents:
diff changeset
81 (define_subst_attr "mask_scalar_merge_operand4" "mask_scalar_merge" "" "%{%4%}")
kono
parents:
diff changeset
82
kono
parents:
diff changeset
83 (define_subst "mask_scalar_merge"
kono
parents:
diff changeset
84 [(set (match_operand:SUBST_S 0)
kono
parents:
diff changeset
85 (match_operand:SUBST_S 1))]
kono
parents:
diff changeset
86 "TARGET_AVX512F"
kono
parents:
diff changeset
87 [(set (match_dup 0)
kono
parents:
diff changeset
88 (and:SUBST_S
kono
parents:
diff changeset
89 (match_dup 1)
kono
parents:
diff changeset
90 (match_operand:SUBST_S 3 "register_operand" "Yk")))])
kono
parents:
diff changeset
91
kono
parents:
diff changeset
92 (define_subst_attr "sd_maskz_name" "sd" "" "_maskz_1")
kono
parents:
diff changeset
93 (define_subst_attr "sd_mask_op4" "sd" "" "%{%5%}%N4")
kono
parents:
diff changeset
94 (define_subst_attr "sd_mask_op5" "sd" "" "%{%6%}%N5")
kono
parents:
diff changeset
95 (define_subst_attr "sd_mask_codefor" "sd" "*" "")
kono
parents:
diff changeset
96 (define_subst_attr "sd_mask_mode512bit_condition" "sd" "1" "(<MODE_SIZE> == 64 || TARGET_AVX512VL)")
kono
parents:
diff changeset
97
kono
parents:
diff changeset
98 (define_subst "sd"
kono
parents:
diff changeset
99 [(set (match_operand:SUBST_V 0)
kono
parents:
diff changeset
100 (match_operand:SUBST_V 1))]
kono
parents:
diff changeset
101 ""
kono
parents:
diff changeset
102 [(set (match_dup 0)
kono
parents:
diff changeset
103 (vec_merge:SUBST_V
kono
parents:
diff changeset
104 (match_dup 1)
kono
parents:
diff changeset
105 (match_operand:SUBST_V 2 "const0_operand" "C")
kono
parents:
diff changeset
106 (match_operand:<avx512fmaskmode> 3 "register_operand" "Yk")))
kono
parents:
diff changeset
107 ])
kono
parents:
diff changeset
108
kono
parents:
diff changeset
109 (define_subst_attr "round_name" "round" "" "_round")
kono
parents:
diff changeset
110 (define_subst_attr "round_mask_operand2" "mask" "%R2" "%R4")
kono
parents:
diff changeset
111 (define_subst_attr "round_mask_operand3" "mask" "%R3" "%R5")
kono
parents:
diff changeset
112 (define_subst_attr "round_mask_operand4" "mask" "%R4" "%R6")
kono
parents:
diff changeset
113 (define_subst_attr "round_sd_mask_operand4" "sd" "%R4" "%R6")
kono
parents:
diff changeset
114 (define_subst_attr "round_op2" "round" "" "%R2")
kono
parents:
diff changeset
115 (define_subst_attr "round_op3" "round" "" "%R3")
kono
parents:
diff changeset
116 (define_subst_attr "round_op4" "round" "" "%R4")
kono
parents:
diff changeset
117 (define_subst_attr "round_op5" "round" "" "%R5")
kono
parents:
diff changeset
118 (define_subst_attr "round_op6" "round" "" "%R6")
kono
parents:
diff changeset
119 (define_subst_attr "round_mask_op2" "round" "" "<round_mask_operand2>")
kono
parents:
diff changeset
120 (define_subst_attr "round_mask_op3" "round" "" "<round_mask_operand3>")
kono
parents:
diff changeset
121 (define_subst_attr "round_mask_op4" "round" "" "<round_mask_operand4>")
kono
parents:
diff changeset
122 (define_subst_attr "round_sd_mask_op4" "round" "" "<round_sd_mask_operand4>")
kono
parents:
diff changeset
123 (define_subst_attr "round_constraint" "round" "vm" "v")
kono
parents:
diff changeset
124 (define_subst_attr "round_constraint2" "round" "m" "v")
kono
parents:
diff changeset
125 (define_subst_attr "round_constraint3" "round" "rm" "r")
kono
parents:
diff changeset
126 (define_subst_attr "round_nimm_predicate" "round" "vector_operand" "register_operand")
kono
parents:
diff changeset
127 (define_subst_attr "round_nimm_scalar_predicate" "round" "nonimmediate_operand" "register_operand")
kono
parents:
diff changeset
128 (define_subst_attr "round_prefix" "round" "vex" "evex")
kono
parents:
diff changeset
129 (define_subst_attr "round_mode512bit_condition" "round" "1" "(<MODE>mode == V16SFmode
kono
parents:
diff changeset
130 || <MODE>mode == V8DFmode
kono
parents:
diff changeset
131 || <MODE>mode == V8DImode
kono
parents:
diff changeset
132 || <MODE>mode == V16SImode)")
kono
parents:
diff changeset
133 (define_subst_attr "round_modev8sf_condition" "round" "1" "(<MODE>mode == V8SFmode)")
kono
parents:
diff changeset
134 (define_subst_attr "round_modev4sf_condition" "round" "1" "(<MODE>mode == V4SFmode)")
kono
parents:
diff changeset
135 (define_subst_attr "round_codefor" "round" "*" "")
kono
parents:
diff changeset
136 (define_subst_attr "round_opnum" "round" "5" "6")
kono
parents:
diff changeset
137
kono
parents:
diff changeset
138 (define_subst "round"
kono
parents:
diff changeset
139 [(set (match_operand:SUBST_A 0)
kono
parents:
diff changeset
140 (match_operand:SUBST_A 1))]
kono
parents:
diff changeset
141 "TARGET_AVX512F"
kono
parents:
diff changeset
142 [(set (match_dup 0)
kono
parents:
diff changeset
143 (unspec:SUBST_A [(match_dup 1)
kono
parents:
diff changeset
144 (match_operand:SI 2 "const_4_or_8_to_11_operand")]
kono
parents:
diff changeset
145 UNSPEC_EMBEDDED_ROUNDING))
kono
parents:
diff changeset
146 ])
kono
parents:
diff changeset
147
kono
parents:
diff changeset
148 (define_subst_attr "round_saeonly_name" "round_saeonly" "" "_round")
kono
parents:
diff changeset
149 (define_subst_attr "round_saeonly_mask_operand2" "mask" "%r2" "%r4")
kono
parents:
diff changeset
150 (define_subst_attr "round_saeonly_mask_operand3" "mask" "%r3" "%r5")
kono
parents:
diff changeset
151 (define_subst_attr "round_saeonly_mask_operand4" "mask" "%r4" "%r6")
kono
parents:
diff changeset
152 (define_subst_attr "round_saeonly_mask_scalar_merge_operand4" "mask_scalar_merge" "%r4" "%r5")
kono
parents:
diff changeset
153 (define_subst_attr "round_saeonly_sd_mask_operand5" "sd" "%r5" "%r7")
kono
parents:
diff changeset
154 (define_subst_attr "round_saeonly_op2" "round_saeonly" "" "%r2")
kono
parents:
diff changeset
155 (define_subst_attr "round_saeonly_op3" "round_saeonly" "" "%r3")
kono
parents:
diff changeset
156 (define_subst_attr "round_saeonly_op4" "round_saeonly" "" "%r4")
kono
parents:
diff changeset
157 (define_subst_attr "round_saeonly_op5" "round_saeonly" "" "%r5")
kono
parents:
diff changeset
158 (define_subst_attr "round_saeonly_op6" "round_saeonly" "" "%r6")
kono
parents:
diff changeset
159 (define_subst_attr "round_saeonly_prefix" "round_saeonly" "vex" "evex")
kono
parents:
diff changeset
160 (define_subst_attr "round_saeonly_mask_op2" "round_saeonly" "" "<round_saeonly_mask_operand2>")
kono
parents:
diff changeset
161 (define_subst_attr "round_saeonly_mask_op3" "round_saeonly" "" "<round_saeonly_mask_operand3>")
kono
parents:
diff changeset
162 (define_subst_attr "round_saeonly_mask_op4" "round_saeonly" "" "<round_saeonly_mask_operand4>")
kono
parents:
diff changeset
163 (define_subst_attr "round_saeonly_mask_scalar_merge_op4" "round_saeonly" "" "<round_saeonly_mask_scalar_merge_operand4>")
kono
parents:
diff changeset
164 (define_subst_attr "round_saeonly_sd_mask_op5" "round_saeonly" "" "<round_saeonly_sd_mask_operand5>")
kono
parents:
diff changeset
165 (define_subst_attr "round_saeonly_mask_arg3" "round_saeonly" "" ", operands[<mask_expand_op3>]")
kono
parents:
diff changeset
166 (define_subst_attr "round_saeonly_constraint" "round_saeonly" "vm" "v")
kono
parents:
diff changeset
167 (define_subst_attr "round_saeonly_constraint2" "round_saeonly" "m" "v")
kono
parents:
diff changeset
168 (define_subst_attr "round_saeonly_nimm_predicate" "round_saeonly" "vector_operand" "register_operand")
kono
parents:
diff changeset
169 (define_subst_attr "round_saeonly_nimm_scalar_predicate" "round_saeonly" "nonimmediate_operand" "register_operand")
kono
parents:
diff changeset
170 (define_subst_attr "round_saeonly_mode512bit_condition" "round_saeonly" "1" "(<MODE>mode == V16SFmode
kono
parents:
diff changeset
171 || <MODE>mode == V8DFmode
kono
parents:
diff changeset
172 || <MODE>mode == V8DImode
kono
parents:
diff changeset
173 || <MODE>mode == V16SImode)")
kono
parents:
diff changeset
174 (define_subst_attr "round_saeonly_modev8sf_condition" "round_saeonly" "1" "(<MODE>mode == V8SFmode)")
kono
parents:
diff changeset
175
kono
parents:
diff changeset
176 (define_subst "round_saeonly"
kono
parents:
diff changeset
177 [(set (match_operand:SUBST_A 0)
kono
parents:
diff changeset
178 (match_operand:SUBST_A 1))]
kono
parents:
diff changeset
179 "TARGET_AVX512F"
kono
parents:
diff changeset
180 [(set (match_dup 0)
kono
parents:
diff changeset
181 (unspec:SUBST_A [(match_dup 1)
kono
parents:
diff changeset
182 (match_operand:SI 2 "const48_operand")]
kono
parents:
diff changeset
183 UNSPEC_EMBEDDED_ROUNDING))
kono
parents:
diff changeset
184 ])
kono
parents:
diff changeset
185
kono
parents:
diff changeset
186 (define_subst_attr "round_expand_name" "round_expand" "" "_round")
kono
parents:
diff changeset
187 (define_subst_attr "round_expand_nimm_predicate" "round_expand" "nonimmediate_operand" "register_operand")
kono
parents:
diff changeset
188 (define_subst_attr "round_expand_operand" "round_expand" "" ", operands[5]")
kono
parents:
diff changeset
189
kono
parents:
diff changeset
190 (define_subst "round_expand"
kono
parents:
diff changeset
191 [(match_operand:SUBST_V 0)
kono
parents:
diff changeset
192 (match_operand:SUBST_V 1)
kono
parents:
diff changeset
193 (match_operand:SUBST_V 2)
kono
parents:
diff changeset
194 (match_operand:SUBST_V 3)
kono
parents:
diff changeset
195 (match_operand:SUBST_S 4)]
kono
parents:
diff changeset
196 "TARGET_AVX512F"
kono
parents:
diff changeset
197 [(match_dup 0)
kono
parents:
diff changeset
198 (match_dup 1)
kono
parents:
diff changeset
199 (match_dup 2)
kono
parents:
diff changeset
200 (match_dup 3)
kono
parents:
diff changeset
201 (match_dup 4)
kono
parents:
diff changeset
202 (unspec [(match_operand:SI 5 "const_4_or_8_to_11_operand")] UNSPEC_EMBEDDED_ROUNDING)])
kono
parents:
diff changeset
203
kono
parents:
diff changeset
204 (define_subst_attr "round_saeonly_expand_name" "round_saeonly_expand" "" "_round")
kono
parents:
diff changeset
205 (define_subst_attr "round_saeonly_expand_nimm_predicate" "round_saeonly_expand" "nonimmediate_operand" "register_operand")
kono
parents:
diff changeset
206 (define_subst_attr "round_saeonly_expand_operand6" "round_saeonly_expand" "" ", operands[6]")
kono
parents:
diff changeset
207
kono
parents:
diff changeset
208 (define_subst "round_saeonly_expand"
kono
parents:
diff changeset
209 [(match_operand:SUBST_V 0)
kono
parents:
diff changeset
210 (match_operand:SUBST_V 1)
kono
parents:
diff changeset
211 (match_operand:SUBST_V 2)
kono
parents:
diff changeset
212 (match_operand:SUBST_A 3)
kono
parents:
diff changeset
213 (match_operand:SI 4)
kono
parents:
diff changeset
214 (match_operand:SUBST_S 5)]
kono
parents:
diff changeset
215 "TARGET_AVX512F"
kono
parents:
diff changeset
216 [(match_dup 0)
kono
parents:
diff changeset
217 (match_dup 1)
kono
parents:
diff changeset
218 (match_dup 2)
kono
parents:
diff changeset
219 (match_dup 3)
kono
parents:
diff changeset
220 (match_dup 4)
kono
parents:
diff changeset
221 (match_dup 5)
kono
parents:
diff changeset
222 (unspec [(match_operand:SI 6 "const48_operand")] UNSPEC_EMBEDDED_ROUNDING)])
kono
parents:
diff changeset
223
kono
parents:
diff changeset
224 (define_subst_attr "mask_expand4_name" "mask_expand4" "" "_mask")
kono
parents:
diff changeset
225 (define_subst_attr "mask_expand4_args" "mask_expand4" "" ", operands[4], operands[5]")
kono
parents:
diff changeset
226
kono
parents:
diff changeset
227 (define_subst "mask_expand4"
kono
parents:
diff changeset
228 [(match_operand:SUBST_V 0)
kono
parents:
diff changeset
229 (match_operand:SUBST_V 1)
kono
parents:
diff changeset
230 (match_operand:SUBST_V 2)
kono
parents:
diff changeset
231 (match_operand:SI 3)]
kono
parents:
diff changeset
232 "TARGET_AVX512VL"
kono
parents:
diff changeset
233 [(match_dup 0)
kono
parents:
diff changeset
234 (match_dup 1)
kono
parents:
diff changeset
235 (match_dup 2)
kono
parents:
diff changeset
236 (match_dup 3)
kono
parents:
diff changeset
237 (match_operand:SUBST_V 4 "vector_move_operand")
kono
parents:
diff changeset
238 (match_operand:<avx512fmaskmode> 5 "register_operand")])
kono
parents:
diff changeset
239
kono
parents:
diff changeset
240 (define_subst_attr "mask_scalar_name" "mask_scalar" "" "_mask")
kono
parents:
diff changeset
241 (define_subst_attr "mask_scalar_operand3" "mask_scalar" "" "%{%4%}%N3")
kono
parents:
diff changeset
242 (define_subst_attr "mask_scalar_operand4" "mask_scalar" "" "%{%5%}%N4")
kono
parents:
diff changeset
243
kono
parents:
diff changeset
244 (define_subst "mask_scalar"
kono
parents:
diff changeset
245 [(set (match_operand:SUBST_V 0)
kono
parents:
diff changeset
246 (vec_merge:SUBST_V
kono
parents:
diff changeset
247 (match_operand:SUBST_V 1)
kono
parents:
diff changeset
248 (match_operand:SUBST_V 2)
kono
parents:
diff changeset
249 (const_int 1)))]
kono
parents:
diff changeset
250 "TARGET_AVX512F"
kono
parents:
diff changeset
251 [(set (match_dup 0)
kono
parents:
diff changeset
252 (vec_merge:SUBST_V
kono
parents:
diff changeset
253 (vec_merge:SUBST_V
kono
parents:
diff changeset
254 (match_dup 1)
kono
parents:
diff changeset
255 (match_operand:SUBST_V 3 "vector_move_operand" "0C")
kono
parents:
diff changeset
256 (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk"))
kono
parents:
diff changeset
257 (match_dup 2)
kono
parents:
diff changeset
258 (const_int 1)))])
kono
parents:
diff changeset
259
kono
parents:
diff changeset
260 (define_subst_attr "round_scalar_name" "round_scalar" "" "_round")
kono
parents:
diff changeset
261 (define_subst_attr "round_scalar_mask_operand3" "mask_scalar" "%R3" "%R5")
kono
parents:
diff changeset
262 (define_subst_attr "round_scalar_mask_op3" "round_scalar" "" "<round_scalar_mask_operand3>")
kono
parents:
diff changeset
263 (define_subst_attr "round_scalar_constraint" "round_scalar" "vm" "v")
kono
parents:
diff changeset
264 (define_subst_attr "round_scalar_prefix" "round_scalar" "vex" "evex")
kono
parents:
diff changeset
265
kono
parents:
diff changeset
266 (define_subst "round_scalar"
kono
parents:
diff changeset
267 [(set (match_operand:SUBST_V 0)
kono
parents:
diff changeset
268 (vec_merge:SUBST_V
kono
parents:
diff changeset
269 (match_operand:SUBST_V 1)
kono
parents:
diff changeset
270 (match_operand:SUBST_V 2)
kono
parents:
diff changeset
271 (const_int 1)))]
kono
parents:
diff changeset
272 "TARGET_AVX512F"
kono
parents:
diff changeset
273 [(set (match_dup 0)
kono
parents:
diff changeset
274 (unspec:SUBST_V [
kono
parents:
diff changeset
275 (vec_merge:SUBST_V
kono
parents:
diff changeset
276 (match_dup 1)
kono
parents:
diff changeset
277 (match_dup 2)
kono
parents:
diff changeset
278 (const_int 1))
kono
parents:
diff changeset
279 (match_operand:SI 3 "const_4_or_8_to_11_operand")]
kono
parents:
diff changeset
280 UNSPEC_EMBEDDED_ROUNDING))])
kono
parents:
diff changeset
281
kono
parents:
diff changeset
282 (define_subst_attr "round_saeonly_scalar_name" "round_saeonly_scalar" "" "_round")
kono
parents:
diff changeset
283 (define_subst_attr "round_saeonly_scalar_mask_operand3" "mask_scalar" "%r3" "%r5")
kono
parents:
diff changeset
284 (define_subst_attr "round_saeonly_scalar_mask_operand4" "mask_scalar" "%r4" "%r6")
kono
parents:
diff changeset
285 (define_subst_attr "round_saeonly_scalar_mask_op3" "round_saeonly_scalar" "" "<round_saeonly_scalar_mask_operand3>")
kono
parents:
diff changeset
286 (define_subst_attr "round_saeonly_scalar_mask_op4" "round_saeonly_scalar" "" "<round_saeonly_scalar_mask_operand4>")
kono
parents:
diff changeset
287 (define_subst_attr "round_saeonly_scalar_constraint" "round_saeonly_scalar" "vm" "v")
kono
parents:
diff changeset
288 (define_subst_attr "round_saeonly_scalar_prefix" "round_saeonly_scalar" "vex" "evex")
kono
parents:
diff changeset
289 (define_subst_attr "round_saeonly_scalar_nimm_predicate" "round_saeonly_scalar" "vector_operand" "register_operand")
kono
parents:
diff changeset
290
kono
parents:
diff changeset
291 (define_subst "round_saeonly_scalar"
kono
parents:
diff changeset
292 [(set (match_operand:SUBST_V 0)
kono
parents:
diff changeset
293 (vec_merge:SUBST_V
kono
parents:
diff changeset
294 (match_operand:SUBST_V 1)
kono
parents:
diff changeset
295 (match_operand:SUBST_V 2)
kono
parents:
diff changeset
296 (const_int 1)))]
kono
parents:
diff changeset
297 "TARGET_AVX512F"
kono
parents:
diff changeset
298 [(set (match_dup 0)
kono
parents:
diff changeset
299 (unspec:SUBST_V [
kono
parents:
diff changeset
300 (vec_merge:SUBST_V
kono
parents:
diff changeset
301 (match_dup 1)
kono
parents:
diff changeset
302 (match_dup 2)
kono
parents:
diff changeset
303 (const_int 1))
kono
parents:
diff changeset
304 (match_operand:SI 3 "const48_operand")]
kono
parents:
diff changeset
305 UNSPEC_EMBEDDED_ROUNDING))])