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
@@ -91,6 +91,13 @@ public class AMD64 extends Architecture {
9191 r8 , r9 , r10 , r11 , r12 , r13 , r14 , r15
9292 };
9393
94+ public static final Register [] cpuRegistersAPX = {
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+ };
100+
94101 public static final RegisterCategory XMM = new RegisterCategory ("XMM" );
95102
96103 // XMM registers
@@ -153,16 +160,37 @@ 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 (
164+ rax , rcx , rdx , rbx , rsp , rbp , rsi , rdi ,
165+ r8 , r9 , r10 , r11 , r12 , r13 , r14 , r15 ,
166+ xmm0 , xmm1 , xmm2 , xmm3 , xmm4 , xmm5 , xmm6 , xmm7 ,
167+ xmm8 , xmm9 , xmm10 , xmm11 , xmm12 , xmm13 , xmm14 , xmm15
168+ );
169+
170+ public static final List <Register > valueRegistersAVX512 = List .of (
171+ rax , rcx , rdx , rbx , rsp , rbp , rsi , rdi ,
172+ r8 , r9 , r10 , r11 , r12 , r13 , r14 , r15 ,
173+ xmm0 , xmm1 , xmm2 , xmm3 , xmm4 , xmm5 , xmm6 , xmm7 ,
174+ xmm8 , xmm9 , xmm10 , xmm11 , xmm12 , xmm13 , xmm14 , xmm15 ,
175+ xmm16 , xmm17 , xmm18 , xmm19 , xmm20 , xmm21 , xmm22 , xmm23 ,
176+ xmm24 , xmm25 , xmm26 , xmm27 , xmm28 , xmm29 , xmm30 , xmm31 ,
177+ k0 , k1 , k2 , k3 , k4 , k5 , k6 , k7
178+ );
179+
180+ public static final List <Register > valueRegistersSSEAndAPX = List .of (
157181 rax , rcx , rdx , rbx , rsp , rbp , rsi , rdi ,
158182 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 ,
159185 xmm0 , xmm1 , xmm2 , xmm3 , xmm4 , xmm5 , xmm6 , xmm7 ,
160186 xmm8 , xmm9 , xmm10 , xmm11 , xmm12 , xmm13 , xmm14 , xmm15
161187 );
162188
163- public static final RegisterArray valueRegistersAVX512 = new RegisterArray (
189+ public static final List < Register > valueRegistersAVX512AndAPX = List . of (
164190 rax , rcx , rdx , rbx , rsp , rbp , rsi , rdi ,
165191 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 ,
166194 xmm0 , xmm1 , xmm2 , xmm3 , xmm4 , xmm5 , xmm6 , xmm7 ,
167195 xmm8 , xmm9 , xmm10 , xmm11 , xmm12 , xmm13 , xmm14 , xmm15 ,
168196 xmm16 , xmm17 , xmm18 , xmm19 , xmm20 , xmm21 , xmm22 , xmm23 ,
@@ -175,7 +203,7 @@ public class AMD64 extends Architecture {
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