annotate src/share/vm/opto/vectornode.hpp @ 4710:41406797186b

7113012: G1: rename not-fully-young GCs as "mixed" Summary: Renamed partially-young GCs as mixed and fully-young GCs as young. Change all external output that includes those terms (GC log and GC ergo log) as well as any comments, fields, methods, etc. The changeset also includes very minor code tidying up (added some curly brackets). Reviewed-by: johnc, brutisso
author tonyp
date Fri, 16 Dec 2011 02:14:27 -0500
parents c7b60b601eb4
children 8c92982cbbc4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
2 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 196
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 196
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 196
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 */
a61af66fc99e Initial load
duke
parents:
diff changeset
23
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
24 #ifndef SHARE_VM_OPTO_VECTORNODE_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
25 #define SHARE_VM_OPTO_VECTORNODE_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
26
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
27 #include "opto/matcher.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
28 #include "opto/memnode.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
29 #include "opto/node.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
30 #include "opto/opcodes.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
31
0
a61af66fc99e Initial load
duke
parents:
diff changeset
32 //------------------------------VectorNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
33 // Vector Operation
a61af66fc99e Initial load
duke
parents:
diff changeset
34 class VectorNode : public Node {
2445
08eb13460b3a 7004535: Clone loop predicate during loop unswitch
kvn
parents: 1972
diff changeset
35 virtual uint size_of() const { return sizeof(*this); }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
36 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
37 uint _length; // vector length
a61af66fc99e Initial load
duke
parents:
diff changeset
38 virtual BasicType elt_basic_type() const = 0; // Vector element basic type
a61af66fc99e Initial load
duke
parents:
diff changeset
39
a61af66fc99e Initial load
duke
parents:
diff changeset
40 static const Type* vect_type(BasicType elt_bt, uint len);
a61af66fc99e Initial load
duke
parents:
diff changeset
41 static const Type* vect_type(const Type* elt_type, uint len) {
a61af66fc99e Initial load
duke
parents:
diff changeset
42 return vect_type(elt_type->array_element_basic_type(), len);
a61af66fc99e Initial load
duke
parents:
diff changeset
43 }
a61af66fc99e Initial load
duke
parents:
diff changeset
44
a61af66fc99e Initial load
duke
parents:
diff changeset
45 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
46 friend class VectorLoadNode; // For vect_type
a61af66fc99e Initial load
duke
parents:
diff changeset
47 friend class VectorStoreNode; // ditto.
a61af66fc99e Initial load
duke
parents:
diff changeset
48
a61af66fc99e Initial load
duke
parents:
diff changeset
49 VectorNode(Node* n1, uint vlen) : Node(NULL, n1), _length(vlen) {
3842
c7b60b601eb4 7069452: Cleanup NodeFlags
kvn
parents: 2445
diff changeset
50 init_class_id(Class_Vector);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
51 }
a61af66fc99e Initial load
duke
parents:
diff changeset
52 VectorNode(Node* n1, Node* n2, uint vlen) : Node(NULL, n1, n2), _length(vlen) {
3842
c7b60b601eb4 7069452: Cleanup NodeFlags
kvn
parents: 2445
diff changeset
53 init_class_id(Class_Vector);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
54 }
a61af66fc99e Initial load
duke
parents:
diff changeset
55 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
56
a61af66fc99e Initial load
duke
parents:
diff changeset
57 uint length() const { return _length; } // Vector length
a61af66fc99e Initial load
duke
parents:
diff changeset
58
a61af66fc99e Initial load
duke
parents:
diff changeset
59 static uint max_vlen(BasicType bt) { // max vector length
29
d5fc211aea19 6633953: type2aelembytes{T_ADDRESS} should be 8 bytes in 64 bit VM
kvn
parents: 0
diff changeset
60 return (uint)(Matcher::vector_width_in_bytes() / type2aelembytes(bt));
0
a61af66fc99e Initial load
duke
parents:
diff changeset
61 }
a61af66fc99e Initial load
duke
parents:
diff changeset
62
a61af66fc99e Initial load
duke
parents:
diff changeset
63 // Element and vector type
a61af66fc99e Initial load
duke
parents:
diff changeset
64 const Type* elt_type() const { return Type::get_const_basic_type(elt_basic_type()); }
a61af66fc99e Initial load
duke
parents:
diff changeset
65 const Type* vect_type() const { return vect_type(elt_basic_type(), length()); }
a61af66fc99e Initial load
duke
parents:
diff changeset
66
a61af66fc99e Initial load
duke
parents:
diff changeset
67 virtual const Type *bottom_type() const { return vect_type(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
68 virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
69
a61af66fc99e Initial load
duke
parents:
diff changeset
70 // Vector opcode from scalar opcode
a61af66fc99e Initial load
duke
parents:
diff changeset
71 static int opcode(int sopc, uint vlen, const Type* opd_t);
a61af66fc99e Initial load
duke
parents:
diff changeset
72
a61af66fc99e Initial load
duke
parents:
diff changeset
73 static VectorNode* scalar2vector(Compile* C, Node* s, uint vlen, const Type* opd_t);
a61af66fc99e Initial load
duke
parents:
diff changeset
74
a61af66fc99e Initial load
duke
parents:
diff changeset
75 static VectorNode* make(Compile* C, int sopc, Node* n1, Node* n2, uint vlen, const Type* elt_t);
a61af66fc99e Initial load
duke
parents:
diff changeset
76
a61af66fc99e Initial load
duke
parents:
diff changeset
77 };
a61af66fc99e Initial load
duke
parents:
diff changeset
78
a61af66fc99e Initial load
duke
parents:
diff changeset
79 //===========================Vector=ALU=Operations====================================
a61af66fc99e Initial load
duke
parents:
diff changeset
80
a61af66fc99e Initial load
duke
parents:
diff changeset
81 //------------------------------AddVBNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
82 // Vector add byte
a61af66fc99e Initial load
duke
parents:
diff changeset
83 class AddVBNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
84 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
85 virtual BasicType elt_basic_type() const { return T_BYTE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
86 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
87 AddVBNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
88 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
89 };
a61af66fc99e Initial load
duke
parents:
diff changeset
90
a61af66fc99e Initial load
duke
parents:
diff changeset
91 //------------------------------AddVCNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
92 // Vector add char
a61af66fc99e Initial load
duke
parents:
diff changeset
93 class AddVCNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
94 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
95 virtual BasicType elt_basic_type() const { return T_CHAR; }
a61af66fc99e Initial load
duke
parents:
diff changeset
96 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
97 AddVCNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
98 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
99 };
a61af66fc99e Initial load
duke
parents:
diff changeset
100
a61af66fc99e Initial load
duke
parents:
diff changeset
101 //------------------------------AddVSNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
102 // Vector add short
a61af66fc99e Initial load
duke
parents:
diff changeset
103 class AddVSNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
104 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
105 virtual BasicType elt_basic_type() const { return T_SHORT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
106 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
107 AddVSNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
108 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
109 };
a61af66fc99e Initial load
duke
parents:
diff changeset
110
a61af66fc99e Initial load
duke
parents:
diff changeset
111 //------------------------------AddVINode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
112 // Vector add int
a61af66fc99e Initial load
duke
parents:
diff changeset
113 class AddVINode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
114 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
115 virtual BasicType elt_basic_type() const { return T_INT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
116 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
117 AddVINode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
118 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
119 };
a61af66fc99e Initial load
duke
parents:
diff changeset
120
a61af66fc99e Initial load
duke
parents:
diff changeset
121 //------------------------------AddVLNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
122 // Vector add long
a61af66fc99e Initial load
duke
parents:
diff changeset
123 class AddVLNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
124 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
125 virtual BasicType elt_basic_type() const { return T_LONG; }
a61af66fc99e Initial load
duke
parents:
diff changeset
126 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
127 AddVLNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
128 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
129 };
a61af66fc99e Initial load
duke
parents:
diff changeset
130
a61af66fc99e Initial load
duke
parents:
diff changeset
131 //------------------------------AddVFNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
132 // Vector add float
a61af66fc99e Initial load
duke
parents:
diff changeset
133 class AddVFNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
134 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
135 virtual BasicType elt_basic_type() const { return T_FLOAT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
136 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
137 AddVFNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
138 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
139 };
a61af66fc99e Initial load
duke
parents:
diff changeset
140
a61af66fc99e Initial load
duke
parents:
diff changeset
141 //------------------------------AddVDNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
142 // Vector add double
a61af66fc99e Initial load
duke
parents:
diff changeset
143 class AddVDNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
144 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
145 virtual BasicType elt_basic_type() const { return T_DOUBLE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
146 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
147 AddVDNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
148 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
149 };
a61af66fc99e Initial load
duke
parents:
diff changeset
150
a61af66fc99e Initial load
duke
parents:
diff changeset
151 //------------------------------SubVBNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
152 // Vector subtract byte
a61af66fc99e Initial load
duke
parents:
diff changeset
153 class SubVBNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
154 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
155 virtual BasicType elt_basic_type() const { return T_BYTE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
156 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
157 SubVBNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
158 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
159 };
a61af66fc99e Initial load
duke
parents:
diff changeset
160
a61af66fc99e Initial load
duke
parents:
diff changeset
161 //------------------------------SubVCNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
162 // Vector subtract char
a61af66fc99e Initial load
duke
parents:
diff changeset
163 class SubVCNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
164 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
165 virtual BasicType elt_basic_type() const { return T_CHAR; }
a61af66fc99e Initial load
duke
parents:
diff changeset
166 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
167 SubVCNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
168 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
169 };
a61af66fc99e Initial load
duke
parents:
diff changeset
170
a61af66fc99e Initial load
duke
parents:
diff changeset
171 //------------------------------SubVSNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
172 // Vector subtract short
a61af66fc99e Initial load
duke
parents:
diff changeset
173 class SubVSNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
174 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
175 virtual BasicType elt_basic_type() const { return T_SHORT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
176 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
177 SubVSNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
178 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
179 };
a61af66fc99e Initial load
duke
parents:
diff changeset
180
a61af66fc99e Initial load
duke
parents:
diff changeset
181 //------------------------------SubVINode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
182 // Vector subtract int
a61af66fc99e Initial load
duke
parents:
diff changeset
183 class SubVINode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
184 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
185 virtual BasicType elt_basic_type() const { return T_INT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
186 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
187 SubVINode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
188 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
189 };
a61af66fc99e Initial load
duke
parents:
diff changeset
190
a61af66fc99e Initial load
duke
parents:
diff changeset
191 //------------------------------SubVLNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
192 // Vector subtract long
a61af66fc99e Initial load
duke
parents:
diff changeset
193 class SubVLNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
194 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
195 virtual BasicType elt_basic_type() const { return T_LONG; }
a61af66fc99e Initial load
duke
parents:
diff changeset
196 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
197 SubVLNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
198 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
199 };
a61af66fc99e Initial load
duke
parents:
diff changeset
200
a61af66fc99e Initial load
duke
parents:
diff changeset
201 //------------------------------SubVFNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
202 // Vector subtract float
a61af66fc99e Initial load
duke
parents:
diff changeset
203 class SubVFNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
204 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
205 virtual BasicType elt_basic_type() const { return T_FLOAT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
206 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
207 SubVFNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
208 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
209 };
a61af66fc99e Initial load
duke
parents:
diff changeset
210
a61af66fc99e Initial load
duke
parents:
diff changeset
211 //------------------------------SubVDNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
212 // Vector subtract double
a61af66fc99e Initial load
duke
parents:
diff changeset
213 class SubVDNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
214 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
215 virtual BasicType elt_basic_type() const { return T_DOUBLE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
216 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
217 SubVDNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
218 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
219 };
a61af66fc99e Initial load
duke
parents:
diff changeset
220
a61af66fc99e Initial load
duke
parents:
diff changeset
221 //------------------------------MulVFNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
222 // Vector multiply float
a61af66fc99e Initial load
duke
parents:
diff changeset
223 class MulVFNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
224 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
225 virtual BasicType elt_basic_type() const { return T_FLOAT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
226 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
227 MulVFNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
228 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
229 };
a61af66fc99e Initial load
duke
parents:
diff changeset
230
a61af66fc99e Initial load
duke
parents:
diff changeset
231 //------------------------------MulVDNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
232 // Vector multiply double
a61af66fc99e Initial load
duke
parents:
diff changeset
233 class MulVDNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
234 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
235 virtual BasicType elt_basic_type() const { return T_DOUBLE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
236 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
237 MulVDNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
238 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
239 };
a61af66fc99e Initial load
duke
parents:
diff changeset
240
a61af66fc99e Initial load
duke
parents:
diff changeset
241 //------------------------------DivVFNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
242 // Vector divide float
a61af66fc99e Initial load
duke
parents:
diff changeset
243 class DivVFNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
244 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
245 virtual BasicType elt_basic_type() const { return T_FLOAT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
246 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
247 DivVFNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
248 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
249 };
a61af66fc99e Initial load
duke
parents:
diff changeset
250
a61af66fc99e Initial load
duke
parents:
diff changeset
251 //------------------------------DivVDNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
252 // Vector Divide double
a61af66fc99e Initial load
duke
parents:
diff changeset
253 class DivVDNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
254 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
255 virtual BasicType elt_basic_type() const { return T_DOUBLE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
256 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
257 DivVDNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
258 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
259 };
a61af66fc99e Initial load
duke
parents:
diff changeset
260
a61af66fc99e Initial load
duke
parents:
diff changeset
261 //------------------------------LShiftVBNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
262 // Vector lshift byte
a61af66fc99e Initial load
duke
parents:
diff changeset
263 class LShiftVBNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
264 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
265 virtual BasicType elt_basic_type() const { return T_BYTE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
266 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
267 LShiftVBNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
268 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
269 };
a61af66fc99e Initial load
duke
parents:
diff changeset
270
a61af66fc99e Initial load
duke
parents:
diff changeset
271 //------------------------------LShiftVCNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
272 // Vector lshift chars
a61af66fc99e Initial load
duke
parents:
diff changeset
273 class LShiftVCNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
274 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
275 virtual BasicType elt_basic_type() const { return T_CHAR; }
a61af66fc99e Initial load
duke
parents:
diff changeset
276 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
277 LShiftVCNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
278 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
279 };
a61af66fc99e Initial load
duke
parents:
diff changeset
280
a61af66fc99e Initial load
duke
parents:
diff changeset
281 //------------------------------LShiftVSNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
282 // Vector lshift shorts
a61af66fc99e Initial load
duke
parents:
diff changeset
283 class LShiftVSNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
284 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
285 virtual BasicType elt_basic_type() const { return T_SHORT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
286 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
287 LShiftVSNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
288 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
289 };
a61af66fc99e Initial load
duke
parents:
diff changeset
290
a61af66fc99e Initial load
duke
parents:
diff changeset
291 //------------------------------LShiftVINode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
292 // Vector lshift ints
a61af66fc99e Initial load
duke
parents:
diff changeset
293 class LShiftVINode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
294 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
295 virtual BasicType elt_basic_type() const { return T_INT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
296 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
297 LShiftVINode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
298 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
299 };
a61af66fc99e Initial load
duke
parents:
diff changeset
300
a61af66fc99e Initial load
duke
parents:
diff changeset
301 //------------------------------URShiftVBNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
302 // Vector urshift bytes
a61af66fc99e Initial load
duke
parents:
diff changeset
303 class URShiftVBNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
304 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
305 virtual BasicType elt_basic_type() const { return T_BYTE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
306 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
307 URShiftVBNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
308 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
309 };
a61af66fc99e Initial load
duke
parents:
diff changeset
310
a61af66fc99e Initial load
duke
parents:
diff changeset
311 //------------------------------URShiftVCNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
312 // Vector urshift char
a61af66fc99e Initial load
duke
parents:
diff changeset
313 class URShiftVCNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
314 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
315 virtual BasicType elt_basic_type() const { return T_SHORT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
316 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
317 URShiftVCNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
318 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
319 };
a61af66fc99e Initial load
duke
parents:
diff changeset
320
a61af66fc99e Initial load
duke
parents:
diff changeset
321 //------------------------------URShiftVSNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
322 // Vector urshift shorts
a61af66fc99e Initial load
duke
parents:
diff changeset
323 class URShiftVSNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
324 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
325 virtual BasicType elt_basic_type() const { return T_SHORT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
326 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
327 URShiftVSNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
328 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
329 };
a61af66fc99e Initial load
duke
parents:
diff changeset
330
a61af66fc99e Initial load
duke
parents:
diff changeset
331 //------------------------------URShiftVINode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
332 // Vector urshift ints
a61af66fc99e Initial load
duke
parents:
diff changeset
333 class URShiftVINode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
334 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
335 virtual BasicType elt_basic_type() const { return T_INT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
336 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
337 URShiftVINode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
338 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
339 };
a61af66fc99e Initial load
duke
parents:
diff changeset
340
a61af66fc99e Initial load
duke
parents:
diff changeset
341 //------------------------------AndVNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
342 // Vector and
a61af66fc99e Initial load
duke
parents:
diff changeset
343 class AndVNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
344 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
345 BasicType _bt;
a61af66fc99e Initial load
duke
parents:
diff changeset
346 virtual BasicType elt_basic_type() const { return _bt; }
a61af66fc99e Initial load
duke
parents:
diff changeset
347 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
348 AndVNode(Node* in1, Node* in2, uint vlen, BasicType bt) : VectorNode(in1,in2,vlen), _bt(bt) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
349 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
350 };
a61af66fc99e Initial load
duke
parents:
diff changeset
351
a61af66fc99e Initial load
duke
parents:
diff changeset
352 //------------------------------OrVNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
353 // Vector or
a61af66fc99e Initial load
duke
parents:
diff changeset
354 class OrVNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
355 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
356 BasicType _bt;
a61af66fc99e Initial load
duke
parents:
diff changeset
357 virtual BasicType elt_basic_type() const { return _bt; }
a61af66fc99e Initial load
duke
parents:
diff changeset
358 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
359 OrVNode(Node* in1, Node* in2, uint vlen, BasicType bt) : VectorNode(in1,in2,vlen), _bt(bt) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
360 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
361 };
a61af66fc99e Initial load
duke
parents:
diff changeset
362
a61af66fc99e Initial load
duke
parents:
diff changeset
363 //------------------------------XorVNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
364 // Vector xor
a61af66fc99e Initial load
duke
parents:
diff changeset
365 class XorVNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
366 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
367 BasicType _bt;
a61af66fc99e Initial load
duke
parents:
diff changeset
368 virtual BasicType elt_basic_type() const { return _bt; }
a61af66fc99e Initial load
duke
parents:
diff changeset
369 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
370 XorVNode(Node* in1, Node* in2, uint vlen, BasicType bt) : VectorNode(in1,in2,vlen), _bt(bt) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
371 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
372 };
a61af66fc99e Initial load
duke
parents:
diff changeset
373
a61af66fc99e Initial load
duke
parents:
diff changeset
374 //================================= M E M O R Y ==================================
a61af66fc99e Initial load
duke
parents:
diff changeset
375
a61af66fc99e Initial load
duke
parents:
diff changeset
376
a61af66fc99e Initial load
duke
parents:
diff changeset
377 //------------------------------VectorLoadNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
378 // Vector Load from memory
a61af66fc99e Initial load
duke
parents:
diff changeset
379 class VectorLoadNode : public LoadNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
380 virtual uint size_of() const { return sizeof(*this); }
a61af66fc99e Initial load
duke
parents:
diff changeset
381
a61af66fc99e Initial load
duke
parents:
diff changeset
382 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
383 virtual BasicType elt_basic_type() const = 0; // Vector element basic type
a61af66fc99e Initial load
duke
parents:
diff changeset
384 // For use in constructor
a61af66fc99e Initial load
duke
parents:
diff changeset
385 static const Type* vect_type(const Type* elt_type, uint len) {
a61af66fc99e Initial load
duke
parents:
diff changeset
386 return VectorNode::vect_type(elt_type, len);
a61af66fc99e Initial load
duke
parents:
diff changeset
387 }
a61af66fc99e Initial load
duke
parents:
diff changeset
388
a61af66fc99e Initial load
duke
parents:
diff changeset
389 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
390 VectorLoadNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const Type *rt)
a61af66fc99e Initial load
duke
parents:
diff changeset
391 : LoadNode(c,mem,adr,at,rt) {
3842
c7b60b601eb4 7069452: Cleanup NodeFlags
kvn
parents: 2445
diff changeset
392 init_class_id(Class_VectorLoad);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
393 }
a61af66fc99e Initial load
duke
parents:
diff changeset
394 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
395
a61af66fc99e Initial load
duke
parents:
diff changeset
396 virtual uint length() const = 0; // Vector length
a61af66fc99e Initial load
duke
parents:
diff changeset
397
a61af66fc99e Initial load
duke
parents:
diff changeset
398 // Element and vector type
a61af66fc99e Initial load
duke
parents:
diff changeset
399 const Type* elt_type() const { return Type::get_const_basic_type(elt_basic_type()); }
a61af66fc99e Initial load
duke
parents:
diff changeset
400 const Type* vect_type() const { return VectorNode::vect_type(elt_basic_type(), length()); }
a61af66fc99e Initial load
duke
parents:
diff changeset
401
a61af66fc99e Initial load
duke
parents:
diff changeset
402 virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
403 virtual BasicType memory_type() const { return T_VOID; }
29
d5fc211aea19 6633953: type2aelembytes{T_ADDRESS} should be 8 bytes in 64 bit VM
kvn
parents: 0
diff changeset
404 virtual int memory_size() const { return length()*type2aelembytes(elt_basic_type()); }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
405
a61af66fc99e Initial load
duke
parents:
diff changeset
406 // Vector opcode from scalar opcode
a61af66fc99e Initial load
duke
parents:
diff changeset
407 static int opcode(int sopc, uint vlen);
a61af66fc99e Initial load
duke
parents:
diff changeset
408
a61af66fc99e Initial load
duke
parents:
diff changeset
409 static VectorLoadNode* make(Compile* C, int opc, Node* ctl, Node* mem,
a61af66fc99e Initial load
duke
parents:
diff changeset
410 Node* adr, const TypePtr* atyp, uint vlen);
a61af66fc99e Initial load
duke
parents:
diff changeset
411 };
a61af66fc99e Initial load
duke
parents:
diff changeset
412
a61af66fc99e Initial load
duke
parents:
diff changeset
413 //------------------------------Load16BNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
414 // Vector load of 16 bytes (8bits signed) from memory
a61af66fc99e Initial load
duke
parents:
diff changeset
415 class Load16BNode : public VectorLoadNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
416 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
417 virtual BasicType elt_basic_type() const { return T_BYTE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
418 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
419 Load16BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::BYTE)
a61af66fc99e Initial load
duke
parents:
diff changeset
420 : VectorLoadNode(c,mem,adr,at,vect_type(ti,16)) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
421 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
422 virtual int store_Opcode() const { return Op_Store16B; }
a61af66fc99e Initial load
duke
parents:
diff changeset
423 virtual uint length() const { return 16; }
a61af66fc99e Initial load
duke
parents:
diff changeset
424 };
a61af66fc99e Initial load
duke
parents:
diff changeset
425
a61af66fc99e Initial load
duke
parents:
diff changeset
426 //------------------------------Load8BNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
427 // Vector load of 8 bytes (8bits signed) from memory
a61af66fc99e Initial load
duke
parents:
diff changeset
428 class Load8BNode : public VectorLoadNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
429 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
430 virtual BasicType elt_basic_type() const { return T_BYTE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
431 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
432 Load8BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::BYTE)
a61af66fc99e Initial load
duke
parents:
diff changeset
433 : VectorLoadNode(c,mem,adr,at,vect_type(ti,8)) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
434 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
435 virtual int store_Opcode() const { return Op_Store8B; }
a61af66fc99e Initial load
duke
parents:
diff changeset
436 virtual uint length() const { return 8; }
a61af66fc99e Initial load
duke
parents:
diff changeset
437 };
a61af66fc99e Initial load
duke
parents:
diff changeset
438
a61af66fc99e Initial load
duke
parents:
diff changeset
439 //------------------------------Load4BNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
440 // Vector load of 4 bytes (8bits signed) from memory
a61af66fc99e Initial load
duke
parents:
diff changeset
441 class Load4BNode : public VectorLoadNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
442 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
443 virtual BasicType elt_basic_type() const { return T_BYTE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
444 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
445 Load4BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::BYTE)
a61af66fc99e Initial load
duke
parents:
diff changeset
446 : VectorLoadNode(c,mem,adr,at,vect_type(ti,4)) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
447 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
448 virtual int store_Opcode() const { return Op_Store4B; }
a61af66fc99e Initial load
duke
parents:
diff changeset
449 virtual uint length() const { return 4; }
a61af66fc99e Initial load
duke
parents:
diff changeset
450 };
a61af66fc99e Initial load
duke
parents:
diff changeset
451
a61af66fc99e Initial load
duke
parents:
diff changeset
452 //------------------------------Load8CNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
453 // Vector load of 8 chars (16bits unsigned) from memory
a61af66fc99e Initial load
duke
parents:
diff changeset
454 class Load8CNode : public VectorLoadNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
455 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
456 virtual BasicType elt_basic_type() const { return T_CHAR; }
a61af66fc99e Initial load
duke
parents:
diff changeset
457 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
458 Load8CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::CHAR)
a61af66fc99e Initial load
duke
parents:
diff changeset
459 : VectorLoadNode(c,mem,adr,at,vect_type(ti,8)) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
460 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
461 virtual int store_Opcode() const { return Op_Store8C; }
a61af66fc99e Initial load
duke
parents:
diff changeset
462 virtual uint length() const { return 8; }
a61af66fc99e Initial load
duke
parents:
diff changeset
463 };
a61af66fc99e Initial load
duke
parents:
diff changeset
464
a61af66fc99e Initial load
duke
parents:
diff changeset
465 //------------------------------Load4CNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
466 // Vector load of 4 chars (16bits unsigned) from memory
a61af66fc99e Initial load
duke
parents:
diff changeset
467 class Load4CNode : public VectorLoadNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
468 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
469 virtual BasicType elt_basic_type() const { return T_CHAR; }
a61af66fc99e Initial load
duke
parents:
diff changeset
470 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
471 Load4CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::CHAR)
a61af66fc99e Initial load
duke
parents:
diff changeset
472 : VectorLoadNode(c,mem,adr,at,vect_type(ti,4)) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
473 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
474 virtual int store_Opcode() const { return Op_Store4C; }
a61af66fc99e Initial load
duke
parents:
diff changeset
475 virtual uint length() const { return 4; }
a61af66fc99e Initial load
duke
parents:
diff changeset
476 };
a61af66fc99e Initial load
duke
parents:
diff changeset
477
a61af66fc99e Initial load
duke
parents:
diff changeset
478 //------------------------------Load2CNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
479 // Vector load of 2 chars (16bits unsigned) from memory
a61af66fc99e Initial load
duke
parents:
diff changeset
480 class Load2CNode : public VectorLoadNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
481 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
482 virtual BasicType elt_basic_type() const { return T_CHAR; }
a61af66fc99e Initial load
duke
parents:
diff changeset
483 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
484 Load2CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::CHAR)
a61af66fc99e Initial load
duke
parents:
diff changeset
485 : VectorLoadNode(c,mem,adr,at,vect_type(ti,2)) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
486 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
487 virtual int store_Opcode() const { return Op_Store2C; }
a61af66fc99e Initial load
duke
parents:
diff changeset
488 virtual uint length() const { return 2; }
a61af66fc99e Initial load
duke
parents:
diff changeset
489 };
a61af66fc99e Initial load
duke
parents:
diff changeset
490
a61af66fc99e Initial load
duke
parents:
diff changeset
491 //------------------------------Load8SNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
492 // Vector load of 8 shorts (16bits signed) from memory
a61af66fc99e Initial load
duke
parents:
diff changeset
493 class Load8SNode : public VectorLoadNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
494 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
495 virtual BasicType elt_basic_type() const { return T_SHORT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
496 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
497 Load8SNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::SHORT)
a61af66fc99e Initial load
duke
parents:
diff changeset
498 : VectorLoadNode(c,mem,adr,at,vect_type(ti,8)) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
499 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
500 virtual int store_Opcode() const { return Op_Store8C; }
a61af66fc99e Initial load
duke
parents:
diff changeset
501 virtual uint length() const { return 8; }
a61af66fc99e Initial load
duke
parents:
diff changeset
502 };
a61af66fc99e Initial load
duke
parents:
diff changeset
503
a61af66fc99e Initial load
duke
parents:
diff changeset
504 //------------------------------Load4SNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
505 // Vector load of 4 shorts (16bits signed) from memory
a61af66fc99e Initial load
duke
parents:
diff changeset
506 class Load4SNode : public VectorLoadNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
507 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
508 virtual BasicType elt_basic_type() const { return T_SHORT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
509 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
510 Load4SNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::SHORT)
a61af66fc99e Initial load
duke
parents:
diff changeset
511 : VectorLoadNode(c,mem,adr,at,vect_type(ti,4)) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
512 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
513 virtual int store_Opcode() const { return Op_Store4C; }
a61af66fc99e Initial load
duke
parents:
diff changeset
514 virtual uint length() const { return 4; }
a61af66fc99e Initial load
duke
parents:
diff changeset
515 };
a61af66fc99e Initial load
duke
parents:
diff changeset
516
a61af66fc99e Initial load
duke
parents:
diff changeset
517 //------------------------------Load2SNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
518 // Vector load of 2 shorts (16bits signed) from memory
a61af66fc99e Initial load
duke
parents:
diff changeset
519 class Load2SNode : public VectorLoadNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
520 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
521 virtual BasicType elt_basic_type() const { return T_SHORT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
522 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
523 Load2SNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::SHORT)
a61af66fc99e Initial load
duke
parents:
diff changeset
524 : VectorLoadNode(c,mem,adr,at,vect_type(ti,2)) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
525 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
526 virtual int store_Opcode() const { return Op_Store2C; }
a61af66fc99e Initial load
duke
parents:
diff changeset
527 virtual uint length() const { return 2; }
a61af66fc99e Initial load
duke
parents:
diff changeset
528 };
a61af66fc99e Initial load
duke
parents:
diff changeset
529
a61af66fc99e Initial load
duke
parents:
diff changeset
530 //------------------------------Load4INode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
531 // Vector load of 4 integers (32bits signed) from memory
a61af66fc99e Initial load
duke
parents:
diff changeset
532 class Load4INode : public VectorLoadNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
533 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
534 virtual BasicType elt_basic_type() const { return T_INT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
535 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
536 Load4INode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::INT)
a61af66fc99e Initial load
duke
parents:
diff changeset
537 : VectorLoadNode(c,mem,adr,at,vect_type(ti,4)) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
538 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
539 virtual int store_Opcode() const { return Op_Store4I; }
a61af66fc99e Initial load
duke
parents:
diff changeset
540 virtual uint length() const { return 4; }
a61af66fc99e Initial load
duke
parents:
diff changeset
541 };
a61af66fc99e Initial load
duke
parents:
diff changeset
542
a61af66fc99e Initial load
duke
parents:
diff changeset
543 //------------------------------Load2INode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
544 // Vector load of 2 integers (32bits signed) from memory
a61af66fc99e Initial load
duke
parents:
diff changeset
545 class Load2INode : public VectorLoadNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
546 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
547 virtual BasicType elt_basic_type() const { return T_INT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
548 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
549 Load2INode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::INT)
a61af66fc99e Initial load
duke
parents:
diff changeset
550 : VectorLoadNode(c,mem,adr,at,vect_type(ti,2)) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
551 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
552 virtual int store_Opcode() const { return Op_Store2I; }
a61af66fc99e Initial load
duke
parents:
diff changeset
553 virtual uint length() const { return 2; }
a61af66fc99e Initial load
duke
parents:
diff changeset
554 };
a61af66fc99e Initial load
duke
parents:
diff changeset
555
a61af66fc99e Initial load
duke
parents:
diff changeset
556 //------------------------------Load2LNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
557 // Vector load of 2 longs (64bits signed) from memory
a61af66fc99e Initial load
duke
parents:
diff changeset
558 class Load2LNode : public VectorLoadNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
559 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
560 virtual BasicType elt_basic_type() const { return T_LONG; }
a61af66fc99e Initial load
duke
parents:
diff changeset
561 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
562 Load2LNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeLong *tl = TypeLong::LONG)
a61af66fc99e Initial load
duke
parents:
diff changeset
563 : VectorLoadNode(c,mem,adr,at,vect_type(tl,2)) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
564 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
565 virtual int store_Opcode() const { return Op_Store2L; }
a61af66fc99e Initial load
duke
parents:
diff changeset
566 virtual uint length() const { return 2; }
a61af66fc99e Initial load
duke
parents:
diff changeset
567 };
a61af66fc99e Initial load
duke
parents:
diff changeset
568
a61af66fc99e Initial load
duke
parents:
diff changeset
569 //------------------------------Load4FNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
570 // Vector load of 4 floats (32bits) from memory
a61af66fc99e Initial load
duke
parents:
diff changeset
571 class Load4FNode : public VectorLoadNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
572 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
573 virtual BasicType elt_basic_type() const { return T_FLOAT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
574 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
575 Load4FNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const Type *t = Type::FLOAT)
a61af66fc99e Initial load
duke
parents:
diff changeset
576 : VectorLoadNode(c,mem,adr,at,vect_type(t,4)) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
577 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
578 virtual int store_Opcode() const { return Op_Store4F; }
a61af66fc99e Initial load
duke
parents:
diff changeset
579 virtual uint length() const { return 4; }
a61af66fc99e Initial load
duke
parents:
diff changeset
580 };
a61af66fc99e Initial load
duke
parents:
diff changeset
581
a61af66fc99e Initial load
duke
parents:
diff changeset
582 //------------------------------Load2FNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
583 // Vector load of 2 floats (32bits) from memory
a61af66fc99e Initial load
duke
parents:
diff changeset
584 class Load2FNode : public VectorLoadNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
585 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
586 virtual BasicType elt_basic_type() const { return T_FLOAT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
587 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
588 Load2FNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const Type *t = Type::FLOAT)
a61af66fc99e Initial load
duke
parents:
diff changeset
589 : VectorLoadNode(c,mem,adr,at,vect_type(t,2)) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
590 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
591 virtual int store_Opcode() const { return Op_Store2F; }
a61af66fc99e Initial load
duke
parents:
diff changeset
592 virtual uint length() const { return 2; }
a61af66fc99e Initial load
duke
parents:
diff changeset
593 };
a61af66fc99e Initial load
duke
parents:
diff changeset
594
a61af66fc99e Initial load
duke
parents:
diff changeset
595 //------------------------------Load2DNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
596 // Vector load of 2 doubles (64bits) from memory
a61af66fc99e Initial load
duke
parents:
diff changeset
597 class Load2DNode : public VectorLoadNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
598 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
599 virtual BasicType elt_basic_type() const { return T_DOUBLE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
600 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
601 Load2DNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const Type *t = Type::DOUBLE)
a61af66fc99e Initial load
duke
parents:
diff changeset
602 : VectorLoadNode(c,mem,adr,at,vect_type(t,2)) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
603 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
604 virtual int store_Opcode() const { return Op_Store2D; }
a61af66fc99e Initial load
duke
parents:
diff changeset
605 virtual uint length() const { return 2; }
a61af66fc99e Initial load
duke
parents:
diff changeset
606 };
a61af66fc99e Initial load
duke
parents:
diff changeset
607
a61af66fc99e Initial load
duke
parents:
diff changeset
608
a61af66fc99e Initial load
duke
parents:
diff changeset
609 //------------------------------VectorStoreNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
610 // Vector Store to memory
a61af66fc99e Initial load
duke
parents:
diff changeset
611 class VectorStoreNode : public StoreNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
612 virtual uint size_of() const { return sizeof(*this); }
a61af66fc99e Initial load
duke
parents:
diff changeset
613
a61af66fc99e Initial load
duke
parents:
diff changeset
614 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
615 virtual BasicType elt_basic_type() const = 0; // Vector element basic type
a61af66fc99e Initial load
duke
parents:
diff changeset
616
a61af66fc99e Initial load
duke
parents:
diff changeset
617 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
618 VectorStoreNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val)
a61af66fc99e Initial load
duke
parents:
diff changeset
619 : StoreNode(c,mem,adr,at,val) {
3842
c7b60b601eb4 7069452: Cleanup NodeFlags
kvn
parents: 2445
diff changeset
620 init_class_id(Class_VectorStore);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
621 }
a61af66fc99e Initial load
duke
parents:
diff changeset
622 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
623
a61af66fc99e Initial load
duke
parents:
diff changeset
624 virtual uint length() const = 0; // Vector length
a61af66fc99e Initial load
duke
parents:
diff changeset
625
a61af66fc99e Initial load
duke
parents:
diff changeset
626 // Element and vector type
a61af66fc99e Initial load
duke
parents:
diff changeset
627 const Type* elt_type() const { return Type::get_const_basic_type(elt_basic_type()); }
a61af66fc99e Initial load
duke
parents:
diff changeset
628 const Type* vect_type() const { return VectorNode::vect_type(elt_basic_type(), length()); }
a61af66fc99e Initial load
duke
parents:
diff changeset
629
a61af66fc99e Initial load
duke
parents:
diff changeset
630 virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
631 virtual BasicType memory_type() const { return T_VOID; }
29
d5fc211aea19 6633953: type2aelembytes{T_ADDRESS} should be 8 bytes in 64 bit VM
kvn
parents: 0
diff changeset
632 virtual int memory_size() const { return length()*type2aelembytes(elt_basic_type()); }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
633
a61af66fc99e Initial load
duke
parents:
diff changeset
634 // Vector opcode from scalar opcode
a61af66fc99e Initial load
duke
parents:
diff changeset
635 static int opcode(int sopc, uint vlen);
a61af66fc99e Initial load
duke
parents:
diff changeset
636
a61af66fc99e Initial load
duke
parents:
diff changeset
637 static VectorStoreNode* make(Compile* C, int opc, Node* ctl, Node* mem,
3842
c7b60b601eb4 7069452: Cleanup NodeFlags
kvn
parents: 2445
diff changeset
638 Node* adr, const TypePtr* atyp, Node* val,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
639 uint vlen);
a61af66fc99e Initial load
duke
parents:
diff changeset
640 };
a61af66fc99e Initial load
duke
parents:
diff changeset
641
a61af66fc99e Initial load
duke
parents:
diff changeset
642 //------------------------------Store16BNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
643 // Vector store of 16 bytes (8bits signed) to memory
a61af66fc99e Initial load
duke
parents:
diff changeset
644 class Store16BNode : public VectorStoreNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
645 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
646 virtual BasicType elt_basic_type() const { return T_BYTE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
647 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
648 Store16BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val)
a61af66fc99e Initial load
duke
parents:
diff changeset
649 : VectorStoreNode(c,mem,adr,at,val) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
650 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
651 virtual uint length() const { return 16; }
a61af66fc99e Initial load
duke
parents:
diff changeset
652 };
a61af66fc99e Initial load
duke
parents:
diff changeset
653
a61af66fc99e Initial load
duke
parents:
diff changeset
654 //------------------------------Store8BNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
655 // Vector store of 8 bytes (8bits signed) to memory
a61af66fc99e Initial load
duke
parents:
diff changeset
656 class Store8BNode : public VectorStoreNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
657 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
658 virtual BasicType elt_basic_type() const { return T_BYTE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
659 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
660 Store8BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val)
a61af66fc99e Initial load
duke
parents:
diff changeset
661 : VectorStoreNode(c,mem,adr,at,val) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
662 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
663 virtual uint length() const { return 8; }
a61af66fc99e Initial load
duke
parents:
diff changeset
664 };
a61af66fc99e Initial load
duke
parents:
diff changeset
665
a61af66fc99e Initial load
duke
parents:
diff changeset
666 //------------------------------Store4BNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
667 // Vector store of 4 bytes (8bits signed) to memory
a61af66fc99e Initial load
duke
parents:
diff changeset
668 class Store4BNode : public VectorStoreNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
669 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
670 virtual BasicType elt_basic_type() const { return T_BYTE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
671 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
672 Store4BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val)
a61af66fc99e Initial load
duke
parents:
diff changeset
673 : VectorStoreNode(c,mem,adr,at,val) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
674 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
675 virtual uint length() const { return 4; }
a61af66fc99e Initial load
duke
parents:
diff changeset
676 };
a61af66fc99e Initial load
duke
parents:
diff changeset
677
a61af66fc99e Initial load
duke
parents:
diff changeset
678 //------------------------------Store8CNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
679 // Vector store of 8 chars (16bits signed/unsigned) to memory
a61af66fc99e Initial load
duke
parents:
diff changeset
680 class Store8CNode : public VectorStoreNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
681 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
682 virtual BasicType elt_basic_type() const { return T_CHAR; }
a61af66fc99e Initial load
duke
parents:
diff changeset
683 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
684 Store8CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val)
a61af66fc99e Initial load
duke
parents:
diff changeset
685 : VectorStoreNode(c,mem,adr,at,val) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
686 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
687 virtual uint length() const { return 8; }
a61af66fc99e Initial load
duke
parents:
diff changeset
688 };
a61af66fc99e Initial load
duke
parents:
diff changeset
689
a61af66fc99e Initial load
duke
parents:
diff changeset
690 //------------------------------Store4CNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
691 // Vector store of 4 chars (16bits signed/unsigned) to memory
a61af66fc99e Initial load
duke
parents:
diff changeset
692 class Store4CNode : public VectorStoreNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
693 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
694 virtual BasicType elt_basic_type() const { return T_CHAR; }
a61af66fc99e Initial load
duke
parents:
diff changeset
695 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
696 Store4CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val)
a61af66fc99e Initial load
duke
parents:
diff changeset
697 : VectorStoreNode(c,mem,adr,at,val) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
698 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
699 virtual uint length() const { return 4; }
a61af66fc99e Initial load
duke
parents:
diff changeset
700 };
a61af66fc99e Initial load
duke
parents:
diff changeset
701
a61af66fc99e Initial load
duke
parents:
diff changeset
702 //------------------------------Store2CNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
703 // Vector store of 2 chars (16bits signed/unsigned) to memory
a61af66fc99e Initial load
duke
parents:
diff changeset
704 class Store2CNode : public VectorStoreNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
705 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
706 virtual BasicType elt_basic_type() const { return T_CHAR; }
a61af66fc99e Initial load
duke
parents:
diff changeset
707 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
708 Store2CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val)
a61af66fc99e Initial load
duke
parents:
diff changeset
709 : VectorStoreNode(c,mem,adr,at,val) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
710 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
711 virtual uint length() const { return 2; }
a61af66fc99e Initial load
duke
parents:
diff changeset
712 };
a61af66fc99e Initial load
duke
parents:
diff changeset
713
a61af66fc99e Initial load
duke
parents:
diff changeset
714 //------------------------------Store4INode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
715 // Vector store of 4 integers (32bits signed) to memory
a61af66fc99e Initial load
duke
parents:
diff changeset
716 class Store4INode : public VectorStoreNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
717 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
718 virtual BasicType elt_basic_type() const { return T_INT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
719 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
720 Store4INode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val)
a61af66fc99e Initial load
duke
parents:
diff changeset
721 : VectorStoreNode(c,mem,adr,at,val) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
722 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
723 virtual uint length() const { return 4; }
a61af66fc99e Initial load
duke
parents:
diff changeset
724 };
a61af66fc99e Initial load
duke
parents:
diff changeset
725
a61af66fc99e Initial load
duke
parents:
diff changeset
726 //------------------------------Store2INode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
727 // Vector store of 2 integers (32bits signed) to memory
a61af66fc99e Initial load
duke
parents:
diff changeset
728 class Store2INode : public VectorStoreNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
729 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
730 virtual BasicType elt_basic_type() const { return T_INT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
731 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
732 Store2INode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val)
a61af66fc99e Initial load
duke
parents:
diff changeset
733 : VectorStoreNode(c,mem,adr,at,val) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
734 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
735 virtual uint length() const { return 2; }
a61af66fc99e Initial load
duke
parents:
diff changeset
736 };
a61af66fc99e Initial load
duke
parents:
diff changeset
737
a61af66fc99e Initial load
duke
parents:
diff changeset
738 //------------------------------Store2LNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
739 // Vector store of 2 longs (64bits signed) to memory
a61af66fc99e Initial load
duke
parents:
diff changeset
740 class Store2LNode : public VectorStoreNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
741 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
742 virtual BasicType elt_basic_type() const { return T_LONG; }
a61af66fc99e Initial load
duke
parents:
diff changeset
743 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
744 Store2LNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val)
a61af66fc99e Initial load
duke
parents:
diff changeset
745 : VectorStoreNode(c,mem,adr,at,val) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
746 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
747 virtual uint length() const { return 2; }
a61af66fc99e Initial load
duke
parents:
diff changeset
748 };
a61af66fc99e Initial load
duke
parents:
diff changeset
749
a61af66fc99e Initial load
duke
parents:
diff changeset
750 //------------------------------Store4FNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
751 // Vector store of 4 floats (32bits) to memory
a61af66fc99e Initial load
duke
parents:
diff changeset
752 class Store4FNode : public VectorStoreNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
753 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
754 virtual BasicType elt_basic_type() const { return T_FLOAT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
755 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
756 Store4FNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val)
a61af66fc99e Initial load
duke
parents:
diff changeset
757 : VectorStoreNode(c,mem,adr,at,val) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
758 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
759 virtual uint length() const { return 4; }
a61af66fc99e Initial load
duke
parents:
diff changeset
760 };
a61af66fc99e Initial load
duke
parents:
diff changeset
761
a61af66fc99e Initial load
duke
parents:
diff changeset
762 //------------------------------Store2FNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
763 // Vector store of 2 floats (32bits) to memory
a61af66fc99e Initial load
duke
parents:
diff changeset
764 class Store2FNode : public VectorStoreNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
765 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
766 virtual BasicType elt_basic_type() const { return T_FLOAT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
767 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
768 Store2FNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val)
a61af66fc99e Initial load
duke
parents:
diff changeset
769 : VectorStoreNode(c,mem,adr,at,val) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
770 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
771 virtual uint length() const { return 2; }
a61af66fc99e Initial load
duke
parents:
diff changeset
772 };
a61af66fc99e Initial load
duke
parents:
diff changeset
773
a61af66fc99e Initial load
duke
parents:
diff changeset
774 //------------------------------Store2DNode--------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
775 // Vector store of 2 doubles (64bits) to memory
a61af66fc99e Initial load
duke
parents:
diff changeset
776 class Store2DNode : public VectorStoreNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
777 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
778 virtual BasicType elt_basic_type() const { return T_DOUBLE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
779 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
780 Store2DNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val)
a61af66fc99e Initial load
duke
parents:
diff changeset
781 : VectorStoreNode(c,mem,adr,at,val) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
782 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
783 virtual uint length() const { return 2; }
a61af66fc99e Initial load
duke
parents:
diff changeset
784 };
a61af66fc99e Initial load
duke
parents:
diff changeset
785
a61af66fc99e Initial load
duke
parents:
diff changeset
786 //=========================Promote_Scalar_to_Vector====================================
a61af66fc99e Initial load
duke
parents:
diff changeset
787
a61af66fc99e Initial load
duke
parents:
diff changeset
788 //------------------------------Replicate16BNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
789 // Replicate byte scalar to be vector of 16 bytes
a61af66fc99e Initial load
duke
parents:
diff changeset
790 class Replicate16BNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
791 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
792 virtual BasicType elt_basic_type() const { return T_BYTE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
793 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
794 Replicate16BNode(Node* in1) : VectorNode(in1, 16) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
795 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
796 };
a61af66fc99e Initial load
duke
parents:
diff changeset
797
a61af66fc99e Initial load
duke
parents:
diff changeset
798 //------------------------------Replicate8BNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
799 // Replicate byte scalar to be vector of 8 bytes
a61af66fc99e Initial load
duke
parents:
diff changeset
800 class Replicate8BNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
801 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
802 virtual BasicType elt_basic_type() const { return T_BYTE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
803 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
804 Replicate8BNode(Node* in1) : VectorNode(in1, 8) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
805 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
806 };
a61af66fc99e Initial load
duke
parents:
diff changeset
807
a61af66fc99e Initial load
duke
parents:
diff changeset
808 //------------------------------Replicate4BNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
809 // Replicate byte scalar to be vector of 4 bytes
a61af66fc99e Initial load
duke
parents:
diff changeset
810 class Replicate4BNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
811 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
812 virtual BasicType elt_basic_type() const { return T_BYTE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
813 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
814 Replicate4BNode(Node* in1) : VectorNode(in1, 4) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
815 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
816 };
a61af66fc99e Initial load
duke
parents:
diff changeset
817
a61af66fc99e Initial load
duke
parents:
diff changeset
818 //------------------------------Replicate8CNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
819 // Replicate char scalar to be vector of 8 chars
a61af66fc99e Initial load
duke
parents:
diff changeset
820 class Replicate8CNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
821 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
822 virtual BasicType elt_basic_type() const { return T_CHAR; }
a61af66fc99e Initial load
duke
parents:
diff changeset
823 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
824 Replicate8CNode(Node* in1) : VectorNode(in1, 8) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
825 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
826 };
a61af66fc99e Initial load
duke
parents:
diff changeset
827
a61af66fc99e Initial load
duke
parents:
diff changeset
828 //------------------------------Replicate4CNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
829 // Replicate char scalar to be vector of 4 chars
a61af66fc99e Initial load
duke
parents:
diff changeset
830 class Replicate4CNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
831 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
832 virtual BasicType elt_basic_type() const { return T_CHAR; }
a61af66fc99e Initial load
duke
parents:
diff changeset
833 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
834 Replicate4CNode(Node* in1) : VectorNode(in1, 4) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
835 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
836 };
a61af66fc99e Initial load
duke
parents:
diff changeset
837
a61af66fc99e Initial load
duke
parents:
diff changeset
838 //------------------------------Replicate2CNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
839 // Replicate char scalar to be vector of 2 chars
a61af66fc99e Initial load
duke
parents:
diff changeset
840 class Replicate2CNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
841 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
842 virtual BasicType elt_basic_type() const { return T_CHAR; }
a61af66fc99e Initial load
duke
parents:
diff changeset
843 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
844 Replicate2CNode(Node* in1) : VectorNode(in1, 2) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
845 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
846 };
a61af66fc99e Initial load
duke
parents:
diff changeset
847
a61af66fc99e Initial load
duke
parents:
diff changeset
848 //------------------------------Replicate8SNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
849 // Replicate short scalar to be vector of 8 shorts
a61af66fc99e Initial load
duke
parents:
diff changeset
850 class Replicate8SNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
851 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
852 virtual BasicType elt_basic_type() const { return T_SHORT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
853 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
854 Replicate8SNode(Node* in1) : VectorNode(in1, 8) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
855 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
856 };
a61af66fc99e Initial load
duke
parents:
diff changeset
857
a61af66fc99e Initial load
duke
parents:
diff changeset
858 //------------------------------Replicate4SNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
859 // Replicate short scalar to be vector of 4 shorts
a61af66fc99e Initial load
duke
parents:
diff changeset
860 class Replicate4SNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
861 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
862 virtual BasicType elt_basic_type() const { return T_SHORT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
863 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
864 Replicate4SNode(Node* in1) : VectorNode(in1, 4) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
865 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
866 };
a61af66fc99e Initial load
duke
parents:
diff changeset
867
a61af66fc99e Initial load
duke
parents:
diff changeset
868 //------------------------------Replicate2SNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
869 // Replicate short scalar to be vector of 2 shorts
a61af66fc99e Initial load
duke
parents:
diff changeset
870 class Replicate2SNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
871 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
872 virtual BasicType elt_basic_type() const { return T_SHORT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
873 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
874 Replicate2SNode(Node* in1) : VectorNode(in1, 2) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
875 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
876 };
a61af66fc99e Initial load
duke
parents:
diff changeset
877
a61af66fc99e Initial load
duke
parents:
diff changeset
878 //------------------------------Replicate4INode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
879 // Replicate int scalar to be vector of 4 ints
a61af66fc99e Initial load
duke
parents:
diff changeset
880 class Replicate4INode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
881 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
882 virtual BasicType elt_basic_type() const { return T_INT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
883 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
884 Replicate4INode(Node* in1) : VectorNode(in1, 4) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
885 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
886 };
a61af66fc99e Initial load
duke
parents:
diff changeset
887
a61af66fc99e Initial load
duke
parents:
diff changeset
888 //------------------------------Replicate2INode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
889 // Replicate int scalar to be vector of 2 ints
a61af66fc99e Initial load
duke
parents:
diff changeset
890 class Replicate2INode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
891 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
892 virtual BasicType elt_basic_type() const { return T_INT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
893 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
894 Replicate2INode(Node* in1) : VectorNode(in1, 2) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
895 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
896 };
a61af66fc99e Initial load
duke
parents:
diff changeset
897
a61af66fc99e Initial load
duke
parents:
diff changeset
898 //------------------------------Replicate2LNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
899 // Replicate long scalar to be vector of 2 longs
a61af66fc99e Initial load
duke
parents:
diff changeset
900 class Replicate2LNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
901 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
902 virtual BasicType elt_basic_type() const { return T_LONG; }
a61af66fc99e Initial load
duke
parents:
diff changeset
903 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
904 Replicate2LNode(Node* in1) : VectorNode(in1, 2) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
905 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
906 };
a61af66fc99e Initial load
duke
parents:
diff changeset
907
a61af66fc99e Initial load
duke
parents:
diff changeset
908 //------------------------------Replicate4FNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
909 // Replicate float scalar to be vector of 4 floats
a61af66fc99e Initial load
duke
parents:
diff changeset
910 class Replicate4FNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
911 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
912 virtual BasicType elt_basic_type() const { return T_FLOAT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
913 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
914 Replicate4FNode(Node* in1) : VectorNode(in1, 4) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
915 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
916 };
a61af66fc99e Initial load
duke
parents:
diff changeset
917
a61af66fc99e Initial load
duke
parents:
diff changeset
918 //------------------------------Replicate2FNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
919 // Replicate float scalar to be vector of 2 floats
a61af66fc99e Initial load
duke
parents:
diff changeset
920 class Replicate2FNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
921 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
922 virtual BasicType elt_basic_type() const { return T_FLOAT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
923 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
924 Replicate2FNode(Node* in1) : VectorNode(in1, 2) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
925 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
926 };
a61af66fc99e Initial load
duke
parents:
diff changeset
927
a61af66fc99e Initial load
duke
parents:
diff changeset
928 //------------------------------Replicate2DNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
929 // Replicate double scalar to be vector of 2 doubles
a61af66fc99e Initial load
duke
parents:
diff changeset
930 class Replicate2DNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
931 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
932 virtual BasicType elt_basic_type() const { return T_DOUBLE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
933 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
934 Replicate2DNode(Node* in1) : VectorNode(in1, 2) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
935 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
936 };
a61af66fc99e Initial load
duke
parents:
diff changeset
937
a61af66fc99e Initial load
duke
parents:
diff changeset
938 //========================Pack_Scalars_into_a_Vector==============================
a61af66fc99e Initial load
duke
parents:
diff changeset
939
a61af66fc99e Initial load
duke
parents:
diff changeset
940 //------------------------------PackNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
941 // Pack parent class (not for code generation).
a61af66fc99e Initial load
duke
parents:
diff changeset
942 class PackNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
943 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
944 PackNode(Node* in1) : VectorNode(in1, 1) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
945 PackNode(Node* in1, Node* n2) : VectorNode(in1, n2, 2) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
946 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
947
a61af66fc99e Initial load
duke
parents:
diff changeset
948 void add_opd(Node* n) {
a61af66fc99e Initial load
duke
parents:
diff changeset
949 add_req(n);
a61af66fc99e Initial load
duke
parents:
diff changeset
950 _length++;
a61af66fc99e Initial load
duke
parents:
diff changeset
951 assert(_length == req() - 1, "vector length matches edge count");
a61af66fc99e Initial load
duke
parents:
diff changeset
952 }
a61af66fc99e Initial load
duke
parents:
diff changeset
953
a61af66fc99e Initial load
duke
parents:
diff changeset
954 // Create a binary tree form for Packs. [lo, hi) (half-open) range
a61af66fc99e Initial load
duke
parents:
diff changeset
955 Node* binaryTreePack(Compile* C, int lo, int hi);
a61af66fc99e Initial load
duke
parents:
diff changeset
956
a61af66fc99e Initial load
duke
parents:
diff changeset
957 static PackNode* make(Compile* C, Node* s, const Type* elt_t);
a61af66fc99e Initial load
duke
parents:
diff changeset
958 };
a61af66fc99e Initial load
duke
parents:
diff changeset
959
a61af66fc99e Initial load
duke
parents:
diff changeset
960 //------------------------------PackBNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
961 // Pack byte scalars into vector
a61af66fc99e Initial load
duke
parents:
diff changeset
962 class PackBNode : public PackNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
963 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
964 virtual BasicType elt_basic_type() const { return T_BYTE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
965 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
966 PackBNode(Node* in1) : PackNode(in1) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
967 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
968 };
a61af66fc99e Initial load
duke
parents:
diff changeset
969
a61af66fc99e Initial load
duke
parents:
diff changeset
970 //------------------------------PackCNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
971 // Pack char scalars into vector
a61af66fc99e Initial load
duke
parents:
diff changeset
972 class PackCNode : public PackNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
973 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
974 virtual BasicType elt_basic_type() const { return T_CHAR; }
a61af66fc99e Initial load
duke
parents:
diff changeset
975 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
976 PackCNode(Node* in1) : PackNode(in1) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
977 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
978 };
a61af66fc99e Initial load
duke
parents:
diff changeset
979
a61af66fc99e Initial load
duke
parents:
diff changeset
980 //------------------------------PackSNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
981 // Pack short scalars into a vector
a61af66fc99e Initial load
duke
parents:
diff changeset
982 class PackSNode : public PackNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
983 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
984 virtual BasicType elt_basic_type() const { return T_SHORT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
985 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
986 PackSNode(Node* in1) : PackNode(in1) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
987 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
988 };
a61af66fc99e Initial load
duke
parents:
diff changeset
989
a61af66fc99e Initial load
duke
parents:
diff changeset
990 //------------------------------PackINode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
991 // Pack integer scalars into a vector
a61af66fc99e Initial load
duke
parents:
diff changeset
992 class PackINode : public PackNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
993 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
994 virtual BasicType elt_basic_type() const { return T_INT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
995 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
996 PackINode(Node* in1) : PackNode(in1) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
997 PackINode(Node* in1, Node* in2) : PackNode(in1, in2) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
998 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
999 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1000
a61af66fc99e Initial load
duke
parents:
diff changeset
1001 //------------------------------PackLNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1002 // Pack long scalars into a vector
a61af66fc99e Initial load
duke
parents:
diff changeset
1003 class PackLNode : public PackNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
1004 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
1005 virtual BasicType elt_basic_type() const { return T_LONG; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1006 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
1007 PackLNode(Node* in1) : PackNode(in1) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
1008 PackLNode(Node* in1, Node* in2) : PackNode(in1, in2) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
1009 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
1010 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1011
a61af66fc99e Initial load
duke
parents:
diff changeset
1012 //------------------------------PackFNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1013 // Pack float scalars into vector
a61af66fc99e Initial load
duke
parents:
diff changeset
1014 class PackFNode : public PackNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
1015 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
1016 virtual BasicType elt_basic_type() const { return T_FLOAT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1017 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
1018 PackFNode(Node* in1) : PackNode(in1) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
1019 PackFNode(Node* in1, Node* in2) : PackNode(in1, in2) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
1020 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
1021 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1022
a61af66fc99e Initial load
duke
parents:
diff changeset
1023 //------------------------------PackDNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1024 // Pack double scalars into a vector
a61af66fc99e Initial load
duke
parents:
diff changeset
1025 class PackDNode : public PackNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
1026 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
1027 virtual BasicType elt_basic_type() const { return T_DOUBLE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1028 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
1029 PackDNode(Node* in1) : PackNode(in1) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
1030 PackDNode(Node* in1, Node* in2) : PackNode(in1, in2) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
1031 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
1032 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1033
a61af66fc99e Initial load
duke
parents:
diff changeset
1034 // The Pack2xN nodes assist code generation. They are created from
a61af66fc99e Initial load
duke
parents:
diff changeset
1035 // Pack4C, etc. nodes in final_graph_reshape in the form of a
a61af66fc99e Initial load
duke
parents:
diff changeset
1036 // balanced, binary tree.
a61af66fc99e Initial load
duke
parents:
diff changeset
1037
a61af66fc99e Initial load
duke
parents:
diff changeset
1038 //------------------------------Pack2x1BNode-----------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1039 // Pack 2 1-byte integers into vector of 2 bytes
a61af66fc99e Initial load
duke
parents:
diff changeset
1040 class Pack2x1BNode : public PackNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
1041 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
1042 virtual BasicType elt_basic_type() const { return T_BYTE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1043 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
1044 Pack2x1BNode(Node *in1, Node* in2) : PackNode(in1, in2) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
1045 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
1046 virtual uint ideal_reg() const { return Op_RegI; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1047 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1048
a61af66fc99e Initial load
duke
parents:
diff changeset
1049 //------------------------------Pack2x2BNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1050 // Pack 2 2-byte integers into vector of 4 bytes
a61af66fc99e Initial load
duke
parents:
diff changeset
1051 class Pack2x2BNode : public PackNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
1052 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
1053 virtual BasicType elt_basic_type() const { return T_CHAR; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1054 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
1055 Pack2x2BNode(Node *in1, Node* in2) : PackNode(in1, in2) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
1056 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
1057 virtual uint ideal_reg() const { return Op_RegI; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1058 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1059
a61af66fc99e Initial load
duke
parents:
diff changeset
1060 //========================Extract_Scalar_from_Vector===============================
a61af66fc99e Initial load
duke
parents:
diff changeset
1061
a61af66fc99e Initial load
duke
parents:
diff changeset
1062 //------------------------------ExtractNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1063 // Extract a scalar from a vector at position "pos"
a61af66fc99e Initial load
duke
parents:
diff changeset
1064 class ExtractNode : public Node {
a61af66fc99e Initial load
duke
parents:
diff changeset
1065 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
1066 ExtractNode(Node* src, ConINode* pos) : Node(NULL, src, (Node*)pos) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1067 assert(in(2)->get_int() >= 0, "positive constants");
a61af66fc99e Initial load
duke
parents:
diff changeset
1068 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1069 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
1070 uint pos() const { return in(2)->get_int(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
1071
a61af66fc99e Initial load
duke
parents:
diff changeset
1072 static Node* make(Compile* C, Node* v, uint position, const Type* opd_t);
a61af66fc99e Initial load
duke
parents:
diff changeset
1073 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1074
a61af66fc99e Initial load
duke
parents:
diff changeset
1075 //------------------------------ExtractBNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1076 // Extract a byte from a vector at position "pos"
a61af66fc99e Initial load
duke
parents:
diff changeset
1077 class ExtractBNode : public ExtractNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
1078 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
1079 ExtractBNode(Node* src, ConINode* pos) : ExtractNode(src, pos) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
1080 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
1081 virtual const Type *bottom_type() const { return TypeInt::INT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1082 virtual uint ideal_reg() const { return Op_RegI; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1083 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1084
a61af66fc99e Initial load
duke
parents:
diff changeset
1085 //------------------------------ExtractCNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1086 // Extract a char from a vector at position "pos"
a61af66fc99e Initial load
duke
parents:
diff changeset
1087 class ExtractCNode : public ExtractNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
1088 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
1089 ExtractCNode(Node* src, ConINode* pos) : ExtractNode(src, pos) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
1090 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
1091 virtual const Type *bottom_type() const { return TypeInt::INT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1092 virtual uint ideal_reg() const { return Op_RegI; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1093 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1094
a61af66fc99e Initial load
duke
parents:
diff changeset
1095 //------------------------------ExtractSNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1096 // Extract a short from a vector at position "pos"
a61af66fc99e Initial load
duke
parents:
diff changeset
1097 class ExtractSNode : public ExtractNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
1098 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
1099 ExtractSNode(Node* src, ConINode* pos) : ExtractNode(src, pos) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
1100 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
1101 virtual const Type *bottom_type() const { return TypeInt::INT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1102 virtual uint ideal_reg() const { return Op_RegI; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1103 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1104
a61af66fc99e Initial load
duke
parents:
diff changeset
1105 //------------------------------ExtractINode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1106 // Extract an int from a vector at position "pos"
a61af66fc99e Initial load
duke
parents:
diff changeset
1107 class ExtractINode : public ExtractNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
1108 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
1109 ExtractINode(Node* src, ConINode* pos) : ExtractNode(src, pos) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
1110 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
1111 virtual const Type *bottom_type() const { return TypeInt::INT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1112 virtual uint ideal_reg() const { return Op_RegI; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1113 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1114
a61af66fc99e Initial load
duke
parents:
diff changeset
1115 //------------------------------ExtractLNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1116 // Extract a long from a vector at position "pos"
a61af66fc99e Initial load
duke
parents:
diff changeset
1117 class ExtractLNode : public ExtractNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
1118 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
1119 ExtractLNode(Node* src, ConINode* pos) : ExtractNode(src, pos) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
1120 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
1121 virtual const Type *bottom_type() const { return TypeLong::LONG; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1122 virtual uint ideal_reg() const { return Op_RegL; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1123 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1124
a61af66fc99e Initial load
duke
parents:
diff changeset
1125 //------------------------------ExtractFNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1126 // Extract a float from a vector at position "pos"
a61af66fc99e Initial load
duke
parents:
diff changeset
1127 class ExtractFNode : public ExtractNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
1128 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
1129 ExtractFNode(Node* src, ConINode* pos) : ExtractNode(src, pos) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
1130 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
1131 virtual const Type *bottom_type() const { return Type::FLOAT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1132 virtual uint ideal_reg() const { return Op_RegF; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1133 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1134
a61af66fc99e Initial load
duke
parents:
diff changeset
1135 //------------------------------ExtractDNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1136 // Extract a double from a vector at position "pos"
a61af66fc99e Initial load
duke
parents:
diff changeset
1137 class ExtractDNode : public ExtractNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
1138 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
1139 ExtractDNode(Node* src, ConINode* pos) : ExtractNode(src, pos) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
1140 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
1141 virtual const Type *bottom_type() const { return Type::DOUBLE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1142 virtual uint ideal_reg() const { return Op_RegD; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1143 };
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
1144
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
1145 #endif // SHARE_VM_OPTO_VECTORNODE_HPP