GHC.ByteCode.Instr

ghc-9.10.0.20240328: The GHC API

Safe Haskell | None
Language | GHC2021

GHC.ByteCode.Instr

Description

Bytecode instruction definitions

Synopsis

- data BCInstr
  - = STKCHECK !Word
  - | PUSH_L !WordOff
  - | PUSH_LL !WordOff !WordOff
  - | PUSH_LLL !WordOff !WordOff !WordOff
  - | PUSH8 !ByteOff
  - | PUSH16 !ByteOff
  - | PUSH32 !ByteOff
  - | PUSH8_W !ByteOff
  - | PUSH16_W !ByteOff
  - | PUSH32_W !ByteOff
  - | PUSH_G Name
  - | PUSH_PRIMOP PrimOp
  - | PUSH_BCO (ProtoBCO Name)
  - | PUSH_ALTS (ProtoBCO Name) ArgRep
  - | PUSH_ALTS_TUPLE (ProtoBCO Name) !NativeCallInfo (ProtoBCO Name)
  - | PUSH_PAD8
  - | PUSH_PAD16
  - | PUSH_PAD32
  - | PUSH_UBX8 Literal
  - | PUSH_UBX16 Literal
  - | PUSH_UBX32 Literal
  - | PUSH_UBX Literal !WordOff
  - | PUSH_ADDR Name
  - | PUSH_APPLY_N
  - | PUSH_APPLY_V
  - | PUSH_APPLY_F
  - | PUSH_APPLY_D
  - | PUSH_APPLY_L
  - | PUSH_APPLY_P
  - | PUSH_APPLY_PP
  - | PUSH_APPLY_PPP
  - | PUSH_APPLY_PPPP
  - | PUSH_APPLY_PPPPP
  - | PUSH_APPLY_PPPPPP
  - | SLIDE !WordOff !WordOff
  - | ALLOC_AP !HalfWord
  - | ALLOC_AP_NOUPD !HalfWord
  - | ALLOC_PAP !HalfWord !HalfWord
  - | MKAP !WordOff !HalfWord
  - | MKPAP !WordOff !HalfWord
  - | UNPACK !WordOff
  - | PACK DataCon !WordOff
  - | LABEL LocalLabel
  - | TESTLT_I !Int LocalLabel
  - | TESTEQ_I !Int LocalLabel
  - | TESTLT_W !Word LocalLabel
  - | TESTEQ_W !Word LocalLabel
  - | TESTLT_I64 !Int64 LocalLabel
  - | TESTEQ_I64 !Int64 LocalLabel
  - | TESTLT_I32 !Int32 LocalLabel
  - | TESTEQ_I32 !Int32 LocalLabel
  - | TESTLT_I16 !Int16 LocalLabel
  - | TESTEQ_I16 !Int16 LocalLabel
  - | TESTLT_I8 !Int8 LocalLabel
  - | TESTEQ_I8 !Int16 LocalLabel
  - | TESTLT_W64 !Word64 LocalLabel
  - | TESTEQ_W64 !Word64 LocalLabel
  - | TESTLT_W32 !Word32 LocalLabel
  - | TESTEQ_W32 !Word32 LocalLabel
  - | TESTLT_W16 !Word16 LocalLabel
  - | TESTEQ_W16 !Word16 LocalLabel
  - | TESTLT_W8 !Word8 LocalLabel
  - | TESTEQ_W8 !Word8 LocalLabel
  - | TESTLT_F !Float LocalLabel
  - | TESTEQ_F !Float LocalLabel
  - | TESTLT_D !Double LocalLabel
  - | TESTEQ_D !Double LocalLabel
  - | TESTLT_P !Word16 LocalLabel
  - | TESTEQ_P !Word16 LocalLabel
  - | CASEFAIL
  - | JMP LocalLabel
  - | CCALL !WordOff (RemotePtr C_ffi_cif) !Word16
  - | PRIMCALL
  - | SWIZZLE !WordOff !Int
  - | ENTER
  - | RETURN ArgRep
  - | RETURN_TUPLE
  - | BRK_FUN (ForeignRef BreakArray) !Word16 (RemotePtr ModuleName) (RemotePtr CostCentre)
- data ProtoBCO a = ProtoBCO {
  - protoBCOName :: a
  - protoBCOInstrs :: [BCInstr]
  - protoBCOBitmap :: [StgWord]
  - protoBCOBitmapSize :: Word
  - protoBCOArity :: Int
  - protoBCOExpr :: Either [CgStgAlt] CgStgRhs
  - protoBCOFFIs :: [FFIInfo]
  }
- bciStackUse :: BCInstr -> Word
- newtype LocalLabel = LocalLabel {
  - getLocalLabel :: Word32
  }

# Documentation

data BCInstr Source #

Constructors

