blob: 7b110ebc669f7ec075ffc6b1c768f57012422362 [file] [log] [blame]
// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.lightir;
import static com.android.tools.r8.lightir.LirOpcodes.INVOKEDIRECT;
import static com.android.tools.r8.lightir.LirOpcodes.INVOKEDIRECT_ITF;
import static com.android.tools.r8.lightir.LirOpcodes.INVOKEINTERFACE;
import static com.android.tools.r8.lightir.LirOpcodes.INVOKESTATIC;
import static com.android.tools.r8.lightir.LirOpcodes.INVOKESTATIC_ITF;
import static com.android.tools.r8.lightir.LirOpcodes.INVOKESUPER;
import static com.android.tools.r8.lightir.LirOpcodes.INVOKESUPER_ITF;
import static com.android.tools.r8.lightir.LirOpcodes.INVOKEVIRTUAL;
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.ir.code.InvokeType;
public class LirOpcodeUtils {
public static boolean getInterfaceBitFromInvokeOpcode(int opcode) {
switch (opcode) {
case INVOKEDIRECT_ITF:
case INVOKEINTERFACE:
case INVOKESTATIC_ITF:
case INVOKESUPER_ITF:
return true;
default:
assert opcode == INVOKEDIRECT
|| opcode == INVOKESTATIC
|| opcode == INVOKESUPER
|| opcode == INVOKEVIRTUAL;
return false;
}
}
public static InvokeType getInvokeType(int opcode) {
assert isInvokeMethod(opcode);
switch (opcode) {
case INVOKEDIRECT:
case INVOKEDIRECT_ITF:
return InvokeType.DIRECT;
case INVOKEINTERFACE:
return InvokeType.INTERFACE;
case INVOKESTATIC:
case INVOKESTATIC_ITF:
return InvokeType.STATIC;
case INVOKESUPER:
case INVOKESUPER_ITF:
return InvokeType.SUPER;
case INVOKEVIRTUAL:
return InvokeType.VIRTUAL;
default:
throw new Unreachable();
}
}
public static boolean isInvokeMethod(int opcode) {
switch (opcode) {
case INVOKEDIRECT:
case INVOKEDIRECT_ITF:
case INVOKEINTERFACE:
case INVOKESTATIC:
case INVOKESTATIC_ITF:
case INVOKESUPER:
case INVOKESUPER_ITF:
case INVOKEVIRTUAL:
return true;
default:
return false;
}
}
}