OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [config/] [rs6000/] [paired.md] - Blame information for rev 282

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 282 jeremybenn
;; PowerPC paired single and double hummer description
2
;; Copyright (C) 2007, 2009
3
;; Free Software Foundation, Inc.
4
;; Contributed by David Edelsohn  and Revital Eres
5
;; 
6
 
7
;; This file is part of GCC.
8
 
9
;; GCC is free software; you can redistribute it and/or modify it
10
;; under the terms of the GNU General Public License as published
11
;; by the Free Software Foundation; either version 3, or (at your
12
;; option) any later version.
13
 
14
;; GCC is distributed in the hope that it will be useful, but WITHOUT
15
;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16
;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
17
;; License for more details.
18
;;
19
;; You should have received a copy of the GNU General Public License
20
;; along with this program; see the file COPYING3.  If not see
21
;; .
22
 
23
(define_constants
24
[(UNSPEC_INTERHI_V2SF     330)
25
 (UNSPEC_INTERLO_V2SF     331)
26
 (UNSPEC_EXTEVEN_V2SF     332)
27
 (UNSPEC_EXTODD_V2SF      333)
28
])
29
 
30
(define_insn "paired_negv2sf2"
31
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
32
        (neg:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "f")))]
33
  "TARGET_PAIRED_FLOAT"
34
  "ps_neg %0,%1"
35
  [(set_attr "type" "fp")])
36
 
37
(define_insn "sqrtv2sf2"
38
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
39
        (sqrt:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "f")))]
40
  "TARGET_PAIRED_FLOAT"
41
  "ps_rsqrte %0,%1"
42
  [(set_attr "type" "fp")])
43
 
44
(define_insn "paired_absv2sf2"
45
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
46
        (abs:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "f")))]
47
  "TARGET_PAIRED_FLOAT"
48
  "ps_abs %0,%1"
49
  [(set_attr "type" "fp")])
50
 
51
(define_insn "nabsv2sf2"
52
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
53
        (neg:V2SF (abs:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "f"))))]
54
  "TARGET_PAIRED_FLOAT"
55
  "ps_nabs %0,%1"
56
  [(set_attr "type" "fp")])
57
 
58
(define_insn "paired_addv2sf3"
59
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
60
        (plus:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "%f")
61
                   (match_operand:V2SF 2 "gpc_reg_operand" "f")))]
62
  "TARGET_PAIRED_FLOAT"
63
  "ps_add %0,%1,%2"
64
  [(set_attr "type" "fp")])
65
 
66
(define_insn "paired_subv2sf3"
67
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
68
        (minus:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
69
                    (match_operand:V2SF 2 "gpc_reg_operand" "f")))]
70
  "TARGET_PAIRED_FLOAT"
71
  "ps_sub %0,%1,%2"
72
  [(set_attr "type" "fp")])
73
 
74
(define_insn "paired_mulv2sf3"
75
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
76
        (mult:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "%f")
77
                   (match_operand:V2SF 2 "gpc_reg_operand" "f")))]
78
  "TARGET_PAIRED_FLOAT"
79
  "ps_mul %0,%1,%2"
80
  [(set_attr "type" "fp")])
81
 
82
(define_insn "resv2sf2"
83
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
84
        (unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "f")] UNSPEC_FRES))]
85
  "TARGET_PAIRED_FLOAT && flag_finite_math_only"
86
  "ps_res %0,%1"
87
  [(set_attr "type" "fp")])
88
 
89
(define_insn "paired_divv2sf3"
90
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
91
        (div:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
92
                  (match_operand:V2SF 2 "gpc_reg_operand" "f")))]
93
  "TARGET_PAIRED_FLOAT"
94
  "ps_div %0,%1,%2"
95
  [(set_attr "type" "sdiv")])
96
 
