annotate gcc/config/i386/glm.md @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 ;; Goldmont(GLM) Scheduling
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2 ;; Copyright (C) 2018-2020 Free Software Foundation, Inc.
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 ;;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 ;; This file is part of GCC.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 ;;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 ;; GCC is free software; you can redistribute it and/or modify
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 ;; it under the terms of the GNU General Public License as published by
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 ;; the Free Software Foundation; either version 3, or (at your option)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 ;; any later version.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 ;;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 ;; GCC is distributed in the hope that it will be useful,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 ;; GNU General Public License for more details.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 ;;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 ;; You should have received a copy of the GNU General Public License
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 ;; along with GCC; see the file COPYING3. If not see
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 ;; <http://www.gnu.org/licenses/>.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 ;;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 ;; Goldmont has 3 out-of-order IEC, 2 out-of--order FEC and out-of-order MEC.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 (define_automaton "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 ;; EU: Execution Unit
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 ;; Goldmont has 3 clusters - IEC, FPC, MEC
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 ;; IEC has three execution ports - IEC-0, IEC-1 and IEC-2.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 ;; FPC has two execution ports - FPC-0 and FPC-1.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 ;; MEC has two execution ports - MEC-0 (load) and MEC-1 (store0.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 (define_cpu_unit "glm-iec-0,glm-iec-1,glm-iec-2" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 (define_cpu_unit "glm-fec-0,glm-fec-1,glm-load,glm-store" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 ;; Some EUs have duplicated copied and can be accessed via either ports 0, 1 or 2.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 (define_reservation "glm-iec-any" "(glm-iec-0 | glm-iec-1 | glm-iec-2)")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 (define_reservation "glm-iec-any-load" "(glm-iec-0|glm-iec-1|glm-iec-2)+glm-load")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 (define_reservation "glm-iec-any-store" "(glm-iec-0|glm-iec-1|glm-iec-2)+glm-store")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 (define_reservation "glm-iec-any-both" "(glm-iec-0 | glm-iec-1 | glm-iec-2) + glm-load + glm-store")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 (define_reservation "glm-fec-all" "(glm-fec-0 + glm-fec-1)")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 (define_reservation "glm-all" "(glm-iec-0+glm-iec-1+glm-iec-2)+(glm-fec-0+glm-fec-1)+(glm-load+glm-store)")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 (define_reservation "glm-int-0" "glm-iec-0")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 (define_reservation "glm-int-0-load" "glm-iec-0 + glm-load")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 (define_reservation "glm-int-0-both" "glm-iec-0 + glm-load + glm-store")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 (define_reservation "glm-int-1" "glm-iec-1")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 (define_reservation "glm-int-1-mem" "glm-iec-1 + glm-load")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 (define_reservation "glm-int-2" "glm-iec-2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 (define_reservation "glm-int-2-mem" "glm-iec-2 + glm-load")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 (define_reservation "glm-fp-0" "glm-fec-0")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 (define_reservation "glm-fec-any" "(glm-fec-0 | glm-fec-1)")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 ;;; fmul insn can have 4 or 5 cycles latency for scalar and vector types.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 (define_reservation "glm-fmul-4c" "glm-fec-0, nothing*3")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53 (define_reservation "glm-fmul-4c-mem" "glm-fec-0+glm-load, nothing*3")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 (define_reservation "glm-fmul-5c" "glm-fec-0, nothing*4")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 ;;; fadd has 3 cycles latency.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 (define_reservation "glm-fadd-3c" "glm-fec-1, nothing*2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58 (define_reservation "glm-fadd-3c-mem" "glm-fec-1+glm-load, nothing*2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 ;;; imul insn has 3 cycles latency for SI operands
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 (define_reservation "glm-imul-32" "glm-iec-1, nothing*2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62 (define_reservation "glm-imul-mem-32"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 "(glm-iec-1+glm-load), nothing*2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 ;;; imul has 5 cycles latency for DI operands with 1/2 tput
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 (define_reservation "glm-imul-64"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 "glm-iec-1, glm-iec-1, nothing*3")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 (define_reservation "glm-imul-mem-64"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68 "glm-iec-1+glm-load, glm-iec-1, nothing*3")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71 (define_insn_reservation "glm_other" 9
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73 (and (eq_attr "type" "other")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74 (eq_attr "atom_unit" "!jeu")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75 "glm-all*9")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77 ;; return has type "other" with atom_unit "jeu"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78 (define_insn_reservation "glm_other_2" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80 (and (eq_attr "type" "other")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81 (eq_attr "atom_unit" "jeu")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 "glm-all")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 (define_insn_reservation "glm_multi" 9
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86 (eq_attr "type" "multi"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87 "glm-all*9")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 ;; Normal alu insns without carry
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90 (define_insn_reservation "glm_alu" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92 (and (eq_attr "type" "alu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93 (and (eq_attr "memory" "none")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
94 (eq_attr "use_carry" "0"))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
95 "glm-iec-any")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
96
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
97 ;; Normal alu insns without carry, but use MEC.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
98 (define_insn_reservation "glm_alu_load" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
99 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
100 (and (eq_attr "type" "alu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
101 (and (eq_attr "memory" "load")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
102 (eq_attr "use_carry" "0"))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
103 "glm-iec-any-load")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
104
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
105 (define_insn_reservation "glm_alu_mem" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
106 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
107 (and (eq_attr "type" "alu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
108 (and (eq_attr "memory" "both")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
109 (eq_attr "use_carry" "0"))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
110 "glm-iec-any-both")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
111
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
112
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
113 ;; Alu insn consuming CF, such as add/sbb
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
114 (define_insn_reservation "glm_alu_carry" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
115 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
116 (and (eq_attr "type" "alu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
117 (and (eq_attr "memory" "none")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
118 (eq_attr "use_carry" "1"))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
119 "glm-int-2, nothing")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
120
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
121 ;; Alu insn consuming CF, such as add/sbb
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
122 (define_insn_reservation "glm_alu_carry_mem" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
123 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
124 (and (eq_attr "type" "alu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
125 (and (eq_attr "memory" "!none")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
126 (eq_attr "use_carry" "1"))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
127 "glm-int-2-mem, nothing")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
128
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
129 (define_insn_reservation "glm_alu1" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
130 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
131 (and (eq_attr "type" "alu1")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
132 (eq_attr "memory" "none") (eq_attr "prefix_0f" "0")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
133 "glm-int-1")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
134
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
135 ;; bsf and bsf insn
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
136 (define_insn_reservation "glm_alu1_1" 10
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
137 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
138 (and (eq_attr "type" "alu1")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
139 (eq_attr "memory" "none") (eq_attr "prefix_0f" "1")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
140 "glm-int-1*8,nothing*2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
141
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
142 (define_insn_reservation "glm_alu1_mem" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
143 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
144 (and (eq_attr "type" "alu1")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
145 (eq_attr "memory" "!none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
146 "glm-int-1-mem")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
147
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
148 (define_insn_reservation "glm_negnot" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
149 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
150 (and (eq_attr "type" "negnot")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
151 (eq_attr "memory" "none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
152 "glm-iec-any")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
153
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
154 (define_insn_reservation "glm_negnot_mem" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
155 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
156 (and (eq_attr "type" "negnot")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
157 (eq_attr "memory" "!none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
158 "glm-iec-any-both")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
159
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
160 (define_insn_reservation "glm_imov" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
161 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
162 (and (eq_attr "type" "imov")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
163 (eq_attr "memory" "none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
164 "glm-iec-any")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
165
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
166 (define_insn_reservation "glm_imov_load" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
167 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
168 (and (eq_attr "type" "imov")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
169 (eq_attr "memory" "load")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
170 "glm-iec-any-load,nothing")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
171
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
172 (define_insn_reservation "glm_imov_store" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
173 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
174 (and (eq_attr "type" "imov")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
175 (eq_attr "memory" "store")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
176 "glm-iec-any-store")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
177
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
178 ;; 16<-16, 32<-32
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
179 (define_insn_reservation "glm_imovx" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
180 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
181 (and (eq_attr "type" "imovx")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
182 (and (eq_attr "memory" "none")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
183 (ior (and (match_operand:HI 0 "register_operand")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
184 (match_operand:HI 1 "general_operand"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
185 (and (match_operand:SI 0 "register_operand")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
186 (match_operand:SI 1 "general_operand"))))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
187 "glm-iec-any")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
188
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
189 ;; 16<-16, 32<-32, mem
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
190 (define_insn_reservation "glm_imovx_mem" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
191 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
192 (and (eq_attr "type" "imovx")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
193 (and (eq_attr "memory" "!none")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
194 (ior (and (match_operand:HI 0 "register_operand")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
195 (match_operand:HI 1 "general_operand"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
196 (and (match_operand:SI 0 "register_operand")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
197 (match_operand:SI 1 "general_operand"))))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
198 "glm-iec-any-load")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
199
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
200
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
201 ;; 32<-16, 32<-8, 64<-16, 64<-8, 64<-32, 8<-8
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
202 (define_insn_reservation "glm_imovx_2" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
203 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
204 (and (eq_attr "type" "imovx")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
205 (and (eq_attr "memory" "none")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
206 (ior (match_operand:QI 0 "register_operand")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
207 (ior (and (match_operand:SI 0 "register_operand")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
208 (not (match_operand:SI 1 "general_operand")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
209 (match_operand:DI 0 "register_operand"))))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
210 "glm-iec-any")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
211
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
212 ;; 32<-16, 32<-8, 64<-16, 64<-8, 64<-32, 8<-8, mem
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
213 (define_insn_reservation "glm_imovx_2_load" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
214 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
215 (and (eq_attr "type" "imovx")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
216 (and (eq_attr "memory" "load")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
217 (ior (match_operand:QI 0 "register_operand")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
218 (ior (and (match_operand:SI 0 "register_operand")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
219 (not (match_operand:SI 1 "general_operand")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
220 (match_operand:DI 0 "register_operand"))))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
221 "glm-iec-any-load,nothing")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
222
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
223 (define_insn_reservation "glm_imovx_2_mem" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
224 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
225 (and (eq_attr "type" "imovx")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
226 (and (eq_attr "memory" "!none")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
227 (ior (match_operand:QI 0 "register_operand")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
228 (ior (and (match_operand:SI 0 "register_operand")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
229 (not (match_operand:SI 1 "general_operand")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
230 (match_operand:DI 0 "register_operand"))))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
231 "glm-iec-any-both")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
232
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
233
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
234 ;; 16<-8
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
235 (define_insn_reservation "glm_imovx_3" 3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
236 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
237 (and (eq_attr "type" "imovx")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
238 (and (match_operand:HI 0 "register_operand")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
239 (match_operand:QI 1 "general_operand"))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
240 "glm-int-0, nothing*2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
241
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
242 (define_insn_reservation "glm_lea" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
243 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
244 (and (eq_attr "type" "lea")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
245 (eq_attr "mode" "!HI")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
246 "glm-iec-any")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
247
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
248 ;; lea 16bit address is complex insn
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
249 (define_insn_reservation "glm_lea_2" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
250 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
251 (and (eq_attr "type" "lea")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
252 (eq_attr "mode" "HI")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
253 "glm-all*2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
254
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
255 (define_insn_reservation "glm_incdec" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
256 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
257 (and (eq_attr "type" "incdec")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
258 (eq_attr "memory" "none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
259 "glm-int-0")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
260
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
261 (define_insn_reservation "glm_incdec_mem" 3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
262 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
263 (and (eq_attr "type" "incdec")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
264 (eq_attr "memory" "!none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
265 "glm-int-0-both, nothing*2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
266
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
267 ;; simple shift instruction use SHIFT eu, none memory
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
268 (define_insn_reservation "glm_ishift" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
269 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
270 (and (eq_attr "type" "ishift")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
271 (and (eq_attr "memory" "none") (eq_attr "prefix_0f" "0"))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
272 "glm-int-0")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
273
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
274 ;; simple shift instruction use SHIFT eu, memory
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
275 (define_insn_reservation "glm_ishift_mem" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
276 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
277 (and (eq_attr "type" "ishift")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
278 (and (eq_attr "memory" "!none") (eq_attr "prefix_0f" "0"))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
279 "glm-int-0-both,nothing")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
280
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
281 ;; DF shift (prefixed with 0f) is complex insn with latency of 4 cycles
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
282 (define_insn_reservation "glm_ishift_3" 4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
283 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
284 (and (eq_attr "type" "ishift")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
285 (eq_attr "prefix_0f" "1")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
286 "glm-all*4")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
287
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
288 (define_insn_reservation "glm_ishift1" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
289 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
290 (and (eq_attr "type" "ishift1")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
291 (eq_attr "memory" "none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
292 "glm-int-0")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
293
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
294 (define_insn_reservation "glm_ishift1_mem" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
295 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
296 (and (eq_attr "type" "ishift1")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
297 (eq_attr "memory" "!none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
298 "glm-int-0-both,nothing")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
299
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
300 (define_insn_reservation "glm_rotate" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
301 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
302 (and (eq_attr "type" "rotate")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
303 (eq_attr "memory" "none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
304 "glm-int-0")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
305
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
306 (define_insn_reservation "glm_rotate_mem" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
307 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
308 (and (eq_attr "type" "rotate")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
309 (eq_attr "memory" "!none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
310 "glm-int-0-both,nothing")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
311
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
312 (define_insn_reservation "glm_imul" 3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
313 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
314 (and (eq_attr "type" "imul")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
315 (and (eq_attr "memory" "none") (eq_attr "mode" "SI"))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
316 "glm-imul-32")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
317
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
318 (define_insn_reservation "glm_imul_load" 3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
319 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
320 (and (eq_attr "type" "imul")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
321 (and (eq_attr "memory" "!none") (eq_attr "mode" "SI"))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
322 "glm-imul-mem-32")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
323
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
324
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
325 ;; latency set to 5 as common 64x64 imul with 1/2 tput
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
326 (define_insn_reservation "glm_imul64" 5
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
327 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
328 (and (eq_attr "type" "imul")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
329 (and (eq_attr "memory" "none") (eq_attr "mode" "!SI"))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
330 "glm-imul-64")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
331
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
332 (define_insn_reservation "glm_imul64-load" 5
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
333 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
334 (and (eq_attr "type" "imul")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
335 (and (eq_attr "memory" "!none") (eq_attr "mode" "!SI"))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
336 "glm-imul-mem-64")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
337
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
338 (define_insn_reservation "glm_idiv" 25
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
339 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
340 (eq_attr "type" "idiv"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
341 "glm-all*16, nothing*9")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
342
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
343 (define_insn_reservation "glm_icmp" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
344 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
345 (and (eq_attr "type" "icmp")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
346 (eq_attr "memory" "none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
347 "glm-int-0")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
348
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
349 (define_insn_reservation "glm_icmp_mem" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
350 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
351 (and (eq_attr "type" "icmp")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
352 (eq_attr "memory" "!none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
353 "glm-int-0-load,nothing")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
354
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
355 (define_insn_reservation "glm_test" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
356 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
357 (and (eq_attr "type" "test")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
358 (eq_attr "memory" "none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
359 "glm-int-0")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
360
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
361 (define_insn_reservation "glm_test_mem" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
362 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
363 (and (eq_attr "type" "test")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
364 (eq_attr "memory" "!none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
365 "glm-int-0-load,nothing")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
366
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
367 (define_insn_reservation "glm_ibr" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
368 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
369 (and (eq_attr "type" "ibr")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
370 (eq_attr "memory" "!load")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
371 "glm-int-1")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
372
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
373 ;; complex if jump target is from address
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
374 (define_insn_reservation "glm_ibr_2" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
375 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
376 (and (eq_attr "type" "ibr")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
377 (eq_attr "memory" "load")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
378 "glm-all*2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
379
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
380 (define_insn_reservation "glm_setcc" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
381 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
382 (and (eq_attr "type" "setcc")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
383 (eq_attr "memory" "!store")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
384 "glm-iec-any")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
385
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
386 ;; 2 cycles complex if target is in memory
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
387 (define_insn_reservation "glm_setcc_2" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
388 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
389 (and (eq_attr "type" "setcc")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
390 (eq_attr "memory" "store")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
391 "glm-all*2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
392
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
393 (define_insn_reservation "glm_icmov" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
394 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
395 (and (eq_attr "type" "icmov")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
396 (eq_attr "memory" "none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
397 "glm-iec-any, nothing")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
398
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
399 (define_insn_reservation "glm_icmov_mem" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
400 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
401 (and (eq_attr "type" "icmov")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
402 (eq_attr "memory" "!none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
403 "glm-int-0-load, nothing")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
404
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
405 ;; UCODE if segreg, ignored
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
406 (define_insn_reservation "glm_push" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
407 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
408 (eq_attr "type" "push"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
409 "(glm-int-1+glm-int-2)*2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
410
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
411 ;; pop r64 is 1 cycle. UCODE if segreg, ignored
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
412 (define_insn_reservation "glm_pop" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
413 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
414 (and (eq_attr "type" "pop")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
415 (eq_attr "mode" "DI")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
416 "glm-int-1+glm-int-2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
417
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
418 ;; pop non-r64 is 2 cycles. UCODE if segreg, ignored
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
419 (define_insn_reservation "glm_pop_2" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
420 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
421 (and (eq_attr "type" "pop")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
422 (eq_attr "mode" "!DI")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
423 "(glm-int-1+glm-int-2)*2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
424
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
425 ;; UCODE if segreg, ignored
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
426 (define_insn_reservation "glm_call" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
427 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
428 (eq_attr "type" "call,callv"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
429 "(glm-int-0+glm-int-1)")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
430
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
431 (define_insn_reservation "glm_leave" 3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
432 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
433 (eq_attr "type" "leave"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
434 "glm-all*3")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
435
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
436 (define_insn_reservation "glm_str" 3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
437 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
438 (eq_attr "type" "str"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
439 "glm-all*3")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
440
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
441 (define_insn_reservation "glm_sselog" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
442 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
443 (and (eq_attr "type" "sselog")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
444 (eq_attr "memory" "none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
445 "glm-fec-all")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
446
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
447 (define_insn_reservation "glm_sselog_mem" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
448 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
449 (and (eq_attr "type" "sselog")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
450 (eq_attr "memory" "!none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
451 "glm-fec-all+glm-load")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
452
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
453 (define_insn_reservation "glm_sselog1" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
454 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
455 (and (eq_attr "type" "sselog1")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
456 (eq_attr "memory" "none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
457 "glm-fp-0")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
458
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
459 (define_insn_reservation "glm_sselog1_mem" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
460 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
461 (and (eq_attr "type" "sselog1")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
462 (eq_attr "memory" "!none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
463 "glm-fp-0+glm-load")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
464
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
465 ;; not pmad, not psad
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
466 (define_insn_reservation "glm_sseiadd" 3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
467 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
468 (and (eq_attr "type" "sseiadd")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
469 (and (not (match_operand:V2DI 0 "register_operand"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
470 (and (eq_attr "atom_unit" "!simul")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
471 (eq_attr "atom_unit" "!complex")))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
472 "glm-fadd-3c")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
473
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
474 ;; pmad, psad and 64
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
475 (define_insn_reservation "glm_sseiadd_2" 4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
476 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
477 (and (eq_attr "type" "sseiadd")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
478 (and (not (match_operand:V2DI 0 "register_operand"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
479 (and (eq_attr "atom_unit" "simul")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
480 (eq_attr "mode" "DI,TI")))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
481 "glm-fmul-4c")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
482
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
483 ;; if paddq(64 bit op), phadd/phsub
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
484 (define_insn_reservation "glm_sseiadd_3" 5
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
485 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
486 (and (eq_attr "type" "sseiadd")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
487 (ior (match_operand:V2DI 0 "register_operand")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
488 (eq_attr "atom_unit" "complex"))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
489 "glm-fmul-5c")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
490
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
491 ;; if immediate op.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
492 (define_insn_reservation "glm_sseishft" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
493 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
494 (and (eq_attr "type" "sseishft")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
495 (match_operand 2 "immediate_operand")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
496 "glm-fp-0, nothing")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
497
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
498 (define_insn_reservation "glm_sseimul" 4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
499 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
500 (and (eq_attr "type" "sseimul")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
501 (eq_attr "memory" "none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
502 "glm-fmul-4c")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
503
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
504 (define_insn_reservation "glm_sseimul_load" 4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
505 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
506 (and (eq_attr "type" "sseimul")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
507 (eq_attr "memory" "!none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
508 "glm-fmul-4c-mem")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
509
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
510
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
511 ;; rcpss or rsqrtss
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
512 (define_insn_reservation "glm_sse" 4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
513 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
514 (and (eq_attr "type" "sse")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
515 (and (eq_attr "atom_sse_attr" "rcp") (eq_attr "mode" "SF"))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
516 "glm-fmul-4c")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
517
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
518 ;; movshdup, movsldup. Suggest to type sseishft
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
519 (define_insn_reservation "glm_sse_2" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
520 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
521 (and (eq_attr "type" "sse")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
522 (eq_attr "atom_sse_attr" "movdup")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
523 "glm-fec-any")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
524
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
525 ;; lfence
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
526 (define_insn_reservation "glm_sse_3" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
527 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
528 (and (eq_attr "type" "sse")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
529 (eq_attr "atom_sse_attr" "lfence")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
530 "glm-fec-any")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
531
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
532 ;; sfence,clflush,mfence, prefetch
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
533 (define_insn_reservation "glm_sse_4" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
534 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
535 (and (eq_attr "type" "sse")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
536 (ior (eq_attr "atom_sse_attr" "fence")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
537 (eq_attr "atom_sse_attr" "prefetch"))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
538 "glm-fp-0")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
539
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
540 ;; rcpps, rsqrtss, sqrt, ldmxcsr
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
541 (define_insn_reservation "glm_sse_5" 9
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
542 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
543 (and (eq_attr "type" "sse")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
544 (ior (ior (eq_attr "atom_sse_attr" "sqrt")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
545 (eq_attr "atom_sse_attr" "mxcsr"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
546 (and (eq_attr "atom_sse_attr" "rcp")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
547 (eq_attr "mode" "V4SF")))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
548 "glm-fec-all*6, nothing*3")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
549
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
550 ;; xmm->xmm
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
551 (define_insn_reservation "glm_ssemov" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
552 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
553 (and (eq_attr "type" "ssemov")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
554 (and (match_operand 0 "register_operand" "xy")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
555 (match_operand 1 "register_operand" "xy"))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
556 "glm-fec-any")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
557
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
558 ;; reg->xmm
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
559 (define_insn_reservation "glm_ssemov_2" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
560 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
561 (and (eq_attr "type" "ssemov")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
562 (and (match_operand 0 "register_operand" "xy")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
563 (match_operand 1 "register_operand" "r"))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
564 "glm-fp-0")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
565
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
566 ;; xmm->reg
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
567 (define_insn_reservation "glm_ssemov_3" 3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
568 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
569 (and (eq_attr "type" "ssemov")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
570 (and (match_operand 0 "register_operand" "r")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
571 (match_operand 1 "register_operand" "xy"))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
572 "glm-fp-0, nothing*2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
573
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
574 ;; mov mem
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
575 (define_insn_reservation "glm_ssemov_load" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
576 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
577 (and (eq_attr "type" "ssemov")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
578 (eq_attr "memory" "load")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
579 "glm-fec-any+glm-load,nothing")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
580
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
581 (define_insn_reservation "glm_ssemov_store" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
582 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
583 (and (eq_attr "type" "ssemov")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
584 (eq_attr "memory" "store")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
585 "glm-fec-any+glm-store")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
586
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
587 ;; no memory simple
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
588 (define_insn_reservation "glm_sseadd" 3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
589 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
590 (and (eq_attr "type" "sseadd")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
591 (eq_attr "memory" "none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
592 "glm-fadd-3c")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
593
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
594 ;; memory simple
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
595 (define_insn_reservation "glm_sseadd_mem" 3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
596 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
597 (and (eq_attr "type" "sseadd")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
598 (eq_attr "memory" "!none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
599 "glm-fadd-3c-mem")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
600
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
601 ;; Except dppd/dpps
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
602 (define_insn_reservation "glm_ssemul" 4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
603 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
604 (and (eq_attr "type" "ssemul")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
605 (eq_attr "memory" "none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
606 "glm-fmul-4c")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
607
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
608 (define_insn_reservation "glm_ssemul_mem" 4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
609 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
610 (and (eq_attr "type" "ssemul")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
611 (eq_attr "memory" "!none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
612 "glm-fmul-4c-mem")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
613
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
614 (define_insn_reservation "glm_ssecmp" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
615 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
616 (eq_attr "type" "ssecmp"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
617 "glm-fec-any")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
618
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
619 (define_insn_reservation "glm_ssecomi" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
620 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
621 (eq_attr "type" "ssecomi"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
622 "glm-fp-0")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
623
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
624 ;; no memory and cvtpi2ps, cvtps2pi, cvttps2pi
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
625 (define_insn_reservation "glm_ssecvt" 4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
626 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
627 (and (eq_attr "type" "ssecvt")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
628 (ior (and (match_operand:V2SI 0 "register_operand")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
629 (match_operand:V4SF 1 "register_operand"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
630 (and (match_operand:V4SF 0 "register_operand")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
631 (match_operand:V2SI 1 "register_operand")))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
632 "glm-fp-0, nothing*3")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
633
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
634 ;; memory and cvtpi2ps, cvtps2pi, cvttps2pi
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
635 (define_insn_reservation "glm_ssecvt_mem" 4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
636 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
637 (and (eq_attr "type" "ssecvt")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
638 (ior (and (match_operand:V2SI 0 "register_operand")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
639 (match_operand:V4SF 1 "memory_operand"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
640 (and (match_operand:V4SF 0 "register_operand")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
641 (match_operand:V2SI 1 "memory_operand")))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
642 "glm-fp-0+glm-load, nothing*3")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
643
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
644 ;; memory and cvtsi2sd
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
645 (define_insn_reservation "glm_sseicvt" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
646 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
647 (and (eq_attr "type" "sseicvt")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
648 (and (match_operand:V2DF 0 "register_operand")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
649 (match_operand:SI 1 "nonimmediate_operand"))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
650 "glm-fp-0")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
651
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
652 ;; otherwise. 8 cycles average for cvtsd2si
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
653 (define_insn_reservation "glm_sseicvt_2" 4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
654 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
655 (and (eq_attr "type" "sseicvt")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
656 (not (and (match_operand:V2DF 0 "register_operand")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
657 (match_operand:SI 1 "memory_operand")))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
658 "glm-fp-0, nothing*3")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
659
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
660 (define_insn_reservation "glm_ssediv" 13
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
661 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
662 (eq_attr "type" "ssediv"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
663 "glm-fec-all*12, nothing")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
664
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
665 ;; simple for fmov
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
666 (define_insn_reservation "glm_fmov" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
667 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
668 (and (eq_attr "type" "fmov")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
669 (eq_attr "memory" "none")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
670 "glm-fec-any")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
671
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
672 ;; simple for fmov
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
673 (define_insn_reservation "glm_fmov_load" 3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
674 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
675 (and (eq_attr "type" "fmov")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
676 (eq_attr "memory" "load")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
677 "glm-fec-any+glm-load, nothing*2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
678
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
679 (define_insn_reservation "glm_fmov_store" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
680 (and (eq_attr "cpu" "glm")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
681 (and (eq_attr "type" "fmov")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
682 (eq_attr "memory" "store")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
683 "glm-fec-any+glm-store")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
684
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
685 ;; Define bypass here
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
686
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
687 ;; There will be 0 cycle stall from cmp/test to jcc
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
688
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
689 ;; There will be 1 cycle stall from flag producer to cmov and adc/sbb
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
690 (define_bypass 2 "glm_icmp, glm_test, glm_alu, glm_alu_carry,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
691 glm_alu1, glm_negnot, glm_incdec, glm_ishift,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
692 glm_ishift1, glm_rotate"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
693 "glm_icmov, glm_alu_carry")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
694
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
695 ;; lea to shift source stall is 1 cycle
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
696 (define_bypass 2 "glm_lea"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
697 "glm_ishift, glm_ishift1, glm_rotate"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
698 "!ix86_dep_by_shift_count")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
699
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
700 ;; non-lea to shift count stall is 1 cycle
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
701 (define_bypass 2 "glm_alu_carry,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
702 glm_alu,glm_alu1,glm_negnot,glm_imov,glm_imovx,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
703 glm_incdec,glm_ishift,glm_ishift1,glm_rotate,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
704 glm_setcc, glm_icmov, glm_pop, glm_imov_store,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
705 glm_alu_mem, glm_alu_carry_mem, glm_alu1_mem,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
706 glm_alu_load, glm_imovx_mem, glm_imovx_2_mem,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
707 glm_imov_load, glm_icmov_mem, glm_fmov_load, glm_fmov_store"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
708 "glm_ishift, glm_ishift1, glm_rotate,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
709 glm_ishift_mem, glm_ishift1_mem,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
710 glm_rotate_mem"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
711 "ix86_dep_by_shift_count")