Interface TranslationAdvice

All Known Implementing Classes:
ConservativeTranslationAdvice, DexTranslationAdvice

public interface TranslationAdvice
Interface for "advice" passed from the late stage of translation back to the early stage. This allows for the final target architecture to exert its influence early in the translation process without having the early stage code be explicitly tied to the target.
  • Method Summary

    Modifier and Type
    Method
    Description
    int
    Gets the maximum register width that can be represented optimally.
    boolean
    hasConstantOperation(Rop opcode, RegisterSpec sourceA, RegisterSpec sourceB)
    Returns an indication of whether the target can directly represent an instruction with the given opcode operating on the given arguments, where the last source argument is used as a constant.
    boolean
    Returns true if the translation target requires the sources of the specified opcode to be in order and contiguous (eg, for an invoke-range)
  • Method Details

    • hasConstantOperation

      boolean hasConstantOperation(Rop opcode, RegisterSpec sourceA, RegisterSpec sourceB)
      Returns an indication of whether the target can directly represent an instruction with the given opcode operating on the given arguments, where the last source argument is used as a constant. (That is, the last argument must have a type which indicates it is a known constant.) The instruction associated must have exactly two sources.
      Parameters:
      opcode - non-null; the opcode
      sourceA - non-null; the first source
      sourceB - non-null; the second source
      Returns:
      true iff the target can represent the operation using a constant for the last argument
    • requiresSourcesInOrder

      boolean requiresSourcesInOrder(Rop opcode, RegisterSpecList sources)
      Returns true if the translation target requires the sources of the specified opcode to be in order and contiguous (eg, for an invoke-range)
      Parameters:
      opcode - non-null; opcode
      sources - non-null; source list
      Returns:
      true iff the target requires the sources to be in order and contiguous.
    • getMaxOptimalRegisterCount

      int getMaxOptimalRegisterCount()
      Gets the maximum register width that can be represented optimally. For example, Dex bytecode does not have instruction forms that take register numbers larger than 15 for all instructions so DexTranslationAdvice returns 15 here.
      Returns:
      register count noted above