OTAWA  2.0
Framework to perform machine analysis and compute WCET.
otawa::hard::Register Class Reference

#include <otawa/hard/Register.h>

Classes

class  Make
 

Public Types

enum  kind_t {
  NONE = 0, ADDR, INT, FLOAT,
  BITS
}
 
typedef enum otawa::hard::Register::kind_t kind_t
 

Public Member Functions

const List< string > & aliases (void)
 
RegBankbank (void) const
 
int id (void) const
 
kind_t kind (void) const
 
const stringname (void) const
 
int number (void) const
 
int platformNumber (void) const
 
 Register (const Make &make)
 Build a register based on a maker class. More...
 
 Register (string name, kind_t kind, int size)
 Build a new register. More...
 
int size (void) const
 

Private Attributes

List< string_aliases
 
RegBank_bank
 
int _id
 
kind_t _kind
 
string _name
 
int _number
 
int _size
 

Friends

class Platform
 
class RegBank
 

Detailed Description

Objects of this class are simple machine register, more accurately unbreakable atomic registers.

The preferred way to declare a register is a the user of maker class the provides the most flexiblity:

#include <otawa/hard/Register.h
using namespace otawa;
hard::Register PC(hard::Register::Make("PC").alias("R15").kind(hard::Register::ADDR));

There is two ways to declare a register bank :

  • the register are automatically generated from the bank description,
  • the register are defined separately and passed to the bank constructor.

Member Typedef Documentation

◆ kind_t

Member Enumeration Documentation

◆ kind_t

This enumeration represents the differents kind of value found in hardware registers.

Enumerator
NONE 

Usually only used as null value for register kinds.

ADDR 

A register specialized for containing an address.

INT 

A register specialized for containing an integer value.

FLOAT 

A register specialized for containing float value.

BITS 

This kind defines registers not specialized in other kinds. This kind represents special purpose registers as status register.

Constructor & Destructor Documentation

◆ Register() [1/2]

otawa::hard::Register::Register ( string  name,
Register::kind_t  kind,
int  size 
)

Build a new register.

Parameters
nameRegister name.
numberRegister number.
bankOwner bank.

References kind(), and NONE.

◆ Register() [2/2]

otawa::hard::Register::Register ( const Make make)

Build a register based on a maker class.

This allows to define more shorly a register or to provide more detail as alias names.

References _aliases, _kind, _size, otawa::make(), and NONE.

Member Function Documentation

◆ aliases()

const List<string>& otawa::hard::Register::aliases ( void  )
inline

◆ bank()

RegBank * otawa::hard::Register::bank ( void  ) const
inline

Get the owner bank of the register.

Returns
Register bank.

◆ id()

int otawa::hard::Register::id ( void  ) const
inline

Gives a number which is unique for this platform. Each register, in a platform, is associated with a unique number ranging from 0 to Platform::regCount()-1. This number may be used as index to table or to bit vectors matching the overall registers.

Returns
Platform number of the register.

Referenced by otawa::etime::StepGraphBuilder::manageRead(), otawa::etime::StepGraphBuilder::manageWrite(), and otawa::ParExeGraph::newRegResource().

◆ kind()

kind_t otawa::hard::Register::kind ( void  ) const
inline

Get the kind of a register.

Referenced by Register().

◆ name()

◆ number()

int otawa::hard::Register::number ( void  ) const
inline

Get the register number.

Returns
Register number.

◆ platformNumber()

int otawa::hard::Register::platformNumber ( void  ) const
inline
Deprecated:
Use id() instead.

◆ size()

int otawa::hard::Register::size ( void  ) const
inline

Friends And Related Function Documentation

◆ Platform

friend class Platform
friend

◆ RegBank

friend class RegBank
friend

Member Data Documentation

◆ _aliases

List<string> otawa::hard::Register::_aliases
private

Referenced by Register().

◆ _bank

RegBank* otawa::hard::Register::_bank
private

◆ _id

int otawa::hard::Register::_id
private

◆ _kind

kind_t otawa::hard::Register::_kind
private

Referenced by Register().

◆ _name

string otawa::hard::Register::_name
private

◆ _number

int otawa::hard::Register::_number
private

◆ _size

int otawa::hard::Register::_size
private

Referenced by Register().


The documentation for this class was generated from the following files: