2929
3030import java .nio .ByteOrder ;
3131import java .util .EnumSet ;
32+ import java .util .List ;
3233
3334import jdk .vm .ci .code .Architecture ;
3435import jdk .vm .ci .code .CPUFeatureName ;
3536import jdk .vm .ci .code .Register ;
3637import jdk .vm .ci .code .Register .RegisterCategory ;
37- import jdk .vm .ci .code .RegisterArray ;
3838import jdk .vm .ci .meta .JavaKind ;
3939import jdk .vm .ci .meta .PlatformKind ;
4040
@@ -86,10 +86,17 @@ public class AMD64 extends Architecture {
8686 public static final Register r31 = new Register (31 , 31 , "r31" , CPU );
8787
8888 // The set of common CPU registers available on all x64 platforms.
89- public static final Register [] cpuRegisters = {
89+ public static final List < Register > cpuRegisters = List . of (
9090 rax , rcx , rdx , rbx , rsp , rbp , rsi , rdi ,
9191 r8 , r9 , r10 , r11 , r12 , r13 , r14 , r15
92- };
92+ );
93+
94+ public static final List <Register > cpuRegistersAPX = List .of (
95+ rax , rcx , rdx , rbx , rsp , rbp , rsi , rdi ,
96+ r8 , r9 , r10 , r11 , r12 , r13 , r14 , r15 ,
97+ r16 , r17 , r18 , r19 , r20 , r21 , r22 , r23 ,
98+ r24 , r25 , r26 , r27 , r28 , r29 , r30 , r31
99+ );
93100
94101 public static final RegisterCategory XMM = new RegisterCategory ("XMM" );
95102
@@ -130,17 +137,17 @@ public class AMD64 extends Architecture {
130137 public static final Register xmm30 = new Register (62 , 30 , "xmm30" , XMM );
131138 public static final Register xmm31 = new Register (63 , 31 , "xmm31" , XMM );
132139
133- public static final Register [] xmmRegistersSSE = {
140+ public static final List < Register > xmmRegistersSSE = List . of (
134141 xmm0 , xmm1 , xmm2 , xmm3 , xmm4 , xmm5 , xmm6 , xmm7 ,
135142 xmm8 , xmm9 , xmm10 , xmm11 , xmm12 , xmm13 , xmm14 , xmm15
136- } ;
143+ ) ;
137144
138- public static final Register [] xmmRegistersAVX512 = {
145+ public static final List < Register > xmmRegistersAVX512 = List . of (
139146 xmm0 , xmm1 , xmm2 , xmm3 , xmm4 , xmm5 , xmm6 , xmm7 ,
140147 xmm8 , xmm9 , xmm10 , xmm11 , xmm12 , xmm13 , xmm14 , xmm15 ,
141148 xmm16 , xmm17 , xmm18 , xmm19 , xmm20 , xmm21 , xmm22 , xmm23 ,
142149 xmm24 , xmm25 , xmm26 , xmm27 , xmm28 , xmm29 , xmm30 , xmm31
143- } ;
150+ ) ;
144151
145152 public static final RegisterCategory MASK = new RegisterCategory ("MASK" , false );
146153
@@ -153,14 +160,14 @@ public class AMD64 extends Architecture {
153160 public static final Register k6 = new Register (70 , 6 , "k6" , MASK );
154161 public static final Register k7 = new Register (71 , 7 , "k7" , MASK );
155162
156- public static final RegisterArray valueRegistersSSE = new RegisterArray (
163+ public static final List < Register > valueRegistersSSE = List . of (
157164 rax , rcx , rdx , rbx , rsp , rbp , rsi , rdi ,
158165 r8 , r9 , r10 , r11 , r12 , r13 , r14 , r15 ,
159166 xmm0 , xmm1 , xmm2 , xmm3 , xmm4 , xmm5 , xmm6 , xmm7 ,
160167 xmm8 , xmm9 , xmm10 , xmm11 , xmm12 , xmm13 , xmm14 , xmm15
161168 );
162169
163- public static final RegisterArray valueRegistersAVX512 = new RegisterArray (
170+ public static final List < Register > valueRegistersAVX512 = List . of (
164171 rax , rcx , rdx , rbx , rsp , rbp , rsi , rdi ,
165172 r8 , r9 , r10 , r11 , r12 , r13 , r14 , r15 ,
166173 xmm0 , xmm1 , xmm2 , xmm3 , xmm4 , xmm5 , xmm6 , xmm7 ,
@@ -170,12 +177,33 @@ public class AMD64 extends Architecture {
170177 k0 , k1 , k2 , k3 , k4 , k5 , k6 , k7
171178 );
172179
180+ public static final List <Register > valueRegistersSSEAndAPX = List .of (
181+ rax , rcx , rdx , rbx , rsp , rbp , rsi , rdi ,
182+ r8 , r9 , r10 , r11 , r12 , r13 , r14 , r15 ,
183+ r16 , r17 , r18 , r19 , r20 , r21 , r22 , r23 ,
184+ r24 , r25 , r26 , r27 , r28 , r29 , r30 , r31 ,
185+ xmm0 , xmm1 , xmm2 , xmm3 , xmm4 , xmm5 , xmm6 , xmm7 ,
186+ xmm8 , xmm9 , xmm10 , xmm11 , xmm12 , xmm13 , xmm14 , xmm15
187+ );
188+
189+ public static final List <Register > valueRegistersAVX512AndAPX = List .of (
190+ rax , rcx , rdx , rbx , rsp , rbp , rsi , rdi ,
191+ r8 , r9 , r10 , r11 , r12 , r13 , r14 , r15 ,
192+ r16 , r17 , r18 , r19 , r20 , r21 , r22 , r23 ,
193+ r24 , r25 , r26 , r27 , r28 , r29 , r30 , r31 ,
194+ xmm0 , xmm1 , xmm2 , xmm3 , xmm4 , xmm5 , xmm6 , xmm7 ,
195+ xmm8 , xmm9 , xmm10 , xmm11 , xmm12 , xmm13 , xmm14 , xmm15 ,
196+ xmm16 , xmm17 , xmm18 , xmm19 , xmm20 , xmm21 , xmm22 , xmm23 ,
197+ xmm24 , xmm25 , xmm26 , xmm27 , xmm28 , xmm29 , xmm30 , xmm31 ,
198+ k0 , k1 , k2 , k3 , k4 , k5 , k6 , k7
199+ );
200+
173201 /**
174202 * Register used to construct an instruction-relative address.
175203 */
176204 public static final Register rip = new Register (72 , -1 , "rip" , SPECIAL );
177205
178- public static final RegisterArray allRegisters = new RegisterArray (
206+ public static final List < Register > allRegisters = List . of (
179207 rax , rcx , rdx , rbx , rsp , rbp , rsi , rdi ,
180208 r8 , r9 , r10 , r11 , r12 , r13 , r14 , r15 ,
181209 r16 , r17 , r18 , r19 , r20 , r21 , r22 , r23 ,
@@ -264,24 +292,13 @@ public enum CPUFeature implements CPUFeatureName {
264292
265293 private final EnumSet <CPUFeature > features ;
266294
267- /**
268- * Set of flags to control code emission.
269- */
270- public enum Flag {
271- UseCountLeadingZerosInstruction ,
272- UseCountTrailingZerosInstruction
273- }
274-
275- private final EnumSet <Flag > flags ;
276-
277295 private final AMD64Kind largestKind ;
278296
279297 private final AMD64Kind largestMaskKind ;
280298
281- public AMD64 (EnumSet <CPUFeature > features , EnumSet < Flag > flags ) {
299+ public AMD64 (EnumSet <CPUFeature > features ) {
282300 super ("AMD64" , AMD64Kind .QWORD , ByteOrder .LITTLE_ENDIAN , true , allRegisters , LOAD_LOAD | LOAD_STORE | STORE_STORE , 1 , 8 );
283301 this .features = features ;
284- this .flags = flags ;
285302 assert features .contains (CPUFeature .SSE2 ) : "minimum config for x64" ;
286303
287304 if (features .contains (CPUFeature .AVX512F )) {
@@ -305,13 +322,15 @@ public EnumSet<CPUFeature> getFeatures() {
305322 return features ;
306323 }
307324
308- public EnumSet <Flag > getFlags () {
309- return flags ;
310- }
311-
312325 @ Override
313- public RegisterArray getAvailableValueRegisters () {
314- if (features .contains (CPUFeature .AVX512F )) {
326+ public List <Register > getAvailableValueRegisters () {
327+ if (features .contains (CPUFeature .APX_F )) {
328+ if (features .contains (CPUFeature .AVX512F )) {
329+ return valueRegistersAVX512AndAPX ;
330+ } else {
331+ return valueRegistersSSEAndAPX ;
332+ }
333+ } else if (features .contains (CPUFeature .AVX512F )) {
315334 return valueRegistersAVX512 ;
316335 } else {
317336 return valueRegistersSSE ;
0 commit comments