Skip to content

Commit dbf5a9a

Browse files
author
Doug Simon
committed
8334706: [JVMCI] APX registers incorrectly exposed on AMD64
Reviewed-by: yzheng, never
1 parent 08ace27 commit dbf5a9a

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/amd64/AMD64.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,10 @@ public class AMD64 extends Architecture {
8383
public static final Register r30 = new Register(30, 30, "r30", CPU);
8484
public static final Register r31 = new Register(31, 31, "r31", CPU);
8585

86+
// The set of common CPU registers available on all x64 platforms.
8687
public static final Register[] cpuRegisters = {
8788
rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi,
88-
r8, r9, r10, r11, r12, r13, r14, r15,
89-
r16, r17, r18, r19, r20, r21, r22, r23,
90-
r24, r25, r26, r27, r28, r29, r30, r31
89+
r8, r9, r10, r11, r12, r13, r14, r15
9190
};
9291

9392
public static final RegisterCategory XMM = new RegisterCategory("XMM");
@@ -162,8 +161,6 @@ public class AMD64 extends Architecture {
162161
public static final RegisterArray valueRegistersAVX512 = new RegisterArray(
163162
rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi,
164163
r8, r9, r10, r11, r12, r13, r14, r15,
165-
r16, r17, r18, r19, r20, r21, r22, r23,
166-
r24, r25, r26, r27, r28, r29, r30, r31,
167164
xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7,
168165
xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15,
169166
xmm16, xmm17, xmm18, xmm19, xmm20, xmm21, xmm22, xmm23,
@@ -179,6 +176,8 @@ public class AMD64 extends Architecture {
179176
public static final RegisterArray allRegisters = new RegisterArray(
180177
rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi,
181178
r8, r9, r10, r11, r12, r13, r14, r15,
179+
r16, r17, r18, r19, r20, r21, r22, r23,
180+
r24, r25, r26, r27, r28, r29, r30, r31,
182181
xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7,
183182
xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15,
184183
xmm16, xmm17, xmm18, xmm19, xmm20, xmm21, xmm22, xmm23,

src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/code/Architecture.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.util.Set;
2727

2828
import jdk.vm.ci.code.Register.RegisterCategory;
29+
import jdk.vm.ci.common.JVMCIError;
2930
import jdk.vm.ci.meta.JavaKind;
3031
import jdk.vm.ci.meta.PlatformKind;
3132

@@ -81,6 +82,13 @@ public abstract class Architecture {
8182
protected Architecture(String name, PlatformKind wordKind, ByteOrder byteOrder, boolean unalignedMemoryAccess, RegisterArray registers, int implicitMemoryBarriers,
8283
int nativeCallDisplacementOffset,
8384
int returnAddressSize) {
85+
// registers is expected to mention all registers in order of their encoding.
86+
for (int i = 0; i < registers.size(); ++i) {
87+
if (registers.get(i).number != i) {
88+
Register reg = registers.get(i);
89+
throw new JVMCIError("%s: %d != %d", reg, reg.number, i);
90+
}
91+
}
8492
this.name = name;
8593
this.registers = registers;
8694
this.wordKind = wordKind;

0 commit comments

Comments
 (0)