97
(define_insn "paired_madds0"
98
 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
99
                 (vec_concat:V2SF
100
                 (plus:SF (mult:SF (vec_select:SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
101
                                                  (parallel [(const_int 0)]))
102
                                   (vec_select:SF (match_operand:V2SF 2 "gpc_reg_operand" "f")
103
                                         (parallel [(const_int 0)])))
104
                          (vec_select:SF (match_operand:V2SF 3 "gpc_reg_operand" "f")
105
                                         (parallel [(const_int 0)])))
106
                 (plus:SF (mult:SF (vec_select:SF (match_dup 1)
107
                                         (parallel [(const_int 1)]))
108
                                     (vec_select:SF (match_dup 2)
109
                                         (parallel [(const_int 0)])))
110
                          (vec_select:SF (match_dup 3)
111
                                         (parallel [(const_int 1)])))))]
112
  "TARGET_PAIRED_FLOAT && TARGET_FUSED_MADD"
113
  "ps_madds0 %0,%1,%2,%3"
114
  [(set_attr "type" "fp")])
115
 
116
(define_insn "paired_madds1"
117
 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
118
                 (vec_concat:V2SF
119
                 (plus:SF (mult:SF (vec_select:SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
120
                                                  (parallel [(const_int 0)]))
121
                                   (vec_select:SF (match_operand:V2SF 2 "gpc_reg_operand" "f")
122
                                         (parallel [(const_int 1)])))
123
                          (vec_select:SF (match_operand:V2SF 3 "gpc_reg_operand" "f")
124
                                         (parallel [(const_int 0)])))
125
                 (plus:SF (mult:SF (vec_select:SF (match_dup 1)
126
                                         (parallel [(const_int 1)]))
127
                                     (vec_select:SF (match_dup 2)
128
                                         (parallel [(const_int 1)])))
129
                          (vec_select:SF (match_dup 3)
130
                                         (parallel [(const_int 1)])))))]
131
  "TARGET_PAIRED_FLOAT && TARGET_FUSED_MADD"
132
  "ps_madds1 %0,%1,%2,%3"
133
  [(set_attr "type" "fp")])
134
 
135
(define_insn "paired_madd"
136
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
137
        (plus:V2SF (mult:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "%f")
138
                              (match_operand:V2SF 2 "gpc_reg_operand" "f"))
139
                   (match_operand:V2SF 3 "gpc_reg_operand" "f")))]
140
  "TARGET_PAIRED_FLOAT && TARGET_FUSED_MADD"
141
  "ps_madd %0,%1,%2,%3"
142
  [(set_attr "type" "fp")])
143
 
144
(define_insn "paired_msub"
145
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
146
        (minus:V2SF (mult:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "%f")
147
                               (match_operand:V2SF 2 "gpc_reg_operand" "f"))
148
                    (match_operand:V2SF 3 "gpc_reg_operand" "f")))]
149
  "TARGET_PAIRED_FLOAT && TARGET_FUSED_MADD"
150
  "ps_msub %0,%1,%2,%3"
151
  [(set_attr "type" "fp")])
152
 
153
(define_insn "paired_nmadd"
154
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
155
        (neg:V2SF (plus:V2SF (mult:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "%f")
156
                                        (match_operand:V2SF 2 "gpc_reg_operand" "f"))
157
                             (match_operand:V2SF 3 "gpc_reg_operand" "f"))))]
158
  "TARGET_PAIRED_FLOAT && TARGET_FUSED_MADD
159
   && HONOR_SIGNED_ZEROS (SFmode)"
160
  "ps_nmadd %0,%1,%2,%3"
161
  [(set_attr "type" "fp")])
162
 
163
(define_insn "paired_nmsub"
164
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
165
        (neg:V2SF (minus:V2SF (mult:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "%f")
166
                                         (match_operand:V2SF 2 "gpc_reg_operand" "f"))
167
                              (match_operand:V2SF 3 "gpc_reg_operand" "f"))))]
168
  "TARGET_PAIRED_FLOAT && TARGET_FUSED_MADD
169
   && HONOR_SIGNED_ZEROS (DFmode)"
