]>
Commit | Line | Data |
---|---|---|
191eb16d AK |
1 | ;;- Machine description for GNU compiler -- S/390 / zSeries version. |
2 | ;; Subst patterns. | |
8d9254fc | 3 | ;; Copyright (C) 2016-2020 Free Software Foundation, Inc. |
191eb16d AK |
4 | ;; Contributed by Andreas Krebbel (Andreas.Krebbel@de.ibm.com) |
5 | ||
6 | ;; This file is part of GCC. | |
7 | ||
8 | ;; GCC is free software; you can redistribute it and/or modify it under | |
9 | ;; the terms of the GNU General Public License as published by the Free | |
10 | ;; Software Foundation; either version 3, or (at your option) any later | |
11 | ;; version. | |
12 | ||
13 | ;; GCC is distributed in the hope that it will be useful, but WITHOUT ANY | |
14 | ;; WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
15 | ;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
16 | ;; for more details. | |
17 | ||
18 | ;; You should have received a copy of the GNU General Public License | |
19 | ;; along with GCC; see the file COPYING3. If not see | |
20 | ;; <http://www.gnu.org/licenses/>. | |
21 | ||
a9fcf821 | 22 | (define_code_iterator SUBST [rotate ashift lshiftrt ashiftrt]) |
674a959c | 23 | (define_mode_iterator DSI_VI [SI DI V2QI V4QI V8QI V16QI V2HI V4HI V8HI V2SI V4SI V2DI]) |
191eb16d | 24 | |
a9fcf821 AK |
25 | ; This adds an explicit CC reg set to an operation while keeping the |
26 | ; set for the operation result as well. | |
27 | (define_subst "setcc_subst" | |
28 | [(set (match_operand:DSI 0 "" "") | |
29 | (match_operand:DSI 1 "" "")) | |
30 | (clobber (reg:CC CC_REGNUM))] | |
31 | "s390_match_ccmode(insn, CCSmode)" | |
32 | [(set (reg CC_REGNUM) | |
33 | (compare (match_dup 1) (const_int 0))) | |
34 | (set (match_dup 0) (match_dup 1))]) | |
35 | ||
36 | ; Use this in the insn name. | |
37 | (define_subst_attr "setcc" "setcc_subst" "" "_cc") | |
38 | ||
39 | ; This adds an explicit CC reg set to an operation while dropping the | |
40 | ; result of the operation. | |
41 | (define_subst "cconly_subst" | |
42 | [(set (match_operand:DSI 0 "" "") | |
43 | (match_operand:DSI 1 "" "")) | |
44 | (clobber (reg:CC CC_REGNUM))] | |
45 | "s390_match_ccmode(insn, CCSmode)" | |
46 | [(set (reg CC_REGNUM) | |
47 | (compare (match_dup 1) (const_int 0))) | |
48 | (clobber (match_scratch:DSI 0 "=d,d"))]) | |
49 | ||
50 | (define_subst_attr "cconly" "cconly_subst" "" "_cconly") | |
64c744b9 DV |
51 | |
52 | ||
53 | ; Does transformations to switch between patterns unsing risbg + | |
54 | ; clobber CC (z10) and risbgn without clobber (zEC12). | |
55 | (define_subst "clobbercc_or_nocc_subst" | |
56 | [(set (match_operand 0 "" "") (match_operand 1 "" ""))] | |
57 | "" | |
58 | [(set (match_dup 0) (match_dup 1)) | |
59 | (clobber (reg:CC CC_REGNUM))]) | |
60 | ||
61 | ; Use this in the insn name to add the target suffix. | |
62 | (define_subst_attr "clobbercc_or_nocc" "clobbercc_or_nocc_subst" | |
63 | "_nocc" "_clobbercc") | |
64 | ||
65 | ; Use this in the condition. | |
66 | (define_subst_attr "z10_or_zEC12_cond" "clobbercc_or_nocc_subst" | |
67 | "TARGET_ZEC12" "TARGET_Z10 && ! TARGET_ZEC12") | |
68 | ||
69 | ; Use this instead of the risbg instruction. | |
70 | (define_subst_attr "risbg_n" "clobbercc_or_nocc_subst" | |
71 | "risbgn" "risbg") |