ghc-simple-0.4: Simplified interface to the GHC API.

Safe HaskellNone
LanguageHaskell2010

Language.Haskell.GHC.Simple.PrimIface

Description

Facilities for using a custom GHC.Prim interface.

The simplest(?) way to use this is to generate primop info using the genprimopcode program from GHC, making any desired changes to those files, and passing the primOpInfo and primOpStrictness functions defined therein as the cfgCustomPrimIface member of your config.

Your strictness and info functions need to support all the primops exported by the GHC version in use, making code written for this interface rather less portable than code using the rest of ghc-simple.

This functionality is probably what you want if you are making a cross compiler, to prevent the types of GHC primops from changing depending on the compiler host platform.

If you are *not* making a cross compiler, chances are you will not want to touch this with a ten foot pole.

Synopsis

Documentation

module Demand

module TysWiredIn

module FastString

module CmmType

module BasicTypes

data PrimOp :: * #

Constructors

CharGtOp 
CharGeOp 
CharEqOp 
CharNeOp 
CharLtOp 
CharLeOp 
OrdOp 
IntAddOp 
IntSubOp 
IntMulOp 
IntMulMayOfloOp 
IntQuotOp 
IntRemOp 
IntQuotRemOp 
AndIOp 
OrIOp 
XorIOp 
NotIOp 
IntNegOp 
IntAddCOp 
IntSubCOp 
IntGtOp 
IntGeOp 
IntEqOp 
IntNeOp 
IntLtOp 
IntLeOp 
ChrOp 
Int2WordOp 
Int2FloatOp 
Int2DoubleOp 
Word2FloatOp 
Word2DoubleOp 
ISllOp 
ISraOp 
ISrlOp 
WordAddOp 
WordSubCOp 
WordAdd2Op 
WordSubOp 
WordMulOp 
WordMul2Op 
WordQuotOp 
WordRemOp 
WordQuotRemOp 
WordQuotRem2Op 
AndOp 
OrOp 
XorOp 
NotOp 
SllOp 
SrlOp 
Word2IntOp 
WordGtOp 
WordGeOp 
WordEqOp 
WordNeOp 
WordLtOp 
WordLeOp 
PopCnt8Op 
PopCnt16Op 
PopCnt32Op 
PopCnt64Op 
PopCntOp 
Clz8Op 
Clz16Op 
Clz32Op 
Clz64Op 
ClzOp 
Ctz8Op 
Ctz16Op 
Ctz32Op 
Ctz64Op 
CtzOp 
BSwap16Op 
BSwap32Op 
BSwap64Op 
BSwapOp 
Narrow8IntOp 
Narrow16IntOp 
Narrow32IntOp 
Narrow8WordOp 
Narrow16WordOp 
Narrow32WordOp 
DoubleGtOp 
DoubleGeOp 
DoubleEqOp 
DoubleNeOp 
DoubleLtOp 
DoubleLeOp 
DoubleAddOp 
DoubleSubOp 
DoubleMulOp 
DoubleDivOp 
DoubleNegOp 
Double2IntOp 
Double2FloatOp 
DoubleExpOp 
DoubleLogOp 
DoubleSqrtOp 
DoubleSinOp 
DoubleCosOp 
DoubleTanOp 
DoubleAsinOp 
DoubleAcosOp 
DoubleAtanOp 
DoubleSinhOp 
DoubleCoshOp 
DoubleTanhOp 
DoublePowerOp 
DoubleDecode_2IntOp 
DoubleDecode_Int64Op 
FloatGtOp 
FloatGeOp 
FloatEqOp 
FloatNeOp 
FloatLtOp 
FloatLeOp 
FloatAddOp 
FloatSubOp 
FloatMulOp 
FloatDivOp 
FloatNegOp 
Float2IntOp 
FloatExpOp 
FloatLogOp 
FloatSqrtOp 
FloatSinOp 
FloatCosOp 
FloatTanOp 
FloatAsinOp 
FloatAcosOp 
FloatAtanOp 
FloatSinhOp 
FloatCoshOp 
FloatTanhOp 
FloatPowerOp 
Float2DoubleOp 
FloatDecode_IntOp 
NewArrayOp 
SameMutableArrayOp 
ReadArrayOp 
WriteArrayOp 
SizeofArrayOp 
SizeofMutableArrayOp 
IndexArrayOp 
UnsafeFreezeArrayOp 
UnsafeThawArrayOp 
CopyArrayOp 
CopyMutableArrayOp 
CloneArrayOp 
CloneMutableArrayOp 
FreezeArrayOp 
ThawArrayOp 
CasArrayOp 
NewSmallArrayOp 
SameSmallMutableArrayOp 
ReadSmallArrayOp 
WriteSmallArrayOp 
SizeofSmallArrayOp 
SizeofSmallMutableArrayOp 
IndexSmallArrayOp 
UnsafeFreezeSmallArrayOp 
UnsafeThawSmallArrayOp 
CopySmallArrayOp 
CopySmallMutableArrayOp 
CloneSmallArrayOp 
CloneSmallMutableArrayOp 
FreezeSmallArrayOp 
ThawSmallArrayOp 
CasSmallArrayOp 
NewByteArrayOp_Char 
NewPinnedByteArrayOp_Char 
NewAlignedPinnedByteArrayOp_Char 
ByteArrayContents_Char 
SameMutableByteArrayOp 
ShrinkMutableByteArrayOp_Char 
ResizeMutableByteArrayOp_Char 
UnsafeFreezeByteArrayOp 
SizeofByteArrayOp 
SizeofMutableByteArrayOp 
GetSizeofMutableByteArrayOp 
IndexByteArrayOp_Char 
IndexByteArrayOp_WideChar 
IndexByteArrayOp_Int 
IndexByteArrayOp_Word 
IndexByteArrayOp_Addr 
IndexByteArrayOp_Float 
IndexByteArrayOp_Double 
IndexByteArrayOp_StablePtr 
IndexByteArrayOp_Int8 
IndexByteArrayOp_Int16 
IndexByteArrayOp_Int32 
IndexByteArrayOp_Int64 
IndexByteArrayOp_Word8 
IndexByteArrayOp_Word16 
IndexByteArrayOp_Word32 
IndexByteArrayOp_Word64 
ReadByteArrayOp_Char 
ReadByteArrayOp_WideChar 
ReadByteArrayOp_Int 
ReadByteArrayOp_Word 
ReadByteArrayOp_Addr 
ReadByteArrayOp_Float 
ReadByteArrayOp_Double 
ReadByteArrayOp_StablePtr 
ReadByteArrayOp_Int8 
ReadByteArrayOp_Int16 
ReadByteArrayOp_Int32 
ReadByteArrayOp_Int64 
ReadByteArrayOp_Word8 
ReadByteArrayOp_Word16 
ReadByteArrayOp_Word32 
ReadByteArrayOp_Word64 
WriteByteArrayOp_Char 
WriteByteArrayOp_WideChar 
WriteByteArrayOp_Int 
WriteByteArrayOp_Word 
WriteByteArrayOp_Addr 
WriteByteArrayOp_Float 
WriteByteArrayOp_Double 
WriteByteArrayOp_StablePtr 
WriteByteArrayOp_Int8 
WriteByteArrayOp_Int16 
WriteByteArrayOp_Int32 
WriteByteArrayOp_Int64 
WriteByteArrayOp_Word8 
WriteByteArrayOp_Word16 
WriteByteArrayOp_Word32 
WriteByteArrayOp_Word64 
CopyByteArrayOp 
CopyMutableByteArrayOp 
CopyByteArrayToAddrOp 
CopyMutableByteArrayToAddrOp 
CopyAddrToByteArrayOp 
SetByteArrayOp 
AtomicReadByteArrayOp_Int 
AtomicWriteByteArrayOp_Int 
CasByteArrayOp_Int 
FetchAddByteArrayOp_Int 
FetchSubByteArrayOp_Int 
FetchAndByteArrayOp_Int 
FetchNandByteArrayOp_Int 
FetchOrByteArrayOp_Int 
FetchXorByteArrayOp_Int 
NewArrayArrayOp 
SameMutableArrayArrayOp 
UnsafeFreezeArrayArrayOp 
SizeofArrayArrayOp 
SizeofMutableArrayArrayOp 
IndexArrayArrayOp_ByteArray 
IndexArrayArrayOp_ArrayArray 
ReadArrayArrayOp_ByteArray 
ReadArrayArrayOp_MutableByteArray 
ReadArrayArrayOp_ArrayArray 
ReadArrayArrayOp_MutableArrayArray 
WriteArrayArrayOp_ByteArray 
WriteArrayArrayOp_MutableByteArray 
WriteArrayArrayOp_ArrayArray 
WriteArrayArrayOp_MutableArrayArray 
CopyArrayArrayOp 
CopyMutableArrayArrayOp 
AddrAddOp 
AddrSubOp 
AddrRemOp 
Addr2IntOp 
Int2AddrOp 
AddrGtOp 
AddrGeOp 
AddrEqOp 
AddrNeOp 
AddrLtOp 
AddrLeOp 
IndexOffAddrOp_Char 
IndexOffAddrOp_WideChar 
IndexOffAddrOp_Int 
IndexOffAddrOp_Word 
IndexOffAddrOp_Addr 
IndexOffAddrOp_Float 
IndexOffAddrOp_Double 
IndexOffAddrOp_StablePtr 
IndexOffAddrOp_Int8 
IndexOffAddrOp_Int16 
IndexOffAddrOp_Int32 
IndexOffAddrOp_Int64 
IndexOffAddrOp_Word8 
IndexOffAddrOp_Word16 
IndexOffAddrOp_Word32 
IndexOffAddrOp_Word64 
ReadOffAddrOp_Char 
ReadOffAddrOp_WideChar 
ReadOffAddrOp_Int 
ReadOffAddrOp_Word 
ReadOffAddrOp_Addr 
ReadOffAddrOp_Float 
ReadOffAddrOp_Double 
ReadOffAddrOp_StablePtr 
ReadOffAddrOp_Int8 
ReadOffAddrOp_Int16 
ReadOffAddrOp_Int32 
ReadOffAddrOp_Int64 
ReadOffAddrOp_Word8 
ReadOffAddrOp_Word16 
ReadOffAddrOp_Word32 
ReadOffAddrOp_Word64 
WriteOffAddrOp_Char 
WriteOffAddrOp_WideChar 
WriteOffAddrOp_Int 
WriteOffAddrOp_Word 
WriteOffAddrOp_Addr 
WriteOffAddrOp_Float 
WriteOffAddrOp_Double 
WriteOffAddrOp_StablePtr 
WriteOffAddrOp_Int8 
WriteOffAddrOp_Int16 
WriteOffAddrOp_Int32 
WriteOffAddrOp_Int64 
WriteOffAddrOp_Word8 
WriteOffAddrOp_Word16 
WriteOffAddrOp_Word32 
WriteOffAddrOp_Word64 
NewMutVarOp 
ReadMutVarOp 
WriteMutVarOp 
SameMutVarOp 
AtomicModifyMutVarOp 
CasMutVarOp 
CatchOp 
RaiseOp 
RaiseIOOp 
MaskAsyncExceptionsOp 
MaskUninterruptibleOp 
UnmaskAsyncExceptionsOp 
MaskStatus 
AtomicallyOp 
RetryOp 
CatchRetryOp 
CatchSTMOp 
Check 
NewTVarOp 
ReadTVarOp 
ReadTVarIOOp 
WriteTVarOp 
SameTVarOp 
NewMVarOp 
TakeMVarOp 
TryTakeMVarOp 
PutMVarOp 
TryPutMVarOp 
ReadMVarOp 
TryReadMVarOp 
SameMVarOp 
IsEmptyMVarOp 
DelayOp 
WaitReadOp 
WaitWriteOp 
ForkOp 
ForkOnOp 
KillThreadOp 
YieldOp 
MyThreadIdOp 
LabelThreadOp 
IsCurrentThreadBoundOp 
NoDuplicateOp 
ThreadStatusOp 
MkWeakOp 
MkWeakNoFinalizerOp 
AddCFinalizerToWeakOp 
DeRefWeakOp 
FinalizeWeakOp 
TouchOp 
MakeStablePtrOp 
DeRefStablePtrOp 
EqStablePtrOp 
MakeStableNameOp 
EqStableNameOp 
StableNameToIntOp 
ReallyUnsafePtrEqualityOp 
ParOp 
SparkOp 
SeqOp 
GetSparkOp 
NumSparks 
DataToTagOp 
TagToEnumOp 
AddrToAnyOp 
MkApUpd0_Op 
NewBCOOp 
UnpackClosureOp 
GetApStackValOp 
GetCCSOfOp 
GetCurrentCCSOp 
ClearCCSOp 
TraceEventOp 
TraceMarkerOp 
VecBroadcastOp PrimOpVecCat Length Width 
VecPackOp PrimOpVecCat Length Width 
VecUnpackOp PrimOpVecCat Length Width 
VecInsertOp PrimOpVecCat Length Width 
VecAddOp PrimOpVecCat Length Width 
VecSubOp PrimOpVecCat Length Width 
VecMulOp PrimOpVecCat Length Width 
VecDivOp PrimOpVecCat Length Width 
VecQuotOp PrimOpVecCat Length Width 
VecRemOp PrimOpVecCat Length Width 
VecNegOp PrimOpVecCat Length Width 
VecIndexByteArrayOp PrimOpVecCat Length Width 
VecReadByteArrayOp PrimOpVecCat Length Width 
VecWriteByteArrayOp PrimOpVecCat Length Width 
VecIndexOffAddrOp PrimOpVecCat Length Width 
VecReadOffAddrOp PrimOpVecCat Length Width 
VecWriteOffAddrOp PrimOpVecCat Length Width 
VecIndexScalarByteArrayOp PrimOpVecCat Length Width 
VecReadScalarByteArrayOp PrimOpVecCat Length Width 
VecWriteScalarByteArrayOp PrimOpVecCat Length Width 
VecIndexScalarOffAddrOp PrimOpVecCat Length Width 
VecReadScalarOffAddrOp PrimOpVecCat Length Width 
VecWriteScalarOffAddrOp PrimOpVecCat Length Width 
PrefetchByteArrayOp3 
PrefetchMutableByteArrayOp3 
PrefetchAddrOp3 
PrefetchValueOp3 
PrefetchByteArrayOp2 
PrefetchMutableByteArrayOp2 
PrefetchAddrOp2 
PrefetchValueOp2 
PrefetchByteArrayOp1 
PrefetchMutableByteArrayOp1 
PrefetchAddrOp1 
PrefetchValueOp1 
PrefetchByteArrayOp0 
PrefetchMutableByteArrayOp0 
PrefetchAddrOp0 
PrefetchValueOp0 

Instances

mkGenPrimOp :: FastString -> [TyBinder] -> [Type] -> Type -> PrimOpInfo Source #

Create a general PrimOpInfo. Needed by GHC-generated primop info includes.

mkDyadic :: FastString -> Type -> PrimOpInfo Source #

Create a PrimOpInfo for dyadic, monadic and compare primops. Needed by GHC-generated primop info includes.

mkMonadic :: FastString -> Type -> PrimOpInfo Source #

Create a PrimOpInfo for dyadic, monadic and compare primops. Needed by GHC-generated primop info includes.

mkCompare :: FastString -> Type -> PrimOpInfo Source #

Create a PrimOpInfo for dyadic, monadic and compare primops. Needed by GHC-generated primop info includes.

primIface :: (PrimOp -> PrimOpInfo) -> (PrimOp -> Arity -> StrictSig) -> ModIface Source #

Module interface for GHC.Prim, with the given function applied to each primop.

fixPrimopTypes :: (PrimOp -> PrimOpInfo) -> (PrimOp -> Arity -> StrictSig) -> HscEnv -> IO () Source #

Fix primop types in the name cache.