java.lang.Object
com.pnfsoftware.jeb.core.units.code.asm.processor.arch.RegisterUtil

public class RegisterUtil extends Object
Utility methods for IRegisterBank and IRegisterData, including methods to create standard register ids.

Implementation note: at this time, a standard register id is composed as such (this may change):

           I=index (20 bits), G=group (12 bits), S=bitsize (12 bits), B=bitstart (12 bits), x=unused
           storage format: [xx BB BS SS GG GI II II]
           
  • Method Details

    • getBank

      public static IRegisterBank getBank(ProcessorType proctype)
      Convenience method to retrieve a register bank used by a well-known processor type.

      It is recommended to use RegisterBankService directly.

      Parameters:
      proctype - a processor type
      Returns:
      null if not found
    • createRegisterId

      public static long createRegisterId(int index, int grp, int bitsize)
      Create a standard register id (full or slice).
      Parameters:
      index - register index
      grp - register group
      bitsize - register size in bits
      Returns:
      register id
    • createRegisterId

      public static long createRegisterId(int index, int grp, int bitsize, int bitstart)
      Create a standard register id (full or slice).
      Parameters:
      index - register index
      grp - register group
      bitsize - register size in bits
      bitstart - start bit for register slices
      Returns:
      register id
    • createPureRegisterId

      public static long createPureRegisterId(int index, int grp)
      Create a pure register id, i.e. an id always representing a full register, without indicators such as bit size or bit start.
      Parameters:
      index - register index
      grp - register group
      Returns:
      pure register id
    • createRegisterIdFromPureId

      public static long createRegisterIdFromPureId(long pure, int bitsize, int bitstart)
      Create a full register id from a pure id and slice metadata.
      Parameters:
      pure - pure register id
      bitsize - register size in bits
      bitstart - start bit
      Returns:
      register id
    • isPureId

      public static boolean isPureId(long id)
      Determine whether a register id is pure.
      Parameters:
      id - register id
      Returns:
      true if the id does not encode size or bit-start metadata
    • getPureId

      public static long getPureId(long id)
      Extract the pure id from a register id.
      Parameters:
      id - register id
      Returns:
      pure register id
    • getRegisterIndex

      public static int getRegisterIndex(long id)
      Extract the register index from a register id.
      Parameters:
      id - register id
      Returns:
      register index
    • getRegisterGroup

      public static int getRegisterGroup(long id)
      Extract the register group from a register id.
      Parameters:
      id - register id
      Returns:
      register group
    • getRegisterBitsize

      public static int getRegisterBitsize(long id)
      Extract the register size from a register id.
      Parameters:
      id - register id
      Returns:
      register size in bits
    • getRegisterBitstart

      public static int getRegisterBitstart(long id)
      Extract the register slice start bit from a register id.
      Parameters:
      id - register id
      Returns:
      start bit
    • getEntryByType

      public static RegisterDescriptionEntry getEntryByType(IRegisterBank bank, RegisterType type)
      Retrieve a register entry by type.
      Parameters:
      bank - register bank
      type - register type
      Returns:
      register entry, or null
    • getEntryByType

      public static RegisterDescriptionEntry getEntryByType(IRegisterData bank, RegisterType type)
      Retrieve a register entry by type.
      Parameters:
      bank - register data
      type - register type
      Returns:
      register entry, or null
    • getEntryByName

      public static RegisterDescriptionEntry getEntryByName(IRegisterBank bank, String name)
      Retrieve a register entry by name.
      Parameters:
      bank - register bank
      name - register name
      Returns:
      register entry, or null
    • getEntryByName

      public static RegisterDescriptionEntry getEntryByName(IRegisterData bank, String name)
      Retrieve a register entry by name.
      Parameters:
      bank - register data
      name - register name
      Returns:
      register entry, or null
    • getValueByName

      public static byte[] getValueByName(IRegisterData bank, String name)
      Retrieve a register value by name.
      Parameters:
      bank - register data
      name - register name
      Returns:
      register value bytes, or null
    • getValueByNameAsLong

      public static Long getValueByNameAsLong(IRegisterData bank, String name)
      Retrieve a register value by name as a long.
      Parameters:
      bank - register data
      name - register name
      Returns:
      register value, or null
    • setValueByName

      public static boolean setValueByName(IRegisterData bank, String name, byte[] bytes)
      Set a register value by name.
      Parameters:
      bank - register data
      name - register name
      bytes - register value bytes
      Returns:
      true if the value was set
    • setValueByNameAsLong

      public static boolean setValueByNameAsLong(IRegisterData bank, String name, long value)
      Set a register value by name as a long.
      Parameters:
      bank - register data
      name - register name
      value - register value
      Returns:
      true if the value was set
    • byteArrayToHex

      public static String byteArrayToHex(Endianness endianness, byte[] data)
      Format a byte array according to an endianness.
      Parameters:
      endianness - byte order
      data - bytes to format
      Returns:
      hexadecimal string
    • byteArrayToHex

      public static String byteArrayToHex(Endianness endianness, byte[] data, int pos, int end)
      Format a byte-array range according to an endianness.
      Parameters:
      endianness - byte order
      data - bytes to format
      pos - start offset
      end - exclusive end offset
      Returns:
      hexadecimal string