170
  "ps_nmsub %0,%1,%2,%3"
171
  [(set_attr "type" "dmul")])
172
 
173
(define_insn "selv2sf4"
174
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
175
        (vec_concat:V2SF
176
         (if_then_else:SF (ge (vec_select:SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
177
                                             (parallel [(const_int 0)]))
178
                              (match_operand:SF 4 "zero_fp_constant" "F"))
179
                          (vec_select:SF (match_operand:V2SF 2 "gpc_reg_operand" "f")
180
                                         (parallel [(const_int 0)]))
181
                          (vec_select:SF (match_operand:V2SF 3 "gpc_reg_operand" "f")
182
                                         (parallel [(const_int 0)])))
183
         (if_then_else:SF (ge (vec_select:SF (match_dup 1)
184
                                             (parallel [(const_int 1)]))
185
                              (match_dup 4))
186
                          (vec_select:SF (match_dup 2)
187
                                         (parallel [(const_int 1)]))
188
                          (vec_select:SF (match_dup 3)
189
                                         (parallel [(const_int 1)])))))]
190
 
191
  "TARGET_PAIRED_FLOAT"
192
  "ps_sel %0,%1,%2,%3"
193
  [(set_attr "type" "fp")])
194
 
195
(define_insn "*movv2sf_paired"
196
  [(set (match_operand:V2SF 0 "nonimmediate_operand" "=Z,f,f,o,r,r,f")
197
                 (match_operand:V2SF 1 "input_operand" "f,Z,f,r,o,r,W"))]
198
  "TARGET_PAIRED_FLOAT
199
   && (register_operand (operands[0], V2SFmode)
200
       || register_operand (operands[1], V2SFmode))"
201
{
202
  switch (which_alternative)
203
    {
204
    case 0: return "psq_stx %1,%y0,0,0";
205
    case 1: return "psq_lx %0,%y1,0,0";
206
    case 2: return "ps_mr %0,%1";
207
    case 3: return "#";
208
    case 4: return "#";
209
    case 5: return "#";
210
    case 6: return "#";
211
    default: gcc_unreachable ();
212
    }
213
}
214
  [(set_attr "type" "fpstore,fpload,fp,*,*,*,*")])
215
 
216
(define_insn "paired_stx"
217
  [(set (match_operand:V2SF 0 "memory_operand" "=Z")
218
        (match_operand:V2SF 1 "gpc_reg_operand" "f"))]
219
  "TARGET_PAIRED_FLOAT"
220
  "psq_stx %1,%y0,0,0"
221
  [(set_attr "type" "fpstore")])
222
 
223
(define_insn "paired_lx"
224
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
225
        (match_operand:V2SF 1 "memory_operand" "Z"))]
226
  "TARGET_PAIRED_FLOAT"
227
  "psq_lx %0,%y1,0,0"
228
  [(set_attr "type" "fpload")])
229
 
230
 
231
(define_split
232
  [(set (match_operand:V2SF 0 "nonimmediate_operand" "")
233
        (match_operand:V2SF 1 "input_operand" ""))]
234
  "TARGET_PAIRED_FLOAT && reload_completed
235
   && gpr_or_gpr_p (operands[0], operands[1])"
236
  [(pc)]
237
  {
238
  rs6000_split_multireg_move (operands[0], operands[1]); DONE;
239
  })
240
 
241
(define_insn "paired_cmpu0"
242
  [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
243
        (compare:CCFP (vec_select:SF
244
                       (match_operand:V2SF 1 "gpc_reg_operand" "f")
245
                       (parallel [(const_int 0)]))
246
                      (vec_select:SF
247
                       (match_operand:V2SF 2 "gpc_reg_operand" "f")
248
                       (parallel [(const_int 0)]))))]
249
  "TARGET_PAIRED_FLOAT"
250
  "ps_cmpu0 %0,%1,%2"
251
  [(set_attr "type" "fpcompare")])
252
 
