8341581: Optimize BytecodeHelpers validate slot
Reviewed-by: liach
This commit is contained in:
parent
4d50cbb5a7
commit
d996ca863d
@ -88,9 +88,9 @@ public class BytecodeHelpers {
|
||||
case 2 -> Opcode.ALOAD_2;
|
||||
case 3 -> Opcode.ALOAD_3;
|
||||
default -> {
|
||||
if ((slot & 0xFF) == slot)
|
||||
if ((slot & ~0xFF) == 0)
|
||||
yield Opcode.ALOAD;
|
||||
if ((slot & 0xFFFF) == slot)
|
||||
if ((slot & ~0xFFFF) == 0)
|
||||
yield Opcode.ALOAD_W;
|
||||
throw slotOutOfBounds(slot);
|
||||
}
|
||||
@ -104,9 +104,9 @@ public class BytecodeHelpers {
|
||||
case 2 -> Opcode.FLOAD_2;
|
||||
case 3 -> Opcode.FLOAD_3;
|
||||
default -> {
|
||||
if ((slot & 0xFF) == slot)
|
||||
if ((slot & ~0xFF) == 0)
|
||||
yield Opcode.FLOAD;
|
||||
if ((slot & 0xFFFF) == slot)
|
||||
if ((slot & ~0xFFFF) == 0)
|
||||
yield Opcode.FLOAD_W;
|
||||
throw slotOutOfBounds(slot);
|
||||
}
|
||||
@ -120,9 +120,9 @@ public class BytecodeHelpers {
|
||||
case 2 -> Opcode.DLOAD_2;
|
||||
case 3 -> Opcode.DLOAD_3;
|
||||
default -> {
|
||||
if ((slot & 0xFF) == slot)
|
||||
if ((slot & ~0xFF) == 0)
|
||||
yield Opcode.DLOAD;
|
||||
if ((slot & 0xFFFF) == slot)
|
||||
if ((slot & ~0xFFFF) == 0)
|
||||
yield Opcode.DLOAD_W;
|
||||
throw slotOutOfBounds(slot);
|
||||
}
|
||||
@ -136,9 +136,9 @@ public class BytecodeHelpers {
|
||||
case 2 -> Opcode.LLOAD_2;
|
||||
case 3 -> Opcode.LLOAD_3;
|
||||
default -> {
|
||||
if ((slot & 0xFF) == slot)
|
||||
if ((slot & ~0xFF) == 0)
|
||||
yield Opcode.LLOAD;
|
||||
if ((slot & 0xFFFF) == slot)
|
||||
if ((slot & ~0xFFFF) == 0)
|
||||
yield Opcode.LLOAD_W;
|
||||
throw slotOutOfBounds(slot);
|
||||
}
|
||||
@ -152,9 +152,9 @@ public class BytecodeHelpers {
|
||||
case 2 -> Opcode.ILOAD_2;
|
||||
case 3 -> Opcode.ILOAD_3;
|
||||
default -> {
|
||||
if ((slot & 0xFF) == slot)
|
||||
if ((slot & ~0xFF) == 0)
|
||||
yield Opcode.ILOAD;
|
||||
if ((slot & 0xFFFF) == slot)
|
||||
if ((slot & ~0xFFFF) == 0)
|
||||
yield Opcode.ILOAD_W;
|
||||
throw slotOutOfBounds(slot);
|
||||
}
|
||||
@ -180,9 +180,9 @@ public class BytecodeHelpers {
|
||||
case 2 -> Opcode.ASTORE_2;
|
||||
case 3 -> Opcode.ASTORE_3;
|
||||
default -> {
|
||||
if ((slot & 0xFF) == slot)
|
||||
if ((slot & ~0xFF) == 0)
|
||||
yield Opcode.ASTORE;
|
||||
if ((slot & 0xFFFF) == slot)
|
||||
if ((slot & ~0xFFFF) == 0)
|
||||
yield Opcode.ASTORE_W;
|
||||
throw slotOutOfBounds(slot);
|
||||
}
|
||||
@ -196,9 +196,9 @@ public class BytecodeHelpers {
|
||||
case 2 -> Opcode.FSTORE_2;
|
||||
case 3 -> Opcode.FSTORE_3;
|
||||
default -> {
|
||||
if ((slot & 0xFF) == slot)
|
||||
if ((slot & ~0xFF) == 0)
|
||||
yield Opcode.FSTORE;
|
||||
if ((slot & 0xFFFF) == slot)
|
||||
if ((slot & ~0xFFFF) == 0)
|
||||
yield Opcode.FSTORE_W;
|
||||
throw slotOutOfBounds(slot);
|
||||
}
|
||||
@ -212,9 +212,9 @@ public class BytecodeHelpers {
|
||||
case 2 -> Opcode.DSTORE_2;
|
||||
case 3 -> Opcode.DSTORE_3;
|
||||
default -> {
|
||||
if ((slot & 0xFF) == slot)
|
||||
if ((slot & ~0xFF) == 0)
|
||||
yield Opcode.DSTORE;
|
||||
if ((slot & 0xFFFF) == slot)
|
||||
if ((slot & ~0xFFFF) == 0)
|
||||
yield Opcode.DSTORE_W;
|
||||
throw slotOutOfBounds(slot);
|
||||
}
|
||||
@ -228,9 +228,9 @@ public class BytecodeHelpers {
|
||||
case 2 -> Opcode.LSTORE_2;
|
||||
case 3 -> Opcode.LSTORE_3;
|
||||
default -> {
|
||||
if ((slot & 0xFF) == slot)
|
||||
if ((slot & ~0xFF) == 0)
|
||||
yield Opcode.LSTORE;
|
||||
if ((slot & 0xFFFF) == slot)
|
||||
if ((slot & ~0xFFFF) == 0)
|
||||
yield Opcode.LSTORE_W;
|
||||
throw slotOutOfBounds(slot);
|
||||
}
|
||||
@ -244,9 +244,9 @@ public class BytecodeHelpers {
|
||||
case 2 -> Opcode.ISTORE_2;
|
||||
case 3 -> Opcode.ISTORE_3;
|
||||
default -> {
|
||||
if ((slot & 0xFF) == slot)
|
||||
if ((slot & ~0xFF) == 0)
|
||||
yield Opcode.ISTORE;
|
||||
if ((slot & 0xFFFF) == slot)
|
||||
if ((slot & ~0xFFFF) == 0)
|
||||
yield Opcode.ISTORE_W;
|
||||
throw slotOutOfBounds(slot);
|
||||
}
|
||||
@ -377,20 +377,20 @@ public class BytecodeHelpers {
|
||||
public static void validateSlot(Opcode opcode, int slot, boolean load) {
|
||||
int size = opcode.sizeIfFixed();
|
||||
if (size == 1 && slot == (load ? intrinsicLoadSlot(opcode) : intrinsicStoreSlot(opcode)) ||
|
||||
size == 2 && slot == (slot & 0xFF) ||
|
||||
size == 4 && slot == (slot & 0xFFFF))
|
||||
size == 2 && (slot & ~0xFF) == 0 ||
|
||||
size == 4 && (slot & ~0xFFFF) == 0)
|
||||
return;
|
||||
throw slotOutOfBounds(opcode, slot);
|
||||
}
|
||||
|
||||
public static void validateSlot(int slot) {
|
||||
if ((slot & 0xFFFF) != slot)
|
||||
if ((slot & ~0xFFFF) != 0)
|
||||
throw slotOutOfBounds(slot);
|
||||
}
|
||||
|
||||
public static boolean validateAndIsWideIinc(int slot, int val) {
|
||||
var ret = false;
|
||||
if ((slot & 0xFF) != slot) {
|
||||
if ((slot & ~0xFF) != 0) {
|
||||
validateSlot(slot);
|
||||
ret = true;
|
||||
}
|
||||
@ -404,8 +404,8 @@ public class BytecodeHelpers {
|
||||
}
|
||||
|
||||
public static void validateRet(Opcode opcode, int slot) {
|
||||
if (opcode == Opcode.RET && slot == (slot & 0xFF) ||
|
||||
opcode == Opcode.RET_W && slot == (slot & 0xFFFF))
|
||||
if (opcode == Opcode.RET && (slot & ~0xFF) == 0 ||
|
||||
opcode == Opcode.RET_W && (slot & ~0xFFFF) == 0)
|
||||
return;
|
||||
Objects.requireNonNull(opcode);
|
||||
throw slotOutOfBounds(opcode, slot);
|
||||
|
Loading…
x
Reference in New Issue
Block a user