8334706: [JVMCI] APX registers incorrectly exposed on AMD64

Reviewed-by: yzheng, never
This commit is contained in:
Doug Simon 2024-06-21 13:43:03 +00:00
parent 08ace27da1
commit dbf5a9a400
2 changed files with 12 additions and 5 deletions

View File

@ -83,11 +83,10 @@ 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,
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 +161,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 +176,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,

View File

@ -26,6 +26,7 @@ import java.nio.ByteOrder;
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;