253
(define_insn "paired_cmpu1"
254
  [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
255
        (compare:CCFP (vec_select:SF
256
                       (match_operand:V2SF 1 "gpc_reg_operand" "f")
257
                       (parallel [(const_int 1)]))
258
                      (vec_select:SF
259
                       (match_operand:V2SF 2 "gpc_reg_operand" "f")
260
                       (parallel [(const_int 1)]))))]
261
  "TARGET_PAIRED_FLOAT"
262
  "ps_cmpu1 %0,%1,%2"
263
  [(set_attr "type" "fpcompare")])
264
 
265
(define_insn "paired_merge00"
266
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
267
        (vec_concat:V2SF
268
         (vec_select:SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
269
                        (parallel [(const_int 0)]))
270
         (vec_select:SF (match_operand:V2SF 2 "gpc_reg_operand" "f")
271
                        (parallel [(const_int 0)]))))]
272
  "TARGET_PAIRED_FLOAT"
273
  "ps_merge00 %0, %1, %2"
274
  [(set_attr "type" "fp")])
275
 
276
(define_insn "paired_merge01"
277
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
278
        (vec_concat:V2SF
279
         (vec_select:SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
280
                        (parallel [(const_int 0)]))
281
         (vec_select:SF (match_operand:V2SF 2 "gpc_reg_operand" "f")
282
                        (parallel [(const_int 1)]))))]
283
  "TARGET_PAIRED_FLOAT"
284
  "ps_merge01 %0, %1, %2"
285
  [(set_attr "type" "fp")])
286
 
287
(define_insn "paired_merge10"
288
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
289
        (vec_concat:V2SF
290
         (vec_select:SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
291
                        (parallel [(const_int 1)]))
292
         (vec_select:SF (match_operand:V2SF 2 "gpc_reg_operand" "f")
293
                        (parallel [(const_int 0)]))))]
294
  "TARGET_PAIRED_FLOAT"
295
  "ps_merge10 %0, %1, %2"
296
  [(set_attr "type" "fp")])
297
 
298
(define_insn "paired_merge11"
299
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
300
        (vec_concat:V2SF
301
         (vec_select:SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
302
                        (parallel [(const_int 1)]))
303
         (vec_select:SF (match_operand:V2SF 2 "gpc_reg_operand" "f")
304
                        (parallel [(const_int 1)]))))]
305
  "TARGET_PAIRED_FLOAT"
306
  "ps_merge11 %0, %1, %2"
307
  [(set_attr "type" "fp")])
308
 
309
(define_insn "paired_sum0"
310
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
311
        (vec_concat:V2SF (plus:SF (vec_select:SF
312
                                   (match_operand:V2SF 1 "gpc_reg_operand" "f")
313
                                   (parallel [(const_int 0)]))
314
                                  (vec_select:SF
315
                                   (match_operand:V2SF 2 "gpc_reg_operand" "f")
316
                                   (parallel [(const_int 1)])))
317
                         (vec_select:SF
318
                          (match_operand:V2SF 3 "gpc_reg_operand" "f")
319
                          (parallel [(const_int 1)]))))]
320
  "TARGET_PAIRED_FLOAT"
321
  "ps_sum0 %0,%1,%2,%3"
322
  [(set_attr "type" "fp")])
323
 
324
(define_insn "paired_sum1"
325
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
326
        (vec_concat:V2SF (vec_select:SF
327
                          (match_operand:V2SF 2 "gpc_reg_operand" "f")
328
                          (parallel [(const_int 1)]))
329
                         (plus:SF (vec_select:SF
330
                                   (match_operand:V2SF 1 "gpc_reg_operand" "f")
331
                                   (parallel [(const_int 0)]))
332
                                  (vec_select:SF
333
                                   (match_operand:V2SF 3 "gpc_reg_operand" "f")
334
                                   (parallel [(const_int 1)])))))]
335
  "TARGET_PAIRED_FLOAT"
