Class InstructionSequence

java.lang.Object
org.jboss.byteman.agent.adapter.cfg.InstructionSequence

public class InstructionSequence extends Object
Class used to hold a sequence of instructions within a basic block
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private int[]
    data array storing instructions and their operands encoded as ints.
    private int[]
    since instructions are encoded with their operands we need an offsets array to identify where each instruction strats, allowing instructions and their operand to be searched forwards and backwards
    private int
    the number of valid entries in array encodedInstructions
    private int
    the number of valid offsets to instructions in array instructionOffsets
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    int
    add(int insn)
    add an instruction to the sequence
    int
    add(int insn, int arg1)
    add an instruction with one encoded argument to the sequence
    int
    add(int insn, int[] args)
    add an instruction with an arbitrary number of encoded arguments to the sequence
    int
    add(int insn, int arg1, int arg2)
    add an instruction with two encoded arguments to the sequence
    int
    add(int insn, int arg1, int arg2, int arg3)
    add an instruction with three encoded arguments to the sequence
    int
    add(int insn, int arg1, int arg2, int arg3, int arg4)
    add an instruction with four encoded arguments to the sequence
    private void
    ensureSpace(int count)
    expand the offsets array if necessary to allow room for 1 more instructions with count more arguments
    int
    get(int i)
    return the instruction at the supplied offset
    int
    getArg(int i, int j)
    return a specific encoded argument of a given instruction
    int
    getArgCount(int i)
    return the number of encoded arguments of a given instruction
    int
    getType(int i)
    return the type of a given instruction
    int
    return the number of instructions in the sequence

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • instructionOffsets

      private int[] instructionOffsets
      since instructions are encoded with their operands we need an offsets array to identify where each instruction strats, allowing instructions and their operand to be searched forwards and backwards
    • numInstructions

      private int numInstructions
      the number of valid offsets to instructions in array instructionOffsets
    • encodedInstructions

      private int[] encodedInstructions
      data array storing instructions and their operands encoded as ints. integer operands are embedded as is operands which are strings (type, const, field etc) must be translated via the names array in the associated cfg. operands which are jump labels must be translated by calling getNthOut() on the associated basic block.
    • numEncoded

      private int numEncoded
      the number of valid entries in array encodedInstructions
  • Constructor Details

    • InstructionSequence

      public InstructionSequence()
  • Method Details

    • ensureSpace

      private void ensureSpace(int count)
      expand the offsets array if necessary to allow room for 1 more instructions with count more arguments
    • size

      public int size()
      return the number of instructions in the sequence
      Returns:
      the the number of instructions in the sequence
    • get

      public int get(int i)
      return the instruction at the supplied offset
      Parameters:
      i - the offset
      Returns:
      the ith instruction in the sequuence
    • getType

      public int getType(int i)
      return the type of a given instruction
      Parameters:
      i - the instruction index
      Returns:
      the ith instruction in the sequuence
    • getArgCount

      public int getArgCount(int i)
      return the number of encoded arguments of a given instruction
      Parameters:
      i - the offset of the instruction
      Returns:
      the number of encoded arguments of the ith instruction in the sequuence
    • getArg

      public int getArg(int i, int j)
      return a specific encoded argument of a given instruction
      Parameters:
      i - the offset of the instruction
      j - the index of the arguument attached to the instruction
      Returns:
      the jth encoded argument of the ith instruction in the sequuence
    • add

      public int add(int insn)
      add an instruction to the sequence
      Parameters:
      insn - the instruction
      Returns:
      the index of the newly added instruction
    • add

      public int add(int insn, int arg1)
      add an instruction with one encoded argument to the sequence
      Parameters:
      insn - the instruction
      arg1 - the argument index
      Returns:
      the index of the newly added instruction
    • add

      public int add(int insn, int arg1, int arg2)
      add an instruction with two encoded arguments to the sequence
      Parameters:
      insn - the instruction
      arg1 - the first argument index
      arg2 - the second argument index
      Returns:
      the index of the newly added instruction
    • add

      public int add(int insn, int arg1, int arg2, int arg3)
      add an instruction with three encoded arguments to the sequence
      Parameters:
      insn - the instruction
      arg1 - the first argument index
      arg2 - the second argument index
      arg3 - the third argument index
      Returns:
      the index of the newly added instruction
    • add

      public int add(int insn, int arg1, int arg2, int arg3, int arg4)
      add an instruction with four encoded arguments to the sequence
      Parameters:
      insn - the instruction
      arg1 - the first argument index
      arg2 - the second argument index
      arg3 - the third argument index
      arg4 - the third argument index
      Returns:
      the index of the newly added instruction
    • add

      public int add(int insn, int[] args)
      add an instruction with an arbitrary number of encoded arguments to the sequence
      Parameters:
      insn - the instruction
      args - the arguments
      Returns:
      the index of the newly added instruction