ghc-lib-parser-9.14.1.20251220: The GHC API, decoupled from GHC versions

Safe Haskell | Ignore
Language | GHC2021

GHC.Platform.Reg

Description

An architecture independent description of a register. This needs to stay architecture independent because it is used by NCGMonad and the register allocators, which are shared by all architectures.

Synopsis

- type RegNo = Int
- data Reg
  - = RegVirtual !VirtualReg
  - | RegReal !RealReg
- regSingle :: RegNo -> Reg
- realRegSingle :: RegNo -> RealReg
- isRealReg :: Reg -> Bool
- takeRealReg :: Reg -> Maybe RealReg
- isVirtualReg :: Reg -> Bool
- takeVirtualReg :: Reg -> Maybe VirtualReg
- data VirtualReg
  - = VirtualRegI {
    - virtualRegUnique :: !Unique
    }
  - | VirtualRegHi {
    - virtualRegUnique :: !Unique
    }
  - | VirtualRegD {
    - virtualRegUnique :: !Unique
    }
  - | VirtualRegV128 {
    - virtualRegUnique :: !Unique
    }
- renameVirtualReg :: Unique -> VirtualReg -> VirtualReg
- classOfVirtualReg :: Arch -> VirtualReg -> RegClass
- getHiVirtualRegFromLo :: VirtualReg -> VirtualReg
- getHiVRegFromLo :: Reg -> Reg
- newtype RealReg = RealRegSingle RegNo
- regNosOfRealReg :: RealReg -> [RegNo]
- realRegsAlias :: RealReg -> RealReg -> Bool
- liftPatchFnToRegReg :: (VirtualReg -> RealReg) -> Reg -> Reg

# Documentation

type RegNo = Int #

An identifier for a primitive real machine register.

data Reg #

A register, either virtual or real

Constructors

RegVirtual !VirtualReg |
RegReal !RealReg |

#### Instances

Instances details

Show Reg # |
Instance details Defined in GHC.Platform.Reg Methods showsPrec :: Int -> Reg -> ShowS # show :: Reg -> String # showList :: [Reg] -> ShowS #
Uniquable Reg # |
Instance details Defined in GHC.Platform.Reg Methods getUnique :: Reg -> Unique #
Outputable Reg # | Print a reg in a generic manner If you want the architecture specific names, then use the pprReg function from the appropriate Ppr module.
Instance details Defined in GHC.Platform.Reg Methods ppr :: Reg -> SDoc #
Eq Reg # |
Instance details Defined in GHC.Platform.Reg Methods (==) :: Reg -> Reg -> Bool # (/=) :: Reg -> Reg -> Bool #
Ord Reg # |
Instance details Defined in GHC.Platform.Reg Methods compare :: Reg -> Reg -> Ordering # (<) :: Reg -> Reg -> Bool # (<=) :: Reg -> Reg -> Bool # (>) :: Reg -> Reg -> Bool # (>=) :: Reg -> Reg -> Bool # max :: Reg -> Reg -> Reg # min :: Reg -> Reg -> Reg #

regSingle :: RegNo -> Reg #

realRegSingle :: RegNo -> RealReg #

isRealReg :: Reg -> Bool #

takeRealReg :: Reg -> Maybe RealReg #

isVirtualReg :: Reg -> Bool #

takeVirtualReg :: Reg -> Maybe VirtualReg #

data VirtualReg #

Constructors

VirtualRegI | Integer virtual register
Fields virtualRegUnique :: !Unique
VirtualRegHi | High part of 2-word virtual register
Fields virtualRegUnique :: !Unique
VirtualRegD | Double virtual register
Fields virtualRegUnique :: !Unique
VirtualRegV128 | 128-bit wide vector virtual register
Fields virtualRegUnique :: !Unique

#### Instances

Instances details

Show VirtualReg # |
Instance details Defined in GHC.Platform.Reg Methods showsPrec :: Int -> VirtualReg -> ShowS # show :: VirtualReg -> String # showList :: [VirtualReg] -> ShowS #
Uniquable VirtualReg # |
Instance details Defined in GHC.Platform.Reg Methods getUnique :: VirtualReg -> Unique #
Outputable VirtualReg # |
Instance details Defined in GHC.Platform.Reg Methods ppr :: VirtualReg -> SDoc #
Eq VirtualReg # |
Instance details Defined in GHC.Platform.Reg Methods (==) :: VirtualReg -> VirtualReg -> Bool # (/=) :: VirtualReg -> VirtualReg -> Bool #
Ord VirtualReg # |
Instance details Defined in GHC.Platform.Reg Methods compare :: VirtualReg -> VirtualReg -> Ordering # (<) :: VirtualReg -> VirtualReg -> Bool # (<=) :: VirtualReg -> VirtualReg -> Bool # (>) :: VirtualReg -> VirtualReg -> Bool # (>=) :: VirtualReg -> VirtualReg -> Bool # max :: VirtualReg -> VirtualReg -> VirtualReg # min :: VirtualReg -> VirtualReg -> VirtualReg #

renameVirtualReg :: Unique -> VirtualReg -> VirtualReg #

classOfVirtualReg :: Arch -> VirtualReg -> RegClass #

getHiVirtualRegFromLo :: VirtualReg -> VirtualReg #

getHiVRegFromLo :: Reg -> Reg #

newtype RealReg #

RealRegs are machine regs which are available for allocation, in the usual way. We know what class they are, because that's part of the processor's architecture.

Constructors

RealRegSingle RegNo |

#### Instances

Instances details

Show RealReg # |
Instance details Defined in GHC.Platform.Reg Methods showsPrec :: Int -> RealReg -> ShowS # show :: RealReg -> String # showList :: [RealReg] -> ShowS #
Uniquable RealReg # |
Instance details Defined in GHC.Platform.Reg Methods getUnique :: RealReg -> Unique #
Outputable RealReg # |
Instance details Defined in GHC.Platform.Reg Methods ppr :: RealReg -> SDoc #
Eq RealReg # |
Instance details Defined in GHC.Platform.Reg Methods (==) :: RealReg -> RealReg -> Bool # (/=) :: RealReg -> RealReg -> Bool #
Ord RealReg # |
Instance details Defined in GHC.Platform.Reg Methods compare :: RealReg -> RealReg -> Ordering # (<) :: RealReg -> RealReg -> Bool # (<=) :: RealReg -> RealReg -> Bool # (>) :: RealReg -> RealReg -> Bool # (>=) :: RealReg -> RealReg -> Bool # max :: RealReg -> RealReg -> RealReg # min :: RealReg -> RealReg -> RealReg #

regNosOfRealReg :: RealReg -> [RegNo] #

realRegsAlias :: RealReg -> RealReg -> Bool #

liftPatchFnToRegReg :: (VirtualReg -> RealReg) -> Reg -> Reg #

The patch function supplied by the allocator maps VirtualReg to RealReg regs, but sometimes we want to apply it to plain old Reg.