336
  "ps_sum1 %0,%1,%2,%3"
337
  [(set_attr "type" "fp")])
338
 
339
(define_insn "paired_muls0"
340
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
341
        (mult:V2SF (match_operand:V2SF 2 "gpc_reg_operand" "f")
342
                   (vec_duplicate:V2SF
343
                    (vec_select:SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
344
                                   (parallel [(const_int 0)])))))]
345
  "TARGET_PAIRED_FLOAT"
346
  "ps_muls0 %0, %1, %2"
347
  [(set_attr "type" "fp")])
348
 
349
 
350
(define_insn "paired_muls1"
351
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
352
        (mult:V2SF (match_operand:V2SF 2 "gpc_reg_operand" "f")
353
                   (vec_duplicate:V2SF
354
                    (vec_select:SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
355
                                   (parallel [(const_int 1)])))))]
356
  "TARGET_PAIRED_FLOAT"
357
  "ps_muls1 %0, %1, %2"
358
  [(set_attr "type" "fp")])
359
 
360
(define_expand "vec_initv2sf"
361
  [(match_operand:V2SF 0 "gpc_reg_operand" "=f")
362
   (match_operand 1 "" "")]
363
  "TARGET_PAIRED_FLOAT"
364
{
365
  paired_expand_vector_init (operands[0], operands[1]);
366
  DONE;
367
})
368
 
369
(define_insn "*vconcatsf"
370
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
371
        (vec_concat:V2SF
372
         (match_operand:SF 1 "gpc_reg_operand" "f")
373
         (match_operand:SF 2 "gpc_reg_operand" "f")))]
374
  "TARGET_PAIRED_FLOAT"
375
  "ps_merge00 %0, %1, %2"
376
  [(set_attr "type" "fp")])
377
 
378
(define_expand "sminv2sf3"
379
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
380
        (smin:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
381
                   (match_operand:V2SF 2 "gpc_reg_operand" "f")))]
382
  "TARGET_PAIRED_FLOAT"
383
{
384
  rtx tmp = gen_reg_rtx (V2SFmode);
385
 
386
  emit_insn (gen_subv2sf3 (tmp, operands[1], operands[2]));
387
  emit_insn (gen_selv2sf4 (operands[0], tmp, operands[2], operands[1], CONST0_RTX (SFmode)));
388
  DONE;
389
})
390
 
391
(define_expand "smaxv2sf3"
392
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
393
        (smax:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
394
                   (match_operand:V2SF 2 "gpc_reg_operand" "f")))]
395
  "TARGET_PAIRED_FLOAT"
396
{
397
  rtx tmp = gen_reg_rtx (V2SFmode);
398
 
399
  emit_insn (gen_subv2sf3 (tmp, operands[1], operands[2]));
400
  emit_insn (gen_selv2sf4 (operands[0], tmp, operands[1], operands[2], CONST0_RTX (SFmode)));
401
  DONE;
402
})
403
 
404
(define_expand "reduc_smax_v2sf"
405
  [(match_operand:V2SF 0 "gpc_reg_operand" "=f")
406
   (match_operand:V2SF 1 "gpc_reg_operand" "f")]
407
  "TARGET_PAIRED_FLOAT"
408
{
409
  rtx tmp_swap = gen_reg_rtx (V2SFmode);
410
  rtx tmp = gen_reg_rtx (V2SFmode);
411
 
412
  emit_insn (gen_paired_merge10 (tmp_swap, operands[1], operands[1]));
413
  emit_insn (gen_subv2sf3 (tmp, operands[1], tmp_swap));
414
  emit_insn (gen_selv2sf4 (operands[0], tmp, operands[1], tmp_swap, CONST0_RTX (SFmode)));
415
 
416
  DONE;
417
})
418
 
