mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 06:45:07 +02:00
8341581: Optimize BytecodeHelpers validate slot
Reviewed-by: liach
This commit is contained in:
parent
4d50cbb5a7
commit
d996ca863d
1 changed files with 26 additions and 26 deletions
|
@ -88,9 +88,9 @@ public class BytecodeHelpers {
|
||||||
case 2 -> Opcode.ALOAD_2;
|
case 2 -> Opcode.ALOAD_2;
|
||||||
case 3 -> Opcode.ALOAD_3;
|
case 3 -> Opcode.ALOAD_3;
|
||||||
default -> {
|
default -> {
|
||||||
if ((slot & 0xFF) == slot)
|
if ((slot & ~0xFF) == 0)
|
||||||
yield Opcode.ALOAD;
|
yield Opcode.ALOAD;
|
||||||
if ((slot & 0xFFFF) == slot)
|
if ((slot & ~0xFFFF) == 0)
|
||||||
yield Opcode.ALOAD_W;
|
yield Opcode.ALOAD_W;
|
||||||
throw slotOutOfBounds(slot);
|
throw slotOutOfBounds(slot);
|
||||||
}
|
}
|
||||||
|
@ -104,9 +104,9 @@ public class BytecodeHelpers {
|
||||||
case 2 -> Opcode.FLOAD_2;
|
case 2 -> Opcode.FLOAD_2;
|
||||||
case 3 -> Opcode.FLOAD_3;
|
case 3 -> Opcode.FLOAD_3;
|
||||||
default -> {
|
default -> {
|
||||||
if ((slot & 0xFF) == slot)
|
if ((slot & ~0xFF) == 0)
|
||||||
yield Opcode.FLOAD;
|
yield Opcode.FLOAD;
|
||||||
if ((slot & 0xFFFF) == slot)
|
if ((slot & ~0xFFFF) == 0)
|
||||||
yield Opcode.FLOAD_W;
|
yield Opcode.FLOAD_W;
|
||||||
throw slotOutOfBounds(slot);
|
throw slotOutOfBounds(slot);
|
||||||
}
|
}
|
||||||
|
@ -120,9 +120,9 @@ public class BytecodeHelpers {
|
||||||
case 2 -> Opcode.DLOAD_2;
|
case 2 -> Opcode.DLOAD_2;
|
||||||
case 3 -> Opcode.DLOAD_3;
|
case 3 -> Opcode.DLOAD_3;
|
||||||
default -> {
|
default -> {
|
||||||
if ((slot & 0xFF) == slot)
|
if ((slot & ~0xFF) == 0)
|
||||||
yield Opcode.DLOAD;
|
yield Opcode.DLOAD;
|
||||||
if ((slot & 0xFFFF) == slot)
|
if ((slot & ~0xFFFF) == 0)
|
||||||
yield Opcode.DLOAD_W;
|
yield Opcode.DLOAD_W;
|
||||||
throw slotOutOfBounds(slot);
|
throw slotOutOfBounds(slot);
|
||||||
}
|
}
|
||||||
|
@ -136,9 +136,9 @@ public class BytecodeHelpers {
|
||||||
case 2 -> Opcode.LLOAD_2;
|
case 2 -> Opcode.LLOAD_2;
|
||||||
case 3 -> Opcode.LLOAD_3;
|
case 3 -> Opcode.LLOAD_3;
|
||||||
default -> {
|
default -> {
|
||||||
if ((slot & 0xFF) == slot)
|
if ((slot & ~0xFF) == 0)
|
||||||
yield Opcode.LLOAD;
|
yield Opcode.LLOAD;
|
||||||
if ((slot & 0xFFFF) == slot)
|
if ((slot & ~0xFFFF) == 0)
|
||||||
yield Opcode.LLOAD_W;
|
yield Opcode.LLOAD_W;
|
||||||
throw slotOutOfBounds(slot);
|
throw slotOutOfBounds(slot);
|
||||||
}
|
}
|
||||||
|
@ -152,9 +152,9 @@ public class BytecodeHelpers {
|
||||||
case 2 -> Opcode.ILOAD_2;
|
case 2 -> Opcode.ILOAD_2;
|
||||||
case 3 -> Opcode.ILOAD_3;
|
case 3 -> Opcode.ILOAD_3;
|
||||||
default -> {
|
default -> {
|
||||||
if ((slot & 0xFF) == slot)
|
if ((slot & ~0xFF) == 0)
|
||||||
yield Opcode.ILOAD;
|
yield Opcode.ILOAD;
|
||||||
if ((slot & 0xFFFF) == slot)
|
if ((slot & ~0xFFFF) == 0)
|
||||||
yield Opcode.ILOAD_W;
|
yield Opcode.ILOAD_W;
|
||||||
throw slotOutOfBounds(slot);
|
throw slotOutOfBounds(slot);
|
||||||
}
|
}
|
||||||
|
@ -180,9 +180,9 @@ public class BytecodeHelpers {
|
||||||
case 2 -> Opcode.ASTORE_2;
|
case 2 -> Opcode.ASTORE_2;
|
||||||
case 3 -> Opcode.ASTORE_3;
|
case 3 -> Opcode.ASTORE_3;
|
||||||
default -> {
|
default -> {
|
||||||
if ((slot & 0xFF) == slot)
|
if ((slot & ~0xFF) == 0)
|
||||||
yield Opcode.ASTORE;
|
yield Opcode.ASTORE;
|
||||||
if ((slot & 0xFFFF) == slot)
|
if ((slot & ~0xFFFF) == 0)
|
||||||
yield Opcode.ASTORE_W;
|
yield Opcode.ASTORE_W;
|
||||||
throw slotOutOfBounds(slot);
|
throw slotOutOfBounds(slot);
|
||||||
}
|
}
|
||||||
|
@ -196,9 +196,9 @@ public class BytecodeHelpers {
|
||||||
case 2 -> Opcode.FSTORE_2;
|
case 2 -> Opcode.FSTORE_2;
|
||||||
case 3 -> Opcode.FSTORE_3;
|
case 3 -> Opcode.FSTORE_3;
|
||||||
default -> {
|
default -> {
|
||||||
if ((slot & 0xFF) == slot)
|
if ((slot & ~0xFF) == 0)
|
||||||
yield Opcode.FSTORE;
|
yield Opcode.FSTORE;
|
||||||
if ((slot & 0xFFFF) == slot)
|
if ((slot & ~0xFFFF) == 0)
|
||||||
yield Opcode.FSTORE_W;
|
yield Opcode.FSTORE_W;
|
||||||
throw slotOutOfBounds(slot);
|
throw slotOutOfBounds(slot);
|
||||||
}
|
}
|
||||||
|
@ -212,9 +212,9 @@ public class BytecodeHelpers {
|
||||||
case 2 -> Opcode.DSTORE_2;
|
case 2 -> Opcode.DSTORE_2;
|
||||||
case 3 -> Opcode.DSTORE_3;
|
case 3 -> Opcode.DSTORE_3;
|
||||||
default -> {
|
default -> {
|
||||||
if ((slot & 0xFF) == slot)
|
if ((slot & ~0xFF) == 0)
|
||||||
yield Opcode.DSTORE;
|
yield Opcode.DSTORE;
|
||||||
if ((slot & 0xFFFF) == slot)
|
if ((slot & ~0xFFFF) == 0)
|
||||||
yield Opcode.DSTORE_W;
|
yield Opcode.DSTORE_W;
|
||||||
throw slotOutOfBounds(slot);
|
throw slotOutOfBounds(slot);
|
||||||
}
|
}
|
||||||
|
@ -228,9 +228,9 @@ public class BytecodeHelpers {
|
||||||
case 2 -> Opcode.LSTORE_2;
|
case 2 -> Opcode.LSTORE_2;
|
||||||
case 3 -> Opcode.LSTORE_3;
|
case 3 -> Opcode.LSTORE_3;
|
||||||
default -> {
|
default -> {
|
||||||
if ((slot & 0xFF) == slot)
|
if ((slot & ~0xFF) == 0)
|
||||||
yield Opcode.LSTORE;
|
yield Opcode.LSTORE;
|
||||||
if ((slot & 0xFFFF) == slot)
|
if ((slot & ~0xFFFF) == 0)
|
||||||
yield Opcode.LSTORE_W;
|
yield Opcode.LSTORE_W;
|
||||||
throw slotOutOfBounds(slot);
|
throw slotOutOfBounds(slot);
|
||||||
}
|
}
|
||||||
|
@ -244,9 +244,9 @@ public class BytecodeHelpers {
|
||||||
case 2 -> Opcode.ISTORE_2;
|
case 2 -> Opcode.ISTORE_2;
|
||||||
case 3 -> Opcode.ISTORE_3;
|
case 3 -> Opcode.ISTORE_3;
|
||||||
default -> {
|
default -> {
|
||||||
if ((slot & 0xFF) == slot)
|
if ((slot & ~0xFF) == 0)
|
||||||
yield Opcode.ISTORE;
|
yield Opcode.ISTORE;
|
||||||
if ((slot & 0xFFFF) == slot)
|
if ((slot & ~0xFFFF) == 0)
|
||||||
yield Opcode.ISTORE_W;
|
yield Opcode.ISTORE_W;
|
||||||
throw slotOutOfBounds(slot);
|
throw slotOutOfBounds(slot);
|
||||||
}
|
}
|
||||||
|
@ -377,20 +377,20 @@ public class BytecodeHelpers {
|
||||||
public static void validateSlot(Opcode opcode, int slot, boolean load) {
|
public static void validateSlot(Opcode opcode, int slot, boolean load) {
|
||||||
int size = opcode.sizeIfFixed();
|
int size = opcode.sizeIfFixed();
|
||||||
if (size == 1 && slot == (load ? intrinsicLoadSlot(opcode) : intrinsicStoreSlot(opcode)) ||
|
if (size == 1 && slot == (load ? intrinsicLoadSlot(opcode) : intrinsicStoreSlot(opcode)) ||
|
||||||
size == 2 && slot == (slot & 0xFF) ||
|
size == 2 && (slot & ~0xFF) == 0 ||
|
||||||
size == 4 && slot == (slot & 0xFFFF))
|
size == 4 && (slot & ~0xFFFF) == 0)
|
||||||
return;
|
return;
|
||||||
throw slotOutOfBounds(opcode, slot);
|
throw slotOutOfBounds(opcode, slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void validateSlot(int slot) {
|
public static void validateSlot(int slot) {
|
||||||
if ((slot & 0xFFFF) != slot)
|
if ((slot & ~0xFFFF) != 0)
|
||||||
throw slotOutOfBounds(slot);
|
throw slotOutOfBounds(slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean validateAndIsWideIinc(int slot, int val) {
|
public static boolean validateAndIsWideIinc(int slot, int val) {
|
||||||
var ret = false;
|
var ret = false;
|
||||||
if ((slot & 0xFF) != slot) {
|
if ((slot & ~0xFF) != 0) {
|
||||||
validateSlot(slot);
|
validateSlot(slot);
|
||||||
ret = true;
|
ret = true;
|
||||||
}
|
}
|
||||||
|
@ -404,8 +404,8 @@ public class BytecodeHelpers {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void validateRet(Opcode opcode, int slot) {
|
public static void validateRet(Opcode opcode, int slot) {
|
||||||
if (opcode == Opcode.RET && slot == (slot & 0xFF) ||
|
if (opcode == Opcode.RET && (slot & ~0xFF) == 0 ||
|
||||||
opcode == Opcode.RET_W && slot == (slot & 0xFFFF))
|
opcode == Opcode.RET_W && (slot & ~0xFFFF) == 0)
|
||||||
return;
|
return;
|
||||||
Objects.requireNonNull(opcode);
|
Objects.requireNonNull(opcode);
|
||||||
throw slotOutOfBounds(opcode, slot);
|
throw slotOutOfBounds(opcode, slot);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue