ghc-9.13: The GHC API
Safe HaskellNone
LanguageGHC2021

GHC.ByteCode.Instr

Description

Bytecode instruction definitions

Synopsis

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

Drop entries (n, n+by] entries from the stack. Graphically: a_1 ← top ... a_n b_1 => a_1 ← top ... ... b_by a_n k k

Fields

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

Test whether the tag of a closure pointer is less than the given value. If not, jump to the given label.

TESTEQ_P !Word16 LocalLabel

Test whether the tag of a closure pointer is equal to the given value. If not, jump to the given label.

CASEFAIL 
JMP LocalLabel 
CCALL !WordOff (RemotePtr C_ffi_cif) !Word16 
PRIMCALL 
SWIZZLE !WordOff !Int 
ENTER 
RETURN ArgRep 
RETURN_TUPLE 
BRK_FUN (ForeignRef BreakArray) (RemotePtr ModuleName) !Word16 (RemotePtr ModuleName) !Word16 (RemotePtr CostCentre) 

Instances

Instances details
Outputable BCInstr Source # 
Instance details

Defined in GHC.ByteCode.Instr

Methods

ppr :: BCInstr -> SDoc Source #

data ProtoBCO a Source #

Instances

Instances details
Outputable a => Outputable (ProtoBCO a) Source # 
Instance details

Defined in GHC.ByteCode.Instr

Methods

ppr :: ProtoBCO a -> SDoc Source #

newtype LocalLabel Source #

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

Constructors

LocalLabel