@@ -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
@@ -170,6 +177,27 @@ 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 */
@@ -293,7 +321,13 @@ public EnumSet<CPUFeature> getFeatures() {
293321
294322 @ Override
295323 public List <Register > getAvailableValueRegisters () {
296- if (features .contains (CPUFeature .AVX512F )) {
324+ if (features .contains (CPUFeature .APX_F )) {
325+ if (features .contains (CPUFeature .AVX512F )) {
326+ return valueRegistersAVX512AndAPX ;
327+ } else {
328+ return valueRegistersSSEAndAPX ;
329+ }
330+ } else if (features .contains (CPUFeature .AVX512F )) {
297331 return valueRegistersAVX512 ;
298332 } else {
299333 return valueRegistersSSE ;
0 commit comments