STKCHECK !Word |
PUSH_L !WordOff |
PUSH_LL !WordOff !WordOff |
PUSH_LLL !WordOff !WordOff !WordOff |
PUSH8 !ByteOff |
PUSH16 !ByteOff |
PUSH32 !ByteOff |
PUSH8_W !ByteOff |
PUSH16_W !ByteOff |
PUSH32_W !ByteOff |
PUSH_G Name |
PUSH_PRIMOP PrimOp |
PUSH_BCO (ProtoBCO Name) |
PUSH_ALTS (ProtoBCO Name) ArgRep |
PUSH_ALTS_TUPLE (ProtoBCO Name) !NativeCallInfo (ProtoBCO Name) |
PUSH_PAD8 |
PUSH_PAD16 |
PUSH_PAD32 |
PUSH_UBX8 Literal |
PUSH_UBX16 Literal |
PUSH_UBX32 Literal |
PUSH_UBX Literal !WordOff |
PUSH_ADDR Name |
PUSH_APPLY_N |
PUSH_APPLY_V |
PUSH_APPLY_F |
PUSH_APPLY_D |
PUSH_APPLY_L |
PUSH_APPLY_P |
PUSH_APPLY_PP |
PUSH_APPLY_PPP |
PUSH_APPLY_PPPP |
PUSH_APPLY_PPPPP |
PUSH_APPLY_PPPPPP |
SLIDE !WordOff !WordOff |
ALLOC_AP !HalfWord |
ALLOC_AP_NOUPD !HalfWord |
ALLOC_PAP !HalfWord !HalfWord |
MKAP !WordOff !HalfWord |
MKPAP !WordOff !HalfWord |
UNPACK !WordOff |
PACK DataCon !WordOff |
LABEL LocalLabel |
TESTLT_I !Int LocalLabel |
TESTEQ_I !Int LocalLabel |
TESTLT_W !Word LocalLabel |
TESTEQ_W !Word LocalLabel |
TESTLT_I64 !Int64 LocalLabel |
TESTEQ_I64 !Int64 LocalLabel |
TESTLT_I32 !Int32 LocalLabel |
TESTEQ_I32 !Int32 LocalLabel |
TESTLT_I16 !Int16 LocalLabel |
TESTEQ_I16 !Int16 LocalLabel |
TESTLT_I8 !Int8 LocalLabel |
TESTEQ_I8 !Int16 LocalLabel |
TESTLT_W64 !Word64 LocalLabel |
TESTEQ_W64 !Word64 LocalLabel |
TESTLT_W32 !Word32 LocalLabel |
TESTEQ_W32 !Word32 LocalLabel |
TESTLT_W16 !Word16 LocalLabel |
TESTEQ_W16 !Word16 LocalLabel |
TESTLT_W8 !Word8 LocalLabel |
TESTEQ_W8 !Word8 LocalLabel |
TESTLT_F !Float LocalLabel |
TESTEQ_F !Float LocalLabel |
TESTLT_D !Double LocalLabel |
TESTEQ_D !Double LocalLabel |
TESTLT_P !Word16 LocalLabel |
TESTEQ_P !Word16 LocalLabel |
CASEFAIL |
JMP LocalLabel |
CCALL !WordOff (RemotePtr C_ffi_cif) !Word16 |
PRIMCALL |
SWIZZLE !WordOff !Int |
ENTER |
RETURN ArgRep |
RETURN_TUPLE |
BRK_FUN (ForeignRef BreakArray) !Word16 (RemotePtr ModuleName) (RemotePtr CostCentre) |

#### Instances

Instances details

Outputable BCInstr Source # |
Instance details Defined in GHC.ByteCode.Instr Methods ppr :: BCInstr -> SDoc Source #

data ProtoBCO a Source #

Constructors

ProtoBCO |
Fields protoBCOName :: a protoBCOInstrs :: [BCInstr] protoBCOBitmap :: [StgWord] protoBCOBitmapSize :: Word protoBCOArity :: Int protoBCOExpr :: Either [CgStgAlt] CgStgRhs protoBCOFFIs :: [FFIInfo]

#### Instances

Instances details

Outputable a => Outputable (ProtoBCO a) Source # |
Instance details Defined in GHC.ByteCode.Instr Methods ppr :: ProtoBCO a -> SDoc Source #

bciStackUse :: BCInstr -> Word Source #

newtype LocalLabel Source #

A local block label (e.g. identifying a case alternative).

Constructors

LocalLabel |
Fields getLocalLabel :: Word32

#### Instances

Instances details

Outputable LocalLabel Source # |
Instance details Defined in GHC.ByteCode.Instr Methods ppr :: LocalLabel -> SDoc Source #
Eq LocalLabel Source # |
Instance details Defined in GHC.ByteCode.Instr Methods (==) :: LocalLabel -> LocalLabel -> Bool # (/=) :: LocalLabel -> LocalLabel -> Bool #
Ord LocalLabel Source # |
Instance details Defined in GHC.ByteCode.Instr Methods compare :: LocalLabel -> LocalLabel -> Ordering # (<) :: LocalLabel -> LocalLabel -> Bool # (<=) :: LocalLabel -> LocalLabel -> Bool # (>) :: LocalLabel -> LocalLabel -> Bool # (>=) :: LocalLabel -> LocalLabel -> Bool # max :: LocalLabel -> LocalLabel -> LocalLabel # min :: LocalLabel -> LocalLabel -> LocalLabel #