From f8028db188505224142221a96796e2f74eedac0e Mon Sep 17 00:00:00 2001 From: Doug Simon Date: Fri, 21 Jun 2024 11:56:16 +0200 Subject: [PATCH 1/2] APX registers incorrectly exposed on AMD64 --- .../share/classes/jdk/vm/ci/amd64/AMD64.java | 8 +++----- .../share/classes/jdk/vm/ci/code/Architecture.java | 8 ++++++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/amd64/AMD64.java b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/amd64/AMD64.java index 9f3fc0cdbd6a9..084ac01714067 100644 --- a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/amd64/AMD64.java +++ b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/amd64/AMD64.java @@ -85,9 +85,7 @@ public class AMD64 extends Architecture { public static final Register[] cpuRegisters = { rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi, - r8, r9, r10, r11, r12, r13, r14, r15, - r16, r17, r18, r19, r20, r21, r22, r23, - r24, r25, r26, r27, r28, r29, r30, r31 + r8, r9, r10, r11, r12, r13, r14, r15 }; public static final RegisterCategory XMM = new RegisterCategory("XMM"); @@ -162,8 +160,6 @@ public class AMD64 extends Architecture { public static final RegisterArray valueRegistersAVX512 = new RegisterArray( rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, r15, - r16, r17, r18, r19, r20, r21, r22, r23, - r24, r25, r26, r27, r28, r29, r30, r31, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xmm16, xmm17, xmm18, xmm19, xmm20, xmm21, xmm22, xmm23, @@ -179,6 +175,8 @@ public class AMD64 extends Architecture { public static final RegisterArray allRegisters = new RegisterArray( rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, r15, + r16, r17, r18, r19, r20, r21, r22, r23, + r24, r25, r26, r27, r28, r29, r30, r31, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xmm16, xmm17, xmm18, xmm19, xmm20, xmm21, xmm22, xmm23, diff --git a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/code/Architecture.java b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/code/Architecture.java index 0b00628aceaf3..f14855cd6b995 100644 --- a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/code/Architecture.java +++ b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/code/Architecture.java @@ -26,6 +26,7 @@ import java.util.Set; import jdk.vm.ci.code.Register.RegisterCategory; +import jdk.vm.ci.common.JVMCIError; import jdk.vm.ci.meta.JavaKind; import jdk.vm.ci.meta.PlatformKind; @@ -81,6 +82,13 @@ public abstract class Architecture { protected Architecture(String name, PlatformKind wordKind, ByteOrder byteOrder, boolean unalignedMemoryAccess, RegisterArray registers, int implicitMemoryBarriers, int nativeCallDisplacementOffset, int returnAddressSize) { + // registers is expected to mention all registers in order of their encoding. + for (int i = 0; i < registers.size(); ++i) { + if (registers.get(i).number != i) { + Register reg = registers.get(i); + throw new JVMCIError("%s: %d != %d", reg, reg.number, i); + } + } this.name = name; this.registers = registers; this.wordKind = wordKind; From b2851a8218961a71b49f43fe582d2779fcf7f7ea Mon Sep 17 00:00:00 2001 From: Doug Simon Date: Fri, 21 Jun 2024 14:23:09 +0200 Subject: [PATCH 2/2] added comment to AMD64.cpuRegisters --- src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/amd64/AMD64.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/amd64/AMD64.java b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/amd64/AMD64.java index 084ac01714067..83401fed62033 100644 --- a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/amd64/AMD64.java +++ b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/amd64/AMD64.java @@ -83,6 +83,7 @@ public class AMD64 extends Architecture { public static final Register r30 = new Register(30, 30, "r30", CPU); public static final Register r31 = new Register(31, 31, "r31", CPU); + // The set of common CPU registers available on all x64 platforms. public static final Register[] cpuRegisters = { rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, r15