419
(define_expand "reduc_smin_v2sf"
420
  [(match_operand:V2SF 0 "gpc_reg_operand" "=f")
421
   (match_operand:V2SF 1 "gpc_reg_operand" "f")]
422
  "TARGET_PAIRED_FLOAT"
423
{
424
  rtx tmp_swap = gen_reg_rtx (V2SFmode);
425
  rtx tmp = gen_reg_rtx (V2SFmode);
426
 
427
  emit_insn (gen_paired_merge10 (tmp_swap, operands[1], operands[1]));
428
  emit_insn (gen_subv2sf3 (tmp, operands[1], tmp_swap));
429
  emit_insn (gen_selv2sf4 (operands[0], tmp, tmp_swap, operands[1], CONST0_RTX (SFmode)));
430
 
431
  DONE;
432
})
433
 
434
(define_expand "vec_interleave_highv2sf"
435
 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
436
        (unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "f")
437
                      (match_operand:V2SF 2 "gpc_reg_operand" "f")]
438
                      UNSPEC_INTERHI_V2SF))]
439
  "TARGET_PAIRED_FLOAT"
440
  "
441
{
442
  emit_insn (gen_paired_merge00 (operands[0], operands[1], operands[2]));
443
  DONE;
444
}")
445
 
446
(define_expand "vec_interleave_lowv2sf"
447
 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
448
        (unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "f")
449
                      (match_operand:V2SF 2 "gpc_reg_operand" "f")]
450
                      UNSPEC_INTERLO_V2SF))]
451
  "TARGET_PAIRED_FLOAT"
452
  "
453
{
454
  emit_insn (gen_paired_merge11 (operands[0], operands[1], operands[2]));
455
  DONE;
456
}")
457
 
458
(define_expand "vec_extract_evenv2sf"
459
 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
460
        (unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "f")
461
                      (match_operand:V2SF 2 "gpc_reg_operand" "f")]
462
                      UNSPEC_EXTEVEN_V2SF))]
463
  "TARGET_PAIRED_FLOAT"
464
  "
465
{
466
  emit_insn (gen_paired_merge00 (operands[0], operands[1], operands[2]));
467
  DONE;
468
}")
469
 
470
(define_expand "vec_extract_oddv2sf"
471
 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
472
        (unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "f")
473
                      (match_operand:V2SF 2 "gpc_reg_operand" "f")]
474
                      UNSPEC_EXTODD_V2SF))]
475
  "TARGET_PAIRED_FLOAT"
476
  "
477
{
478
  emit_insn (gen_paired_merge11 (operands[0], operands[1], operands[2]));
479
  DONE;
480
}")
481
 
482
 
483
(define_expand "reduc_splus_v2sf"
484
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
485
        (match_operand:V2SF 1 "gpc_reg_operand" "f"))]
486
  "TARGET_PAIRED_FLOAT"
487
  "
488
{
489
  emit_insn (gen_paired_sum1 (operands[0], operands[1], operands[1], operands[1]));
490
  DONE;
491
}")
492
 
493
(define_expand "movmisalignv2sf"
494
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
495
        (match_operand:V2SF 1 "gpc_reg_operand" "f"))]
496
  "TARGET_PAIRED_FLOAT"
497
{
498
  paired_expand_vector_move (operands);
499
  DONE;
500
})
501
 
502
(define_expand "vcondv2sf"
503
  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
504
        (if_then_else:V2SF
505
         (match_operator 3 "gpc_reg_operand"
506
                         [(match_operand:V2SF 4 "gpc_reg_operand" "f")
507
                          (match_operand:V2SF 5 "gpc_reg_operand" "f")])
508
         (match_operand:V2SF 1 "gpc_reg_operand" "f")
509
         (match_operand:V2SF 2 "gpc_reg_operand" "f")))]
510
  "TARGET_PAIRED_FLOAT && flag_unsafe_math_optimizations"
511
  "
512
{
513
        if (paired_emit_vector_cond_expr (operands[0], operands[1], operands[2],
514
                                          operands[3], operands[4], operands[5]))
515
        DONE;
516
        else
517
        FAIL;
518
}")
519
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.